From 9dd8d144dd2d47bd0ea84e76881ec0f46af778f1 Mon Sep 17 00:00:00 2001 From: yamaoka Date: Sun, 1 May 2005 22:31:43 +0000 Subject: [PATCH] Import No Gnus v0.3. --- .arch-inventory | 4 + .cvsignore | 1 + ChangeLog | 76 + GNUS-NEWS | 83 +- Makefile.in | 3 + aclocal.m4 | 4 + configure | 2703 +-- configure.in | 4 + contrib/ChangeLog | 48 + contrib/README | 21 + contrib/compface.el | 749 + contrib/gnus-namazu.el | 905 + contrib/gpg-ring.el | 3 +- contrib/gpg.el | 38 +- contrib/nnir.el | 5 +- contrib/ssl.el | 5 +- contrib/ucs-tables.el | 1 + contrib/vcard.el | 3 +- contrib/xml.el | 1 + etc/.cvsignore | 4 - etc/Makefile.in | 19 +- etc/gnus/gnus-setup.ast | 43 + etc/gnus/news-server.ast | 58 + etc/images/gnus/bar.xbm | 7 + etc/images/gnus/bar.xpm | 54 + etc/images/gnus/catchup.pbm | Bin 0 -> 81 bytes etc/images/gnus/catchup.xpm | 33 + etc/images/gnus/cu-exit.pbm | Bin 0 -> 81 bytes etc/images/gnus/cu-exit.xpm | 31 + etc/images/gnus/describe-group.pbm | Bin 0 -> 81 bytes etc/images/gnus/describe-group.xpm | 32 + etc/images/gnus/exit-gnus.pbm | Bin 0 -> 81 bytes etc/images/gnus/exit-gnus.xpm | 33 + etc/images/gnus/exit-summ.pbm | Bin 0 -> 81 bytes etc/images/gnus/exit-summ.xpm | 30 + etc/images/gnus/followup.pbm | Bin 0 -> 81 bytes etc/images/gnus/followup.xpm | 31 + etc/images/gnus/fuwo.pbm | Bin 0 -> 81 bytes etc/images/gnus/fuwo.xpm | 31 + etc/images/gnus/get-news.pbm | Bin 0 -> 81 bytes etc/images/gnus/get-news.xpm | 31 + etc/images/gnus/gnntg.pbm | Bin 0 -> 81 bytes etc/images/gnus/gnntg.xpm | 31 + etc/images/gnus/gnus-group-catchup-current-up.xbm | 12 + etc/images/gnus/gnus-group-catchup-current-up.xpm | 39 + etc/images/gnus/gnus-group-catchup-current.xbm | 12 + etc/images/gnus/gnus-group-catchup-current.xpm | 39 + etc/images/gnus/gnus-group-describe-group-up.xbm | 12 + etc/images/gnus/gnus-group-describe-group-up.xpm | 39 + etc/images/gnus/gnus-group-exit-up.xbm | 12 + etc/images/gnus/gnus-group-exit-up.xpm | 39 + .../gnus/gnus-group-get-new-news-this-group-up.xbm | 12 + .../gnus/gnus-group-get-new-news-this-group-up.xpm | 39 + etc/images/gnus/gnus-group-get-new-news-up.xbm | 12 + etc/images/gnus/gnus-group-get-new-news-up.xpm | 39 + etc/images/gnus/gnus-group-kill-group-up.xbm | 12 + etc/images/gnus/gnus-group-kill-group-up.xpm | 38 + etc/images/gnus/gnus-group-subscribe-up.xbm | 12 + etc/images/gnus/gnus-group-subscribe-up.xpm | 38 + etc/images/gnus/gnus-group-unsubscribe-up.xbm | 12 + etc/images/gnus/gnus-group-unsubscribe-up.xpm | 38 + etc/images/gnus/gnus-pointer.xbm | 6 + etc/images/gnus/gnus-pointer.xpm | 22 + etc/images/gnus/gnus-summary-caesar-message-up.xbm | 12 + etc/images/gnus/gnus-summary-caesar-message-up.xpm | 38 + etc/images/gnus/gnus-summary-cancel-article-up.xbm | 12 + etc/images/gnus/gnus-summary-cancel-article-up.xpm | 39 + .../gnus/gnus-summary-catchup-and-exit-up.xbm | 12 + .../gnus/gnus-summary-catchup-and-exit-up.xpm | 39 + etc/images/gnus/gnus-summary-catchup-up.xbm | 12 + etc/images/gnus/gnus-summary-catchup-up.xpm | 37 + etc/images/gnus/gnus-summary-exit-up.xbm | 12 + etc/images/gnus/gnus-summary-exit-up.xpm | 37 + etc/images/gnus/gnus-summary-followup-up.xbm | 12 + etc/images/gnus/gnus-summary-followup-up.xpm | 38 + .../gnus-summary-followup-with-original-up.xbm | 12 + .../gnus-summary-followup-with-original-up.xpm | 38 + etc/images/gnus/gnus-summary-mail-copy-up.xbm | 12 + etc/images/gnus/gnus-summary-mail-copy-up.xpm | 38 + etc/images/gnus/gnus-summary-mail-delete-up.xbm | 12 + etc/images/gnus/gnus-summary-mail-delete-up.xpm | 39 + etc/images/gnus/gnus-summary-mail-forward-up.xbm | 12 + etc/images/gnus/gnus-summary-mail-forward-up.xpm | 38 + etc/images/gnus/gnus-summary-mail-get-up.xbm | 12 + etc/images/gnus/gnus-summary-mail-get-up.xpm | 38 + etc/images/gnus/gnus-summary-mail-originate-up.xbm | 12 + etc/images/gnus/gnus-summary-mail-originate-up.xpm | 38 + etc/images/gnus/gnus-summary-mail-reply-up.xbm | 12 + etc/images/gnus/gnus-summary-mail-reply-up.xpm | 38 + etc/images/gnus/gnus-summary-mail-save-up.xbm | 12 + etc/images/gnus/gnus-summary-mail-save-up.xpm | 41 + etc/images/gnus/gnus-summary-next-unread-up.xbm | 12 + etc/images/gnus/gnus-summary-next-unread-up.xpm | 39 + etc/images/gnus/gnus-summary-post-news-up.xbm | 12 + etc/images/gnus/gnus-summary-post-news-up.xpm | 38 + etc/images/gnus/gnus-summary-prev-unread-up.xbm | 12 + etc/images/gnus/gnus-summary-prev-unread-up.xpm | 39 + etc/images/gnus/gnus-summary-reply-up.xbm | 12 + etc/images/gnus/gnus-summary-reply-up.xpm | 39 + .../gnus/gnus-summary-reply-with-original-up.xbm | 12 + .../gnus/gnus-summary-reply-with-original-up.xpm | 39 + .../gnus/gnus-summary-save-article-file-up.xbm | 12 + .../gnus/gnus-summary-save-article-file-up.xpm | 41 + etc/images/gnus/gnus-summary-save-article-up.xbm | 12 + etc/images/gnus/gnus-summary-save-article-up.xpm | 41 + etc/images/gnus/gnus-uu-decode-uu-up.xbm | 12 + etc/images/gnus/gnus-uu-decode-uu-up.xpm | 39 + etc/images/gnus/gnus-uu-post-news-up.xbm | 12 + etc/images/gnus/gnus-uu-post-news-up.xpm | 39 + etc/images/gnus/gnus.xbm | 622 + etc/images/gnus/gnus.xpm | 284 + etc/images/gnus/important.xpm | 32 + etc/images/gnus/kill-group.pbm | Bin 0 -> 81 bytes etc/images/gnus/kill-group.xpm | 30 + etc/images/gnus/mail-reply.pbm | Bin 0 -> 81 bytes etc/images/gnus/mail-reply.xpm | 32 + etc/images/gnus/next-ur.pbm | Bin 0 -> 81 bytes etc/images/gnus/next-ur.xpm | 35 + etc/images/gnus/oort.xface | 3 + etc/images/gnus/post.pbm | Bin 0 -> 81 bytes etc/images/gnus/post.xpm | 35 + etc/images/gnus/prev-ur.pbm | Bin 0 -> 81 bytes etc/images/gnus/prev-ur.xpm | 35 + etc/images/gnus/preview.xbm | 10 + etc/images/gnus/preview.xpm | 33 + etc/images/gnus/receipt.xpm | 32 + etc/images/gnus/reply-wo.pbm | Bin 0 -> 81 bytes etc/images/gnus/reply-wo.xpm | 31 + etc/images/gnus/reply.pbm | Bin 0 -> 81 bytes etc/images/gnus/reply.xpm | 31 + etc/images/gnus/rot13.pbm | Bin 0 -> 81 bytes etc/images/gnus/rot13.xpm | 32 + etc/images/gnus/save-aif.pbm | Bin 0 -> 81 bytes etc/images/gnus/save-aif.xpm | 33 + etc/images/gnus/save-art.pbm | Bin 0 -> 81 bytes etc/images/gnus/save-art.xpm | 32 + etc/images/gnus/subscribe.pbm | Bin 0 -> 81 bytes etc/images/gnus/subscribe.xpm | 32 + etc/images/gnus/unimportant.xpm | 32 + etc/images/gnus/unsubscribe.pbm | Bin 0 -> 81 bytes etc/images/gnus/unsubscribe.xpm | 32 + etc/images/gnus/uu-decode.pbm | Bin 0 -> 81 bytes etc/images/gnus/uu-decode.xpm | 36 + etc/images/gnus/uu-post.pbm | Bin 0 -> 81 bytes etc/images/gnus/uu-post.xpm | 35 + etc/images/gnus/x-splash | Bin 0 -> 4621 bytes etc/images/smilies/blink.pbm | Bin 0 -> 37 bytes etc/images/smilies/blink.xpm | 20 + etc/images/smilies/braindamaged.xpm | 20 + etc/images/smilies/cry.xpm | 20 + etc/images/smilies/dead.xpm | 20 + etc/images/smilies/evil.xpm | 20 + etc/images/smilies/forced.xpm | 20 + etc/images/smilies/frown.pbm | Bin 0 -> 37 bytes etc/images/smilies/frown.xpm | 20 + etc/images/smilies/grin.xpm | 21 + etc/images/smilies/indifferent.xpm | 20 + etc/images/smilies/reverse-smile.xpm | 20 + etc/images/smilies/sad.pbm | Bin 0 -> 37 bytes etc/images/smilies/sad.xpm | 20 + etc/images/smilies/smile.pbm | Bin 0 -> 37 bytes etc/images/smilies/smile.xpm | 20 + etc/images/smilies/wry.pbm | Bin 0 -> 37 bytes etc/images/smilies/wry.xpm | 20 + install-sh | 2 + lisp/.cvsignore | 1 + lisp/ChangeLog | 3307 +++- lisp/ChangeLog.1 |18942 +------------------- lisp/ChangeLog.2 |18930 +++++++++++++++++++ lisp/assistant.el | 480 + lisp/binhex.el | 2 + lisp/canlock.el | 7 +- lisp/compface.el | 740 +- lisp/deuglify.el | 19 +- lisp/dgnushack.el | 12 +- lisp/dig.el | 1 + lisp/dns-mode.el | 198 + lisp/dns.el | 44 +- lisp/earcon.el | 1 + lisp/encrypt.el | 272 + lisp/flow-fill.el | 30 +- lisp/format-spec.el | 3 +- lisp/gnus-agent.el | 567 +- lisp/gnus-art.el | 831 +- lisp/gnus-async.el | 62 +- lisp/gnus-audio.el | 1 + lisp/gnus-bcklg.el | 1 + lisp/gnus-cache.el | 58 +- lisp/gnus-cite.el | 20 +- lisp/gnus-cus.el | 6 +- lisp/gnus-delay.el | 4 + lisp/gnus-demon.el | 5 +- lisp/gnus-diary.el | 4 +- lisp/gnus-dired.el | 1 + lisp/gnus-draft.el | 15 +- lisp/gnus-dup.el | 25 +- lisp/gnus-eform.el | 5 +- lisp/gnus-ems.el | 41 +- lisp/gnus-fun.el | 5 + lisp/gnus-group.el | 200 +- lisp/gnus-int.el | 14 +- lisp/gnus-kill.el | 1 + lisp/gnus-logic.el | 1 + lisp/gnus-mh.el | 1 + lisp/gnus-ml.el | 1 + lisp/gnus-mlspl.el | 8 +- lisp/gnus-move.el | 7 +- lisp/gnus-msg.el | 215 +- lisp/gnus-nocem.el | 1 + lisp/gnus-picon.el | 220 +- lisp/gnus-range.el | 1 + lisp/gnus-registry.el | 180 +- lisp/gnus-salt.el | 15 +- lisp/gnus-score.el | 45 +- lisp/gnus-setup.el | 1 + lisp/gnus-sieve.el | 1 + lisp/gnus-soup.el | 1 + lisp/gnus-spec.el | 59 +- lisp/gnus-srvr.el | 58 +- lisp/gnus-start.el | 237 +- lisp/gnus-sum.el | 399 +- lisp/gnus-topic.el | 20 +- lisp/gnus-undo.el | 4 +- lisp/gnus-util.el | 185 +- lisp/gnus-uu.el | 20 +- lisp/gnus-vm.el | 1 + lisp/gnus-win.el | 16 +- lisp/gnus-xmas.el | 14 +- lisp/gnus.el | 249 +- lisp/hashcash.el | 368 + lisp/hex-util.el | 1 + lisp/hmac-def.el | 1 + lisp/hmac-md5.el | 1 + lisp/html2text.el | 222 +- lisp/ietf-drums.el | 26 +- lisp/imap.el | 99 +- lisp/legacy-gnus-agent.el | 16 +- lisp/lpath.el | 30 +- lisp/mail-parse.el | 2 + lisp/mail-prsvr.el | 1 + lisp/mail-source.el | 82 +- lisp/mailcap.el | 23 +- lisp/md4.el | 1 + lisp/message.el | 663 +- lisp/messagexmas.el | 21 +- lisp/messcompat.el | 1 + lisp/mm-bodies.el | 6 +- lisp/mm-decode.el | 78 +- lisp/mm-encode.el | 24 +- lisp/mm-extern.el | 1 + lisp/mm-partial.el | 4 +- lisp/mm-url.el | 10 +- lisp/mm-util.el | 430 +- lisp/mm-uu.el | 55 +- lisp/mm-view.el | 153 +- lisp/mml-sec.el | 18 +- lisp/mml-smime.el | 29 +- lisp/mml.el | 97 +- lisp/mml1991.el | 1 + lisp/mml2015.el | 9 +- lisp/netrc.el | 152 +- lisp/nnagent.el | 18 +- lisp/nnbabyl.el | 3 +- lisp/nndb.el | 13 +- lisp/nndiary.el | 10 +- lisp/nndir.el | 1 + lisp/nndoc.el | 32 +- lisp/nndraft.el | 5 +- lisp/nneething.el | 6 +- lisp/nnfolder.el | 24 +- lisp/nngateway.el | 1 + lisp/nnheader.el | 59 +- lisp/nnheaderxm.el | 4 +- lisp/nnimap.el | 119 +- lisp/nnkiboze.el | 1 + lisp/nnlistserv.el | 3 +- lisp/nnmail.el | 49 +- lisp/nnmaildir.el | 85 +- lisp/nnmbox.el | 3 +- lisp/nnmh.el | 6 +- lisp/nnml.el | 33 +- lisp/nnnil.el | 2 + lisp/nnoo.el | 1 + lisp/nnrss.el | 571 +- lisp/nnslashdot.el | 15 +- lisp/nnsoup.el | 29 +- lisp/nnspool.el | 30 +- lisp/nntp.el | 162 +- lisp/nnultimate.el | 2 + lisp/nnvirtual.el | 35 +- lisp/nnwarchive.el | 1 + lisp/nnweb.el | 19 +- lisp/nnwfm.el | 1 + lisp/ntlm.el | 1 + lisp/parse-time.el | 1 + lisp/password.el | 25 +- lisp/pgg-def.el | 5 +- lisp/pgg-gpg.el | 1 + lisp/pgg-parse.el | 1 + lisp/pgg-pgp.el | 17 +- lisp/pgg-pgp5.el | 5 +- lisp/pgg.el | 1 + lisp/pop3.el | 150 +- lisp/qp.el | 17 +- lisp/rfc1843.el | 1 + lisp/rfc2045.el | 1 + lisp/rfc2047.el | 675 +- lisp/rfc2104.el | 1 + lisp/rfc2231.el | 21 +- lisp/sasl-cram.el | 1 + lisp/sasl-digest.el | 1 + lisp/sasl-ntlm.el | 1 + lisp/sasl.el | 1 + lisp/score-mode.el | 6 +- lisp/sha1.el | 442 + lisp/sieve-manage.el | 1 + lisp/sieve-mode.el | 1 + lisp/sieve.el | 6 +- lisp/smiley.el | 4 +- lisp/smime-ldap.el | 208 + lisp/smime.el | 103 +- lisp/spam-report.el | 49 +- lisp/spam-stat.el | 89 +- lisp/spam-wash.el | 1 + lisp/spam.el | 2093 ++- lisp/starttls.el | 244 +- lisp/time-date.el | 155 +- lisp/tls.el | 35 +- lisp/utf7.el | 5 +- lisp/uudecode.el | 2 + lisp/webmail.el | 5 +- lisp/yenc.el | 1 + make.bat | 19 +- mkinstalldirs | 3 +- texi/ChangeLog | 466 + texi/Makefile.in | 73 +- texi/doclicense.texi | 4 + texi/emacs-mime.texi | 125 +- texi/gnus-faq.texi | 3536 ++-- texi/gnus-logo.eps | 1055 ++ texi/gnus-news.el | 4 + texi/gnus-news.texi | 87 +- texi/gnus-refcard.tex | 1428 ++ texi/gnus.texi | 913 +- texi/infohack.el | 36 +- texi/message.texi | 113 +- texi/pagestyle.sty | 1 + texi/pgg.texi | 54 +- texi/pixidx.sty | 2 + texi/postamble.tex | 2 + texi/sasl.texi | 16 +- texi/sieve.texi | 50 +- texi/splitindex | 2 + texi/texi2latex.el | 29 +- texi/xml2texi.scm | 437 + texi/xml2texi.sh | 78 + 356 files changed, 44283 insertions(+), 27957 deletions(-) create mode 100644 .arch-inventory create mode 100644 contrib/compface.el create mode 100644 contrib/gnus-namazu.el create mode 100644 etc/gnus/gnus-setup.ast create mode 100644 etc/gnus/news-server.ast create mode 100644 etc/images/gnus/bar.xbm create mode 100644 etc/images/gnus/bar.xpm create mode 100644 etc/images/gnus/catchup.pbm create mode 100644 etc/images/gnus/catchup.xpm create mode 100644 etc/images/gnus/cu-exit.pbm create mode 100644 etc/images/gnus/cu-exit.xpm create mode 100644 etc/images/gnus/describe-group.pbm create mode 100644 etc/images/gnus/describe-group.xpm create mode 100644 etc/images/gnus/exit-gnus.pbm create mode 100644 etc/images/gnus/exit-gnus.xpm create mode 100644 etc/images/gnus/exit-summ.pbm create mode 100644 etc/images/gnus/exit-summ.xpm create mode 100644 etc/images/gnus/followup.pbm create mode 100644 etc/images/gnus/followup.xpm create mode 100644 etc/images/gnus/fuwo.pbm create mode 100644 etc/images/gnus/fuwo.xpm create mode 100644 etc/images/gnus/get-news.pbm create mode 100644 etc/images/gnus/get-news.xpm create mode 100644 etc/images/gnus/gnntg.pbm create mode 100644 etc/images/gnus/gnntg.xpm create mode 100644 etc/images/gnus/gnus-group-catchup-current-up.xbm create mode 100644 etc/images/gnus/gnus-group-catchup-current-up.xpm create mode 100644 etc/images/gnus/gnus-group-catchup-current.xbm create mode 100644 etc/images/gnus/gnus-group-catchup-current.xpm create mode 100644 etc/images/gnus/gnus-group-describe-group-up.xbm create mode 100644 etc/images/gnus/gnus-group-describe-group-up.xpm create mode 100644 etc/images/gnus/gnus-group-exit-up.xbm create mode 100644 etc/images/gnus/gnus-group-exit-up.xpm create mode 100644 etc/images/gnus/gnus-group-get-new-news-this-group-up.xbm create mode 100644 etc/images/gnus/gnus-group-get-new-news-this-group-up.xpm create mode 100644 etc/images/gnus/gnus-group-get-new-news-up.xbm create mode 100644 etc/images/gnus/gnus-group-get-new-news-up.xpm create mode 100644 etc/images/gnus/gnus-group-kill-group-up.xbm create mode 100644 etc/images/gnus/gnus-group-kill-group-up.xpm create mode 100644 etc/images/gnus/gnus-group-subscribe-up.xbm create mode 100644 etc/images/gnus/gnus-group-subscribe-up.xpm create mode 100644 etc/images/gnus/gnus-group-unsubscribe-up.xbm create mode 100644 etc/images/gnus/gnus-group-unsubscribe-up.xpm create mode 100644 etc/images/gnus/gnus-pointer.xbm create mode 100644 etc/images/gnus/gnus-pointer.xpm create mode 100644 etc/images/gnus/gnus-summary-caesar-message-up.xbm create mode 100644 etc/images/gnus/gnus-summary-caesar-message-up.xpm create mode 100644 etc/images/gnus/gnus-summary-cancel-article-up.xbm create mode 100644 etc/images/gnus/gnus-summary-cancel-article-up.xpm create mode 100644 etc/images/gnus/gnus-summary-catchup-and-exit-up.xbm create mode 100644 etc/images/gnus/gnus-summary-catchup-and-exit-up.xpm create mode 100644 etc/images/gnus/gnus-summary-catchup-up.xbm create mode 100644 etc/images/gnus/gnus-summary-catchup-up.xpm create mode 100644 etc/images/gnus/gnus-summary-exit-up.xbm create mode 100644 etc/images/gnus/gnus-summary-exit-up.xpm create mode 100644 etc/images/gnus/gnus-summary-followup-up.xbm create mode 100644 etc/images/gnus/gnus-summary-followup-up.xpm create mode 100644 etc/images/gnus/gnus-summary-followup-with-original-up.xbm create mode 100644 etc/images/gnus/gnus-summary-followup-with-original-up.xpm create mode 100644 etc/images/gnus/gnus-summary-mail-copy-up.xbm create mode 100644 etc/images/gnus/gnus-summary-mail-copy-up.xpm create mode 100644 etc/images/gnus/gnus-summary-mail-delete-up.xbm create mode 100644 etc/images/gnus/gnus-summary-mail-delete-up.xpm create mode 100644 etc/images/gnus/gnus-summary-mail-forward-up.xbm create mode 100644 etc/images/gnus/gnus-summary-mail-forward-up.xpm create mode 100644 etc/images/gnus/gnus-summary-mail-get-up.xbm create mode 100644 etc/images/gnus/gnus-summary-mail-get-up.xpm create mode 100644 etc/images/gnus/gnus-summary-mail-originate-up.xbm create mode 100644 etc/images/gnus/gnus-summary-mail-originate-up.xpm create mode 100644 etc/images/gnus/gnus-summary-mail-reply-up.xbm create mode 100644 etc/images/gnus/gnus-summary-mail-reply-up.xpm create mode 100644 etc/images/gnus/gnus-summary-mail-save-up.xbm create mode 100644 etc/images/gnus/gnus-summary-mail-save-up.xpm create mode 100644 etc/images/gnus/gnus-summary-next-unread-up.xbm create mode 100644 etc/images/gnus/gnus-summary-next-unread-up.xpm create mode 100644 etc/images/gnus/gnus-summary-post-news-up.xbm create mode 100644 etc/images/gnus/gnus-summary-post-news-up.xpm create mode 100644 etc/images/gnus/gnus-summary-prev-unread-up.xbm create mode 100644 etc/images/gnus/gnus-summary-prev-unread-up.xpm create mode 100644 etc/images/gnus/gnus-summary-reply-up.xbm create mode 100644 etc/images/gnus/gnus-summary-reply-up.xpm create mode 100644 etc/images/gnus/gnus-summary-reply-with-original-up.xbm create mode 100644 etc/images/gnus/gnus-summary-reply-with-original-up.xpm create mode 100644 etc/images/gnus/gnus-summary-save-article-file-up.xbm create mode 100644 etc/images/gnus/gnus-summary-save-article-file-up.xpm create mode 100644 etc/images/gnus/gnus-summary-save-article-up.xbm create mode 100644 etc/images/gnus/gnus-summary-save-article-up.xpm create mode 100644 etc/images/gnus/gnus-uu-decode-uu-up.xbm create mode 100644 etc/images/gnus/gnus-uu-decode-uu-up.xpm create mode 100644 etc/images/gnus/gnus-uu-post-news-up.xbm create mode 100644 etc/images/gnus/gnus-uu-post-news-up.xpm create mode 100644 etc/images/gnus/gnus.xbm create mode 100644 etc/images/gnus/gnus.xpm create mode 100644 etc/images/gnus/important.xpm create mode 100644 etc/images/gnus/kill-group.pbm create mode 100644 etc/images/gnus/kill-group.xpm create mode 100644 etc/images/gnus/mail-reply.pbm create mode 100644 etc/images/gnus/mail-reply.xpm create mode 100644 etc/images/gnus/next-ur.pbm create mode 100644 etc/images/gnus/next-ur.xpm create mode 100644 etc/images/gnus/oort.xface create mode 100644 etc/images/gnus/post.pbm create mode 100644 etc/images/gnus/post.xpm create mode 100644 etc/images/gnus/prev-ur.pbm create mode 100644 etc/images/gnus/prev-ur.xpm create mode 100644 etc/images/gnus/preview.xbm create mode 100644 etc/images/gnus/preview.xpm create mode 100644 etc/images/gnus/receipt.xpm create mode 100644 etc/images/gnus/reply-wo.pbm create mode 100644 etc/images/gnus/reply-wo.xpm create mode 100644 etc/images/gnus/reply.pbm create mode 100644 etc/images/gnus/reply.xpm create mode 100644 etc/images/gnus/rot13.pbm create mode 100644 etc/images/gnus/rot13.xpm create mode 100644 etc/images/gnus/save-aif.pbm create mode 100644 etc/images/gnus/save-aif.xpm create mode 100644 etc/images/gnus/save-art.pbm create mode 100644 etc/images/gnus/save-art.xpm create mode 100644 etc/images/gnus/subscribe.pbm create mode 100644 etc/images/gnus/subscribe.xpm create mode 100644 etc/images/gnus/unimportant.xpm create mode 100644 etc/images/gnus/unsubscribe.pbm create mode 100644 etc/images/gnus/unsubscribe.xpm create mode 100644 etc/images/gnus/uu-decode.pbm create mode 100644 etc/images/gnus/uu-decode.xpm create mode 100644 etc/images/gnus/uu-post.pbm create mode 100644 etc/images/gnus/uu-post.xpm create mode 100644 etc/images/gnus/x-splash create mode 100644 etc/images/smilies/blink.pbm create mode 100644 etc/images/smilies/blink.xpm create mode 100644 etc/images/smilies/braindamaged.xpm create mode 100644 etc/images/smilies/cry.xpm create mode 100644 etc/images/smilies/dead.xpm create mode 100644 etc/images/smilies/evil.xpm create mode 100644 etc/images/smilies/forced.xpm create mode 100644 etc/images/smilies/frown.pbm create mode 100644 etc/images/smilies/frown.xpm create mode 100644 etc/images/smilies/grin.xpm create mode 100644 etc/images/smilies/indifferent.xpm create mode 100644 etc/images/smilies/reverse-smile.xpm create mode 100644 etc/images/smilies/sad.pbm create mode 100644 etc/images/smilies/sad.xpm create mode 100644 etc/images/smilies/smile.pbm create mode 100644 etc/images/smilies/smile.xpm create mode 100644 etc/images/smilies/wry.pbm create mode 100644 etc/images/smilies/wry.xpm create mode 100644 lisp/ChangeLog.2 create mode 100644 lisp/assistant.el create mode 100644 lisp/dns-mode.el create mode 100644 lisp/encrypt.el create mode 100644 lisp/hashcash.el create mode 100644 lisp/sha1.el create mode 100644 lisp/smime-ldap.el create mode 100644 texi/gnus-logo.eps create mode 100644 texi/gnus-refcard.tex create mode 100644 texi/xml2texi.scm create mode 100644 texi/xml2texi.sh diff --git a/.arch-inventory b/.arch-inventory new file mode 100644 index 0000000..059a4f0 --- /dev/null +++ b/.arch-inventory @@ -0,0 +1,4 @@ +# Generated files +precious ^(configure|config\.status|config\.cache)$ + +# arch-tag: 62f59105-7e14-4869-a14d-1030bd187a09 diff --git a/.cvsignore b/.cvsignore index b000dd2..1005c0c 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,4 +1,5 @@ Makefile +autom4te.cache config.cache config.log config.status diff --git a/ChangeLog b/ChangeLog index e7ded93..9aadcc0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,77 @@ +2005-02-19 Miles Bader + + * etc/Makefile.in (install): Create $(etcdir)/images/gnus dir. + + * etc/Makefile.in (install, uninstall): Fix installed image dirs. + + * etc/Makefile.in (install): Put gnus-tut.txt in the right place. + + * Makefile.in (all): Don't do sub-make in etc. + * etc/Makefile.in (all): Remove target. + + * make.bat: Do image copies properly. + +2005-02-18 Miles Bader + + Move all remaining images from etc/gnus to etc/images/gnus. + +2004-06-18 Reiner Steib + + * Makefile.in (all): Do sub-make in etc. + * etc/Makefile.in (all): Link . to images. + (install, uninstall): Use $(etcdir)/images for images. + * make.bat: Likewise. + +2005-01-02 Romain Francoise + + * GNUS-NEWS: Generated. + +2004-12-26 Katsumi Yamaoka + + * GNUS-NEWS: Generated. + +2004-12-06 Reiner Steib + + * GNUS-NEWS: Generated. + +2004-09-30 Simon Josefsson + + * Makefile.in (GNUS-NEWS): Depend on texi/gnus-news.texi. + + * GNUS-NEWS: Generated. + +2004-09-29 Simon Josefsson + + * GNUS-NEWS: Generated. + + * Makefile.in (GNUS-NEWS): Add. + +2004-09-11 Simon Josefsson + + * GNUS-NEWS: Generated. + +2004-09-02 Reiner Steib + + * etc/.cvsignore: Remove unused. + +2004-06-16 Reiner Steib + + * make.bat: Fix line endings around arch-tag. + +2004-06-03 Teodor Zlatanov + + * etc/gnus/gnus-setup.ast (Setting up a NNTP server) + (Setting up local mail storage (nnml)): fixed some bugs, added a + new screen - still testing + +2004-06-01 Simon Josefsson + + * make.bat: Add SASL manual. + +2004-05-23 Lars Magne Ingebrigtsen + + * etc/gnus/news-server.ast: Use library validation. + 2004-03-08 Kevin Greiner * make.bat: Make sure that gnus-load.el and sieve are writable to @@ -372,3 +446,5 @@ ;; Local Variables: ;; coding: iso-2022-7bit ;; End: + +;;; arch-tag: 60301ba8-b152-41b3-8fb2-173bba77f2a8 diff --git a/GNUS-NEWS b/GNUS-NEWS index 6c5238b..01da5fd 100644 --- a/GNUS-NEWS +++ b/GNUS-NEWS @@ -5,9 +5,52 @@ See the end for copying conditions. Please send Gnus bug reports to bugs@gnus.org. For older news, see Gnus info node "New Features". + * Changes in No Gnus +** Upgrading from previous (stable) version if you have used No Gnus. + +If you have tried No Gnus (the unstable Gnus branch leading to this +release) but went back to a stable version, be careful when upgrading +to this version. In particular, you will probably want to remove the +`~/News/marks' directory (perhaps selectively), so that flags are +read from your `~/.newsrc.eld' instead of from the stale marks file, +where this release will store flags for nntp. See a later entry for +more information about nntp marks. Note that downgrading isn't safe +in general. + +** The nntp back end store article marks in `~/News/marks'. + +The directory can be changed using the (customizable) variable +`nntp-marks-directory', and marks can be disabled using the (back +end) variable `nntp-marks-is-evil'. The advantage of this is that +you can copy `~/News/marks' (using rsync, scp or whatever) to another +Gnus installation, and it will realize what articles you have read +and marked. The data in `~/News/marks' has priority over the same +data in `~/.newsrc.eld'. + +** Picons can be displayed right from the textual address, see +`gnus-picon-style'. *Note Picons::. + +** You can import and export your RSS subscriptions from OPML files. +*Note RSS::. + +** 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. + +** You can now drag and drop attachments to the Message buffer. + +** ANSI SGR control sequences can be transformed using `W A'. + +ANSI sequences are used in some Chinese hierarchies for highlighting +articles (`gnus-article-treat-ansi-sequences'). + +** International host names (IDNA) can now be decoded inside article +bodies using `W i' (`gnus-summary-idna-message'). This require that +GNU Libidn (`http://www.gnu.org/software/libidn/') has been installed. + ** Gnus includes an Emacs Lisp SASL library. This provide a clean API to SASL mechanisms from within Emacs. The @@ -23,16 +66,48 @@ when the server support it. It is enabled by default (see `password-cache'), with a short timeout of 16 seconds (see `password-cache-expiry'). If PGG is used as the -PGP backend, the PGP passphrase is managed by this mechanism. +PGP back end, the PGP passphrase is managed by this mechanism. Passwords for ManageSieve connections are managed by this mechanism, after quering the user about whether to do so. ** IMAP identity (RFC 2971) is supported. By default, Gnus do not send any information about itself, but you can -customize it using `nnimap-id'. +customize it using the variable `nnimap-id'. -** The "all.SCORE" file can now be edited from the group buffer using `W e'. +** The `all.SCORE' file can be edited from the group buffer using `W e'. + +** Gnus now MIME decode articles even when they lack "MIME-Version" +header. This changes the default of `gnus-article-loose-mime'. + +** Gnus now view DNS master files sent as text/dns using dns-mode. + +** Gnus now support the "hashcash" client puzzle anti-spam idea. See +the Gnus manual, section Hashcash, for more information. Use `(setq +message-generate-hashcash t)' to enable. + +** Gnus supports new limiting commands in the Summary buffer: `/ r' +(`gnus-summary-limit-to-replied') and `/ R' +(`gnus-summary-limit-to-recipient'). *Note Limiting::. + +** Gnus supports a new sort command in the Summary buffer: `C-c C-s C-t' +(`gnus-summary-sort-by-recipient'). *Note Summary Sorting:: + +** The `nnrss' back end now supports multilingual text. Non-ASCII group +names for the `nnrss' groups are also supported. *Note RSS::. + +** URLs inside OpenPGP: headers are retrieved and imported to your PGP +key ring when you click on them. + +** Gnus uses narrowing to hide headers in Message buffers. The +`References' header is hidden by default. To make all headers +visible, use `(setq message-hidden-headers nil)'. + +** `gnus-decay-scores' can be a regexp matching score files. This +allows to decay only adaptive score files. *Note Score Decays::. + +** S/MIME now feature LDAP user certificate searches. You need to +configure the server in `smime-ldap-host-list'. * For older news, see Gnus info node "New Features". @@ -40,7 +115,7 @@ customize it using `nnimap-id'. ---------------------------------------------------------------------- Copyright information: -Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the diff --git a/Makefile.in b/Makefile.in index 73b8eb3..d5bc65a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -22,6 +22,9 @@ uninstall: cd texi && $(MAKE) uninstall cd etc && $(MAKE) uninstall +GNUS-NEWS: texi/gnus-news.texi + cd texi && $(MAKE) GNUS-NEWS + # Rule for Lars and nobody else. some: cd lisp && $(MAKE) EMACS="$(EMACS)" some diff --git a/aclocal.m4 b/aclocal.m4 index 03a5528..fbf1b2a 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -321,3 +321,7 @@ else fi AC_SUBST(USE_FONTS) ]) + +ifelse(dnl Do not change this comment + arch-tag: 5c987641-c3ef-4f12-b067-028302282c66 +)dnl diff --git a/configure b/configure index b22fdc7..3b8a811 100755 --- a/configure +++ b/configure @@ -1,287 +1,40 @@ #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.57. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # -# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 -# Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi - -# Support unset when possible. -if (FOO=FOO; unset FOO) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - - -# PATH needs CR, and LINENO needs CR and PATH. -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - as_mkdir_p=false -fi - -as_executable_p="test -f" - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" - - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -exec 6>&1 - -# -# Initializations. -# +# Defaults: +ac_help= ac_default_prefix=/usr/local -ac_config_libobj_dir=. -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Maximum number of lines to put in a shell here document. -# This variable seems obsolete. It should probably be removed, and -# only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - -ac_unique_file="lisp/gnus.el" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA MAKEINFO EMACS XEMACS EMACS_FLAVOR lispdir etcdir info_dir HAVE_url URL HAVE_w3_forms W3 FLAGS LATEX WITH_FONTS_bembo WITHOUT_FONTS_bembo WITH_FONTS_pfu WITHOUT_FONTS_pfu WITH_FONTS_bcr WITHOUT_FONTS_bcr USE_FONTS LIBOBJS LTLIBOBJS' -ac_subst_files='' +# Any additions from configure.in: +ac_help="$ac_help + --with-xemacs Use XEmacs to build" +ac_help="$ac_help + --with-emacs Use Emacs to build" +ac_help="$ac_help + --with-lispdir=DIR Where to install lisp files" +ac_help="$ac_help + --with-etcdir=DIR Where to install etc files" +ac_help="$ac_help + --with-url=DIR Specify where to find the url package" +ac_help="$ac_help + --with-w3=DIR Specify where to find the w3 package" +ac_help="$ac_help + --with-fonts Assume all fonts required are available" # Initialize some variables set by options. -ac_init_help= -ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. -cache_file=/dev/null +build=NONE +cache_file=./config.cache exec_prefix=NONE +host=NONE no_create= +nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE @@ -290,15 +43,10 @@ program_transform_name=s,x,x, silent= site= srcdir= +target=NONE verbose= x_includes=NONE x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' @@ -312,9 +60,17 @@ oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + ac_prev= for ac_option do + # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" @@ -322,59 +78,59 @@ do continue fi - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_option in + case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; + bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; + ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; + build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; + cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) - datadir=$ac_optarg ;; + datadir="$ac_optarg" ;; -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - eval "enable_$ac_feature=no" ;; + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; *) ac_optarg=yes ;; esac - eval "enable_$ac_feature='$ac_optarg'" ;; + eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -383,47 +139,95 @@ do -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; + exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; -host | --host | --hos | --ho) - ac_prev=host_alias ;; + ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; + host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; + includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; + infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; + libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; + libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ @@ -432,19 +236,19 @@ do -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir=$ac_optarg ;; + localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; + mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) + | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ @@ -458,26 +262,26 @@ do -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; + oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; + prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; + program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; + program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ @@ -494,7 +298,7 @@ do | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; + program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) @@ -504,7 +308,7 @@ do ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; + sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ @@ -515,57 +319,58 @@ do | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; + sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) - site=$ac_optarg ;; + site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; + srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; + sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; + ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; + target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + case "$ac_option" in + *=*) ;; *) ac_optarg=yes ;; esac - eval "with_$ac_package='$ac_optarg'" ;; + eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/-/_/g'` - eval "with_$ac_package=no" ;; + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. @@ -576,110 +381,99 @@ do ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; + x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; + x_libraries="$ac_optarg" ;; - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" - export $ac_envvar ;; - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; - esac -done +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi -test "$silent" = yes && exec 6>/dev/null +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=lisp/gnus.el # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. - ac_confdir=`(dirname "$0") 2>/dev/null || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. @@ -689,401 +483,13 @@ else fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 - { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -_ACEOF - - cat <<_ACEOF -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data [PREFIX/share] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --infodir=DIR info documentation [PREFIX/info] - --mandir=DIR man documentation [PREFIX/man] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-xemacs Use XEmacs to build - --with-emacs Use Emacs to build - --with-lispdir=DIR Where to install lisp files - --with-etcdir=DIR Where to install etc files - --with-url=DIR Specify where to find the url package - --with-w3=DIR Specify where to find the w3 package - --with-fonts Assume all fonts required are available - -_ACEOF -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - ac_popdir=`pwd` - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac -# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be -# absolute. -ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` -ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` -ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` -ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` - - cd $ac_dir - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_srcdir/configure.gnu; then - echo - $SHELL $ac_srcdir/configure.gnu --help=recursive - elif test -f $ac_srcdir/configure; then - echo - $SHELL $ac_srcdir/configure --help=recursive - elif test -f $ac_srcdir/configure.ac || - test -f $ac_srcdir/configure.in; then - echo - $ac_configure --help - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir - done -fi - -test -n "$ac_init_help" && exit 0 -if $ac_init_version; then - cat <<\_ACEOF - -Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 -Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit 0 -fi -exec 5>config.log -cat >&5 <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.57. Invocation command line was - - $ $0 $@ - -_ACEOF -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -hostinfo = `(hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_sep= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - # Get rid of the leading space. - ac_sep=" " - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -{ - (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) - sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; - *) - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - sed "/^$/d" confdefs.h | sort - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core core.* *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status - ' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then @@ -1094,131 +500,65 @@ if test -z "$CONFIG_SITE"; then fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 + echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; - esac - fi + echo "loading cache $cache_file" + . $cache_file else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } + echo "creating cache $cache_file" + > $cache_file fi ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - - - - - - +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi -echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:540: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - cat >conftest.make <<\_ACEOF + cat > conftestmake <<\EOF all: - @echo 'ac_maketemp="$(MAKE)"' -_ACEOF + @echo 'ac_maketemp="${MAKE}"' +EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi -rm -f conftest.make +rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + echo "$ac_t""yes" 1>&6 SET_MAKE= else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi @@ -1232,20 +572,14 @@ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break - elif test -f $ac_dir/shtool; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break fi done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 -echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} - { (exit 1); exit 1; }; } + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -1254,73 +588,60 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:597: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi done - done - ;; -esac -done - + ;; + esac + done + IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install + INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. - INSTALL=$ac_install_sh + INSTALL="$ac_install_sh" fi fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 +echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' @@ -1329,108 +650,96 @@ if test "${EMACS}" = "t"; then EMACS="" fi - # Check whether --with-xemacs or --without-xemacs was given. if test "${with_xemacs+set}" = set; then withval="$with_xemacs" - if test "${withval}" = "yes"; then EMACS=xemacs; else EMACS=${withval}; fi -fi; + if test "${withval}" = "yes"; then EMACS=xemacs; else EMACS=${withval}; fi +fi # Check whether --with-emacs or --without-emacs was given. if test "${with_emacs+set}" = set; then withval="$with_emacs" - if test "${withval}" = "yes"; then EMACS=emacs; else EMACS=${withval}; fi -fi; + if test "${withval}" = "yes"; then EMACS=emacs; else EMACS=${withval}; fi +fi + # Extract the first word of "makeinfo", so it can be a program name with args. set dummy makeinfo; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_MAKEINFO+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:669: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$MAKEINFO"; then ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_MAKEINFO="makeinfo" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_MAKEINFO="makeinfo" + break + fi + done + IFS="$ac_save_ifs" test -z "$ac_cv_prog_MAKEINFO" && ac_cv_prog_MAKEINFO="no" fi fi -MAKEINFO=$ac_cv_prog_MAKEINFO +MAKEINFO="$ac_cv_prog_MAKEINFO" if test -n "$MAKEINFO"; then - echo "$as_me:$LINENO: result: $MAKEINFO" >&5 -echo "${ECHO_T}$MAKEINFO" >&6 + echo "$ac_t""$MAKEINFO" 1>&6 else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + echo "$ac_t""no" 1>&6 fi # Extract the first word of "emacs", so it can be a program name with args. set dummy emacs; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_EMACS+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:700: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_EMACS'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$EMACS"; then ac_cv_prog_EMACS="$EMACS" # Let the user override the test. else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_EMACS="emacs" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_EMACS="emacs" + break + fi + done + IFS="$ac_save_ifs" test -z "$ac_cv_prog_EMACS" && ac_cv_prog_EMACS="xemacs" fi fi -EMACS=$ac_cv_prog_EMACS +EMACS="$ac_cv_prog_EMACS" if test -n "$EMACS"; then - echo "$as_me:$LINENO: result: $EMACS" >&5 -echo "${ECHO_T}$EMACS" >&6 + echo "$ac_t""$EMACS" 1>&6 else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + echo "$ac_t""no" 1>&6 fi - - echo "$as_me:$LINENO: checking if $EMACS is really XEmacs" >&5 -echo $ECHO_N "checking if $EMACS is really XEmacs... $ECHO_C" >&6 - + + echo $ac_n "checking if $EMACS is really XEmacs""... $ac_c" 1>&6 +echo "configure:731: checking if $EMACS is really XEmacs" >&5 + elisp="(if (string-match \"XEmacs\" emacs-version) \"yes\" \"no\") " if test -z ""noecho""; then - echo "$as_me:$LINENO: checking for xemacsp" >&5 -echo $ECHO_N "checking for xemacsp... $ECHO_C" >&6 + echo $ac_n "checking for xemacsp""... $ac_c" 1>&6 +echo "configure:736: checking for xemacsp" >&5 fi -if test "${EMACS_cv_SYS_xemacsp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if eval "test \"`echo '$''{'EMACS_cv_SYS_xemacsp'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - + OUTPUT=./conftest-$$ - echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 + echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x 'ignore) (prin1-to-string x)) nil \"${OUTPUT}\"nil 5))" >& 5 2>&1 retval=`cat ${OUTPUT}` echo "=> ${retval}" >& 5 2>&1 @@ -1441,8 +750,7 @@ fi xemacsp=${EMACS_cv_SYS_xemacsp} if test -z ""noecho""; then - echo "$as_me:$LINENO: result: $xemacsp" >&5 -echo "${ECHO_T}$xemacsp" >&6 + echo "$ac_t""$xemacsp" 1>&6 fi XEMACS=${EMACS_cv_SYS_xemacsp} @@ -1450,26 +758,25 @@ fi if test "$XEMACS" = "yes"; then EMACS_FLAVOR=xemacs fi - echo "$as_me:$LINENO: result: $XEMACS" >&5 -echo "${ECHO_T}$XEMACS" >&6 - - + echo "$ac_t""$XEMACS" 1>&6 + + if test "$prefix" = "NONE"; then - echo "$as_me:$LINENO: checking prefix for your Emacs" >&5 -echo $ECHO_N "checking prefix for your Emacs... $ECHO_C" >&6 - + echo $ac_n "checking prefix for your Emacs""... $ac_c" 1>&6 +echo "configure:768: checking prefix for your Emacs" >&5 + elisp="(expand-file-name \"..\" invocation-directory)" if test -z ""noecho""; then - echo "$as_me:$LINENO: checking for prefix" >&5 -echo $ECHO_N "checking for prefix... $ECHO_C" >&6 + echo $ac_n "checking for prefix""... $ac_c" 1>&6 +echo "configure:773: checking for prefix" >&5 fi -if test "${EMACS_cv_SYS_prefix+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if eval "test \"`echo '$''{'EMACS_cv_SYS_prefix'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - + OUTPUT=./conftest-$$ - echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 + echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x 'ignore) (prin1-to-string x)) nil \"${OUTPUT}\"nil 5))" >& 5 2>&1 retval=`cat ${OUTPUT}` echo "=> ${retval}" >& 5 2>&1 @@ -1480,22 +787,20 @@ fi prefix=${EMACS_cv_SYS_prefix} if test -z ""noecho""; then - echo "$as_me:$LINENO: result: $prefix" >&5 -echo "${ECHO_T}$prefix" >&6 + echo "$ac_t""$prefix" 1>&6 fi prefix=${EMACS_cv_SYS_prefix} - echo "$as_me:$LINENO: result: $prefix" >&5 -echo "${ECHO_T}$prefix" >&6 + echo "$ac_t""$prefix" 1>&6 fi - -# Check whether --with-lispdir or --without-lispdir was given. + # Check whether --with-lispdir or --without-lispdir was given. if test "${with_lispdir+set}" = set; then withval="$with_lispdir" lispdir=${withval} -fi; - echo "$as_me:$LINENO: checking where .elc files should go" >&5 -echo $ECHO_N "checking where .elc files should go... $ECHO_C" >&6 +fi + + echo $ac_n "checking where .elc files should go""... $ac_c" 1>&6 +echo "configure:804: checking where .elc files should go" >&5 if test -z "$lispdir"; then theprefix=$prefix if test "x$theprefix" = "xNONE"; then @@ -1519,19 +824,18 @@ echo $ECHO_N "checking where .elc files should go... $ECHO_C" >&6 fi done fi - echo "$as_me:$LINENO: result: $lispdir" >&5 -echo "${ECHO_T}$lispdir" >&6 + echo "$ac_t""$lispdir" 1>&6 + - - -# Check whether --with-etcdir or --without-etcdir was given. + # Check whether --with-etcdir or --without-etcdir was given. if test "${with_etcdir+set}" = set; then withval="$with_etcdir" etcdir=${withval} -fi; - echo "$as_me:$LINENO: checking where etc files should go" >&5 -echo $ECHO_N "checking where etc files should go... $ECHO_C" >&6 +fi + + echo $ac_n "checking where etc files should go""... $ac_c" 1>&6 +echo "configure:839: checking where etc files should go" >&5 if test -z "$etcdir"; then if test "$EMACS_FLAVOR" = "xemacs"; then etcdir="\$(lispdir)/../../etc" @@ -1539,13 +843,12 @@ echo $ECHO_N "checking where etc files should go... $ECHO_C" >&6 etcdir="\$(lispdir)/../etc" fi fi - echo "$as_me:$LINENO: result: $etcdir" >&5 -echo "${ECHO_T}$etcdir" >&6 - + echo "$ac_t""$etcdir" 1>&6 + - echo "$as_me:$LINENO: checking where the TeXinfo docs should go" >&5 -echo $ECHO_N "checking where the TeXinfo docs should go... $ECHO_C" >&6 + echo $ac_n "checking where the TeXinfo docs should go""... $ac_c" 1>&6 +echo "configure:852: checking where the TeXinfo docs should go" >&5 if test "$infodir" = "\${prefix}/info"; then if test "$EMACS_FLAVOR" = "xemacs"; then info_dir="\$(prefix)/${thedir}/${EMACS_FLAVOR}/site-packages/info" @@ -1555,35 +858,34 @@ echo $ECHO_N "checking where the TeXinfo docs should go... $ECHO_C" >&6 else info_dir=$infodir fi - echo "$as_me:$LINENO: result: $info_dir" >&5 -echo "${ECHO_T}$info_dir" >&6 + echo "$ac_t""$info_dir" 1>&6 + - -echo "$as_me:$LINENO: checking for acceptable URL version" >&5 -echo $ECHO_N "checking for acceptable URL version... $ECHO_C" >&6 -if test "${EMACS_cv_ACCEPTABLE_URL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +echo $ac_n "checking for acceptable URL version""... $ac_c" 1>&6 +echo "configure:867: checking for acceptable URL version" >&5 +if eval "test \"`echo '$''{'EMACS_cv_ACCEPTABLE_URL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - + if test -z ""noecho""; then - echo "$as_me:$LINENO: checking for url-retrieve in url" >&5 -echo $ECHO_N "checking for url-retrieve in url... $ECHO_C" >&6 + echo $ac_n "checking for url-retrieve in url""... $ac_c" 1>&6 +echo "configure:875: checking for url-retrieve in url" >&5 fi library=`echo url | tr _ -` elisp="(progn (fmakunbound 'url-retrieve) (condition-case nil (progn (require '$library) (fboundp 'url-retrieve)) (error (prog1 nil (message \"$library not found\")))))" if test -z ""noecho""; then - echo "$as_me:$LINENO: checking for url" >&5 -echo $ECHO_N "checking for url... $ECHO_C" >&6 + echo $ac_n "checking for url""... $ac_c" 1>&6 +echo "configure:882: checking for url" >&5 fi -if test "${EMACS_cv_SYS_url+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if eval "test \"`echo '$''{'EMACS_cv_SYS_url'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - + OUTPUT=./conftest-$$ - echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 + echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x 'ignore) (prin1-to-string x)) nil \"${OUTPUT}\"nil 5))" >& 5 2>&1 retval=`cat ${OUTPUT}` echo "=> ${retval}" >& 5 2>&1 @@ -1594,8 +896,7 @@ fi url=${EMACS_cv_SYS_url} if test -z ""noecho""; then - echo "$as_me:$LINENO: result: $url" >&5 -echo "${ECHO_T}$url" >&6 + echo "$ac_t""$url" 1>&6 fi if test "${EMACS_cv_SYS_url}" = "nil"; then @@ -1607,8 +908,7 @@ fi HAVE_url=${EMACS_cv_SYS_url} if test -z ""noecho""; then - echo "$as_me:$LINENO: result: $HAVE_url" >&5 -echo "${ECHO_T}$HAVE_url" >&6 + echo "$ac_t""$HAVE_url" 1>&6 fi if test "${HAVE_url}" = "yes"; then @@ -1618,18 +918,18 @@ else fi if test "${EMACS_cv_ACCEPTABLE_URL}" = "yes"; then - + elisp="(file-name-directory (locate-library \"url\"))" if test -z ""noecho""; then - echo "$as_me:$LINENO: checking for url_dir" >&5 -echo $ECHO_N "checking for url_dir... $ECHO_C" >&6 + echo $ac_n "checking for url_dir""... $ac_c" 1>&6 +echo "configure:926: checking for url_dir" >&5 fi -if test "${EMACS_cv_SYS_url_dir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if eval "test \"`echo '$''{'EMACS_cv_SYS_url_dir'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - + OUTPUT=./conftest-$$ - echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 + echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x 'ignore) (prin1-to-string x)) nil \"${OUTPUT}\"nil 5))" >& 5 2>&1 retval=`cat ${OUTPUT}` echo "=> ${retval}" >& 5 2>&1 @@ -1640,8 +940,7 @@ fi url_dir=${EMACS_cv_SYS_url_dir} if test -z ""noecho""; then - echo "$as_me:$LINENO: result: $url_dir" >&5 -echo "${ECHO_T}$url_dir" >&6 + echo "$ac_t""$url_dir" 1>&6 fi EMACS_cv_ACCEPTABLE_URL=$EMACS_cv_SYS_url_dir @@ -1649,42 +948,41 @@ fi fi - -# Check whether --with-url or --without-url was given. + # Check whether --with-url or --without-url was given. if test "${with_url+set}" = set; then withval="$with_url" - EMACS_cv_ACCEPTABLE_URL=`( cd $withval && pwd || echo "$withval" ) 2> /dev/null` -fi; - URL=${EMACS_cv_ACCEPTABLE_URL} + EMACS_cv_ACCEPTABLE_URL=`( cd $withval && pwd || echo "$withval" ) 2> /dev/null` +fi - echo "$as_me:$LINENO: result: \"${URL}\"" >&5 -echo "${ECHO_T}\"${URL}\"" >&6 + URL=${EMACS_cv_ACCEPTABLE_URL} + + echo "$ac_t"""${URL}"" 1>&6 -echo "$as_me:$LINENO: checking for acceptable W3 version" >&5 -echo $ECHO_N "checking for acceptable W3 version... $ECHO_C" >&6 -if test "${EMACS_cv_ACCEPTABLE_W3+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +echo $ac_n "checking for acceptable W3 version""... $ac_c" 1>&6 +echo "configure:964: checking for acceptable W3 version" >&5 +if eval "test \"`echo '$''{'EMACS_cv_ACCEPTABLE_W3'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - + if test -z ""noecho""; then - echo "$as_me:$LINENO: checking for w3-form-encode-xwfu in w3_forms" >&5 -echo $ECHO_N "checking for w3-form-encode-xwfu in w3_forms... $ECHO_C" >&6 + echo $ac_n "checking for w3-form-encode-xwfu in w3_forms""... $ac_c" 1>&6 +echo "configure:972: checking for w3-form-encode-xwfu in w3_forms" >&5 fi library=`echo w3_forms | tr _ -` elisp="(progn (fmakunbound 'w3-form-encode-xwfu) (condition-case nil (progn (require '$library) (fboundp 'w3-form-encode-xwfu)) (error (prog1 nil (message \"$library not found\")))))" if test -z ""noecho""; then - echo "$as_me:$LINENO: checking for w3_forms" >&5 -echo $ECHO_N "checking for w3_forms... $ECHO_C" >&6 + echo $ac_n "checking for w3_forms""... $ac_c" 1>&6 +echo "configure:979: checking for w3_forms" >&5 fi -if test "${EMACS_cv_SYS_w3_forms+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if eval "test \"`echo '$''{'EMACS_cv_SYS_w3_forms'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - + OUTPUT=./conftest-$$ - echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 + echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x 'ignore) (prin1-to-string x)) nil \"${OUTPUT}\"nil 5))" >& 5 2>&1 retval=`cat ${OUTPUT}` echo "=> ${retval}" >& 5 2>&1 @@ -1695,8 +993,7 @@ fi w3_forms=${EMACS_cv_SYS_w3_forms} if test -z ""noecho""; then - echo "$as_me:$LINENO: result: $w3_forms" >&5 -echo "${ECHO_T}$w3_forms" >&6 + echo "$ac_t""$w3_forms" 1>&6 fi if test "${EMACS_cv_SYS_w3_forms}" = "nil"; then @@ -1708,8 +1005,7 @@ fi HAVE_w3_forms=${EMACS_cv_SYS_w3_forms} if test -z ""noecho""; then - echo "$as_me:$LINENO: result: $HAVE_w3_forms" >&5 -echo "${ECHO_T}$HAVE_w3_forms" >&6 + echo "$ac_t""$HAVE_w3_forms" 1>&6 fi if test "${HAVE_w3_forms}" = "yes"; then @@ -1719,18 +1015,18 @@ else fi if test "${EMACS_cv_ACCEPTABLE_W3}" = "yes"; then - + elisp="(file-name-directory (locate-library \"w3-forms\"))" if test -z ""noecho""; then - echo "$as_me:$LINENO: checking for w3_dir" >&5 -echo $ECHO_N "checking for w3_dir... $ECHO_C" >&6 + echo $ac_n "checking for w3_dir""... $ac_c" 1>&6 +echo "configure:1023: checking for w3_dir" >&5 fi -if test "${EMACS_cv_SYS_w3_dir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if eval "test \"`echo '$''{'EMACS_cv_SYS_w3_dir'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - + OUTPUT=./conftest-$$ - echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 + echo ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil \"${OUTPUT}\"))" >& 5 2>&1 ${EMACS} -batch -eval "(let ((x ${elisp})) (write-region (if (stringp x) (princ x 'ignore) (prin1-to-string x)) nil \"${OUTPUT}\"nil 5))" >& 5 2>&1 retval=`cat ${OUTPUT}` echo "=> ${retval}" >& 5 2>&1 @@ -1741,8 +1037,7 @@ fi w3_dir=${EMACS_cv_SYS_w3_dir} if test -z ""noecho""; then - echo "$as_me:$LINENO: result: $w3_dir" >&5 -echo "${ECHO_T}$w3_dir" >&6 + echo "$ac_t""$w3_dir" 1>&6 fi EMACS_cv_ACCEPTABLE_W3=$EMACS_cv_SYS_w3_dir @@ -1750,20 +1045,19 @@ fi fi - -# Check whether --with-w3 or --without-w3 was given. + # Check whether --with-w3 or --without-w3 was given. if test "${with_w3+set}" = set; then withval="$with_w3" - EMACS_cv_ACCEPTABLE_W3=`( cd $withval && pwd || echo "$withval" ) 2> /dev/null` -fi; - W3=${EMACS_cv_ACCEPTABLE_W3} + EMACS_cv_ACCEPTABLE_W3=`( cd $withval && pwd || echo "$withval" ) 2> /dev/null` +fi - echo "$as_me:$LINENO: result: \"${W3}\"" >&5 -echo "${ECHO_T}\"${W3}\"" >&6 + W3=${EMACS_cv_ACCEPTABLE_W3} + + echo "$ac_t"""${W3}"" 1>&6 - echo "$as_me:$LINENO: checking which options to pass on to (X)Emacs" >&5 -echo $ECHO_N "checking which options to pass on to (X)Emacs... $ECHO_C" >&6 + echo $ac_n "checking which options to pass on to (X)Emacs""... $ac_c" 1>&6 +echo "configure:1061: checking which options to pass on to (X)Emacs" >&5 if test "x$FLAGS" = "x"; then if test "$EMACS_FLAVOR" = "xemacs"; then FLAGS="-batch -no-autoloads -l \$(srcdir)/dgnushack.el" @@ -1773,65 +1067,60 @@ echo $ECHO_N "checking which options to pass on to (X)Emacs... $ECHO_C" >&6 else FLAGS=$FLAGS fi - echo "$as_me:$LINENO: result: $FLAGS" >&5 -echo "${ECHO_T}$FLAGS" >&6 - + echo "$ac_t""$FLAGS" 1>&6 + test "$LATEX" = t && LATEX= test "$LATEX" || for ac_prog in latex do - # Extract the first word of "$ac_prog", so it can be a program name with args. +# Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_LATEX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1081: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_LATEX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - case $LATEX in - [\\/]* | ?:[\\/]*) + case "$LATEX" in + /*) ac_cv_path_LATEX="$LATEX" # Let the user override the test with a path. ;; + ?:/*) + ac_cv_path_LATEX="$LATEX" # Let the user override the test with a dos path. + ;; *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_LATEX="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_LATEX="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" ;; esac fi -LATEX=$ac_cv_path_LATEX - +LATEX="$ac_cv_path_LATEX" if test -n "$LATEX"; then - echo "$as_me:$LINENO: result: $LATEX" >&5 -echo "${ECHO_T}$LATEX" >&6 + echo "$ac_t""$LATEX" 1>&6 else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + echo "$ac_t""no" 1>&6 fi - test -n "$LATEX" && break +test -n "$LATEX" && break done test -n "$LATEX" || LATEX="no" -echo "$as_me:$LINENO: checking for available fonts" >&5 -echo $ECHO_N "checking for available fonts... $ECHO_C" >&6 - +echo $ac_n "checking for available fonts""... $ac_c" 1>&6 +echo "configure:1118: checking for available fonts" >&5 # Check whether --with-fonts or --without-fonts was given. if test "${with_fonts+set}" = set; then withval="$with_fonts" USE_FONTS="$withval" -fi; +fi + WITH_FONTS_bembo='%' WITHOUT_FONTS_bembo= WITH_FONTS_pfu='%' @@ -1844,7 +1133,7 @@ if test -z "${USE_FONTS}"; then else OUTPUT=./conftest-$$ echo '\nonstopmode\documentclass{article}\usepackage{bembo}\begin{document}\end{document}' > ${OUTPUT} - if ${LATEX} ${OUTPUT} & 5 2>&1 ; then + if ${LATEX} ${OUTPUT} & 5 2>&1 ; then if test -z "${USE_FONTS}"; then USE_FONTS="Adobe Bembo" else @@ -1855,7 +1144,7 @@ if test -z "${USE_FONTS}"; then fi echo '\nonstopmode\documentclass{article}\begin{document}{\fontfamily{pfu}\fontsize{10pt}{10}\selectfont test}\end{document}' > ${OUTPUT} if retval=`${LATEX} ${OUTPUT} & 5`; then - if echo "$retval" | grep 'Some font shapes were not available' >& 5 2>&1 ; then + if echo "$retval" | grep 'Some font shapes were not available' >& 5 2>&1 ; then : else if test -z "${USE_FONTS}"; then @@ -1869,7 +1158,7 @@ if test -z "${USE_FONTS}"; then fi echo '\nonstopmode\documentclass{article}\begin{document}{\fontfamily{bcr}\fontsize{10pt}{10}\selectfont test}\end{document}' > ${OUTPUT} if retval=`${LATEX} ${OUTPUT} & 5`; then - if echo "$retval" | grep 'Some font shapes were not available' >& 5 2>&1 ; then + if echo "$retval" | grep 'Some font shapes were not available' >& 5 2>&1 ; then : else if test -z "${USE_FONTS}"; then @@ -1901,8 +1190,7 @@ if test -z "${USE_FONTS}" ; then USE_FONTS=no fi USE_FONTS=`echo "${USE_FONTS}" | sed 's/,\([^,]*\)$/ and\1/'` -echo "$as_me:$LINENO: result: \"${USE_FONTS}\"" >&5 -echo "${ECHO_T}\"${USE_FONTS}\"" >&6 +echo "$ac_t"""${USE_FONTS}"" 1>&6 if test "${USE_FONTS}" = yes ; then USE_FONTS='Set in Adobe Bembo, Adobe Futura and Bitstream Courier.' elif test "${USE_FONTS}" = no ; then @@ -1913,904 +1201,285 @@ fi - ac_config_files="$ac_config_files Makefile etc/Makefile lisp/Makefile texi/Makefile texi/gnusconfig.tex texi/ps/Makefile" -cat >confcache <<\_ACEOF +trap '' 1 2 15 +cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. # -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - +EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -{ - (set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} | - sed ' - t clear - : clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - : end' >>confcache -if diff $cache_file confcache >/dev/null 2>&1; then :; else +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else if test -w $cache_file; then - test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" - cat confcache >$cache_file + echo "updating cache $cache_file" + cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; -}' + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then we branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -cat >confdef2opt.sed <<\_ACEOF -t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g -t quote -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g -t quote -d -: quote -s,[ `~#$^&*(){}\\|;'"<>?],\\&,g -s,\[,\\&,g -s,\],\\&,g -s,\$,$$,g -p -_ACEOF -# We use echo to avoid assuming a particular line-breaking character. -# The extra dot is to prevent the shell from consuming trailing -# line-breaks from the sub-command output. A line-break within -# single-quotes doesn't work because, if this script is created in a -# platform that uses two characters for line-breaks (e.g., DOS), tr -# would break. -ac_LF_and_DOT=`echo; echo .` -DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` -rm -f confdef2opt.sed - - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_i=`echo "$ac_i" | - sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Add them. - ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - +cat > conftest.defs <<\EOF +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g +s%\[%\\&%g +s%\]%\\&%g +s%\$%$$%g +EOF +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +rm -f conftest.defs + + +# Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# # Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi - -# Support unset when possible. -if (FOO=FOO; unset FOO) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - - -# PATH needs CR, and LINENO needs CR and PATH. -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - as_mkdir_p=false -fi - -as_executable_p="test -f" - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +# configure, is in ./config.log if it exists. -# Sed expression to map a string onto a valid variable name. -as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" - - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - -exec 6>&1 - -# Open the log real soon, to keep \$[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - -This file was extended by $as_me, which was -generated by GNU Autoconf 2.57. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 -_ACEOF - -# Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS -fi - -cat >>$CONFIG_STATUS <<\_ACEOF - -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to ." -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.57, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" - -Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option do - case $1 in - --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` - ac_shift=: - ;; - -*) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_option=$1 - ac_need_defaults=false;; - esac - - case $ac_option in - # Handling of the options. -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF + case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:$LINENO: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" ;; - + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; esac - shift done -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF - - +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" +trap 'rm -fr `echo "Makefile etc/Makefile lisp/Makefile texi/Makefile texi/gnusconfig.tex texi/ps/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@SET_MAKE@%$SET_MAKE%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@MAKEINFO@%$MAKEINFO%g +s%@EMACS@%$EMACS%g +s%@XEMACS@%$XEMACS%g +s%@EMACS_FLAVOR@%$EMACS_FLAVOR%g +s%@lispdir@%$lispdir%g +s%@etcdir@%$etcdir%g +s%@info_dir@%$info_dir%g +s%@HAVE_url@%$HAVE_url%g +s%@URL@%$URL%g +s%@HAVE_w3_forms@%$HAVE_w3_forms%g +s%@W3@%$W3%g +s%@FLAGS@%$FLAGS%g +s%@LATEX@%$LATEX%g +s%@WITH_FONTS_bembo@%$WITH_FONTS_bembo%g +s%@WITHOUT_FONTS_bembo@%$WITHOUT_FONTS_bembo%g +s%@WITH_FONTS_pfu@%$WITH_FONTS_pfu%g +s%@WITHOUT_FONTS_pfu@%$WITHOUT_FONTS_pfu%g +s%@WITH_FONTS_bcr@%$WITH_FONTS_bcr%g +s%@WITHOUT_FONTS_bcr@%$WITHOUT_FONTS_bcr%g +s%@USE_FONTS@%$USE_FONTS%g -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_config_target in $ac_config_targets -do - case "$ac_config_target" in - # Handling of arguments. - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "etc/Makefile" ) CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; - "lisp/Makefile" ) CONFIG_FILES="$CONFIG_FILES lisp/Makefile" ;; - "texi/Makefile" ) CONFIG_FILES="$CONFIG_FILES texi/Makefile" ;; - "texi/gnusconfig.tex" ) CONFIG_FILES="$CONFIG_FILES texi/gnusconfig.tex" ;; - "texi/ps/Makefile" ) CONFIG_FILES="$CONFIG_FILES texi/ps/Makefile" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason to put it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Create a temporary directory, and hook for its removal unless debugging. -$debug || -{ - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} - -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF - -# -# CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@SET_MAKE@,$SET_MAKE,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@MAKEINFO@,$MAKEINFO,;t t -s,@EMACS@,$EMACS,;t t -s,@XEMACS@,$XEMACS,;t t -s,@EMACS_FLAVOR@,$EMACS_FLAVOR,;t t -s,@lispdir@,$lispdir,;t t -s,@etcdir@,$etcdir,;t t -s,@info_dir@,$info_dir,;t t -s,@HAVE_url@,$HAVE_url,;t t -s,@URL@,$URL,;t t -s,@HAVE_w3_forms@,$HAVE_w3_forms,;t t -s,@W3@,$W3,;t t -s,@FLAGS@,$FLAGS,;t t -s,@LATEX@,$LATEX,;t t -s,@WITH_FONTS_bembo@,$WITH_FONTS_bembo,;t t -s,@WITHOUT_FONTS_bembo@,$WITHOUT_FONTS_bembo,;t t -s,@WITH_FONTS_pfu@,$WITH_FONTS_pfu,;t t -s,@WITHOUT_FONTS_pfu@,$WITHOUT_FONTS_pfu,;t t -s,@WITH_FONTS_bcr@,$WITH_FONTS_bcr,;t t -s,@WITHOUT_FONTS_bcr@,$WITHOUT_FONTS_bcr,;t t -s,@USE_FONTS@,$USE_FONTS,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF - -_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` fi -fi # test -n "$CONFIG_FILES" +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <>$CONFIG_STATUS <<\_ACEOF -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue +CONFIG_FILES=\${CONFIG_FILES-"Makefile etc/Makefile lisp/Makefile texi/Makefile texi/gnusconfig.tex texi/ps/Makefile"} +EOF +cat >> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; esac - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac -# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be -# absolute. -ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` -ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` -ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` -ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; esac - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo $f;; - *) # Relative - if test -f "$f"; then - # Build tree - echo $f - elif test -f "$srcdir/$f"; then - # Source tree - echo $srcdir/$f - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;t t -s,@srcdir@,$ac_srcdir,;t t -s,@abs_srcdir@,$ac_abs_srcdir,;t t -s,@top_srcdir@,$ac_top_srcdir,;t t -s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t -s,@builddir@,$ac_builddir,;t t -s,@abs_builddir@,$ac_abs_builddir,;t t -s,@top_builddir@,$ac_top_builddir,;t t -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file - else - cat $tmp/out - rm -f $tmp/out - fi + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* -done -_ACEOF +EOF +cat >> $CONFIG_STATUS <>$CONFIG_STATUS <<\_ACEOF +EOF +cat >> $CONFIG_STATUS <<\EOF -{ (exit 0); exit 0; } -_ACEOF +exit 0 +EOF chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } -fi +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/configure.in b/configure.in index e4c53c9..939e964 100644 --- a/configure.in +++ b/configure.in @@ -27,3 +27,7 @@ AC_SET_BUILD_FLAGS GNUS_CHECK_FONTS AC_OUTPUT(Makefile etc/Makefile lisp/Makefile texi/Makefile texi/gnusconfig.tex texi/ps/Makefile) + +ifelse(dnl Do not change this comment + arch-tag: 4fda042e-c632-45be-867f-4d90bc87746b +)dnl diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 3ff6caf..8f9b3d6 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,49 @@ +2005-01-26 Steve Youngs + + * gpg.el: Add timer/itimer compatibility. + +2004-10-25 Katsumi Yamaoka + + * README (compface.el): Describe. + +2004-10-12 Katsumi Yamaoka + + * compface.el: Move the version of ELisp-based uncompface program + from the lisp directory because of the copyright problem. + +2004-09-27 Simon Josefsson + + * hashcash.el: Move to ../lisp/. + +2004-07-30 TSUCHIYA Masatoshi + + * gnus-namazu.el (gnus-namazu/make-directory-table): Treat drive + letters when calcurating pathnames of remote groups. + From KOSEKI Yoshinori (tiny change). + +2004-05-27 Simon Josefsson + + * starttls.el: Moved to ../lisp/. + +2004-05-26 Simon Josefsson + + * starttls.el: Sync with proposed Emacs version. + +2004-05-13 TSUCHIYA Masatoshi + + * gnus-namazu.el (gnus-namazu/setup): Do not update indices + `gnus-namazu-command-prefix' is non-nil. + +2004-05-12 Kai Grossjohann + + * README (nnir.el): Describe. + +2004-05-11 TSUCHIYA Masatoshi + + * README (gnus-namazu.el): Describe. + + * gnus-namazu.el: New file. + 2004-04-05 Reiner Steib * nnir.el (nnir-group-server): Move before first use. @@ -262,3 +308,5 @@ ;; Local Variables: ;; coding: iso-2022-7bit ;; End: + +;;; arch-tag: 105a2bf0-3f04-4ba6-a991-619aece2c04f diff --git a/contrib/README b/contrib/README index e51f9c7..148ba57 100644 --- a/contrib/README +++ b/contrib/README @@ -12,11 +12,32 @@ need to a directory which is in load-path. Here is an overview of the files: +compface.el + + Provides the ELisp-based uncompface program. It is excellent + and practical (actually you can replace lisp/compface.el with + it), however the author is missing and the copyright has not + been assigned yet. + +gnus-namazu.el + + This file defines the command to search mails and persistent + articles with Namazu, which is a full-text search engine + distributed at http://namazu.org, and to browse its results + with Gnus. + gpg-ring.el gpg.el hashcash.el +nnir.el + + Interface to various full-text search engines. Provides less + functionality than gnus-namazu.el, but also supports programs + other than Namazu. Current implementation is restricted to + nnml folders, but could be extended for other backends. + one-line-cookie.diff ssl.el diff --git a/contrib/compface.el b/contrib/compface.el new file mode 100644 index 0000000..ac80578 --- /dev/null +++ b/contrib/compface.el @@ -0,0 +1,749 @@ +;;; compface.el --- functions for converting X-Face headers +;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + +;; Author: Lars Magne Ingebrigtsen +;; TAKAI Kousuke +;; 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., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;;; Code: + +(defgroup compface nil + "X-Face image conversion." + :group 'extensions) + +(defcustom uncompface-use-external (and (not noninteractive) + (executable-find "uncompface") + (executable-find "icontopbm") + 'undecided) + "*Specify which of the internal or the external decoder should be used. +nil means to use the internal ELisp-based uncompface program. t means +to use the external decoder. In the later case, you need to have the +external `uncompface' and `icontopbm' programs installed. The default +value is nil if those external programs aren't available, otherwise +`undecided' which means to determine it by checking whether the host +machine is slow. See also `uncompface-use-external-threshold'. You +can skip that check by setting this value as nil or t explicitly." + :type '(choice (const :tag "Use the internal decoder" nil) + (const :tag "Use the external decoder" t) + (const :tag "Autodetection" undecided)) + :group 'compface) + +(defcustom uncompface-use-external-threshold 0.1 + "*Number of seconds to check whether the host machine is slow. +If the host takes time larger than this value for decoding an X-Face +using the internal ELisp-based uncompface program, it will be changed +to using the external `uncompface' and `icontopbm' programs if they +are available. Note that the measurement may never be exact." + :type 'number + :group 'compface) + +(eval-when-compile + (defmacro uncompface-float-time (&optional specified-time) + (if (fboundp 'float-time) + `(float-time ,specified-time) + `(let ((time (or ,specified-time (current-time)))) + (+ (* (car time) 65536.0) + (cadr time) + (cond ((consp (setq time (cddr time))) + (/ (car time) 1000000.0)) + (time + (/ time 1000000.0)) + (t + 0))))))) + +(defun uncompface (face) + "Convert FACE to pbm. +If `uncompface-use-external' is t, it requires the external programs +`uncompface', and `icontopbm'. On a GNU/Linux system these might be +in packages with names like `compface' or `faces-xface' and `netpbm' +or `libgr-progs', for instance." + (cond ((eq uncompface-use-external nil) + (uncompface-internal face)) + ((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)))) + (t + (let* ((gc-cons-threshold (eval '(lsh -1 -1))) + (start (current-time))) + (prog1 + (uncompface-internal face) + (setq uncompface-use-external + (and (> (- (uncompface-float-time (current-time)) + (uncompface-float-time start)) + uncompface-use-external-threshold) + (executable-find "uncompface") + (executable-find "icontopbm") + t)) + (message "Setting `uncompface-use-external' to `%s'" + uncompface-use-external)))))) + +;; The following section is a bug-for-bug compatible version of +;; `uncompface' program entirely implemented in Emacs-Lisp. + +(eval-when-compile + ;; The size of 48x48 is actually hard-coded into the code itself, + ;; so you cannot simply change those values. So we hard-code + ;; them into the compiled code. + (defconst uncompface-width 48 + "Width of X-Face bitmap image.") + (defconst uncompface-height 48 + "Height of X-Face bitmap image.") + + ;; Again, this is also hard-coded into the compiled code. + (defconst uncompface-guesses + (mapcar (lambda (x) + (mapcar (lambda (x) + (let ((vector (make-vector (length x) nil)) + (i 0)) + (while x + (or (zerop (car x)) + (aset vector i t)) + (setq x (cdr x) + i (1+ i))) + vector)) + x)) + '((;; g_00 + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 + 0 0 0 0 0 1 0 1 0 0 0 1 0 1 1 1 + 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 + 0 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 + 0 1 0 0 0 1 0 1 0 0 1 0 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 + 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 + 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 + 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1 + 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 1 0 1 1 0 0 0 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 0 0 1 1 1 1 0 1 0 1 0 1 0 0 + 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 + 0 1 0 1 0 1 1 1 0 1 0 0 0 1 1 1 + 1 1 0 1 0 1 1 1 0 0 1 1 1 1 0 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 0 1 1 1 1 1 0 0 0 1 1 1 1 1 + 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 + 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 + 0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 + 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 + 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 0 1 1 1 1 1 0 0 0 1 1 1 0 1 + 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 + 0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 + 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1 + 0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1 + 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 + 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 + 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 + 1 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 + 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 + 0 1 0 1 0 1 1 0 0 0 1 0 0 1 0 1 + 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 + 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 + 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 + 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 + 0 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 + 0 0 0 0 1 0 0 1 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 + 0 0 0 1 1 0 0 0 1 1 0 1 0 1 1 1 + 1 0 0 1 0 1 0 0 0 1 1 1 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 + 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 1 + 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 + 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 + 1 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 + 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 1 + 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 + 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 1 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 + 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 + 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 1 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 + 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 + 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 + 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 + 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 + 1 1 0 1 0 1 1 1 0 1 0 1 1 1 1 1 + 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 + 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 + 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 + 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 + 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 0 0 1 1 0 1 0 0 0 0 1 1 1 1 + 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 + 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 + 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 + 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 1 + 1 0 1 0 1 1 1 1 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 0 0 0 1 0 1 0 1 + 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 + 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 + 0 1 0 0 1 1 1 1 0 0 1 1 1 1 1 0 + 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 + 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 + 1 0 0 1 0 1 0 1 0 1 0 0 1 1 1 1 + 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 + 0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1 + 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 + 0 0 1 0 0 1 0 1 0 0 0 0 1 1 1 0 + 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 1 + 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 + 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 + 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 + 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1 + 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 + 0 1 0 0 0 1 1 1 1 1 1 0 1 1 0 1 + 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 0 0 1 1 1 1 0 1 1 0 1 1 1 1 + 1 1 0 1 1 0 0 0 0 1 0 1 1 1 1 1 + 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 + 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 + 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 + 1 0 0 1 0 1 0 0 0 0 0 0 1 1 0 1 + 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + 0 1 0 0 0 1 1 0 0 1 0 1 0 1 1 1 + 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 + 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 + 0 1 0 0 0 1 1 1 0 1 1 0 1 1 0 0 + 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 1 1 0 1 0 0 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 + 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 1 + 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 + 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 + 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 + 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 + 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 0 + 1 1 0 0 1 1 1 1 0 0 0 0 0 1 0 1 + 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 + 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 1 1 1 0 1 0 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 1 + 0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1 + 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 + 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 + 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 1 + 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 + 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 + 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 0 1 1 1 0 0 1 1 0 + 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 1 1 1 0 1 1 0 0 + 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 + 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 + 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 + 1 0 0 1 1 1 0 1 0 0 0 0 1 1 1 1 + 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + ;; g_10 + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 + 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 + 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1 + 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 + 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 + 0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 1 + 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 + 0 1 0 1 1 1 1 1 0 0 1 1 1 1 1 1 + 0 0 0 1 0 1 1 1 0 0 1 1 0 0 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 + 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 1 0 1 0 1 0 1 1 1 + 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 1 + 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 + 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1 1 + 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 1 1 1 0 1 1 0 1 1 1 1 + 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 + 1 1 1 1 1 0 1 0 1 1 1 0 1 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 + 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 + 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + ;; g_20 + (0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 + 0 1 0 0 0 0 1 1 0 0 1 0 1 1 1 0 + 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1) + ;; g_40 + (0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 + 1 1 1 0 0 1 0 0 0 0 0 0 1 1 0 1 + 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 0 1 0 0 0 1 0 0 0 1 0 0 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 + 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 + 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 1 + 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 + 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 + 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 1 1 1 0 0 1 1 0 1 1 1 0 1 + 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 + 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1 + 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 + 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 + 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 + 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 + 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 0 1 0 0 0 0 0 1 0 1 0 1 0 1 1 1 + 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 1 0 1 0 1 1 1 0 1 1 1 + 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 1 + 0 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 + 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 + 0 0 0 0 0 1 0 1 0 1 1 1 1 1 0 1 + 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 1 + 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 + 0 0 0 0 1 1 0 1 1 1 1 1 1 1 0 1 + 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 1 + 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 + 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 + 0 0 0 0 1 1 0 1 0 1 1 1 1 1 1 1 + 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 1 0 0 1 1 0 1 0 1 1 1 1 1 0 1 + 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1)) + (;; g_01 + (0 0 1 1 0 1 1 1 0 1 1 1 0 0 1 1 + 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 + 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 + 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1 1 + 0 1 1 1 0 0 0 0 0 0 1 1 0 0 1 1 + 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 1 + 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + ;; g_11 + (0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 1 + 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1) + ;; g_21 + (0 0 0 1 0 1 1 1) + ;; g_41 + (0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 1 0 0 0 1 1 1 1 1 + 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1 + 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) + (;; g_02 + (0 1 0 1) + ;; g_12 + (0 1) + ;; g_22 + (0) + ;; g_42 + (0 0 0 1)))) + "Static prediction table for X-Face image compression algorithm.") + + ;; Macros for inlining critical values. + (defmacro uncompface-width () (list 'quote uncompface-width)) + (defmacro uncompface-height () (list 'quote uncompface-height)) + (defmacro uncompface-guesses () (list 'quote uncompface-guesses)) + + (defmacro uncompface-loop (&rest body) + "Eval BODY and repeat if last expression of BODY yields non-nil." + (list 'while (cons 'progn body)))) + +;; (defun uncompface-print-bignum (bignum &optional prefix) +;; (princ (format (concat prefix "<%s>\n") +;; (mapconcat (lambda (x) (format "%02x" x)) +;; (reverse bignum) " ")))) + +;; Shut up the byte-compiler. +;; These variables are once bound in `uncompface' and all subfunctions +;; accesses them directly rather than creating their own bindings. +(eval-when-compile + (defvar bignum) + (defvar face)) + +;; Big-number facilities. +;; These functions were used to be implemented with `lsh' and `logand', +;; but rewritten to use `/' and `%'. The last two are mapped into +;; byte-code directly, but the formers are normal functions even in +;; compiled code which involve expensive `funcall' operations. +(eval-when-compile + (defsubst uncompface-big-mul-add (multiplier adder) + "Multiply BIGNUM by MULTIPLIER and add ADDER and put result in `bignum'." + (setq bignum (if (= multiplier 0) + (cons 0 bignum) + (prog1 bignum + (while (progn + (setcar bignum (% (setq adder (+ (* (car bignum) + multiplier) + adder)) + 256)) + (setq adder (/ adder 256)) + (cdr bignum)) + (setq bignum (cdr bignum))) + (or (= adder 0) + (setcdr bignum (list adder)))))))) + +;; This trick is for XEmacs 21.4 which doesn't allow inlining a function +;; using `defsubst' into another function also defined with `defsubst'. +(eval-when-compile + (when (featurep 'xemacs) + (defvar uncompface-big-mul-add (symbol-function 'uncompface-big-mul-add)) + (defmacro uncompface-big-mul-add (multiplier adder) + `(,uncompface-big-mul-add ,multiplier ,adder)))) + +;; Separate `eval-when-compile' for the byte compiler +;; to properly define `uncompface-big-mul-add' before `uncompface-big-pop'. +(eval-when-compile + (defsubst uncompface-big-pop (prob) + (let ((n (car bignum)) (i 0)) + (if (cdr bignum) + (setq bignum (cdr bignum)) + (setcar bignum 0)) + (while (or (< n (cdr (car prob))) + (>= n (+ (cdr (car prob)) (car (car prob))))) + (setq prob (cdr prob) + i (1+ i))) + (uncompface-big-mul-add (car (car prob)) (- n (cdr (car prob)))) + i))) + +;; This function cannot be inlined due to recursive calls. +(defun uncompface-pop-grays (offset size) + (if (<= size 3) + (let ((bits (uncompface-big-pop + ;; This is freqs[16] in compface_private.h. + '(( 0 . 0) (38 . 0) (38 . 38) (13 . 152) + (38 . 76) (13 . 165) (13 . 178) ( 6 . 230) + (38 . 114) (13 . 191) (13 . 204) ( 6 . 236) + (13 . 217) ( 6 . 242) ( 5 . 248) ( 3 . 253))))) +;; (if (/= (logand bits 1) 0) +;; (aset face offset t)) +;; (if (/= (logand bits 2) 0) +;; (aset face (1+ offset) t)) +;; (if (/= (logand bits 4) 0) +;; (aset face (+ offset (uncompface-width)) t)) +;; (if (/= (logand bits 8) 0) +;; (aset face (+ offset (uncompface-width) 1) t)) + (when (>= bits 8) + (aset face (+ offset (uncompface-width) 1) t) + (setq bits (- bits 8))) + (when (>= bits 4) + (aset face (+ offset (uncompface-width)) t) + (setq bits (- bits 4))) + (or (eq (if (< bits 2) + bits + (aset face (1+ offset) t) + (- bits 2)) + 0) + (aset face offset t)) + ) + (setq size (/ size 2)) + (uncompface-pop-grays offset size) + (uncompface-pop-grays (+ offset size) size) + (uncompface-pop-grays (+ offset (* (uncompface-width) size)) size) + (uncompface-pop-grays (+ offset (* (uncompface-width) size) size) size))) + +;; Again, this function call itself recursively. +(defun uncompface-uncompress (offset size level) + ;; This used to be (funcall (aref [(lambda ...) ...] (u-big-pop ...))) + ;; but this was slow due to function call. + (let ((i (uncompface-big-pop (car level)))) + (cond ((eq i 0) ; black + (uncompface-pop-grays offset size)) + ((eq i 1) ; gray + (setq size (/ size 2) + level (cdr level)) + (uncompface-uncompress offset size level) + (uncompface-uncompress (+ offset size) size level) + (uncompface-uncompress (+ offset (* size (uncompface-width))) + size level) + (uncompface-uncompress (+ offset (* size (uncompface-width)) size) + size level)) + ;; ((eq i 2) nil) + ;; (t (error "Cannot happen")) + ))) + +(eval-when-compile + (defmacro uncompface-shift-in (k dy dx) + `(+ k k (if (aref face (+ i (* ,dy (uncompface-width)) ,dx)) 1 0)))) + +(defun uncompface-internal (string &optional raw) + "Decode X-Face data STRING and return an image in the pbm format. +If the optional RAW is non-nil, return a raw bitmap as a vector." + (let (;; `bignum' and `face' are semi-global variables. + ;; Do not use '(0) below, because BIGNUM is modified in-place. + (bignum (list 0)) + (face (make-vector (* (uncompface-width) (uncompface-height)) nil)) + ;;(uncompface-big-shift -16) + ;;(uncompface-big-mask 65535) + (y 0) x) + (mapc (lambda (c) + (and (>= c ?!) (<= c ?~) + (uncompface-big-mul-add (1+ (- ?~ ?!)) (- c ?!)))) + string) + ;;(uncompface-print-bignum bignum) + ;;(setq y 0) + (uncompface-loop + (setq x 0) + (uncompface-loop + (uncompface-uncompress (+ (* (uncompface-width) y) x) 16 + ;; This is levels[4][3] in compface_private.h. + '(;; Top of tree almost always grey + (( 1 . 255) (251 . 0) ( 4 . 251)) + (( 1 . 255) (200 . 0) ( 55 . 200)) + (( 33 . 223) (159 . 0) ( 64 . 159)) + ;; Grey disallowed at bottom + ((131 . 0) ( 0 . 0) (125 . 131)))) + (< (setq x (+ x 16)) (uncompface-width))) + (< (setq y (+ y 16)) (uncompface-height))) + (setq y 0) + (let ((i 0) guesses k) + (uncompface-loop + (setq guesses (cond ((= y 1) (nth 2 (uncompface-guesses))) + ((= y 2) (nth 1 (uncompface-guesses))) + (t (nth 0 (uncompface-guesses)))) + x 0) + (uncompface-loop + (setq k 0) + (when (>= x 1) + (when (>= x 2) + (when (>= x 3) + (when (>= y 1) + (when (>= y 2) + (when (>= y 3) + (setq k (uncompface-shift-in k -2 -2))) + (setq k (uncompface-shift-in k -1 -2))) + (setq k (uncompface-shift-in k 0 -2)))) + (when (>= y 1) + (when (>= y 2) + (when (>= y 3) + (setq k (uncompface-shift-in k -2 -1))) + (setq k (uncompface-shift-in k -1 -1))) + (setq k (uncompface-shift-in k 0 -1)))) + (when (>= y 2) + (when (>= y 3) + (setq k (uncompface-shift-in k -2 0))) + (setq k (uncompface-shift-in k -1 0))) + (when (>= y 2) + (when (>= y 3) + (setq k (uncompface-shift-in k -2 1))) + (setq k (uncompface-shift-in k -1 1))) + (when (<= x (- (uncompface-width) 2)) + (when (>= y 2) + (when (>= y 3) + (setq k (uncompface-shift-in k -2 2))) + (setq k (uncompface-shift-in k -1 2))))) + (if (aref (car (cond ((= x 1) + (cdr (cdr guesses))) + ((= x 2) + (cdr guesses)) + ((= x (1- (uncompface-width))) + (cdr (cdr (cdr guesses)))) + (t + guesses))) k) + (aset face i (not (aref face i)))) + (setq i (1+ i)) + (< (setq x (1+ x)) (uncompface-width))) + (< (setq y (1+ y)) (uncompface-height)))) + (if raw + face + (concat (eval-when-compile + (format "P1\n%d %d\n" uncompface-width uncompface-height)) + (mapconcat (lambda (bit) (if bit "1" "0")) face " ") + "\n")))) + +(provide 'compface) + +;; Local variables: +;; eval: (put 'uncompface-loop 'lisp-indent-hook 0) +;; End: + +;; arch-tag: a8e3f4a0-e375-4f1d-a426-c7da30e16c18 +;;; compface.el ends here diff --git a/contrib/gnus-namazu.el b/contrib/gnus-namazu.el new file mode 100644 index 0000000..40c35a1 --- /dev/null +++ b/contrib/gnus-namazu.el @@ -0,0 +1,905 @@ +;;; gnus-namazu.el --- Search mail with Namazu -*- coding: iso-2022-7bit; -*- + +;; Copyright (C) 2000, 2001, 2002, 2003, 2004 +;; TSUCHIYA Masatoshi + +;; Author: TSUCHIYA Masatoshi +;; Keywords: mail searching namazu + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program; if not, you can either send email to this +;; program's maintainer or write to: The Free Software Foundation, +;; Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA. + + +;;; Commentary: + +;; This file defines the command to search mails and persistent +;; articles with Namazu and to browse its results with Gnus. +;; +;; Namazu is a full-text search engine intended for easy use. For +;; more detail about Namazu, visit the following page: +;; +;; http://namazu.org/ + + +;;; Quick Start: + +;; If this module has already been installed, only four steps are +;; required to search articles with this module. +;; +;; (1) Install Namazu. +;; +;; (2) Put this expression into your ~/.gnus. +;; +;; (gnus-namazu-insinuate) +;; +;; (3) Start Gnus and type M-x gnus-namazu-create-index RET to make +;; index of articles. +;; +;; (4) In group buffer or in summary buffer, type C-c C-n query RET. + + +;;; Install: + +;; Before installing this module, you must install Namazu. +;; +;; When you would like to byte-compile this module in Gnus, put this +;; file into the lisp/ directory in the Gnus source tree and run `make +;; install'. And then, put the following expression into your +;; ~/.gnus. +;; +;; (gnus-namazu-insinuate) +;; +;; In order to make index of articles with Namazu before using this +;; module, type M-x gnus-namazu-create-index RET. Otherwise, you can +;; create index by yourself with the following commands: +;; +;; % mkdir ~/News/namazu +;; % mknmz -a -h -O ~/News/namazu ~/Mail ~/News/cache +;; +;; The first command makes the directory for index files, and the +;; second command generates index files of mails and persistent +;; articles. +;; +;; In order to update indices for incoming articles, this module +;; automatically runs mknmz, the indexer of Namazu, at an interval of +;; 3 days; this period is set to `gnus-namazu-index-update-interval'. +;; +;; Indices will be updated when `gnus-namazu-search' is called. If +;; you want to update indices everywhen Gnus is started, you can put +;; the following expression to your ~/.gnus. +;; +;; (add-hook 'gnus-startup-hook 'gnus-namazu-update-all-indices) +;; +;; In order to control mknmz closely, disable the automatic updating +;; feature and run mknmz by yourself. In this case, set nil to the +;; above option. +;; +;; (setq gnus-namazu-index-update-interval nil) +;; +;; When your index is put into the directory other than the default +;; one (~/News/namazu), it is necessary to set its place to +;; `gnus-namazu-index-directories' as follows: +;; +;; (setq gnus-namazu-index-directories +;; (list (expand-file-name "~/namazu"))) + + +;;; Code: + +(eval-when-compile (require 'cl)) +(require 'nnoo) +(require 'nnheader) +(require 'nnmail) +(require 'gnus-sum) + +;; To suppress byte-compile warning. +(eval-when-compile + (defvar nnml-directory) + (defvar nnmh-directory)) + + +(defgroup gnus-namazu nil + "Search nnmh and nnml groups in Gnus with Namazu." + :group 'namazu + :group 'gnus + :prefix "gnus-namazu-") + +(defconst gnus-namazu-default-index-directory + (expand-file-name "namazu" gnus-directory) + "Default place of Namazu index files.") + +(defcustom gnus-namazu-index-directories + (list + (or (and (boundp 'gnus-namazu-index-directory) + (symbol-value 'gnus-namazu-index-directory)) + (and (boundp 'nnir-namazu-index-directory) + (symbol-value 'nnir-namazu-index-directory)) + gnus-namazu-default-index-directory)) + "*Places of Namazu index files." + :type '(repeat directory) + :group 'gnus-namazu) + +(defcustom gnus-namazu-command + (or (and (boundp 'namazu-command) + (symbol-value 'namazu-command)) + (and (boundp 'nnir-namazu-program) + (symbol-value 'nnir-namazu-program)) + "namazu") + "*Name of the executable file of Namazu." + :type 'string + :group 'gnus-namazu) + +(defcustom gnus-namazu-command-prefix nil + "*Prefix commands to execute Namazu. +If you put your index on a remote server, set this option as follows: + + (setq gnus-namazu-command-prefix + '(\"ssh\" \"-x\" \"remote-server\")) + +This makes gnus-namazu execute \"ssh -x remote-server namazu ...\" +instead of executing \"namazu\" directly." + :type '(repeat string) + :group 'gnus-namazu) + +(defcustom gnus-namazu-additional-arguments nil + "*Additional arguments of Namazu. +The options `-q', `-a', and `-l' are always used, very few other +options make any sense in this context." + :type '(repeat string) + :group 'gnus-namazu) + +(defcustom gnus-namazu-index-update-interval + 259200 ; 3 days == 259200 seconds. + "*Number of seconds between running the indexer of Namazu." + :type '(choice (const :tag "Never run the indexer" nil) + (integer :tag "Number of seconds")) + :group 'gnus-namazu) + +(defcustom gnus-namazu-make-index-command "mknmz" + "*Name of the executable file of the indexer of Namazu." + :type 'string + :group 'gnus-namazu) + +(defcustom gnus-namazu-make-index-arguments + (nconc + (list "--all" "--mailnews" "--deny=^.*[^0-9].*$") + (when (and (boundp 'current-language-environment) + (string= "Japanese" + (symbol-value 'current-language-environment))) + (list "--indexing-lang=ja"))) + "*Arguments of the indexer of Namazu." + :type '(repeat string) + :group 'gnus-namazu) + +(defcustom gnus-namazu-field-keywords + '("date" "from" "newsgroups" "size" "subject" "summary" "to" "uri") + "*List of keywords to do field-search." + :type '(repeat string) + :group 'gnus-namazu) + +(defcustom gnus-namazu-coding-system + (if (memq system-type '(windows-nt OS/2 emx)) + 'shift_jis + 'euc-japan) + "*Coding system for Namazu process." + :type 'coding-system + :group 'gnus-namazu) + +(defcustom gnus-namazu-need-path-normalization + (and (memq system-type '(windows-nt OS/2 emx)) t) + "*Non-nil means that outputs of namazu may contain drive letters." + :type 'boolean + :group 'gnus-namazu) + +(defcustom gnus-namazu-case-sensitive-filesystem + (not (eq system-type 'windows-nt)) + "*Non-nil means that the using file system distinguishes cases of characters." + :type 'boolean + :group 'gnus-namazu) + +(defcustom gnus-namazu-query-highlight t + "Non-nil means that queried words is highlighted." + :type 'boolean + :group 'gnus-namazu) + +(defface gnus-namazu-query-highlight-face + '((((type tty pc) (class color)) + (:background "magenta4" :foreground "cyan1")) + (((class color) (background light)) + (:background "magenta4" :foreground "lightskyblue1")) + (((class color) (background dark)) + (:background "palevioletred2" :foreground "brown4")) + (t (:inverse-video t))) + "Face used for namazu query matching words." + :group 'gnus-namazu) + +(defcustom gnus-namazu-remote-groups nil + "*Alist of regular expressions matching remote groups and their base paths. +If you use an IMAP server and have a special index, set this option as +follows: + + (setq gnus-namazu-remote-groups + '((\"^nnimap\\\\+server:INBOX\\\\.\" . \"~/Maildir/.\"))) + +This means that the group \"nnimap+server:INBOX.group\" is placed in +\"~/Maildir/.group\"." + :group 'gnus-namazu + :type '(repeat + (cons (regexp :tag "Regexp of group name") + (string :tag "Base path of groups"))) + :set (lambda (symbol value) + (prog1 (set-default symbol value) + (when (featurep 'gnus-namazu) + (gnus-namazu/make-directory-table t))))) + +;;; Internal Variable: +(defconst gnus-namazu/group-name-regexp "\\`nnvirtual:namazu-search\\?") + +;; Multibyte group name: +(and + (fboundp 'gnus-group-decoded-name) + (let ((gnus-group-name-charset-group-alist + (list (cons gnus-namazu/group-name-regexp gnus-namazu-coding-system))) + (query (decode-coding-string (string 27 36 66 52 65 59 122 27 40 66) + 'iso-2022-7bit))) + (not (string-match query + (gnus-summary-buffer-name + (encode-coding-string + (concat "nnvirtual:namazu-search?query=" query) + gnus-namazu-coding-system))))) + (let (current-load-list) + (defadvice gnus-summary-buffer-name + (before gnus-namazu-summary-buffer-name activate compile) + "Advised by `gnus-namazu' to handle encoded group names." + (ad-set-arg 0 (gnus-group-decoded-name (ad-get-arg 0)))))) + +(defmacro gnus-namazu/make-article (group number) + `(cons ,group ,number)) +(defmacro gnus-namazu/article-group (x) `(car ,x)) +(defmacro gnus-namazu/article-number (x) `(cdr ,x)) + +(defsubst gnus-namazu/indexed-servers () + "Choice appropriate servers from opened ones, and return thier list." + (append + (gnus-servers-using-backend 'nnml) + (gnus-servers-using-backend 'nnmh))) + +(defsubst gnus-namazu/default-index-directory () + (if (member gnus-namazu-default-index-directory + gnus-namazu-index-directories) + gnus-namazu-default-index-directory + (car gnus-namazu-index-directories))) + +(defun gnus-namazu/setup () + (and (boundp 'gnus-group-name-charset-group-alist) + (not (member (cons gnus-namazu/group-name-regexp + gnus-namazu-coding-system) + gnus-group-name-charset-group-alist)) + (let ((pair (assoc gnus-namazu/group-name-regexp + gnus-group-name-charset-group-alist))) + (if pair + (setcdr pair gnus-namazu-coding-system) + (push (cons gnus-namazu/group-name-regexp + gnus-namazu-coding-system) + gnus-group-name-charset-group-alist)))) + (unless gnus-namazu-command-prefix + (gnus-namazu-update-all-indices))) + +(defun gnus-namazu/server-directory (server) + "Return the top directory of the server SERVER." + (and (memq (car server) '(nnml nnmh)) + (nnoo-change-server (car server) (nth 1 server) (nthcdr 2 server)) + (file-name-as-directory + (expand-file-name (if (eq 'nnml (car server)) + nnml-directory + nnmh-directory))))) + +;;; Functions to call Namazu. +(defsubst gnus-namazu/normalize-results () + "Normalize file names returned by Namazu in this current buffer." + (goto-char (point-min)) + (while (not (eobp)) + (when (looking-at "file://") + (delete-region (point) (match-end 0))) + (when (if gnus-namazu-need-path-normalization + (or (not (looking-at "/\\(.\\)|/")) + (replace-match "\\1:/")) + (eq ?~ (char-after (point)))) + (insert (expand-file-name + (buffer-substring (point-at-bol) (point-at-eol)))) + (delete-region (point) (point-at-eol))) + (forward-line 1))) + +(defsubst gnus-namazu/call-namazu (query) + (let ((coding-system-for-read gnus-namazu-coding-system) + (coding-system-for-write gnus-namazu-coding-system) + (default-process-coding-system + (cons gnus-namazu-coding-system gnus-namazu-coding-system)) + program-coding-system-alist + (file-name-coding-system gnus-namazu-coding-system) + (commands + (append gnus-namazu-command-prefix + (list gnus-namazu-command + "-q" ; don't be verbose + "-a" ; show all matches + "-l") ; use list format + gnus-namazu-additional-arguments + (list query) + gnus-namazu-index-directories))) + (apply 'call-process (car commands) nil t nil (cdr commands)))) + +(defvar gnus-namazu/directory-table nil) +(defun gnus-namazu/make-directory-table (&optional force) + (interactive (list t)) + (unless (and (not force) + gnus-namazu/directory-table + (eq gnus-namazu-case-sensitive-filesystem + (car gnus-namazu/directory-table))) + (let ((table (make-vector (length gnus-newsrc-hashtb) 0)) + cache agent alist dir method) + (mapatoms + (lambda (group) + (unless (gnus-ephemeral-group-p (setq group (symbol-name group))) + (when (file-directory-p + (setq dir (file-name-as-directory + (gnus-cache-file-name group "")))) + (push (cons dir group) cache)) + (when (file-directory-p + (setq dir (gnus-agent-group-pathname group))) + (push (cons dir group) agent)) + (when (memq (car (setq method (gnus-find-method-for-group group))) + '(nnml nnmh)) + (when (file-directory-p + (setq dir (nnmail-group-pathname + (gnus-group-short-name group) + (gnus-namazu/server-directory method)))) + (push (cons dir group) alist))) + (dolist (pair gnus-namazu-remote-groups) + (when (string-match (car pair) group) + (setq dir (nnmail-group-pathname + (substring group (match-end 0)) + "/")) + (push (cons (concat (cdr pair) + ;; nnmail-group-pathname() on some + ;; systems returns pathnames which + ;; have drive letters at their top. + (substring dir (1+ (string-match "/" dir)))) + group) + alist))))) + gnus-newsrc-hashtb) + (dolist (pair (nconc agent cache alist)) + (set (intern (if gnus-namazu-case-sensitive-filesystem + (car pair) + (downcase (car pair))) + table) + (cdr pair))) + (setq gnus-namazu/directory-table + (cons gnus-namazu-case-sensitive-filesystem table))))) + +(defun gnus-namazu/search (groups query) + (gnus-namazu/make-directory-table) + (with-temp-buffer + (let ((exit-status (gnus-namazu/call-namazu query))) + (unless (zerop exit-status) + (error "Namazu finished abnormally: %d" exit-status))) + (gnus-namazu/normalize-results) + (goto-char (point-min)) + (let (articles group) + (while (not (eobp)) + (setq group (buffer-substring-no-properties + (point) + (progn + (end-of-line) + ;; NOTE: Only numeric characters are permitted + ;; as file names of articles. + (skip-chars-backward "0-9") + (point)))) + (and (setq group + (symbol-value + (intern-soft (if gnus-namazu-case-sensitive-filesystem + group + (downcase group)) + (cdr gnus-namazu/directory-table)))) + (or (not groups) + (member group groups)) + (push (gnus-namazu/make-article + group + (string-to-number + (buffer-substring-no-properties (point) + (point-at-eol)))) + articles)) + (forward-line 1)) + (nreverse articles)))) + +;;; User Interface: +(defun gnus-namazu/get-target-groups () + (cond + ((eq major-mode 'gnus-group-mode) + ;; In Group buffer. + (cond + (current-prefix-arg + (gnus-group-process-prefix current-prefix-arg)) + (gnus-group-marked + (prog1 gnus-group-marked (gnus-group-unmark-all-groups))))) + ((eq major-mode 'gnus-summary-mode) + ;; In Summary buffer. + (if current-prefix-arg + (list (gnus-read-group "Group: ")) + (if (and + (gnus-ephemeral-group-p gnus-newsgroup-name) + (string-match gnus-namazu/group-name-regexp gnus-newsgroup-name)) + (cadr (assq 'gnus-namazu-target-groups + (gnus-info-method (gnus-get-info gnus-newsgroup-name)))) + (list gnus-newsgroup-name)))))) + +(defun gnus-namazu/get-current-query () + (and (eq major-mode 'gnus-summary-mode) + (gnus-ephemeral-group-p gnus-newsgroup-name) + (string-match gnus-namazu/group-name-regexp gnus-newsgroup-name) + (cadr (assq 'gnus-namazu-current-query + (gnus-info-method (gnus-get-info gnus-newsgroup-name)))))) + +(defvar gnus-namazu/read-query-original-buffer nil) +(defvar gnus-namazu/read-query-prompt nil) +(defvar gnus-namazu/read-query-history nil) + +(defun gnus-namazu/get-current-subject () + (and gnus-namazu/read-query-original-buffer + (bufferp gnus-namazu/read-query-original-buffer) + (with-current-buffer gnus-namazu/read-query-original-buffer + (when (eq major-mode 'gnus-summary-mode) + (let ((s (gnus-summary-article-subject))) + ;; Remove typically prefixes of mailing lists. + (when (string-match + "^\\(\\[[^]]*[0-9]+\\]\\|([^)]*[0-9]+)\\)\\s-*" s) + (setq s (substring s (match-end 0)))) + (when (string-match + "^\\(Re\\(\\^?\\([0-9]+\\|\\[[0-9]+\\]\\)\\)?:\\s-*\\)+" s) + (setq s (substring s (match-end 0)))) + (when (string-match "\\s-*(\\(re\\|was\\)\\b" s) + (setq s (substring s 0 (match-beginning 0)))) + s))))) + +(defun gnus-namazu/get-current-from () + (and gnus-namazu/read-query-original-buffer + (bufferp gnus-namazu/read-query-original-buffer) + (with-current-buffer gnus-namazu/read-query-original-buffer + (when (eq major-mode 'gnus-summary-mode) + (cadr (mail-extract-address-components + (mail-header-from + (gnus-summary-article-header)))))))) + +(defun gnus-namazu/get-current-to () + (and gnus-namazu/read-query-original-buffer + (bufferp gnus-namazu/read-query-original-buffer) + (with-current-buffer gnus-namazu/read-query-original-buffer + (when (eq major-mode 'gnus-summary-mode) + (cadr (mail-extract-address-components + (cdr (assq 'To (mail-header-extra + (gnus-summary-article-header)))))))))) + +(defmacro gnus-namazu/minibuffer-prompt-end () + (if (fboundp 'minibuffer-prompt-end) + '(minibuffer-prompt-end) + '(point-min))) + +(defun gnus-namazu/message (string &rest arguments) + (let* ((s1 (concat + gnus-namazu/read-query-prompt + (buffer-substring (gnus-namazu/minibuffer-prompt-end) + (point-max)))) + (s2 (apply (function format) string arguments)) + (w (- (window-width) + (string-width s1) + (string-width s2) + 1))) + (message (if (>= w 0) + (concat s1 (make-string w ?\ ) s2) + s2)) + (if (sit-for 0.3) (message s1)) + s2)) + +(defun gnus-namazu/complete-query () + (interactive) + (let ((pos (point))) + (cond + ((and (re-search-backward "\\+\\([-a-z]*\\)" nil t) + (= pos (match-end 0))) + (let* ((partial (match-string 1)) + (completions + (all-completions + partial + (mapcar 'list gnus-namazu-field-keywords)))) + (cond + ((null completions) + (gnus-namazu/message "No completions of %s" partial)) + ((= 1 (length completions)) + (goto-char (match-beginning 1)) + (delete-region (match-beginning 1) (match-end 1)) + (insert (car completions) ":") + (setq pos (point)) + (gnus-namazu/message "Completed")) + (t + (let ((x (try-completion partial (mapcar 'list completions)))) + (if (string= x partial) + (if (and (eq last-command + 'gnus-namazu/field-keyword-completion) + completion-auto-help) + (with-output-to-temp-buffer "*Completions*" + (display-completion-list completions)) + (gnus-namazu/message "Sole completion")) + (goto-char (match-beginning 1)) + (delete-region (match-beginning 1) (match-end 1)) + (insert x) + (setq pos (point)))))))) + ((and (looking-at "\\+subject:") + (= pos (match-end 0))) + (let ((s (gnus-namazu/get-current-subject))) + (when s + (goto-char pos) + (insert "\"" s "\"") + (setq pos (point))))) + ((and (looking-at "\\+from:") + (= pos (match-end 0))) + (let ((f (gnus-namazu/get-current-from))) + (when f + (goto-char pos) + (insert "\"" f "\"") + (setq pos (point))))) + ((and (looking-at "\\+to:") + (= pos (match-end 0))) + (let ((to (gnus-namazu/get-current-to))) + (when to + (goto-char pos) + (insert "\"" to "\"") + (setq pos (point)))))) + (goto-char pos))) + +(defvar gnus-namazu/read-query-map + (let ((keymap (copy-keymap minibuffer-local-map))) + (define-key keymap "\t" 'gnus-namazu/complete-query) + keymap)) + +(defun gnus-namazu/read-query (prompt &optional initial) + (let ((gnus-namazu/read-query-original-buffer (current-buffer)) + (gnus-namazu/read-query-prompt prompt)) + (unless initial + (when (setq initial (gnus-namazu/get-current-query)) + (setq initial (cons initial 0)))) + (read-from-minibuffer prompt initial gnus-namazu/read-query-map nil + 'gnus-namazu/read-query-history))) + +(defun gnus-namazu/highlight-words (query) + (with-temp-buffer + (insert " " query) + ;; Remove tokens for NOT search + (goto-char (point-min)) + (while (re-search-forward "[$B!!(B \t\r\f\n]+not[$B!!(B \t\r\f\n]+\ +\\([^$B!!(B \t\r\f\n\"{(/]+\\|\"[^\"]+\"\\|{[^}]+}\\|([^)]+)\\|/[^/]+/\\)+" nil t) + (delete-region (match-beginning 0) (match-end 0))) + ;; Remove tokens for Field search + (goto-char (point-min)) + (while (re-search-forward "[$B!!(B \t\r\f\n]+\\+[^$B!!(B \t\r\f\n:]+:\ +\\([^$B!!(B \t\r\f\n\"{(/]+\\|\"[^\"]+\"\\|{[^}]+}\\|([^)]+)\\|/[^/]+/\\)+" nil t) + (delete-region (match-beginning 0) (match-end 0))) + ;; Remove tokens for Regexp search + (goto-char (point-min)) + (while (re-search-forward "/[^/]+/" nil t) + (delete-region (match-beginning 0) (match-end 0))) + ;; Remove brackets, double quote, asterisk and operators + (goto-char (point-min)) + (while (re-search-forward "\\([(){}\"*]\\|\\b\\(and\\|or\\)\\b\\)" nil t) + (delete-region (match-beginning 0) (match-end 0))) + ;; Collect all keywords + (setq query nil) + (goto-char (point-min)) + (while (re-search-forward "[^$B!!(B \t\r\f\n]+" nil t) + (push (match-string 0) query)) + (when query + (let (en ja) + (dolist (q query) + (if (string-match "\\cj" q) + (push q ja) + (push q en))) + (append + (when en + (list (list (concat "\\b\\(" (regexp-opt en) "\\)\\b") + 0 0 'gnus-namazu-query-highlight-face))) + (when ja + (list (list (regexp-opt ja) + 0 0 'gnus-namazu-query-highlight-face)))))))) + +(defun gnus-namazu/truncate-article-list (articles) + (let ((hit (length articles))) + (when (and gnus-large-newsgroup + (> hit gnus-large-newsgroup)) + (let* ((cursor-in-echo-area nil) + (input (read-from-minibuffer + (format "\ +Too many articles were retrieved. How many articles (max %d): " + hit) + (cons (number-to-string gnus-large-newsgroup) 0)))) + (unless (string-match "\\`[ \t]*\\'" input) + (setcdr (nthcdr (min (1- (string-to-number input)) hit) articles) + nil))))) + articles) + +;;;###autoload +(defun gnus-namazu-search (groups query) + "Search QUERY through GROUPS with Namazu, +and make a virtual group contains its results." + (interactive + (list + (gnus-namazu/get-target-groups) + (gnus-namazu/read-query "Enter query: "))) + (gnus-namazu/setup) + (let ((articles (gnus-namazu/search groups query))) + (if articles + (let ((real-groups groups) + (vgroup + (apply (function format) + "nnvirtual:namazu-search?query=%s&groups=%s&id=%d%d%d" + query + (if groups (mapconcat 'identity groups ",") "ALL") + (current-time)))) + (gnus-namazu/truncate-article-list articles) + (unless real-groups + (dolist (a articles) + (add-to-list 'real-groups (gnus-namazu/article-group a)))) + ;; Generate virtual group which includes all results. + (when (fboundp 'gnus-group-decoded-name) + (setq vgroup + (encode-coding-string vgroup gnus-namazu-coding-system))) + (setq vgroup + (gnus-group-read-ephemeral-group + vgroup + `(nnvirtual ,vgroup + (nnvirtual-component-groups ,real-groups) + (gnus-namazu-target-groups ,groups) + (gnus-namazu-current-query ,query)) + t (cons (current-buffer) (current-window-configuration)) t)) + (when gnus-namazu-query-highlight + (gnus-group-set-parameter vgroup 'highlight-words + (gnus-namazu/highlight-words query))) + ;; Generate new summary buffer which contains search results. + (gnus-group-read-group + t t vgroup + (sort (delq nil ;; Ad-hoc fix, to avoid wrong-type-argument error. + (mapcar + (lambda (a) + (nnvirtual-reverse-map-article + (gnus-namazu/article-group a) + (gnus-namazu/article-number a))) + articles)) + '<))) + (message "No entry.")))) + +(defmacro gnus-namazu/lock-file-name (&optional directory) + `(expand-file-name "NMZ.lock2" ,directory)) + +(defmacro gnus-namazu/status-file-name (&optional directory) + `(expand-file-name "NMZ.status" ,directory)) + +(defmacro gnus-namazu/index-file-name (&optional directory) + `(expand-file-name "NMZ.i" ,directory)) + +(defun gnus-namazu/mknmz-cleanup (directory) + (let ((lockfile (gnus-namazu/lock-file-name directory))) + (when (file-exists-p lockfile) + (delete-file lockfile) + (dolist (tmpfile (directory-files directory t "\\`NMZ\\..*\\.tmp\\'" t)) + (delete-file tmpfile))))) + +;;;###autoload +(defun gnus-namazu-create-index (directory &optional target-directories force) + "Create index under DIRECTORY." + (interactive + (list + (if (and current-prefix-arg (> (length gnus-namazu-index-directories) 1)) + (completing-read "Directory: " + (mapcar 'list gnus-namazu-index-directories) nil t) + (gnus-namazu/default-index-directory)) + nil t)) + (setq directory (file-name-as-directory (expand-file-name directory))) + (unless target-directories + (setq target-directories + (delq nil + (mapcar (lambda (dir) + (when (file-directory-p dir) dir)) + (append + (mapcar 'gnus-namazu/server-directory + (gnus-namazu/indexed-servers)) + (list + (expand-file-name gnus-cache-directory) + (expand-file-name gnus-agent-directory))))))) + (if (file-exists-p (gnus-namazu/lock-file-name directory)) + (when force + (error "Found lock file: %s" (gnus-namazu/lock-file-name directory))) + (with-current-buffer + (get-buffer-create (concat " *mknmz*" directory)) + (erase-buffer) + (unless (file-directory-p directory) + (make-directory directory t)) + (setq default-directory directory) + (let ((args (append gnus-namazu-make-index-arguments + target-directories))) + (insert "% " gnus-namazu-make-index-command " " + (mapconcat 'identity args " ") "\n") + (goto-char (point-max)) + (when force + (pop-to-buffer (current-buffer))) + (message "Make index at %s..." directory) + (unwind-protect + (apply 'call-process gnus-namazu-make-index-command nil t t args) + (gnus-namazu/mknmz-cleanup directory)) + (message "Make index at %s...done" directory) + (unless force + (kill-buffer (current-buffer))))) + (gnus-namazu/make-directory-table t))) + +(defun gnus-namazu/lapse-seconds (start end) + "Return lapse seconds from START to END. +START and END are lists which represent time in Emacs-style." + (+ (* (- (car end) (car start)) 65536) + (cadr end) + (- (cadr start)))) + +(defun gnus-namazu/index-old-p (directory) + "Return non-nil value when the index under the DIRECTORY is older +than the period that is set to `gnus-namazu-index-update-interval'" + (let ((file (gnus-namazu/index-file-name directory))) + (or (not (file-exists-p file)) + (and (integerp gnus-namazu-index-update-interval) + (>= (gnus-namazu/lapse-seconds + (nth 5 (file-attributes file)) + (current-time)) + gnus-namazu-index-update-interval))))) + +(defvar gnus-namazu/update-directories nil) +(defvar gnus-namazu/update-process nil) + +(defun gnus-namazu/update-p (directory &optional force) + "Return the DIRECTORY when the index undef the DIRECTORY should be updated." + (setq directory (file-name-as-directory (expand-file-name directory))) + (labels ((error-message (format &rest args) + (apply (if force 'error 'message) format args) + nil)) + (if gnus-namazu/update-process + (error-message "%s" "Can not run two update processes simultaneously") + (and (or force + (gnus-namazu/index-old-p directory)) + (let ((status-file (gnus-namazu/status-file-name directory))) + (or (file-exists-p status-file) + (error-message "Can not find status file: %s" status-file))) + (let ((lock-file (gnus-namazu/lock-file-name directory))) + (or (not (file-exists-p lock-file)) + (error-message "Found lock file: %s" lock-file))) + directory)))) + +;;;###autoload +(defun gnus-namazu-update-index (directory &optional force) + "Update the index under the DIRECTORY." + (interactive + (list + (if (and current-prefix-arg (> (length gnus-namazu-index-directories) 1)) + (completing-read "Directory: " + (mapcar 'list gnus-namazu-index-directories) nil t) + (gnus-namazu/default-index-directory)) + t)) + (when (setq directory (gnus-namazu/update-p directory force)) + (with-current-buffer (get-buffer-create (concat " *mknmz*" directory)) + (buffer-disable-undo) + (erase-buffer) + (unless (file-directory-p directory) + (make-directory directory t)) + (setq default-directory directory) + (let ((proc (start-process gnus-namazu-make-index-command + (current-buffer) + gnus-namazu-make-index-command + (format "--update=%s" directory)))) + (if (processp proc) + (prog1 (setq gnus-namazu/update-process proc) + (process-kill-without-query proc) + (set-process-sentinel proc 'gnus-namazu/update-sentinel) + (add-hook 'kill-emacs-hook 'gnus-namazu-stop-update) + (message "Update index at %s..." directory)) + (goto-char (point-min)) + (if (re-search-forward "^ERROR:.*$" nil t) + (progn + (pop-to-buffer (current-buffer)) + (funcall (if force 'error 'message) + "Update index at %s...%s" directory (match-string 0))) + (kill-buffer (current-buffer)) + (funcall (if force 'error 'message) + "Can not start %s" gnus-namazu-make-index-command)) + nil))))) + +;;;###autoload +(defun gnus-namazu-update-all-indices (&optional force) + "Update all indices which is set to `gnus-namazu-index-directories'." + (interactive (list t)) + (gnus-namazu-update-indices gnus-namazu-index-directories force)) + +(defun gnus-namazu-update-indices (&optional directories force) + (when (setq directories + (delq nil (mapcar (lambda (d) + (gnus-namazu/update-p d force)) + directories))) + (setq gnus-namazu/update-directories (cons force (cdr directories))) + (gnus-namazu-update-index (car directories) force))) + +(defun gnus-namazu/update-sentinel (process event) + (let ((buffer (process-buffer process))) + (when (buffer-name buffer) + (with-current-buffer buffer + (gnus-namazu/mknmz-cleanup default-directory) + (goto-char (point-min)) + (cond + ((re-search-forward "^ERROR:.*$" nil t) + (pop-to-buffer (current-buffer)) + (message "Update index at %s...%s" + default-directory (match-string 0)) + (setq gnus-namazu/update-directories nil)) + ((and (eq 'exit (process-status process)) + (zerop (process-exit-status process))) + (message "Update index at %s...done" default-directory) + (unless (or debug-on-error debug-on-quit) + (kill-buffer buffer))))))) + (setq gnus-namazu/update-process nil) + (unless (gnus-namazu-update-indices (cdr gnus-namazu/update-directories) + (car gnus-namazu/update-directories)) + (gnus-namazu/make-directory-table t))) + +;;;###autoload +(defun gnus-namazu-stop-update () + "Stop the running indexer of Namazu." + (interactive) + (setq gnus-namazu/update-directories nil) + (and gnus-namazu/update-process + (processp gnus-namazu/update-process) + (kill-process gnus-namazu/update-process))) + +(let (current-load-list) + (defadvice gnus-offer-save-summaries + (before gnus-namazu-kill-summary-buffers activate compile) + "Advised by `gnus-namazu'. +In order to avoid annoying questions, kill summary buffers which +generated by `gnus-namazu' itself before `gnus-offer-save-summaries' +is called." + (let ((buffers (buffer-list))) + (while buffers + (when (with-current-buffer (car buffers) + (and (eq major-mode 'gnus-summary-mode) + (gnus-ephemeral-group-p gnus-newsgroup-name) + (string-match gnus-namazu/group-name-regexp + gnus-newsgroup-name))) + (kill-buffer (car buffers))) + (setq buffers (cdr buffers)))))) + +;;;###autoload +(defun gnus-namazu-insinuate () + (add-hook + 'gnus-group-mode-hook + (lambda () + (define-key gnus-group-mode-map "\C-c\C-n" 'gnus-namazu-search))) + (add-hook + 'gnus-summary-mode-hook + (lambda () + (define-key gnus-summary-mode-map "\C-c\C-n" 'gnus-namazu-search)))) + +(provide 'gnus-namazu) + +;;; arch-tag: a6814a35-593a-4563-8157-a2b762c29ed8 +;; gnus-namazu.el ends here. diff --git a/contrib/gpg-ring.el b/contrib/gpg-ring.el index cac19ab..10adec5 100644 --- a/contrib/gpg-ring.el +++ b/contrib/gpg-ring.el @@ -7,8 +7,6 @@ ;; Keywords: crypto ;; Created: 2000-04-28 -;; $Id: gpg-ring.el,v 1.1.1.3 2004-01-05 00:12:59 yamaoka Exp $ - ;; This file is NOT (yet?) part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify @@ -480,4 +478,5 @@ used." (provide 'gpg-ring) +;;; arch-tag: a4c5b2d1-aff0-4ab6-96e9-267727226c2d ;;; gpg-ring.el ends here diff --git a/contrib/gpg.el b/contrib/gpg.el index a861eac..c83a4eb 100644 --- a/contrib/gpg.el +++ b/contrib/gpg.el @@ -7,8 +7,6 @@ ;; Keywords: crypto ;; Created: 2000-04-15 -;; $Id: gpg.el,v 1.1.1.5 2004-01-05 00:12:59 yamaoka Exp $ - ;; This file is NOT (yet?) part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify @@ -108,7 +106,9 @@ ;;; Code: -(require 'timer) +(if (featurep 'xemacs) + (require 'timer-funcs) + (require 'timer)) (eval-when-compile (require 'cl)) (eval-and-compile @@ -117,6 +117,21 @@ 'point-at-eol 'line-end-position))) +;; itimer/timer compatibility +(eval-and-compile + (if (featurep 'xemacs) + (progn + (defalias 'gpg-cancel-timer 'delete-itimer) + (defalias 'gpg-timer-activate 'activate-itimer) + (defalias 'gpg-timer-create 'make-itimer) + (defalias 'gpg-timer-set-function 'set-itimer-function) + (defalias 'gpg-timer-set-time 'set-itimer-value)) + (defalias 'gpg-cancel-timer 'cancel-timer) + (defalias 'gpg-timer-activate 'timer-activate) + (defalias 'gpg-timer-create 'timer-create) + (defalias 'gpg-timer-set-function 'timer-set-function) + (defalias 'gpg-timer-set-time 'timer-set-time))) + ;;;; Customization: ;;; Customization: Groups: @@ -781,7 +796,7 @@ evaluates BODY, like `progn'. If BODY evaluates to `nil' (or ;;; Passphrase handling: (defvar gpg-passphrase-timer - (timer-create) + (gpg-timer-create) "This timer will clear the passphrase cache periodically.") (defvar gpg-passphrase @@ -801,7 +816,7 @@ evaluates BODY, like `progn'. If BODY evaluates to `nil' (or "Forget stored passphrase." (interactive) (when gpg-passphrase - (cancel-timer gpg-passphrase-timer) + (gpg-cancel-timer gpg-passphrase-timer) (setq gpg-passphrase-timer nil) (gpg-passphrase-clear-string gpg-passphrase) (setq gpg-passphrase nil))) @@ -811,14 +826,14 @@ evaluates BODY, like `progn'. If BODY evaluates to `nil' (or Updates the timeout for clearing the cache to `gpg-passphrase-timeout'." (unless (equal gpg-passphrase-timeout 0) (if (null gpg-passphrase-timer) - (setq gpg-passphrase-timer (timer-create))) - (timer-set-time gpg-passphrase-timer - (timer-relative-time (current-time) - gpg-passphrase-timeout)) - (timer-set-function gpg-passphrase-timer 'gpg-passphrase-forget) + (setq gpg-passphrase-timer (gpg-timer-create))) + (gpg-timer-set-time gpg-passphrase-timer + (timer-relative-time (current-time) + gpg-passphrase-timeout)) + (gpg-timer-set-function gpg-passphrase-timer 'gpg-passphrase-forget) (unless (and (fboundp 'itimer-live-p) (itimer-live-p gpg-passphrase-timer)) - (timer-activate gpg-passphrase-timer)) + (gpg-timer-activate gpg-passphrase-timer)) (setq gpg-passphrase passphrase)) passphrase) @@ -1321,4 +1336,5 @@ before point.") (provide 'gpg) +;;; arch-tag: c972455d-9bc5-4de1-9dc7-4f494d63053b ;;; gpg.el ends here diff --git a/contrib/nnir.el b/contrib/nnir.el index 52a85b8..331662d 100644 --- a/contrib/nnir.el +++ b/contrib/nnir.el @@ -298,9 +298,6 @@ ;;; Setup Code: -(defconst nnir-version "$Id: nnir.el,v 1.1.1.3 2004-05-02 00:16:48 yamaoka Exp $" - "Version of NNIR.") - (require 'cl) (require 'nnoo) (require 'gnus-group) @@ -1556,3 +1553,5 @@ The Gnus backend/server information is added." ;; The end. (provide 'nnir) + +;;; arch-tag: 9b3fecf8-4397-4bbb-bf3c-6ac3cbbc6664 diff --git a/contrib/ssl.el b/contrib/ssl.el index 98bc048..47da047 100644 --- a/contrib/ssl.el +++ b/contrib/ssl.el @@ -1,7 +1,4 @@ ;;; ssl.el --- ssl functions for emacsen without them builtin -;; Author: $Author: yamaoka $ -;; Created: $Date: 2004-01-05 00:12:59 $ -;; Version: $Revision: 1.1.1.3 $ ;; Keywords: comm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -199,3 +196,5 @@ specifying a port number to connect to." proc)) (provide 'ssl) + +;;; arch-tag: 659fae92-1c67-4055-939f-32153c2f5114 diff --git a/contrib/ucs-tables.el b/contrib/ucs-tables.el index 0255053..43644bf 100644 --- a/contrib/ucs-tables.el +++ b/contrib/ucs-tables.el @@ -2476,4 +2476,5 @@ Interactively, prompts for a hex string giving the code." (provide 'ucs-tables) +;;; arch-tag: b497e22b-7fe1-486a-9352-e2d7f7d76a76 ;;; ucs-tables.el ends here diff --git a/contrib/vcard.el b/contrib/vcard.el index 4e89d7a..39d6285 100644 --- a/contrib/vcard.el +++ b/contrib/vcard.el @@ -7,8 +7,6 @@ ;; Keywords: extensions ;; Created: 1997-09-27 -;; $Id: vcard.el,v 1.1.1.4 2004-01-05 00:12:59 yamaoka Exp $ - ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) @@ -307,4 +305,5 @@ presentation buffer." (provide 'vcard) +;;; arch-tag: 64df032f-e54c-4cfb-9e8c-8bead284f61b ;;; vcard.el ends here diff --git a/contrib/xml.el b/contrib/xml.el index a495721..2357779 100644 --- a/contrib/xml.el +++ b/contrib/xml.el @@ -498,4 +498,5 @@ The first line indented with INDENT-STRING." (provide 'xml) +;; arch-tag: 5864b283-5a68-4b59-a20d-36a72b353b9b ;;; xml.el ends here diff --git a/etc/.cvsignore b/etc/.cvsignore index 0083161..f3c7a7c 100644 --- a/etc/.cvsignore +++ b/etc/.cvsignore @@ -1,5 +1 @@ Makefile -gnus -message -smilies -sounds diff --git a/etc/Makefile.in b/etc/Makefile.in index 8ef7da1..517bfad 100644 --- a/etc/Makefile.in +++ b/etc/Makefile.in @@ -13,8 +13,6 @@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ SHELL = /bin/sh -all: - install: $(SHELL) $(top_srcdir)/mkinstalldirs $(etcdir) cd $(srcdir) \ @@ -22,15 +20,15 @@ install: echo " $(INSTALL_DATA) $$p $(etcdir)/$$p"; \ $(INSTALL_DATA) $$p $(etcdir)/$$p; \ done - $(SHELL) $(top_srcdir)/mkinstalldirs $(etcdir)/gnus + $(SHELL) $(top_srcdir)/mkinstalldirs $(etcdir)/images/gnus cd $(srcdir) \ - && for p in gnus/*.xpm gnus/*.pbm gnus/*.xbm gnus/x-splash; do \ + && for p in images/gnus/*.xpm images/gnus/*.pbm images/gnus/*.xbm images/gnus/x-splash; do \ echo " $(INSTALL_DATA) $$p $(etcdir)/$$p"; \ $(INSTALL_DATA) $$p $(etcdir)/$$p; \ done - $(SHELL) $(top_srcdir)/mkinstalldirs $(etcdir)/smilies + $(SHELL) $(top_srcdir)/mkinstalldirs $(etcdir)/images/smilies cd $(srcdir) \ - && for p in smilies/*.pbm smilies/*.xpm; do \ + && for p in images/smilies/*.pbm images/smilies/*.xpm; do \ echo " $(INSTALL_DATA) $$p $(etcdir)/$$p"; \ $(INSTALL_DATA) $$p $(etcdir)/$$p; \ done @@ -38,15 +36,16 @@ install: uninstall: rm -f $(etcdir)/gnus-tut.txt cd $(srcdir) \ - && for p in gnus/*.xpm gnus/*.pbm gnus/*.xbm gnus/x-splash; do \ + && for p in images/gnus/*.xpm images/gnus/*.pbm images/gnus/*.xbm images/gnus/x-splash; do \ rm -f "$(etcdir)/$$p"; \ done - rmdir $(etcdir)/gnus 2> /dev/null || true + rmdir $(etcdir)/images/gnus 2> /dev/null || true cd $(srcdir) \ - && for p in smilies/*.pbm smilies/*.xpm; do \ + && for p in images/smilies/*.pbm images/smilies/*.xpm; do \ rm -f "$(etcdir)/$$p"; \ done - rmdir $(etcdir)/smilies 2> /dev/null || true + rmdir $(etcdir)/images/smilies 2> /dev/null || true + rmdir $(etcdir)/images 2> /dev/null || true Makefile: $(srcdir)/Makefile.in ../config.status cd .. \ diff --git a/etc/gnus/gnus-setup.ast b/etc/gnus/gnus-setup.ast new file mode 100644 index 0000000..4795a6f --- /dev/null +++ b/etc/gnus/gnus-setup.ast @@ -0,0 +1,43 @@ +@title Configuring Gnus for the first time + +@node What do you want to do with Gnus? +@variable outbound (:radio ((item :tag "Send mail via sendmail" "sendmail") (item :tag "Send mail via SMTP" "smtp"))) "sendmail" +@variable backends (:set ((item :tag "Read news via NNTP" "nntp") (item :tag"Sacrifice a goat" "goat") (item :tag "Read mail, store it locally" "nnml") (item :tag "Read mail and store it on an IMAP server" "nnimap"))) (list "nnml") +@result primary-mail-selections (list backends outbound) + +@text +Welcome to Gnus. You need to tell us what you want to do with Gnus +before we go on to specific configurations. + +Choose the tasks you want to set up: +@variable{backends} + +Choose the method Gnus will use to send mail: +@variable{outbound} + +@end text + +@next (member "nnml" backends) "Setting up local mail storage (nnml)" +@next (member "nntp" backends) "Setting up a NNTP server" + +@node Setting up local mail storage (nnml) +@variable mechanism (:radio ((item :tag "Get mail from your Unix mbox" "mbox") (item :tag "Use POP3 to retrieve mail" "pop3"))) "mbox" +@result nnml-mechanism (list mechanism) +@text +You are setting up local mail storage, using the nnml backend in Gnus terms. + +Your mail can be downloaded into Gnus in several ways, choose one: +@variable{mechanism} + +@end text + +@node Setting up a NNTP server + +@text +TODO: this will be a real link. +Run M-x assistant and use the news-server.ast file as input. +@end text + +@ignore + arch-tag: 6b7b200b-9169-4b44-8b32-b73773fa71af +@end ignore diff --git a/etc/gnus/news-server.ast b/etc/gnus/news-server.ast new file mode 100644 index 0000000..d607be5 --- /dev/null +++ b/etc/gnus/news-server.ast @@ -0,0 +1,58 @@ +@title Configuring Gnus for reading news + + +@node Setting up the news server name and port number +@variable server :string (gnus-getenv-nntpserver) +@variable port :number 119 +@validate (assistant-validate-connect-to-server server port) +@result gnus-select-method (list 'nntp server (list 'nntp-server port)) +@text +Usenet news is usually read from your Internet service prodider's news +server. If you don't know the name of this server, contact your ISP. + +As a guess, the name of the server might be news.yourisp.com. + +Server name: @variable{server} +Port number: @variable{port} +@end text +@next t "User name and password" + + +@node User name and password +@type interstitial +@next +(if (assistant-password-required-p) + "Enter user name and password" + "Want user name and password?") +@end next + + +@node Want user name and password? +@variable passwordp (:radio ((item "Yes") (item "No"))) "No" +@text +Some news servers require that you enter a user name and a password. +It doesn't look like your news server is one of them. + +Do you want to enter user name and password anyway? + +@variable{passwordp} + +@end text + +@next (equal passwordp "No") finish +@next (not (equal passwordp "No")) "Enter user name and password" + + +@node Enter user name and password +@variable user-name :string (user-login-name) +@variable password :password (or (assistant-authinfo-data server port 'password) "") +@text + +It looks like your news server requires you to enter a user name +and a password: + +User name: @variable{user-name} +Password: @variable{user-name} + +@end text + diff --git a/etc/images/gnus/bar.xbm b/etc/images/gnus/bar.xbm new file mode 100644 index 0000000..e61300a --- /dev/null +++ b/etc/images/gnus/bar.xbm @@ -0,0 +1,7 @@ +#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}; diff --git a/etc/images/gnus/bar.xpm b/etc/images/gnus/bar.xpm new file mode 100644 index 0000000..2985065 --- /dev/null +++ b/etc/images/gnus/bar.xpm @@ -0,0 +1,54 @@ +/* XPM */ +static char * picon-bar_xpm[] = { +"6 48 2 1", +" c white s background", +". c black", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. "}; diff --git a/etc/images/gnus/catchup.pbm b/etc/images/gnus/catchup.pbm new file mode 100644 index 0000000000000000000000000000000000000000..3fc571bdf8059402f3059eb7f574678c3d0cbdaa GIT binary patch literal 81 zcmWGA;W9E&Ff!p{fC0t>3=9sUObU#lj)4nStqKTrVff`F$l{{J&?Ukc%EYiafKhM; YQ-^D*Lx-XUYY7X}0vQGdd6;en0AXjG+z;K|m6u07U+0 PV7$)2@Q;BZ1Y`sNnq~{( literal 0 HcmV?d00001 diff --git a/etc/images/gnus/cu-exit.xpm b/etc/images/gnus/cu-exit.xpm new file mode 100644 index 0000000..1723622 --- /dev/null +++ b/etc/images/gnus/cu-exit.xpm @@ -0,0 +1,31 @@ +/* XPM */ +static char * cu_exit_xpm[] = { +"24 24 4 1", +" c None", +". c #000000000000", +"X c #FFFFFFFFFFFF", +"o c #999999999999", +" ", +" ", +" ", +" ", +" ", +" ..... ", +" .. .XXX. ", +" ..X..XXXX... ", +" .XXXX.XXXX.X... ", +" ..XXXX.XXX.XXX.. ", +" .XXX.......... ", +" .XXX.XXX.XXX.. ", +" .XX.XXX.XXX. ", +" .XX.XXX.XX.. ", +" ............ ", +" .X.X.X.X.. ", +"ooooooo..........ooooooo", +"ooooooo.X.X.X.X.oooooooo", +"ooooooo.........oooooooo", +"ooooooo..X...X..oooooooo", +"ooooooo...X.X...oooooooo", +"ooooooo........ooooooooo", +"ooooooooo.....oooooooooo", +"oooooooooooooooooooooooo"}; diff --git a/etc/images/gnus/describe-group.pbm b/etc/images/gnus/describe-group.pbm new file mode 100644 index 0000000000000000000000000000000000000000..de7bf1104317ae6686562b822f04b5feb493f14c GIT binary patch literal 81 zcmWGA;W9E&Ff!o^4Gq;;)D;ryy6=@js0hO(4u;S`7L5fAq5%xMek!;IFf=(pMM47@ f_PkIC4Pl&>$pF-q_oyp0F!cZL^`Rl5pFC6m%K{qn literal 0 HcmV?d00001 diff --git a/etc/images/gnus/describe-group.xpm b/etc/images/gnus/describe-group.xpm new file mode 100644 index 0000000..b4a6f42 --- /dev/null +++ b/etc/images/gnus/describe-group.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char * describe_group_xpm[] = { +"24 24 5 1", +". c None", +" c #000000000000", +"o c #FFFFF5F5ACAC", +"+ c #E1E1E0E0E0E0", +"@ c #C7C7C6C6C6C6", +"........................", +"........................", +".................oooo...", +" .. .. .. .. .. oo oo o.", +"..............oooooooooo", +".............ooooooooooo", +" .. .. .. .. oo oo oo oo", +"............oooooooooooo", +"............oooooooooooo", +" .. .. .. .. oo oo oo oo", +"............oooooooooooo", +"............oooooooooooo", +" .. .. .. .. oo oo oo oo", +"............oooooooooooo", +"..... ...oooooooooooo", +" .. ++ .. .o oo oo oo", +"... @@@+ ....ooooooooo", +"... @ ....oooooooo.", +" . . .. .. .. ..", +". ..............", +" ................", +" .. .. .. .. .. ..", +" ..................", +" ...................."}; diff --git a/etc/images/gnus/exit-gnus.pbm b/etc/images/gnus/exit-gnus.pbm new file mode 100644 index 0000000000000000000000000000000000000000..32ad0e0ebe9673bfbefa86e1d3e9132e2a516521 GIT binary patch literal 81 zcmWGA;W9E&Ff!p{aAaUmZV)JR;FJF$8XCf2$H01(f$!}B!O#GvEex(DA#7?4p`w9W lObjj}j(QCZqN0I33=E;6uK5id<)wo5ySzj1hB7cP008Y?6KDVc literal 0 HcmV?d00001 diff --git a/etc/images/gnus/exit-gnus.xpm b/etc/images/gnus/exit-gnus.xpm new file mode 100644 index 0000000..534f3c2 --- /dev/null +++ b/etc/images/gnus/exit-gnus.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static char * exit_gnus_xpm[] = { +"24 24 6 1", +" c None", +". c #8686ADAD7D7D", +"X c #919187876969", +"o c #C2C2B9B99C9C", +"O c #A8A8F0F0ECEC", +"+ c #EFEFEFEFEFEF", +" ", +" .... . ", +" .. .. . ", +" ............. ", +" . . . .... ", +" ............. ", +" .............. .. ", +" . . .......... . ", +" .XXXX... .. ", +" o.XXX. . .. ", +" oo.X. .. ... ", +" ooX. . ... ", +" oXo. .. ", +" ooX . . ", +" ooX ", +"OOOOoXXOOOOOOOOOOOOOOOOO", +"OOOoXoXOOOOOOOOOOOOOOOOO", +"OOOooXXOOOO+OOOOOOOOOOOO", +"O+OoooXOO+OOO+OO+OOO+OOO", +"OXXoXoXoXOO++O++OO++OO+O", +"XXXXXXXXXXXX+OOOOOOOOOOO", +"XXXXXXXXXXXXXX+O++OO++OO", +"XXXXXXXXXXXXXXXXOOOOOOOO", +"O++O++++O+OO++OOOO++OOO+"}; diff --git a/etc/images/gnus/exit-summ.pbm b/etc/images/gnus/exit-summ.pbm new file mode 100644 index 0000000000000000000000000000000000000000..d0192310607c6f40033068a55cc5c4c7c244f866 GIT binary patch literal 81 zcmWGA;W9E&Ff!p1aAaWsgNFYPm{|`nF+LD*Ji@^FfRXXQB*q7fKoQ;t!j4CP;tY%j W8W@3U9GHw6L_=L5x+ZZdKo|ff#}ZBe literal 0 HcmV?d00001 diff --git a/etc/images/gnus/exit-summ.xpm b/etc/images/gnus/exit-summ.xpm new file mode 100644 index 0000000..5234ccb --- /dev/null +++ b/etc/images/gnus/exit-summ.xpm @@ -0,0 +1,30 @@ +/* XPM */ +static char * exit_summ_xpm[] = { +"24 24 3 1", +". c None", +" c #000000000000", +"X c #E1E1E0E0E0E0", +" .. .. .. .. .. .. .. ..", +"........................", +"........................", +" .. .. .. ..", +"...... XXXX .....", +"...... XXXXXXX .....", +" .. .. XX XX XX .. ..", +"...... XXXXXXXX .....", +"...... XXXXXXX .....", +" .. .. X XX .. ..", +"...... XXXX .....", +"...... XXXX .....", +" .. .. X XXXXX .. ..", +"...... XXXXXXX .....", +"...... XXXXX XX .....", +" .. .. X XXXXX .. ..", +"...... XXXXX .....", +"...... X .....", +" .. . . .. ..", +"........................", +"........................", +" .. .. .. .. .. .. .. ..", +"........................", +"........................"}; diff --git a/etc/images/gnus/followup.pbm b/etc/images/gnus/followup.pbm new file mode 100644 index 0000000000000000000000000000000000000000..61be114096b3eb182aa962728a44e8bc45bfb176 GIT binary patch literal 81 zcmWGA;W9E&Ff!p1WE5avU}69QK8C*v$E&(A-7Zex;1h_N| h1Y86h8aNzSBovqo0vH_x7#VTB28I|0Q4R(U5e7m1|F2y`LKzqs0K2vjGynhq literal 0 HcmV?d00001 diff --git a/etc/images/gnus/kill-group.xpm b/etc/images/gnus/kill-group.xpm new file mode 100644 index 0000000..1ee4fa4 --- /dev/null +++ b/etc/images/gnus/kill-group.xpm @@ -0,0 +1,30 @@ +/* XPM */ +static char * kill_group_xpm[] = { +"24 24 3 1", +". c None", +"o c #000000000000", +"+ c #9A9A6C6C4E4E", +"o..o..o..o..o..o..o..o..", +"........................", +"........................", +"o..o..o..o..o..o..o..o..", +"........................", +"........................", +"o..o..o..o..++.o..o..o..", +".......++..++++.........", +"........++.+++..........", +"o..o..o.+++++..o..o..o..", +".........+++............", +".........++++...........", +"o..o..o.++++++.o..o..o..", +"........++.++++.........", +".......++...++++........", +"o..o...+.o...++o..o..o..", +"........................", +"........................", +"o..o..o..o..o..o..o..o..", +"........................", +"........................", +"o..o..o..o..o..o..o..o..", +"........................", +"........................"}; diff --git a/etc/images/gnus/mail-reply.pbm b/etc/images/gnus/mail-reply.pbm new file mode 100644 index 0000000000000000000000000000000000000000..9ca76596fb1dc23f14ce7fe6ee4085636e77bff3 GIT binary patch literal 81 zcmWGA;W9E&Ff!p{U}RumUckT-z+l6{=qkX>CBPygV6?!(Bp^i3*v$E&(A-7Zex;1h_N| j1Y86h8aNzSB-EKV1h_Z|cqj-2C`fQ9xUybhVQ>Hd!Ws;4 literal 0 HcmV?d00001 diff --git a/etc/images/gnus/next-ur.xpm b/etc/images/gnus/next-ur.xpm new file mode 100644 index 0000000..bea1328 --- /dev/null +++ b/etc/images/gnus/next-ur.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static char * next_ur_xpm[] = { +"24 24 8 1", +". c None", +" c #000000000000", +"X c #A5A5A5A59595", +"o c #C7C7C6C6C6C6", +"O c #FFFF00000000", +"+ c #9A9A6C6C4E4E", +"@ c #E1E1E0E0E0E0", +"# c #FFFFFFFFFFFF", +" .. .. .. .. .. .. .. ..", +"........................", +"............X...........", +" .. .. .. .XXX. .. .. ..", +".........XXooOX.........", +".......XXooo+O@X........", +" .. XXXoooo++@@@X. .. ..", +"....X@Xoooooo@@@X.......", +"....X@@Xooo@@@@@@X......", +" .. X@@XXoo@@@@@@@X.. ..", +"....X@@Xoo@@@@@@@@@X....", +"....X@Xo@@@XX@@@@@@oX...", +" .. oXoo@XXooO@@@@@@X ..", +"....oXoXXooo+OX@@@@Xo...", +"....XXXoooo++@@X@@Xo....", +" .. X@Xoooooo@@@XX .. ..", +"....X@@Xooo@@@@@@X......", +"....X@@XXoo@@@@@@@X.....", +" .. X@@Xoo@@@@@@@@@X. ..", +"....X@Xo@ @@@@@@@ X...", +"... oXoo ## @@ @@ ## ...", +" .. oXo #### @ #### ..", +".....oX #### @@@ #### ..", +".....oX@ ## @@@@X ## ..."}; diff --git a/etc/images/gnus/oort.xface b/etc/images/gnus/oort.xface new file mode 100644 index 0000000..6444b55 --- /dev/null +++ b/etc/images/gnus/oort.xface @@ -0,0 +1,3 @@ +X-Face: $BP*2z+\?fNM."!*~JsIgw(Y]n?WG!KMc;^jL$SLrt@X4%uMguO/$3HO<5@43P@[~'kE'fG + #YdP[sb6IJ5|Sm[z#9sI|)iJ})U5;Rt-?jI3i24zoJmonTV}kTVOm/5wMCnc3P~d#+BF1c&N6mdF{u + CE+<;lN!v~JRyR"q0d5<\y]faXpTC4,wpQ{=<==?LRA`}3qqIgr diff --git a/etc/images/gnus/post.pbm b/etc/images/gnus/post.pbm new file mode 100644 index 0000000000000000000000000000000000000000..577d6236bfd0412cf6e0ae63c26a949e292638af GIT binary patch literal 81 zcmWGA;W9E&Ff!p1WE5afU}69QK8C(E({?|3<|;w2Fwgb fj0^${4IF_D5)2Lnj*c!I>I@7rAbo)@B0v%Vy;usB literal 0 HcmV?d00001 diff --git a/etc/images/gnus/post.xpm b/etc/images/gnus/post.xpm new file mode 100644 index 0000000..7a3eaa5 --- /dev/null +++ b/etc/images/gnus/post.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static char * post_xpm[] = { +"24 24 8 1", +". c None", +" c #434343434343", +"X c #A5A5A5A59595", +"O c #000000000000", +"+ c #C7C7C6C6C6C6", +"@ c #FFFF00000000", +"# c #9A9A6C6C4E4E", +"$ c #E1E1E0E0E0E0", +"O..O..O..O..O..O..O..O..", +"........................", +"............X...........", +"O..O..O..O.XXX.O..O..O..", +".........XX++@X.........", +".......XX+++#@$X........", +"O..OXXX++++##$$$X.O..O..", +"....X$X++++++$$$X.......", +"....X$$X+++$$$$$$X......", +"O..OX$$XX++$$$$$$$X..O..", +"....X$$X++$$$$$$$$$X....", +"....X$X+$$$$$$$$$$$+X...", +"O..O+X++$$$$$$$$$$$$XO..", +"....+X+$$$$$$$$$$$$X+...", +".....+X$$$$$$$$$$$X+....", +"O..O.+X$$$$$$$$$XXO..O..", +"......+X$$$$$$$X++......", +"......+X$$$$$XX+........", +"O..O..O+X$$$X++O..O..O..", +".......+X$$X++..........", +"........+XX+............", +"O..O..O..O+.O..O..O..O..", +"........................", +"........................"}; diff --git a/etc/images/gnus/prev-ur.pbm b/etc/images/gnus/prev-ur.pbm new file mode 100644 index 0000000000000000000000000000000000000000..49389198bdfe19f91dada91a4525e35083e4c3df GIT binary patch literal 81 zcmWGA;W9E&Ff!p1WE5avU}69QK8C*v%E&(BI7iNeGvT$j$ d2>7x%G|X^d2~c2a2w-Fo03(nZh7cA82LRz}3_<_^ literal 0 HcmV?d00001 diff --git a/etc/images/gnus/prev-ur.xpm b/etc/images/gnus/prev-ur.xpm new file mode 100644 index 0000000..8013133 --- /dev/null +++ b/etc/images/gnus/prev-ur.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static char * prev_ur_xpm[] = { +"24 24 8 1", +". c None", +" c #000000000000", +"X c #A5A5A5A59595", +"o c #C7C7C6C6C6C6", +"O c #FFFF00000000", +"+ c #9A9A6C6C4E4E", +"@ c #E1E1E0E0E0E0", +"# c #FFFFFFFFFFFF", +" .. .. .. .. .. .. .. ..", +"........................", +"............X...........", +" .. .. .. .XXX. .. .. ..", +".........XXooOX.........", +".......XXooo+O@X........", +" .. XXXoooo++@@@X. .. ..", +"....X@Xoooooo@@@X.......", +"....X@@Xooo@@@@@@X......", +" .. X@@XXoo@@@@@@@X.. ..", +"....X@@Xo @@@@@@ X....", +"....X@Xo ## X @ ## X...", +" .. oXo #XXXoO@ #### ..", +"....oXoXXooo+OX #### ...", +"....XXXoooo++@@X ## ....", +" .. X@Xoooooo@@@X .. ..", +"....X@@Xooo@@@@@@X......", +"....X@@XXoo@@@@@@@X.....", +" .. X@@Xoo@@@@@@@@@X. ..", +"....X@Xo@@@@@@@@@@@@X...", +"... oXoo@@@@@@@@@@@@X...", +" .. oXo@@@@@@@@@@@@X....", +".....oX@@@@@@@@@@@X.....", +".....oX@@@@@@@@@@X......"}; diff --git a/etc/images/gnus/preview.xbm b/etc/images/gnus/preview.xbm new file mode 100644 index 0000000..a42e153 --- /dev/null +++ b/etc/images/gnus/preview.xbm @@ -0,0 +1,10 @@ +#define preview_width 24 +#define preview_height 24 +static char preview_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xc0,0x03,0x00,0x3e,0x06,0xf0,0x03,0x04,0x08,0x00,0x0a,0x78,0x00,0x09, + 0x88,0xf9,0x08,0x10,0xc6,0x10,0x10,0x3a,0x13,0x10,0x06,0x15,0x20,0x02,0x29, + 0x20,0x02,0x31,0x20,0xad,0x0f,0x40,0xf9,0x03,0xc0,0xb8,0x07,0x80,0x07,0x0e, + 0x80,0x01,0x1c,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00, + 0x00,0x00,0x39,0x00,0x00,0x00,0x08,0xc0,0x12,0x42,0x00,0x00,0x00,0x00,0x38, + 0x82,0x18,0x08,0x00,0x00,0x00 }; diff --git a/etc/images/gnus/preview.xpm b/etc/images/gnus/preview.xpm new file mode 100644 index 0000000..f5743f9 --- /dev/null +++ b/etc/images/gnus/preview.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static char *prev1[]={ +"24 24 6 1", +". c None", +"# c #000000", +"d c #46463e", +"a c #676663", +"c c #a8a7a3", +"b c #ebeae4", +"........................", +"........................", +"........................", +"........................", +"........................", +"..............####......", +".........#####abbc#.....", +"....#####acbbbbbbc#.....", +"...#acbbbbbbbbbbacc#....", +"...#baabbbbbbbbcacb#....", +"...#cbcaabbd##dacbb#....", +"....#bbbccdcbbcdabbc#...", +"....#bbbbdccaaccdacb#...", +"....#cbbb#abbbbb#bac#...", +".....#bbb#cbbbbc#bbac#..", +".....#bbbdcbbbbddbbc##..", +".....#cbccdcbbd#####....", +"......#babbd##dd##......", +"......#acbc###.####.....", +"......#aa##......###....", +".......##.........###...", +"...................##...", +"........................", +"........................"}; diff --git a/etc/images/gnus/receipt.xpm b/etc/images/gnus/receipt.xpm new file mode 100644 index 0000000..18caaf1 --- /dev/null +++ b/etc/images/gnus/receipt.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char * receipt_xpm[] = { +"24 24 5 1", +" c None", +". c #FFFFFFFFFFFF", +"X c #676766666363", +"o c #FFFF00000000", +"O c #AEAE3E3E4848", +" ", +" ", +" .. ", +" . ", +" . ", +" . ", +" .. ", +" Xooo .. ", +" Xoooooooo.. ", +" Xoooooooooooooo ... ", +" oooooooooooOOoo . ", +" ooooooooooOOOOo. ", +" oooooooooOO...o ", +" ooooooooooOOooo ", +" ooooooooooooooo ", +" ooooooooooooooo ", +" oooooooooooooo ", +" ooooooooooo ", +" ooooooo ", +" oooo ", +" oo ", +" ", +" ", +" "}; diff --git a/etc/images/gnus/reply-wo.pbm b/etc/images/gnus/reply-wo.pbm new file mode 100644 index 0000000000000000000000000000000000000000..def54da8ede20b0f152e8ff1fd0b7b9b40450b53 GIT binary patch literal 81 zcmWGA;W9E&Ff!p{fCD}T22lnEg$70k2c`}MQT75O3lG--7dypSuFft@$C?~`Sr~Gd c90gez8JJucTsRn%3K&Eb7}!EXLx5%g0Na@iO8@`> literal 0 HcmV?d00001 diff --git a/etc/images/gnus/reply-wo.xpm b/etc/images/gnus/reply-wo.xpm new file mode 100644 index 0000000..370678a --- /dev/null +++ b/etc/images/gnus/reply-wo.xpm @@ -0,0 +1,31 @@ +/* XPM */ +static char * reply_wo_xpm[] = { +"24 24 4 1", +" c None", +". c #000000000000", +"X c #E1E1E0E0E0E0", +"O c #FFFFFFFFFFFF", +" ", +" ", +" ", +" .... ", +" ..X.... ", +" ..XX.XX.. ", +" .O.XX.XXXX.. ", +" ..O.XXX.XXXX... ", +" .OO.XXXX.X....... ", +" .OO.XXXX...XXX.OO.. ", +" ..OO.XX....XXXX.OOOO.. ", +" .......XX.XXXX.OOO.... ", +" .OOO.XXX.XXXX.OO..OOO. ", +" .OOOO....XXX....OOOOO. ", +" .OOOOOOO..XX..OOOOOOO. ", +" .OOOOOOO......OOOOOOO. ", +" .OOOOOO.OO..O..OOOOOO. ", +" .OOOOO.OOOOOOOO.OOOOO. ", +" .OOOO.OOOOOOOOOO.OOOO. ", +" .OOO.OOOOOOOOOOOO.OOO. ", +" .O..OOOOOOOOOOOOOO..O. ", +" ..OOOOOOOOOOOOOOOOOO.. ", +" ...................... ", +" "}; diff --git a/etc/images/gnus/reply.pbm b/etc/images/gnus/reply.pbm new file mode 100644 index 0000000000000000000000000000000000000000..ee181e663be77954bc10f855f980a40f8ebd3749 GIT binary patch literal 81 zcmWGA;W9E&Ff!p{KnAP~3dOJ Z7#Wyc7+g3QlnNL`6cp4#LqmXO006{n3oL52pfFfg&W28Qsz QS`mMMLH`wl{2h=H07hpDvj6}9 literal 0 HcmV?d00001 diff --git a/etc/images/gnus/save-aif.xpm b/etc/images/gnus/save-aif.xpm new file mode 100644 index 0000000..f0325ac --- /dev/null +++ b/etc/images/gnus/save-aif.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static char * save_aif_xpm[] = { +"24 24 6 1", +" c None", +". c #999999999999", +"X c #E1E1E0E0E0E0", +"o c #C7C7C6C6C6C6", +"O c #000000000000", +"+ c #FFFFFFFFFFFF", +" ", +" ", +" ............. ", +" .XXXXXXXXXX.X.. ", +" .XXXXXXXXXX.XX. ", +" .XXXXXXXXXX.... ", +" .XXXXXXXXXXooo. ", +" .XXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXX. ", +" OOOOOOOOOOOOOOXXXXXX. ", +" O..O+++++++O.OXXXXXX. ", +" O..O+++++++O.OXXXXXX. ", +" O..O+++++++O.OXXXXXX. ", +" O..O+++++++O.OXXXXXX. ", +" O..O+++++++O.OXXXXXX. ", +" O..OOOOOOOOO.OXXXXXX. ", +" O............OXXXXXX. ", +" O............OXXXXXX. ", +" O..OOOOOOOOO.O....... ", +" O..OoooooO++.O ", +" O..OoooooO++.O ", +" O.OoooooO++.O ", +" OOOOOOOOOOOO "}; diff --git a/etc/images/gnus/save-art.pbm b/etc/images/gnus/save-art.pbm new file mode 100644 index 0000000000000000000000000000000000000000..68fe0cb309873313e4960a10b3acd43a730879ea GIT binary patch literal 81 zcmWGA;W9E&Ff!p{00Y+0P&NiORtG^A11Ad j1PojS1T`jbg$4+62?)f1#5qI+1oi*Fb`1$-U|;|M?wb*{ literal 0 HcmV?d00001 diff --git a/etc/images/gnus/subscribe.xpm b/etc/images/gnus/subscribe.xpm new file mode 100644 index 0000000..ff193a9 --- /dev/null +++ b/etc/images/gnus/subscribe.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char * subscribe_xpm[] = { +"24 24 5 1", +" c None", +". c #A5A5A5A59595", +"X c #E1E1E0E0E0E0", +"o c #C7C7C6C6C6C6", +"O c #8686ADAD7D7D", +" ", +" ", +" ", +" ... ", +" ..XXX..... ", +"...XXXXX..XXX. ... ", +".X.XX...XXXX...XXX. ", +".XX.X.X.XX...XXXXX. ", +".XX...XX.X.X.XXXXXX. ", +".XX.o.XX...XX.XXXXXX. ", +".X.oo.XX.o.XX..XXXXXX. ", +"o.ooo.X.oo.XX.XXXOXXX. ", +"o.oXXo.ooo.X.oXXOXXXXX. ", +" o.XXo.oXXo.ooXXOXXXXX. ", +" o.XXXo.XXo.oXXXOXXXXXX.", +" o.XXo.XXXo.XOOOOXXXXX.", +" o.XXoo.XXo.XXXOOXXXXX.", +" o.XXo.XXXo.XXXXXXX...", +" o.XX.o.XXo.XXXXXX.oo ", +" o..oo.XX.o.XXX..o ", +" oo o..oo.XX.oo ", +" oo o..o ", +" oo ", +" "}; diff --git a/etc/images/gnus/unimportant.xpm b/etc/images/gnus/unimportant.xpm new file mode 100644 index 0000000..4298224 --- /dev/null +++ b/etc/images/gnus/unimportant.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char *magick[] = { +/* columns rows colors chars-per-pixel */ +"24 24 2 1", +"! c blue", +"w c Gray75", +/* pixels */ +"wwwwwwwwwwwwwwwwwwwwwwww", +"wwwwwwwwwwwwwwwwwwwwwwww", +"wwwwwwwwwww!!!wwwwwwwwww", +"wwwwwwwwwww!!!wwwwwwwwww", +"wwwwwwwwwww!!!wwwwwwwwww", +"wwwwwwwwwww!!!wwwwwwwwww", +"wwwwwwwwwww!!!wwwwwwwwww", +"wwwwwwwwwww!!!wwwwwwwwww", +"wwwwwwwwwww!!!wwwwwwwwww", +"wwwwwwwwwww!!!wwwwwwwwww", +"wwwwwwwwwww!!!wwwwwwwwww", +"wwwwwwwwwww!!!wwwwwwwwww", +"ww!!!wwwwww!!!wwwwww!!!w", +"www!!!wwwww!!!wwwww!!!ww", +"wwww!!!wwww!!!wwww!!!www", +"wwwww!!!www!!!www!!!wwww", +"wwwwww!!!ww!!!ww!!!wwwww", +"wwwwwww!!!w!!!w!!!wwwwww", +"wwwwwwww!!!!!!!!!wwwwwww", +"wwwwwwwww!!!!!!!wwwwwwww", +"wwwwwwwwww!!!!!wwwwwwwww", +"wwwwwwwwwww!!!wwwwwwwwww", +"wwwwwwwwwwwwwwwwwwwwwwww", +"wwwwwwwwwwwwwwwwwwwwwwww" +}; diff --git a/etc/images/gnus/unsubscribe.pbm b/etc/images/gnus/unsubscribe.pbm new file mode 100644 index 0000000000000000000000000000000000000000..7d869fb53fe7eac710c7d1a3af7ef5b72396e232 GIT binary patch literal 81 zcmWGA;W9E&Ff!o^6%AEjVsaI6)c=1vL@cO_`yA;v!DD!a)aaEN*1Zgt8_!JlJn zQy{krIX;|WWA(00d@FKNK33yeum0fNwe04b#2=+Y_ONlciTjNsKc;=XB>!H*8bXu; zf;f%eH~mWD3QLmz|v? z#E&8#9~9skaUz{oexlra5r+aWJ>!^u2QS1!I7}t~fkIvgREq7B$m7J3AGJTl^>HhQ z%zLDRBt(!f_&t6h08&Rfoem)Bqda8pcbWtXh`YdAlfOecd-{7EP5-BGA|$~As5ZQk zKan;q3Rr8>9kWxr(r>hca##3AK6Z2JZ_D`v7K7i zN?6$({eSKc*-mJ~5+|LWo&&_etuz`>kLDY{+Z)e zhh`?nDm^NuA$ei1kBq`mezHNk!{Y3MiRS~-CZ0IENi7{=KmMB9bI?{WIMhLW_216g zEmd?-j#lzIC|`+Rp7A^NxYBMd&KMM4+Az(+6NWRac$x*r*5`(^O#!PZw4}*#Ru-rB zDS?-9sAX=?`3(InzU1$*IJf6K4tZ|RIj07%;jF3l=YIFN*fev)GhK7fZJXyHnOx(t zIAhnG?aJ5{r!*ZHueo)Q(ixnRIj&*6nfXR;y~XiB3RqM72i&SX*4O+1&W3kYeDKqe z9I@sG$@KoKIbKjEzs4JKW5n6ug+zH!$K3c{NPJFJn)DBvH#k$TIHU>BE(Ye>x_Qt@AQ + + * gnus.el: No Gnus v0.3 is released. + +2005-05-01 Lars Magne Ingebrigtsen + + * lpath.el (featurep): Bind show-nonbreak-escape. + +2005-04-28 Katsumi Yamaoka + + * gnus-art.el (gnus-article-edit-part): Disable undo. + +2005-04-25 Katsumi Yamaoka + + * gnus-art.el (article-date-ut): Don't delete X-Sent header when + gnus-article-date-lapsed-new-header is t if date timer is active; + skip headers in which the original date value is empty. + (gnus-article-save-original-date): Redefine it as a macro. + (gnus-display-mime): Use it. + +2005-04-22 Katsumi Yamaoka + + * gnus-art.el (article-date-ut): Support converting date in + forwarded parts as well. + (gnus-article-save-original-date): New function. + (gnus-display-mime): Use it. + +2005-04-22 David Hansen + + * nnrss.el (nnrss-check-group, nnrss-request-article): Support the + enclosure element of . + +2005-04-21 Reiner Steib + + * message.el (message-kill-buffer-query): Renamed from + `message-kill-buffer-query-if-modified'. Added :version. + +2005-04-19 Katsumi Yamaoka + + * mml.el (mml-preview): Bind gnus-message-buffer while setting the + window layout. + +2005-04-18 Katsumi Yamaoka + + * mml.el: Autoload dnd when compiling. + +2005-04-18 Reiner Steib + + * mml.el (mml-mode, mml-dnd-attach-file): Use dnd-* instead of + x-dnd-*. + +2005-04-18 Katsumi Yamaoka + + * qp.el (quoted-printable-encode-region): Save excursion. + +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. + +2005-04-13 Katsumi Yamaoka + + * lpath.el: Fbind display-time-event-handler; don't fbind + string-to-multibyte. + + * qp.el (quoted-printable-encode-region): Use mm-string-to-multibyte. + +2005-04-12 Katsumi Yamaoka + + * nnrss.el (nnrss-node-text): Replace CRLFs (which might be + contained in text because xml.el decodes entities) with LFs. + +2005-04-11 Lute Kamstra + + * nnimap.el (nnimap-date-days-ago): Handle byte-compiler warnings + differently. + +2005-04-10 Stefan Monnier + + * mm-util.el (mm-detect-coding-region): Typo. + +2005-04-11 Katsumi Yamaoka + + * gnus-art.el (gnus-article-read-summary-keys): Fix misplaced parens. + +2005-04-06 D Goel + + * spam-stat.el (spam-stat-score-buffer): Add a call to a + user-function allow user modifications of the scores. + (spam-stat-score-buffer-user): New function, to allow + user-computed modifications to the score. + (spam-stat-score-buffer-user-functions): list of additional + scoring functions + (spam-stat-error-holder): global temporary error holder + (spam-stat-split-fancy): use the new `spam-stat-error-holder' + variable + +2005-04-06 Teodor Zlatanov + + * 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 + 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 + +2005-04-06 Katsumi Yamaoka + + * mm-util.el (mm-coding-system-p): Don't return binary for the nil + argument in XEmacs. + + * nnrss.el (nnrss-compatible-encoding-alist): New variable. + (nnrss-request-group): Decode group name first. + (nnrss-request-article): Make a text/plain article if mml-to-mime + failed. + (nnrss-get-encoding): Return a compatible encoding according to + nnrss-compatible-encoding-alist. + (nnrss-find-el): Use consp instead of listp. + (nnrss-opml-export, nnrss-order-hrefs, nnrss-find-el): Use dolist. + +2005-04-06 Katsumi Yamaoka + + * time-date.el (time-to-seconds): Don't use the #xhhhh syntax + which Emacs 20 doesn't support. + (seconds-to-time, days-to-time, time-subtract, time-add): Ditto. + +2005-04-04 Reiner Steib + + * nnimap.el (nnimap-date-days-ago): Add defvars in order to + silence the byte compiler inside the defun + + * gnus-demon.el (parse-time-string): Added autoload. + + * gnus-delay.el (parse-time-string): Added autoload. + + * gnus-art.el (parse-time-string): Added autoload. + + * nnultimate.el (parse-time): Require for `parse-time-string'. + +2005-03-31 Reiner Steib + + * gnus-art.el (gnus-copy-article-ignored-headers): Update :version. + + * gnus-score.el (gnus-adaptive-pretty-print): Ditto. + + * smime.el (smime-ldap-host-list): Add :version. + +2005-03-21 Reiner Steib + + * gnus-srvr.el (gnus-browse-select-group): Add NUMBER argument and + pass it to `gnus-browse-read-group'. + (gnus-browse-read-group): Add NUMBER argument and pass it to + `gnus-group-read-ephemeral-group'. + + * gnus-group.el (gnus-group-read-ephemeral-group): Add NUMBER + argument and pass it to `gnus-group-read-group'. + +2005-03-19 Aidan Kehoe + + * mm-util.el (mm-xemacs-find-mime-charset): Only call + mm-xemacs-find-mime-charset-1 if we have the mule feature + available at runtime. + +2005-03-25 Werner Lemberg + + * nnmaildir.el: Replace `illegal' with `invalid'. + +2005-03-23 Lute Kamstra + + * time-date.el: Add comment on time value formats. + Don't require parse-time. + (with-decoded-time-value): New macro. + (encode-time-value): New function. + (time-to-seconds, time-less-p, time-subtract, time-add): Use them. + (days-to-time): Return a valid time value when arg is huge. + (time-since): Use time-subtract. + (time-to-number-of-days): Use time-to-seconds. + +2005-03-22 Stefan Monnier + + * gnus-start.el (gnus-display-time-event-handler): + Check display-time-timer at runtime rather than only at load time + in case display-time-mode is turned off in the mean time. + +2005-03-16 Reiner Steib + + * nnimap.el (nnimap-open-connection): Print which authinfo file is + used. + + * nneething.el (nneething-map-file-directory): Derive from + `gnus-directory'. + + * gnus-art.el (gnus-header-button-alist): Use `gnus-msg-mail' for + the To/Cc button. + +2005-03-15 Reiner Steib + + * nnmaildir.el (nnmaildir-request-accept-article): + Use `nnheader-cancel-timer' for compatibility with current XEmacs. + +2005-03-13 Steve Youngs + + * gnus-async.el: Require timer-funcs at compile time when in + XEmacs for `run-with-idle-timer'. + +2005-03-13 Steve Youngs + + * gnus.el: Don't try and mark `gnus-agent-save-groups' as an + autoloaded function. + From: Andrey Slusar . + +2005-03-10 Stefan Monnier + + * nnimap.el (nnimap-retrieve-headers-from-server): Fix last change. + +2005-03-10 Arne J,Ax(Brgensen (tiny change) + + * nnimap.el (nnimap-retrieve-headers-from-server): Fix off-by-one flaw. + +2005-03-09 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-confirm-mail-reply-to-news): Add + gnus-expert-user to default. + +2005-03-08 Juergen Kreileder (tiny change) + + * nnimap.el (nnimap-open-server): Ditto. + + * imap.el (imap-authenticate): Fix typo. + +2005-03-08 Bjorn Solberg (tiny change) + + * nnimap.el (nnimap-retrieve-headers-from-server): Sort NOV + buffer (since IMAP server might return FETCH response out of + order, and the nntp buffer must be sorted). + +2005-03-06 Kevin Greiner + + * gnus-start.el (gnus-convert-old-newsrc): Fixed numeric + comparison on string. + + * gnus-agent.el (gnus-agent-long-article, + gnus-agent-short-article, gnus-agent-score): Renamed category + keywords to match gnus-cus. + (gnus-agent-summary-fetch-series): Modified to protect against + gnus-agent-summary-fetch-group clearing processable flags. + (gnus-agent-synchronize-group-flags): Update live group buffer as + synchronization may occur due to the user toggle the plugged + status. + (gnus-agent-fetch-group-1): Clear downloadable flag when article + successfully downloaded. + (gnus-agent-expire-group-1): Avoid using markers when the overview + is in ascending order; greatly improves performance. + (gnus-agent-regenerate-group): Use + gnus-agent-synchronize-group-flags to reset read status in both + gnus and server. + (gnus-agent-update-files-total-fetched-for): Fixed initial size. + +2005-03-04 Reiner Steib + + * message.el: Don't autoload former message-utils variables. + (message-strip-subject-trailing-was): Change doc string. + + * nnweb.el: Fixes for `gnus-group-make-web-group'. + (nnweb-type-definition): Don't add "hl=en" in `address'. Add `base'. + (nnweb-google-search): Add "hl=en" here. + (nnweb-google-parse-1, nnweb-google-create-mapping): + Don't hardcode URL. + +2005-03-03 Reiner Steib + + * message.el (message-get-reply-headers, message-followup): + Mention related variables `message-use-followup-to' and + `message-use-mail-followup-to', in the information buffer. + + * nnweb.el (nnweb-type-definition): Use groups.google.de instead + of broken groups(-beta).google.com. + +2005-03-03 Teodor Zlatanov + + * 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 + + * gnus-int.el (gnus-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 + + * nnmbox.el (nnmbox-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 + + * nnfolder.el (nnfolder-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 + + * nndb.el (nndb-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 + +2005-03-01 Stefan Monnier + + * gnus-sum.el (gnus-summary-exit): Undo last change and fix it in + a more conservative way. + +2005-02-26 Stefan Monnier + + * gnus-sum.el (gnus-summary-exit): Move point after displaying the + buffer, so it moves the window's cursor. + +2005-02-26 Arne J,Ax(Brgensen + + * mm-decode.el (mm-dissect-buffer): Pass the from field on to + `mm-dissect-multipart' and receive the from field as an (optional) + argument from `mm-dissect-multipart'. + (mm-dissect-multipart): Receive the from field as an argument and + pass it on when we call `mm-dissect-buffer' on MIME parts. + Fixes verification/decryption of signed/encrypted MIME parts. + +2005-02-25 Teodor Zlatanov + + * 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) + + * nnimap.el (nnimap-request-move-article): when + gnus-sum-hint-move-is-internal is set, don't do the extra + nnimap-request-article + +2005-02-24 Reiner Steib + + * nnheader.el (nnheader-find-file-noselect): Add doc string. + + * nnfolder.el (nnfolder-read-folder): Use RAWFILE for + `nnheader-find-file-noselect' to avoid `large-file-warning-threshold'. + + * gnus-sum.el (gnus-summary-caesar-message): + Apply `gnus-treat-article' after rotation. + + * gnus-group.el (gnus-group-clear-data): Mention process/prefix in + doc string. + +2005-02-22 Simon Josefsson + + * encrypt.el (encrypt-password-cache-expiry): Remove (use + `password-cache-expiry' instead). Reported by Arne J,Ax(Brgensen + . + (encrypt): Add password-cache and password-cache-expiry as group + members. + +2005-02-22 Arne J,Ax(Brgensen + + * smime.el (smime-ldap-host-list): Doc fix. + (smime-ask-passphrase): Use `password-read-and-add' to read (and + cache) password. + (smime-sign-region): Use it. + (smime-decrypt-region): Use it. + (smime-sign-buffer): Signal an error if `smime-sign-region' fails. + (smime-encrypt-buffer): Signal an error if `smime-encrypt-region' + fails. + (smime-cert-by-ldap-1): Use `base64-encode-string' to convert + certificate from DER to PEM format rather than calling openssl. + + * mml-smime.el (mml-smime-encrypt-query): Remove obsolete comment. + + * mml-sec.el (mml-secure-message): Insert keyfile/certfile tags + for signing/encryption. + + * mml.el (mml-parse-1): Use them. + +2005-02-21 Arne J,Ax(Brgensen + + * nnrss.el (nnrss-verbose): Removed. + (nnrss-request-group): Use `nnheader-message' instead. + +2005-02-19 Mark Plaksin (tiny change) + + * nnrss.el (nnrss-verbose): New variable. + (nnrss-request-group): Make it say nnrss is requesting a group. + +2005-02-21 Reiner Steib + + * gnus-art.el (gnus-parse-news-url, gnus-button-handle-news): + Handle news URL with given port correctly. + +2005-02-19 Katsumi Yamaoka + + * gnus-msg.el (gnus-copy-article-buffer): Quote decoded words + containing special characters. + + * gnus-sum.el (gnus-summary-edit-article): Ditto. + + * mml.el (mime-to-mml): Ditto. + + * rfc2047.el (rfc2047-encode-parameter): Use ietf-drums-tspecials. + (rfc2047-quote-decoded-words-containing-tspecials): New variable. + (rfc2047-decode-region): Quote decoded words containing special + characters when rfc2047-quote-decoded-words-containing-tspecials + is non-nil. + +2005-02-16 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-delete-group): Minor bug fix. + + * gnus.el (gnus-install-group-spam-parameters): Doc fix. + +2005-02-15 Simon Josefsson + + * nnimap.el (nnimap-debug): Doc fix. + + * imap.el (imap-debug): Doc fix. + +2005-02-15 Katsumi Yamaoka + + * gnus-art.el: Avoid "Recursive load suspected" error in Emacs 21.1. + +2005-02-14 Teodor Zlatanov + + * gnus.el (spam-contents): improve docs for spam-contents + parameter in its variable incarnation + +2005-02-14 Simon Josefsson + + * smime-ldap.el: Use require instead of load-library for ldap. + (smime-ldap-search): Indent. + (smime-ldap-search-internal): Shorten line. + + * smime.el (smime-cert-by-dns): Add doc-string. + (smime-cert-by-ldap-1): Indent. + + * mml-smime.el (mml-smime-get-ldap-cert): Renamed from + mml-smime-get-dns-ldap. + (mml-smime-encrypt-query): Use new function. Default to ldap. + +2005-02-14 Arne J,Ax(Brgensen + + * smime.el: Require smime-ldap. + (smime-ldap-host-list): New variable. + (smime-cert-by-ldap, smime-cert-by-ldap-1): New functions. + + * mml-smime.el (mml-smime-encrypt-query): New function. + (mml-smime-encrypt-query): Use it. + + * smime-ldap.el: New file. + +2005-02-13 Katsumi Yamaoka + + * gnus-agent.el: Remove garbage made while merging the Emacs trunk. + +2005-02-14 Reiner Steib + + * gnus-group.el (gnus-group-make-doc-group): Mention prefix + argument in doc string. Make query for type more clear. + +2005-02-13 Reiner Steib + + * gnus.el (gnus-group-startup-message): Search for gnus images in + etc/images/gnus. + * mm-util.el (mm-find-charset-region): Likewise. + * smiley.el (smiley-data-directory): Search for smilies in + etc/images/smilies. + +2005-02-09 Kim F. Storm + + Change Emacs release version from 21.4 to 22.1 throughout. + Change Emacs development version from 21.3.50 to 22.0.50. + +2005-02-12 Katsumi Yamaoka + + * gnus-art.el (gnus-mime-copy-part): Don't decode compressed parts. + + * mm-util.el (mm-coding-system-to-mime-charset): Make it work with + non-Mule XEmacs as well. + (mm-decompress-buffer): Signal an error intentionally if it does + not decompress compressed data because auto-compression-mode is + disabled. + +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 + +2005-02-10 Katsumi Yamaoka + + * gnus-art.el (gnus-mime-jka-compr-maybe-uncompress): Remove; + merge it into mm-decompress-buffer. + (gnus-mime-copy-part): Use the MIME part charset, the value which + a user specified or gnus-newsgroup-charset for decoding, like + gnus-mime-inline-part does; set buffer-file-coding-system to tell + save-buffer what was used. Suggested by Kevin Ryde + . + (gnus-mime-inline-part): Allow the name parameter as well as the + filename parameter; force decompressing of compressed data; always + display contents being not decoded as unibyte. + + * mm-view.el (mm-display-inline-fontify): Allow the name parameter + as well as the filename parameter. + + * mm-util.el (mm-decompress-buffer): Merge + gnus-mime-jka-compr-maybe-uncompress. + (mm-find-buffer-file-coding-system): Doc fix; force decompressing + of compressed data. + +2005-02-08 Simon Josefsson + + * imap.el (imap-log): Doc fix. + +2005-02-07 Katsumi Yamaoka + + * gnus-art.el (gnus-mime-inline-part): Decode parts according to + the coding cookies; decompress compressed parts. + + * mml.el (mml-generate-mime-1): Add the charaset parameter according + to the value which a user specified manually or the coding cookie. + + * mm-util.el (mm-string-to-multibyte): New function. + (mm-detect-mime-charset-region): Work with Emacs 22 as well. + (mm-coding-system-to-mime-charset): New function. + (mm-decompress-buffer): New function. + (mm-find-buffer-file-coding-system): New function. + + * mm-view.el (mm-insert-inline): Make sure a part ends with a newline. + (mm-display-inline-fontify): Rewrite for decoding and decompressing + parts. + +2004-10-15 TSUCHIYA Masatoshi + + * mm-view.el (mm-display-inline-fontify): Decode a part according + to the charset parameter. + +2005-02-03 Katsumi Yamaoka + + * gnus-art.el (gnus-mime-inline-part): Show the raw contents if a + prefix arg is neither nil nor a number, as info specifies. + +2005-02-02 Katsumi Yamaoka + + * nntp.el (nntp-marks-changed-p): Use time-less-p to compare the + timestamps. + +2005-01-29 Jari Aalto + + * gnus-sum.el (gnus-list-of-unread-articles): Improve active + groups error checking and notify user. + +2004-09-04 Jari Aalto + + * message.el (message-send-mail-function): Check existence of + sendmail-program first before using default value + `message-send-mail-with-sendmail'. Otherwise use more generic + `smtpmail-send-it'. + +2005-02-01 Katsumi Yamaoka + + * nntp.el (nntp-request-update-info): Always return nil. + +2005-01-30 Stefan Monnier + + * gnus-art.el (gnus-article-mode): Turn off the "\ " non-break space. + +2005-01-28 Stefan Monnier + + * message.el (message-beginning-of-line): Change the behavior when + invoked between BOL and : so that it first moves backward. + +2005-01-28 Katsumi Yamaoka + + * gnus-art.el (gnus-article-setup-buffer): Kill and re-create the + article buffer when editing of the article is discarded. + (gnus-article-prepare): Revert. + +2005-01-28 Katsumi Yamaoka + + * gnus-art.el (gnus-article-prepare): + Remove message-strip-forbidden-properties from the local hook. + +2005-01-27 Simon Josefsson + + * password.el (password-cache-add): Only start one timer per key. + Reported by Derek Atkins . + +2005-01-26 Steve Youngs + + * run-at-time.el: Removed. It is no longer needed as + timer-funcs.el in the xemacs-base package has a working version of + `run-at-time'. + + * gnus-xmas.el: Require timer-funcs instead of run-at-time. + + * password.el: Require timer-funcs instead of run-at-time in + XEmacs. + Remove `password-run-at-time' macro. + (password-cache-add): Use `run-at-time' instead of + `password-run-at-time'. + + * nnheaderxm.el: Require timer-funcs instead of run-at-time. + Remove `nnheader-cancel-function-timers' alias, + `cancel-function-timers' exists in XEmacs in timer-funcs. + + * mail-source.el: Require timer-funcs instead of itimer in XEmacs + for `run-with-idle-timer'. + + * gnus-demon.el: Require timer-funcs instead of itimer in XEmacs + for `run-at-time'. + + * mm-url.el: Require timer-funcs at compile time when in XEmacs + for `with-timeout'. + + * dgnushack.el: Autoload the correct `setenv' for SXEmacs which is + the same as for XEmacs 21.4. + No need to ignore `run-with-idle-timer', this function exists in + XEmacs now in timer-funcs.el in the xemacs-base package. + (dgnushack-compile): No need to delete + run-at-time.el from the list of files to compile because it + doesn't exist anymore. + +2005-01-24 Katsumi Yamaoka + + * mml.el (mml-generate-mime-1): Convert string into unibyte when + inserting " *mml*" buffer's contents into a unibyte temp buffer. + +2005-01-24 Harald Meland (tiny change) + + * mail-source.el (mail-source-fetch-imap): Search for ^From case + sensitively. + +2005-01-21 Derek Atkins (tiny change) + + * pgg-pgp.el (pgg-pgp-decrypt-region): Use passphrase cache. + +2005-01-20 Katsumi Yamaoka + + * mm-decode.el (mm-insert-part): Switch the multibyteness of data + which will be inserted according to the multibyteness of a buffer + rather than the type of contents. Suggested by ARISAWA Akihiro + . + + * nnrss.el (nnrss-find-el): Check carefully whether there's a list + of string which old xml.el may return rather than a string. + +2005-01-17 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-idna-message): Silence byte compiler. + +2005-01-16 Simon Josefsson + + * gnus-sum.el (gnus-summary-idna-message): Fail gracefully if + idn/idna.el isn't available. + (gnus-summary-idna-message): Doc fix. Suggested by Michael Cook + . + + * hashcash.el: Remove non-FSF copyright header. + + * hashcash.el (hashcash-extra-generate-parameters): New variable. + (hashcash-generate-payment): Use it. + (hashcash-generate-payment-async): Use it. + +2005-01-15 Simon Josefsson + + * message.el (message-idna-to-ascii-rhs): Decode Reply-To too. + Suggested by Raymond Scholz . + + * gnus-sum.el (gnus-summary-wash-map): Bind "W i" to + gnus-summary-idna-message. + (gnus-summary-make-menu-bar): Add De-IDNA menu entry. + (gnus-summary-idna-message): New function. + +2005-01-13 Reiner Steib + + * gnus-msg.el (gnus-confirm-mail-reply-to-news): Change default to + gnus-novice-user. + +2005-01-12 Katsumi Yamaoka + + * nnrss.el (nnrss-request-delete-group): Delete entries in + nnrss-group-alist as well. + (nnrss-save-server-data): Insert newline. + +2005-01-10 Reiner Steib + + * gnus.el (gnus-user-agent): Use list of symbols instead of + symbols. Display full version number for (S)XEmacs. Optionally + display (S)XEmacs codename. + + * gnus-util.el (gnus-emacs-version): Update for new + `gnus-user-agent'. + + * gnus-msg.el (gnus-extended-version): Make it possible to omit + Gnus version. + +2005-01-05 Reiner Steib + + * spam.el (spam-face): New face. Don't use `gnus-splash-face' + which is unreadable in some setups. + +2005-01-06 Katsumi Yamaoka + + * gnus-spec.el (gnus-update-format-specifications): Flush the + group format spec cache if it doesn't support decoded group names. + +2005-01-03 Reiner Steib + + * gnus-score.el (gnus-decay-scores, gnus-score-load-file): Allow + to apply decay on score files matching a regexp. + +2004-12-30 Katsumi Yamaoka + + * gnus-group.el (gnus-group-line-format-alist): Keep the forward + compatibility in %g and %c. + +2004-12-29 Katsumi Yamaoka + + * gnus-group.el (gnus-group-line-format-alist): Use decoded group + name for only %g and %c. + (gnus-group-insert-group-line): Bind gnus-tmp-decoded-group instead + of gnus-tmp-group to decoded group name. + (gnus-group-make-rss-group): Exclude `/'s from group names. + +2004-12-28 Katsumi Yamaoka + + * nnrss.el (nnrss-get-encoding): Fix regexp. + +2004-12-27 Simon Josefsson + + * mm-bodies.el (mm-body-encoding): Don't permit 7-bit to be used when + mm-use-ultra-safe-encoding is enabled (e.g., for PGP/MIME) and we have + trailing white space. Reported by Werner Koch . + +2004-12-17 Kim F. Storm + + * gnus-group.el (gnus-group-mode-map): Map follow-link to mouse-face. + + * gnus-sum.el (gnus-summary-mode-map): Likewise. + +2004-12-26 Tsuyoshi AKIHO + + * gnus-sum.el (gnus-summary-walk-group-buffer): Decode group name. + +2004-12-26 Katsumi Yamaoka + + * nnrss.el: Require rfc2047 and mml. + (nnrss-file-coding-system): New variable. + (nnrss-format-string): Redefine it as an inline function. + (nnrss-decode-group-name): New function. + (nnrss-string-as-multibyte): Remove. + (nnrss-retrieve-headers): Decode group name; don't use + nnrss-format-string. + (nnrss-request-group): Decode group name. + (nnrss-request-article): Decode group name; allow a Message-ID as + well as an article number; don't use nnrss-format-string; encode a + Message-ID string which may contain non-ASCII characters; use + mml-to-mime to compose a MIME article. + (nnrss-request-expire-articles): Decode group name. + (nnrss-request-delete-group): Decode group name. + (nnrss-fetch): Clarify error message. + (nnrss-read-server-data): Use insert-file-contents instead of load; + bind file-name-coding-system; use multibyte buffer. + (nnrss-save-server-data): Bind coding-system-for-write to the + value of nnrss-file-coding-system; bind file-name-coding-system; + add coding cookie. + (nnrss-read-group-data): Use insert-file-contents instead of load; + bind file-name-coding-system; use multibyte buffer. + (nnrss-save-group-data): Bind coding-system-for-write to the + value of nnrss-file-coding-system; bind file-name-coding-system. + (nnrss-decode-entities-string): Rename from n-d-e-unibyte-string; + make it work with non-ASCII text. + (nnrss-find-el): Make it work with old xml.el as well. + +2004-12-26 Tsuyoshi AKIHO + + * nnrss.el (nnrss-get-encoding): New function. + (nnrss-fetch): Use unibyte buffer initially; bind + coding-system-for-read while performing mm-url-insert; remove ^Ms; + decode contents according to the encoding attribute. + (nnrss-save-group-data): Add coding cookie. + (nnrss-mime-encode-string): New function. + (nnrss-check-group): Use it to encode subject and author. + +2004-12-23 Teodor Zlatanov + + * spam.el (spam-check-BBDB): don't get the symbol-value of an + imaginary variable + +2004-12-22 Katsumi Yamaoka + + * gnus-spec.el (gnus-spec-tab): Make a Lisp form which works + correctly even if there are wide characters. + +2004-12-21 Teodor Zlatanov + + * spam.el (spam-check-BBDB): fix the BBDB caching code to use + downcased symbol names; make a new cache instead of reusing + bbdb-hashtable + +2004-12-21 Katsumi Yamaoka + + * rfc2231.el (rfc2231-parse-string): Decode encoded value after + concatenating segments rather than before concatenating them. + Suggested by ARISAWA Akihiro . + + * message.el (message-get-reply-headers): Bind `extra'. + +2004-12-21 Lars Magne Ingebrigtsen + + * message.el (message-extra-wide-headers): New variable. + (message-get-reply-headers): Use it. + +2004-12-20 Katsumi Yamaoka + + * gnus-agent.el (gnus-agent-group-path): Decode group name. + (gnus-agent-group-pathname): Ditto. + + * gnus-cache.el (gnus-cache-file-name): Decode group name. + + * gnus-group.el (gnus-group-make-group): Decode group name. + (gnus-group-make-rss-group): Register the group data after opening + the nnrss group. + +2004-12-17 Paul Jarc + + * nnmaildir.el (nnmaildir-request-expire-articles): Articles moved + by expiry now get marked as read. + +2004-12-17 Katsumi Yamaoka + + * mm-util.el (mm-xemacs-find-mime-charset): New macro. + +2004-12-17 Aidan Kehoe + + * mm-util.el (mm-xemacs-find-mime-charset-1): New function used to + unify Latin characters in XEmacs. + (mm-find-mime-charset-region): Use it. + +2004-12-17 Katsumi Yamaoka + + * gnus-util.el (gnus-delete-directory): New function. + + * gnus-agent.el (gnus-agent-delete-group): Use it. + + * gnus-cache.el (gnus-cache-delete-group): Use it. + +2004-12-16 Katsumi Yamaoka + + * gnus-group.el (gnus-group-make-rss-group): Unify non-ASCII group + names. + +2004-12-16 Simon Josefsson + + * hashcash.el (hashcash-payment-alist): Fix custom :type. + +2004-12-15 Katsumi Yamaoka + + * mm-url.el (mm-url-predefined-programs): Add --silent arg to curl. + + * gnus-group.el (gnus-group-expire-articles-1): Decode group name. + (gnus-group-set-current-level): Decode group name. + +2004-12-15 Maciek Pasternacki (tiny change) + + * nnrss.el (nnrss-fetch): Signal an error if w3-parse-buffer also + failed. + +2004-12-14 Katsumi Yamaoka + + * gnus-group.el (gnus-group-delete-group): Decode group name. + (gnus-group-make-rss-group): Encode group name. + (gnus-group-catchup-current): Decode group name. + (gnus-group-kill-group): Decode group name. + +2004-12-08 Stefan Monnier + + * gnus-art.el (gnus-narrow-to-page): Don't hardcode point-min. + +2004-12-13 Katsumi Yamaoka + + * gnus-group.el (gnus-group-make-rss-group): + Use gnus-group-make-group instead of gnus-group-unsubscribe-group. + + * gnus-start.el (gnus-setup-news): Honor user's setting to + gnus-message-archive-method. Suggested by Lute Kamstra + . + +2004-12-10 Arnaud Giersch (tiny change) + + * gnus-sum.el (gnus-summary-exit-no-update): Don't clear the + global counterparts of the buffer-local variables. + +2004-11-16 Romain Francoise + + * gnus-sum.el (gnus-summary-exit): Don't clear the global + counterparts of the buffer-local variables. + +2004-11-25 Reiner Steib + + * message.el (message-forbidden-properties): Fixed typo in doc + string. + +2004-11-25 Reiner Steib + + * gnus-util.el (gnus-replace-in-string): Added doc string. + + * nnmail.el (nnmail-split-header-length-limit): Increase to 2048 + to avoid problems when splitting mails with many recipients. + +2004-11-22 Stefan Monnier + + * gnus-sum.el (gnus-summary-exit): Remove redundant and harmful + pop-to-buffer, covered by the subsequent gnus-configure-windows. + +2004-12-05 Nelson Ferreira + + * spam-stat.el (spam-stat-save): Load the hashtable from disk only + if there is no hashtable in memory or file modification time is + newer than cached timestamp. + +2004-12-03 Reiner Steib + + * gnus-sum.el (gnus-summary-limit-to-recipient): Implement + not-matching option. + +2004-12-02 Reiner Steib + + * gnus-sum.el (gnus-summary-limit-to-recipient): New function. + Suggested David Mazieres in analogy to rmail-summary-by-recipients. + (gnus-summary-limit-map, gnus-summary-make-menu-bar): Add it. + (gnus-article-sort-by-recipient, gnus-summary-sort-by-recipient): + New functions. Suggested by Uwe Brauer . + (gnus-summary-mode-map, gnus-summary-make-menu-bar): Add it. + +2004-12-02 Katsumi Yamaoka + + * message.el (message-forward-make-body-mml): Remove headers + according to message-forward-ignored-headers if a message is decoded. + +2004-12-02 Romain Francoise + + * message.el (message-forward-make-body-plain): Always remove + headers according to message-forward-ignored-headers. + +2004-12-01 Teodor Zlatanov + + * spam.el (spam-summary-prepare-exit): remove the + gnus-summary-limit pop for now, it has problems with ham marks for + me + +2004-11-29 Teodor Zlatanov + + * spam.el (spam-summary-prepare-exit): use gnus-summary-limit + correctly + +2004-11-28 Carl Henrik Lunde (tiny change) + + * format-spec.el (format-spec): Message the char. + +2004-11-26 Teodor Zlatanov + + * gnus-art.el (gnus-split-methods): reformat comments + + * spam.el (spam-summary-prepare-exit): remove article limits + before exiting the summary buffer + +2004-11-26 Katsumi Yamaoka + + * lpath.el: Remove bbdb-create-internal, bbdb-records, + spam-BBDB-register-routine and spam-enter-ham-BBDB. + + * nnrss.el (nnrss-string-as-multibyte): Redefine it as a macro in + order to silence the byte compiler. + + * spam.el: Fix the way to silence the byte compiler, which + complained about bbdb-buffer, bbdb-create-internal, bbdb-records, + bbdb-search-simple, spam-BBDB-register-routine, + spam-enter-ham-BBDB, spam-stat-buffer-change-to-non-spam, + spam-stat-buffer-change-to-spam, spam-stat-buffer-is-non-spam, + spam-stat-buffer-is-spam, spam-stat-load, + spam-stat-register-ham-routine, spam-stat-register-spam-routine, + spam-stat-save and spam-stat-split-fancy. + +2004-11-26 Katsumi Yamaoka + + * canlock.el (canlock-password): Remove `:size 0' or `:size 1' + which may confuse users. + (canlock-password-for-verify): Ditto. + + * deuglify.el (gnus-outlook-deuglify-unwrap-stop-chars): Ditto. + + * gnus-art.el (gnus-emphasis-alist): Ditto. + + * gnus-registry.el (gnus-registry-max-entries): Ditto. + + * gnus-score.el (gnus-adaptive-word-length-limit): Ditto. + + * gnus-start.el (gnus-save-killed-list): Ditto. + + * gnus-sum.el (gnus-thread-hide-subtree): Ditto. + (gnus-sum-thread-tree-root): Ditto. + (gnus-sum-thread-tree-false-root): Ditto. + (gnus-sum-thread-tree-single-indent): Ditto. + + * message.el (message-courtesy-message): Ditto. + (message-archive-note): Ditto. + (message-subscribed-address-file): Ditto. + (message-user-fqdn): Ditto. + + * spam-report.el (spam-report-gmane-regex): Ditto. + + * spam.el (spam-blackhole-good-server-regex): Ditto. + +2004-11-25 Katsumi Yamaoka + + * mml.el (mml-preview): Widen the message buffer before copying + the contents to the preview buffer; sort headers before previewing. + + * message.el (message-hidden-headers): Fix the way to avoid a bug + in the `repeat' widget in Emacs 21.3 or earlier. + +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. + +2004-11-22 Romain Francoise + + * message.el (message-header-format-alist): Add `From' in list + so that it can be sorted. + (message-fix-before-sending): Widen and sort headers before + sending. + (message-hide-headers): Use narrowing to hide headers by moving + them to the top of the buffer and narrowing to the region + underneath. + +2004-11-23 Lars Magne Ingebrigtsen + + * message.el (message-strip-forbidden-properties): Bind + buffer-read-only (etc) to nil. + +2004-11-23 Katsumi Yamaoka + + * rfc2047.el (rfc2047-header-encoding-alist): Add In-Reply-To to + address-mime. Suggested by ARISAWA Akihiro . + +2004-11-22 Marek Martin (tiny change) + + * nnfolder.el (nnfolder-request-create-group): Save current buffer. + +2004-11-19 Lars Magne Ingebrigtsen + + * dns.el (query-dns): Use sit-for to time instead of + accept-process-output, since that doesn't seem to work on udp + sockets. + +2004-11-17 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encode-region): Encode bogus delimiters. + +2004-11-15 Jesper Harder + + * pop3.el (pop3-leave-mail-on-server): Don't quote nil in + docstrings. + +2004-11-15 Katsumi Yamaoka + + * nntp.el (nntp-request-update-info): Return nil if + nntp-marks-is-evil is true so that gnus-get-unread-articles-in-group + may not call gnus-activate-group which uselessly issues the GROUP + commands for all nntp groups and wastes time. Reported by Romain + Francoise . + + * gnus-start.el (gnus-get-unread-articles): Remove redundant test. + +2004-11-15 Simon Josefsson + + * gnus-art.el (gnus-header-button-alist): Handle URLs in OpenPGP: + headers separately. + (gnus-button-openpgp): New function, inspired by Jochen K,A|(Bpper + . + +2004-11-14 Reiner Steib + + * gnus-start.el (gnus-convert-old-newsrc): + Assign legacy-gnus-agent to 5.10.7. + +2004-11-14 Lars Magne Ingebrigtsen + + * gnus-art.el (article-unsplit-urls): Don't anchor urls to the + start of the lines. + +2004-11-14 Magnus Henoch + + * hashcash.el (hashcash-default-payment): Change default to 20 + (hashcash-default-accept-payment): Change default to 20 + (hashcash-process-alist): New variable + (hashcash-generate-payment-async): Add + (hashcash-already-paid-p): Add + (hashcash-insert-payment): Don't generate payments twice + (hashcash-insert-payment-async): Add + (hashcash-insert-payment-async-2): Add + (hashcash-cancel-async): Add + (hashcash-wait-async): Add + (hashcash-processes-running-p): Add + (hashcash-wait-or-cancel): Add + (mail-add-payment): New optional argument. Conditionally start + asynchronous calculation. + (mail-add-payment-async): Add + + * message.el (message-send-mail): Wait for asynchronous hashcash + results. Don't clobber existing X-Hashcash headers. + (message-setup-1): Call mail-add-payment-async when + message-generate-hashcash is non-nil. + +2004-11-11 ARISAWA Akihiro (tiny change) + + * message.el (message-use-alternative-email-as-from): Examine the + From header as well; use message-make-from in order to include a + user's full name. + +2004-11-10 Katsumi Yamaoka + + * gnus-art.el (gnus-emphasis-alist): Don't hide asterisks by + default; improve customization type. + (gnus-emphasis-custom-with-format): New macro. + (gnus-emphasis-custom-value-to-external): New function. + (gnus-emphasis-custom-value-to-internal): New function. + +2004-11-09 Lars Magne Ingebrigtsen + + * dns.el (query-dns): Resolve reverse addresses. + +2004-10-23 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-get-new-news): Use it. + + * gnus-start.el (gnus-check-reasonable-setup): New function. + +2004-11-07 Katsumi Yamaoka + + * gnus-msg.el (gnus-configure-posting-styles): Don't cause the + "Args out of range" error. Reported by Arnaud Giersch + . + +2004-11-07 Jesper Harder + + * gnus-sum.el (gnus-summary-clear-local-variables): Use symbolp. + From Stefan Wiens . + +2004-11-04 Richard M. Stallman + + * spam.el (spam group): Add :version. + + * pgg-def.el (pgg group): Add :version. + +2004-11-04 Katsumi Yamaoka + + * gnus-art.el (gnus-article-edit-article): Don't associate the + article buffer with a draft file. This is a temporary measure + against the 2004-08-22 change to gnus-article-edit-mode. + +2004-11-02 Katsumi Yamaoka + + * html2text.el (html2text-get-attr): Remove unused argument `tag'. + (html2text-format-tags): Remove unused variable `attr'. + +2004-11-01 Reiner Steib + + * gnus-msg.el (gnus-summary-resend-default-address): Add :version. + + * tls.el (tls-process-connection-type, tls-success) + (tls-certtool-program): Add :version. + + * starttls.el (starttls-gnutls-program, starttls-use-gnutls) + (starttls-extra-arguments, starttls-process-connection-type) + (starttls-connect, starttls-failure, starttls-success): + + * spam-stat.el (spam-stat): Add :version. + + * sieve.el (sieve): Add :version. + + * sha1.el (sha1): Add :version. + (sha1-use-external): Remove redundant version. + + * nnmail.el (nnmail-split-fancy-with-parent-ignore-groups) + (nnmail-cache-ignore-groups, nnmail-spool-hook) + (nnmail-split-fancy-match-partial-words) + (nnmail-split-lowercase-expanded): + + * nndiary.el (nndiary): Add :version. + + * mml2015.el (mml2015-unabbrev-trust-alist): Add :version. + + * mml-sec.el (mml-default-sign-method) + (mml-default-encrypt-method, mml-signencrypt-style-alist): + Add :version. + + * mm-uu.el (mm-uu-diff-groups-regexp): Add :version. + + * mm-url.el (mm-url-use-external, mm-url-program) + (mm-url-arguments): Add :version. + + * mm-decode.el (mm-inline-text-html-with-w3m-keymap) + (mm-attachment-file-modes, mm-decrypt-option) + (mm-w3m-safe-url-regexp): Add :version. + + * message.el (message-cite-prefix-regexp) + (message-sendmail-envelope-from, message-minibuffer-local-map) + (message-user-fqdn, message-completion-alist): Add :version. + + * gnus-win.el (gnus-configure-windows-hook) + (gnus-use-frames-on-any-display): Add :version. + + * gnus-art.el (gnus-article-address-banner-alist) + (gnus-treat-unsplit-urls, gnus-treat-unfold-headers) + (gnus-treat-from-picon, gnus-treat-mail-picon) + (gnus-treat-x-pgp-sig): Add :version. + + * gnus-sum.el (gnus-spam-mark, gnus-recent-mark) + (gnus-undownloaded-mark, gnus-summary-article-move-hook) + (gnus-summary-article-delete-hook) + (gnus-summary-display-while-building): Add :version. + + * gnus-start.el (gnus-subscribe-newsgroup-hooks) + (gnus-get-top-new-news-hook):Add :version. + + * gnus-srvr.el (gnus-server-agent-face, gnus-server-opened-face) + (gnus-server-closed-face, gnus-server-denied-face): Add :version. + + * gnus-registry.el (gnus-registry): Add :version. + + * gnus-spec.el (gnus-use-correct-string-widths) + (gnus-make-format-preserve-properties): Add :version. + + * gnus.el (gnus-group-charter-alist) + (gnus-group-fetch-control-use-browse-url) + (gnus-install-group-spam-parameters): Add :version. + + * gnus-diary.el (gnus-diary): Add :version. + + * gnus-delay.el (gnus-delay): Add :version. + + * gnus-cite.el (gnus-cite-unsightly-citation-regexp) + (gnus-cite-ignore-quoted-from, gnus-cite-attribution-face) + (gnus-cite-blank-line-after-header, gnus-article-boring-faces): + Add :version. + + * gnus-agent.el (gnus-agent-max-fetch-size) + (gnus-agent-enable-expiration, gnus-agent-queue-mail) + (gnus-agent-prompt-send-queue): Add :version. + + * deuglify.el (gnus-outlook-deuglify): Add :version. + + * html2text.el: Beautify code. Improve doc strings. Some checkdoc + cleanup. + (html2text-get-attr, html2text-fix-paragraph): Simplify code. + (html2text-format-tag-list): Add "strong" and "em". + From "Alfred M. Szmidt" (tiny change). + +2004-10-29 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-hashtb): create the registry + when package is loaded + + * spam.el (spam-summary-score-preferred-header): 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 + +2004-10-29 Katsumi Yamaoka + + * gnus-msg.el (gnus-configure-posting-styles): Work with empty + signature file. Suggested by Manoj Srivastava + . + + * mm-util.el (mm-coding-system-priorities): Prefer iso-8859-1 than + iso-2022-jp even in the Japanese language environment. + Suggested by Jason Rumney . + +2004-10-28 Katsumi Yamaoka + + * gnus-sum.el (gnus-update-summary-mark-positions): Allow users to + use the same characters as the dummy marks; make it free from + getting affected by the language environment. + (gnus-summary-read-group-1): Update mark positions only when the + format spec is updated. + + * gnus-spec.el (gnus-update-format-specifications): Return a list + of updated types. + +2004-10-27 Katsumi Yamaoka + + * gnus-start.el (gnus-check-reasonable-setup): Use fboundp instead + of boundp to check if display-warning is available. + +2004-10-26 Teodor Zlatanov + + * nnimap.el (nnimap-open-connection): fixed prog1/prog2 bug + +2004-10-26 Katsumi Yamaoka + + * 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 + + * gnus-agent.el (gnus-agent-expire-group-1): Fix last merge from + v5-10: Use `point-at-bol'. + +2004-10-26 Simon Josefsson + + * hashcash.el: Fix URL in comment, reported by Cheng Gao + . + +2004-10-25 Reiner Steib + + * html2text.el (html2text-buffer-head): Remove. Use `goto-char' + instead. + +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 + + * gnus-encrypt.el: removed in favor of encrypt.el + +2004-10-21 Katsumi Yamaoka + + * mm-view.el (mm-display-inline-fontify): Inhibit font-lock when + running the major-mode function. + +2004-10-19 Katsumi Yamaoka + + * gnus-sum.el (gnus-update-summary-mark-positions): Search for + dummy marks in the right way. + +2004-10-18 David Edmondson + + * mm-view.el (mm-w3m-cid-retrieve-1): Don't use recursive call + excessively. + +2004-10-18 Teodor Zlatanov + + * 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 + + * encrypt.el: add autoload tags + + * spam.el (spam-resolve-registrations-routine): remove article + from unregistration list too. Reported by David Hanak + + +2004-10-18 Reiner Steib + + * gnus-art.el (gnus-copy-article-ignored-headers): Default to + nil. Changed custom type. + +2004-10-17 Reiner Steib + + * gnus-art.el (gnus-copy-article-ignored-headers): New variable. + + * gnus-sum.el (gnus-summary-move-article): Use it. + +2004-10-15 Teodor Zlatanov + + * 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 + + * netrc.el (autoload, netrc-parse): use encrypt.el instead of + gnus-encrypt.el + + * encrypt.el: copied from gnus-encrypt.el + + * gnus-encrypt.el: commented that it's obsolete + +2004-10-15 Reiner Steib + + * gnus-score.el (gnus-adaptive-pretty-print): New variable. + (gnus-score-save): Use it. + + * message.el (message-bury): Use `window-dedicated-p'. + +2004-10-15 Simon Josefsson + + * pop3.el (top-level): Don't require nnheader. + (pop3-read-timeout): Add. + (pop3-accept-process-output): Add. + (pop3-read-response, pop3-retr): Use it. + +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 + + * netrc.el (netrc-machine-user-or-password): convenience wrapper + for netrc-machine + + * nnimap.el (nnimap-open-connection): use + netrc-machine-user-or-password + +2004-10-17 Richard M. Stallman + + * 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 + + * 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 + + * message.el (message-tokenize-header): Fix 2004-09-06 change + which used point-min in the wrong place. + +2004-10-12 Simon Josefsson + + * net/tls.el (tls-certtool-program): New variable. + (tls-certificate-information): New function, based on + ssl-certificate-information. + +2004-10-12 Katsumi Yamaoka + + * compface.el: Move the version of ELisp-based uncompface program + to the contrib directory because of the copyright problem. + +2004-10-12 Reiner Steib + + * message.el (message-kill-buffer): Raise the current frame. + +2004-10-10 Reiner Steib + + * gnus-sum.el: Mention that multibyte characters don't work as marks. + + * gnus.el (message-y-or-n-p): Autoload. + + * pop3.el (pop3-maildrop, pop3-mailhost, pop3-port) + (pop3-password-required, pop3-authentication-scheme) + (pop3-leave-mail-on-server): Made customizable. + (pop3): New custom group. + (pop3-retr): Remove `sleep-for' statements. + Suggested by Dave Love . + + * nnheader.el (nnheader-read-timeout): Explain 1.0 timeout for + Windows/DOS. + + * imap.el (imap-parse-flag-list, imap-parse-body-extension) + (imap-parse-body): Fix incorrect use of `assert'. Suggested by + Dave Love . + + * mml.el (mml-minibuffer-read-disposition): Require match. + Suggested by Dave Love . + +2004-10-11 Reiner Steib + + * gnus-group.el (gnus-group-delete-group): Change "\t." to " " in + doc string. + +2004-10-08 Katsumi Yamaoka + + * mm-uu.el (mm-uu-dissect-text-parts): Support all text/* types. + +2004-10-07 TSUCHIYA Masatoshi + + * gnus-art.el (gnus-mime-display-single): Call `mm-display-inline' + instead of calling `mm-insert-inline', to decode text/* parts + before displaying them. + +2004-10-07 Katsumi Yamaoka + + * mm-uu.el (mm-uu-text-plain-type): New variable. + (mm-uu-pgp-signed-extract-1): Use it. + (mm-uu-pgp-encrypted-extract-1): Use it. + (mm-uu-dissect): Allow MIME type and parameters as an optional arg; + bind mm-uu-text-plain-type with that value. + (mm-uu-dissect-text-parts): Pass MIME type and parameters to + mm-uu-dissect. + +2004-10-06 Katsumi Yamaoka + + * gnus-group.el (gnus-update-group-mark-positions): + * gnus-sum.el (gnus-update-summary-mark-positions): + * message.el (message-check-news-body-syntax): + * gnus-msg.el (gnus-debug): Use mm-string-as-multibyte instead + of string-as-multibyte. + +2004-10-05 Juri Linkov + + * gnus-group.el (gnus-update-group-mark-positions): + * gnus-sum.el (gnus-update-summary-mark-positions): + * message.el (message-check-news-body-syntax): + * gnus-msg.el (gnus-debug): Use `string-as-multibyte' to convert + 8-bit unibyte values to a multibyte string for search functions. + +2004-10-06 Katsumi Yamaoka + + * mm-uu.el (mm-uu-dissect): Allow optional arg. + (mm-uu-dissect-text-parts): New function. + + * gnus-art.el (gnus-display-mime): Use mm-uu-dissect-text-parts to + dissect text parts. + + * gnus-sum.el (gnus-summary-insert-subject): Remove redundant setq. + (gnus-summary-force-verify-and-decrypt): Revert 2004-08-18 change. + + * mm-decode.el (mm-dissect-singlepart): Revert 2004-08-18 change. + + * gnus-topic.el (gnus-topic-hierarchical-parameters): Use + gnus-current-topics instead of gnus-current-topic. + +2004-10-06 Jesper Harder + + * gnus-sum.el (gnus-summary-show-article): Use with-current-buffer. + +2004-10-05 Jesper Harder + + * nnsoup.el (nnsoup-read-active-file): Use dolist, mapc or last + where approriate. + + * nnml.el (nnml-generate-active-info): do. + + * nndiary.el (nndiary-generate-active-info): do. + + * gnus-topic.el (gnus-topic-hierarchical-parameters): do. + (gnus-topic-move): do. + + * gnus-sum.el (gnus-data-enter-list, gnus-summary-process-mark-set) + (gnus-summary-set-local-parameters, gnus-summary-read-document): do. + + * gnus-srvr.el (gnus-server-prepare) + (gnus-server-open-all-servers): do. + + * gnus-msg.el (gnus-summary-cancel-article) + (gnus-summary-resend-message) + (gnus-summary-mail-crosspost-complaint): do. + + * gnus-move.el (gnus-change-server): do. + + * gnus-group.el (gnus-group-unmark-all-groups) + (gnus-group-set-current-level): do. + +2004-10-04 Simon Josefsson + + * message.el (message-generate-hashcash): Doc fix. + +2004-10-02 Kevin Greiner + + * nnagent.el (nnagent-request-type): Bind gnus-agent to nil to + avoid infinite recursion via gnus-get-function. + +2004-10-02 Jesper Harder + + * mm-partial.el (mm-partial-find-parts): Use with-current-buffer. + + * nnfolder.el (nnfolder-generate-active-file): Use dolist. + + * nnmail.el (nnmail-split-history): do. + + * nnml.el (nnml-generate-nov-databases-1, nnml-request-rename-group) + (nnml-request-delete-group): do. + + * nnslashdot.el (nnslashdot-read-groups): do. + + * nnsoup.el (nnsoup-delete-unreferenced-message-files): do. + (nnsoup-unpack-packets, nnsoup-make-active): Simplify. + + * nnspool.el (nnspool-find-id): Use with-temp-buffer. + (nnspool-sift-nov-with-sed): Use last + (nnspool-retrieve-headers-with-nov): Use mapc. + (nnspool-request-newgroups): Use dolist. + (nnspool-request-group): Use last. + + * nntp.el (nntp-read-server-type): Use dolist. + + * nnvirtual.el (nnvirtual-create-mapping) + (nnvirtual-update-read-and-marked): Use dolist. + (nnvirtual-convert-headers): Simplify. + +2004-10-01 Kevin Greiner + + * gnus-agent.el (gnus-agent-synchronize-group-flags): Added + support for sync'ing tick marks. + +2004-10-01 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-toggle-header): Make it work even if + there's no visible header. + +2004-10-01 Kevin Greiner + + * gnus-agent.el (gnus-agent-synchronize-group-flags): When + necessary, pass full group name to gnus-request-set-marks. + +2004-10-01 Simon Josefsson + + * mailcap.el (mailcap-mime-data): Add pdf. Remove non-free + acroread. + +2004-10-01 Lars Magne Ingebrigtsen + + * spam-report.el (spam-report-gmane): Fix interactive. + + * gnus-art.el (gnus-treat-body-boundary): Only do stuff under X. + + * gnus-agent.el (gnus-agent-synchronize-flags-server): Be silent + when writing file. + (gnus-agent-synchronize-flags): Don't default to being + interactive. + +2004-09-30 Simon Josefsson + + * message.el (message-generate-hashcash): Add. + (message-send-mail): Use it, call mail-add-payment. + +2004-09-29 Teodor Zlatanov + + * spam.el (spam-verify-bogofilter): -V, not -sV option + +2004-09-28 Kevin Greiner + + * gnus-agent.el (gnus-agent-synchronize-group-flags): Replaced + gnus-requst-update-info with explicit code to sync the in-memory + info read flags with the marks being sync'd to the backend. + + *gnus-util.el (gnus-pp): Added optional stream to match pp API. + +2004-09-28 Teodor Zlatanov + + * spam.el (spam-verify-bogofilter): new function + (spam-check-bogofilter) + (spam-bogofilter-register-with-bogofilter): use it + (spam-verify-bogofilter): small fixes + +2004-09-28 Simon Josefsson + + * hashcash.el (hashcash-generate-payment): Revert. + +2004-09-28 Teodor Zlatanov + + * 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 + to gnus-split-references but extracts only the message-ID without + 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) + + * spam.el (spam-use-hashcash): remove comment + +2004-09-27 Jesper Harder + + * gnus-cache.el (gnus-cache-possibly-remove-articles-1) + (gnus-cache-enter-article, gnus-cache-remove-article) + (gnus-cache-braid-heads, gnus-cache-generate-active): Use dolist. + + * gnus-async.el (gnus-async-prefetch-remove-group): do. + + * gnus-art.el (article-hide-boring-headers) + (article-translate-strings, article-display-face) + (gnus-article-mime-match-handle-first) + (gnus-article-highlight-headers) + (gnus-article-add-buttons-to-head): do. + +2004-09-27 Simon Josefsson + + * hashcash.el: New version, from + http://users.actrix.co.nz/mycroft/hashcash.el. Previously in + ../contrib/. + +2004-09-27 Katsumi Yamaoka + + * mm-decode.el (mm-copy-to-buffer): Don't use set-buffer-multibyte. + +2004-09-26 Jesper Harder + + * gnus-dup.el (gnus-dup-open): Use mapc. + (gnus-dup-enter-articles, gnus-dup-suppress-articles): Use dolist. + + (gnus-dup-enter-articles): Remove excess ID's from gnus-dup-hashtb. + Reported by Stefan Wiens . + + * gnus.el (gnus-shutdown): Use dolist. + + * gnus-undo.el (gnus-undo): Use mapc. + + * nnrss.el (nnrss-generate-active): do. + + * message.el (message-cite-original-without-signature) + (message-cite-original): Use mapc. + (message-do-actions, message-make-forward-subject): Use dolist. + +2004-09-25 Kevin Greiner + + * gnus-agent.el (gnus-agent-check-overview-buffer): Fixed range of + deletion to remove entire duplicate line. Fixes merged article + number bug. + +2004-09-25 Kevin Greiner + + * gnus-agent.el (gnus-agent-possibly-synchronize-flags): Ignore + servers that are offline. Avoids having gnus-agent-toggle-plugged + first ask if you want to open a server and then, even when you + responded with no, asking if you want to synchronize the server's + flags. + (gnus-agent-synchronize-flags-server): Rewrote read loop to handle + multi-line expressions. + (gnus-agent-synchronize-group-flags): New internal function. + Updates marks in memory (in the info structure) AND in the + backend. + + * gnus-util.el (gnus-remassoc): Fixed typo in documentation. + + * nnagent.el (nnagent-request-set-mark): Use + gnus-agent-synchronize-group-flags, not backend's request-set-mark + method, to ensure that synchronization updates marks in the + backend and in the info (in memory) structure. + +2004-09-24 Katsumi Yamaoka + + * gnus-uu.el (gnus-uu-digest-mail-forward): Obey the process/prefix + convention fully; don't miss the root article of a thread; make + the X-Draft-From header with correct article numbers. + +2004-09-23 Kevin Greiner + + * gnus-agent.el (gnus-agent-synchronize-flags-server): Do nothing + unless plugged. Disable the agent so that an open failure causes + an error. + + * gnus-int.el (gnus-request-set-mark, gnus-request-update-mark): + Reverted 2004-09-21 change. The backend must be opened while + synchronizing flags even when the backend stores the flags + locally. + +2004-09-23 Reiner Steib + + * gnus-msg.el (gnus-configure-posting-styles): Narrow to headers + in `header' match. Reported by Svend Tollak Munkejord. + + * message.el (message-cite-original): Fix use of + `message-cite-articles-with-x-no-archive'. + +2004-09-22 Katsumi Yamaoka + + * gnus-win.el (gnus-buffer-configuration): Add mml-preview. + (gnus-window-to-buffer): Ditto. + + * mml.el (mml-preview-buffer): New variable. + (mml-preview): Manage window layout with gnus-buffer-configuration. + + * gnus-msg.el (gnus-setup-message): Put article numbers into the + X-Draft-From header even if those articles aren't quoted. + +2004-09-21 Kevin Greiner + + * gnus-int.el (gnus-servers-that-use-local-marks): New variable. + (gnus-request-set-mark, gnus-request-update-mark): Use new + g-s-t-u-l-m to decide to use backend even when unplugged. + +2004-09-21 Katsumi Yamaoka + + * gnus-msg.el (gnus-inews-make-draft-meta-information): Don't add + a trailing whitespace. Suggested by Cheng Gao . + +2004-09-20 Simon Josefsson + + * mm-util.el (mm-charset-synonym-alist): Map "unicode" to + "utf-16-le". + +2004-09-20 Stefan Monnier + + * mm-decode.el (mm-copy-to-buffer): Preserve the data's unibyteness. + +2004-09-19 Reiner Steib + + * uudecode.el (uudecode-use-external): Add :version. + + * smime.el (smime-CA-file, smime-encrypt-cipher) + (smime-dns-server): Add :version. + + * smiley.el (gnus-smiley-file-types): Add :version. + + * sha1.el (sha1-use-external): Add :version. + + * pgg-def.el (pgg-query-keyserver): Add :version. + + * nnmail.el (nnmail-fancy-expiry-targets) + (nnmail-mail-splitting-charset, nnmail-mail-splitting-decodes): + + * nnimap.el (nnimap-split-download-body, nnimap-dont-close) + (nnimap-retrieve-groups-asynchronous): Add :version. + (nnimap-close-asynchronous): Add :version. Fixed typo in doc string. + + * mml.el (mml-content-disposition-parameters) + (mml-insert-mime-headers-always): Add :version. + + * mm-util.el (mm-coding-system-priorities): + + * mm-decode.el (mm-inline-text-html-with-images) + (mm-keep-viewer-alive-types, mm-external-terminal-program) + (mm-verify-option): Add :version. + (mm-text-html-renderer): Change :version. + + * message.el (message-fcc-externalize-attachments) + (message-required-headers, message-draft-headers) + (message-subject-trailing-was-query) + (message-subject-trailing-was-ask-regexp) + (message-subject-trailing-was-regexp, message-mark-insert-begin) + (message-mark-insert-end, message-archive-header) + (message-archive-note, message-cross-post-default) + (message-cross-post-note, message-followup-to-note) + (message-cross-post-note-function, message-use-mail-followup-to) + (message-subscribed-address-functions) + (message-subscribed-address-file, message-subscribed-addresses) + (message-subscribed-regexps, message-allow-no-recipients) + (message-yank-cited-prefix, message-signature-insert-empty-line) + (message-hidden-headers, message-hierarchical-addresses) + (message-mail-user-agent, message-use-idna) + (message-valid-fqdn-regexp) + (message-strip-special-text-properties, message-header-synonyms) + (message-beginning-of-line, message-tab-body-function): Add :version. + (message-insert-canlock, message-wide-reply-confirm-recipients): + Change :version. + + * mail-source.el (mail-source-ignore-errors): Add :group, :type + and :version. + (mail-source-delete-old-incoming-confirm) + (mail-source-movemail-program): Add :version. + + * gnus.el (gnus-parameters, gnus-user-agent): Add :version. + (gnus-agent-cache, gnus-agent): Change :version. + + * gnus-util.el (gnus-use-byte-compile): Change :version. + + * gnus-sum.el (gnus-summary-make-false-root-always) + (gnus-summary-default-high-score) + (gnus-summary-default-low-score, gnus-auto-goto-ignores) + (gnus-forwarded-mark, gnus-unseen-mark, gnus-no-mark) + (gnus-read-all-available-headers, gnus-article-emulate-mime) + (gnus-sum-thread-tree-root, gnus-sum-thread-tree-false-root) + (gnus-sum-thread-tree-single-indent) + (gnus-sum-thread-tree-vertical, gnus-sum-thread-tree-indent) + (gnus-sum-thread-tree-leaf-with-other) + (gnus-sum-thread-tree-single-leaf): Add :version. + (gnus-summary-display-arrow, gnus-summary-muttprint-program) + (gnus-article-loose-mime): Change :version. + + * gnus-start.el (gnus-backup-startup-file) + (gnus-save-startup-file-via-temp-buffer): Add :version. + + * gnus-srvr.el (gnus-server-browse-in-group-buffer) + (gnus-server-offline-face): Add :version. + + * gnus-score.el (gnus-adaptive-word-length-limit): + + * gnus-msg.el (gnus-gcc-externalize-attachments) + (gnus-debug-files, gnus-debug-exclude-variables) + (gnus-discouraged-post-methods): Change :version. + (gnus-confirm-mail-reply-to-news) + (gnus-confirm-treat-mail-like-news): Add :version. + + * gnus-int.el (gnus-server-unopen-status): Add :version. + + * gnus-group.el (gnus-group-jump-to-group-prompt) + (gnus-large-ephemeral-newsgroup) + (gnus-fetch-old-ephemeral-headers): Add :version. + + * gnus-fun.el (gnus-x-face-directory) + (gnus-convert-pbm-to-x-face-command) + (gnus-convert-image-to-x-face-command) + (gnus-convert-image-to-face-command): Add :version. + + * gnus-delay.el (gnus-delay-default-hour): Add :version. + + * gnus-cite.el (gnus-cite-blank-line-after-header) + (gnus-article-boring-faces): + + * gnus-art.el (gnus-buttonized-mime-types) + (gnus-inhibit-mime-unbuttonizing) + (gnus-treat-display-face) + (gnus-treat-body-boundary): Change :version. + (gnus-body-boundary-delimiter, gnus-picon-databases) + (gnus-treat-strip-cr, gnus-treat-leading-whitespace) + (gnus-treat-date-english, gnus-treat-fold-headers) + (gnus-article-skip-boring, gnus-treat-fold-newsgroups) + (gnus-treat-mail-picon, gnus-treat-wash-html) + (gnus-article-encrypt-protocol) + (gnus-use-idna, gnus-article-over-scroll) + (gnus-mime-display-multipart-alternative-as-mixed) + (gnus-mime-display-multipart-related-as-mixed) + (gnus-button-valid-fqdn-regexp, gnus-button-man-handler) + (gnus-ctan-url, gnus-button-ctan-handler) + (gnus-button-handle-ctan-bogus-regexp) + (gnus-button-ctan-directory-regexp) + (gnus-button-mid-or-mail-regexp, gnus-button-prefer-mid-or-mail) + (gnus-button-mid-or-mail-heuristic-alist, gnus-button-tex-level) + (gnus-button-man-level, gnus-button-emacs-level) + (gnus-button-message-level, gnus-button-browse-level): Add :version. + + * gnus-agent.el (gnus-agent-fetched-hook): Add :version. + (gnus-agent-go-online): Change :version. + (gnus-agent-expire-unagentized-dirs) + (gnus-agent-auto-agentize-methods): Add :version. + + * flow-fill.el (fill-flowed-display-column) + (fill-flowed-encode-column): Add :version. + + * deuglify.el (gnus-outlook-deuglify-unwrap-min) + (gnus-outlook-deuglify-unwrap-max) + (gnus-outlook-deuglify-cite-marks) + (gnus-outlook-deuglify-unwrap-stop-chars) + (gnus-outlook-deuglify-no-wrap-chars) + (gnus-outlook-deuglify-attrib-cut-regexp) + (gnus-outlook-deuglify-attrib-verb-regexp) + (gnus-outlook-deuglify-attrib-end-regexp) + (gnus-outlook-display-hook): Add :version. + + * binhex.el (binhex-use-external): Add :version. + +2004-09-16 Reiner Steib + + * gnus-sum.el (gnus-fetch-old-headers): Add custom choices `t' + and `invisible'. + +2004-09-10 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-trim): watch out for negatives + in gnus-registry-trim + +2004-09-13 Simon Josefsson + + * dns-mode.el: Add XEmacs auto-mode-alist autoload cookie. + + * nnimap.el (nnimap-demule): Revert 2004-08-30 change. + + * dns-mode.el (dns-mode): Fix menu for XEmacs, reported by Steve + Youngs and suggested by Katsumi Yamaoka + . + (dns-mode-font-lock-keywords): Fix faces, reported by Steve Youngs + and suggested by Katsumi Yamaoka + . + + * sieve.el (sieve-manage-mode): Ditto. + +2004-09-13 Reiner Steib + + * gnus-sum.el (gnus-summary-copy-article): Fix doc string. + +2004-09-11 Simon Josefsson + + * dns-mode.el: Add. + + * mm-view.el (mm-display-dns-inline): Add. + + * mm-decode.el (mm-inline-media-tests): Add text/dns. + (mm-automatic-display): Ditto. + + * mailcap.el (mailcap-mime-data): Add text/dns. + (mailcap-mime-extensions): Map .soa to text/dns. + +2004-09-10 Miles Bader + + * gnus-art.el (article-decode-mime-words, article-babel) + (gnus-article-highlight-signature, gnus-article-add-buttons) + (gnus-signature-toggle): Remove unnecessary bindings of + `inhibit-read-only' inherited from v5.10 merge. + +2004-09-08 Reiner Steib + + * nntp.el (nntp): New customization group. + (nntp-authinfo-file): Add customization group. + + * mml2015.el (mml2015-unabbrev-trust-alist): Add customization group. + + * mml-sec.el (mml-signencrypt-style-alist): Ditto. + + * gnus.el (to-address, to-list, subscribed) + (large-newsgroup-initial): Ditto. + + * flow-fill.el (fill-flowed-display-column) + (fill-flowed-encode-column): Ditto. + +2004-09-06 Stefan + + * message.el (message-tokenize-header, message-send-mail-with-qmail): + Use point-min rather than 1. + (message-send-mail): Use buffer-size rather than point-max. + + * gnus-sum.el (gnus-summary-search-article-forward): + Signal a specific `search-failed' rather than a generic `error'. + + * gnus-salt.el (gnus-pick-mouse-pick-region): Switch 1 => point-min. + (gnus-generate-vertical-tree): Usue `bobp' rather than compare to 1. + (gnus-highlight-selected-tree): Use point-min rather than 1 and 2. + +2004-09-10 Simon Josefsson + + * nndb.el (require): Remove tcp and duplicate cl. + +2004-09-10 Katsumi Yamaoka + + * gnus-agent.el (directory-files-and-attributes): Move forward. + +2004-09-09 Kevin Greiner + + * gnus-agent.el (directory-files-and-attributes): Optionally + defined to support XEmacs. + +2004-09-09 Kevin Greiner + + * gnus-agent.el (gnus-agent-cat-groups): rewrote avoiding defsetf + to avoid run-time CL dependencies. + (gnus-agent-unfetch-articles): New function. + (gnus-agent-fetch-headers): Use gnus-agent-braid-nov to validate + article numbers even when local .overview file is missing. + (gnus-agent-read-article-number): New function. Only accepts + 27-bit article numbers. + (gnus-agent-copy-nov-line, gnus-agent-uncached-articles): Use + gnus-agent-read-article-number. + (gnus-agent-braid-nov): Rewrote to validate article numbers coming + from backend while recognizing that article numbers in .overview + must be valid. + (gnus-agent-update-files-total-fetched-for): Use + directory-files-and-attributes to improve performance. + * gnus-int.el (gnus-request-move-article): Use + gnus-agent-unfetch-articles in place of gnus-agent-expire to + improve performance. + + * gnus-start.el (gnus-convert-old-newsrc): Changed message text as + some users confused by references to .newsrc when they only have a + .newsrc.eld file. + (gnus-convert-mark-converter-prompt, + gnus-convert-converter-needs-prompt): Fixed use of property list. + * legacy-gnus-agent.el (gnus-agent-convert-to-compressed-agentview-prompt): + New function. Used internally to only display 'gnus converting + files' message when actually necessary. + + * gnus-sum.el (): Removed (require 'gnus-agent) as required + methods now autoloaded. + +2004-09-03 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-insert-subject): Remove list + identifiers. + +2004-09-02 Reiner Steib + + * gnus-picon.el: Fix indentation and closing parenthesis. + +2004-09-01 Simon Josefsson + + * message.el (message-canlock-generate): Require sha1, not + sha1-el. (Can we get rid of this require alltogheter? It is ugly + to require within a function. Sadly, if sha1.el isn't loaded, the + let binding in m-c-g will hide the defcustom definition, which is + bad.) + + * canlock.el: Require sha1, not sha1-el. + + * message.el: Don't autoload sha1 (there is a autoload cookie in + sha1.el). + + * sha1-el.el: Renamed to sha1.el. + +2004-08-30 Juanma Barranquero + + * ietf-drums.el (ietf-drums-remove-whitespace): Fix character constant. + +2004-08-30 Stefan Monnier + + * nnimap.el (nnimap-demule): Avoid string-as-multibyte. + +2004-08-30 Kim F. Storm + + * nntp.el (nntp-authinfo-file): Add :group 'nntp. + + * nnimap.el (nnimap-authinfo-file, nnimap-prune-cache): + Add :group 'nnimap. + +2004-08-30 Simon Josefsson + + * rfc2231.el (rfc2231-parse-string): Restore whitespace syntax for + ?* and ?\; (tiny patch). From Andreas Schwab . + +2004-08-30 Simon Josefsson + + * ietf-drums.el (ietf-drums-syntax-table): Set syntax of ?* ?\; + and ?\' to symbol instead of whitespace (tiny patch). From + Andreas Schwab . + +2004-08-30 Katsumi Yamaoka + + * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote. + + * gnus-sum.el (gnus-summary-morse-message): Use search-forward + instead of re-search-forward. + + * gnus-uu.el (gnus-uu-save-article): Ditto. + (gnus-uu-post-encode-uuencode): Ditto. + + * html2text.el (html2text-clean-list-items): Ditto. + (html2text-clean-dtdd): Ditto. + (html2text-format-tags): Ditto. + + * message.el (message-send-mail-with-sendmail): Fix regexp. + (message-fill-field-general): Use search-forward instead of + re-search-forward. + (unbold-region): Ditto. + + * nnrss.el (nnrss-request-article): Ditto. + + * nnslashdot.el (nnslashdot-request-article): Ditto. + + * nnweb.el (nnweb-gmane-wash-article): Ditto. + + * gnus-sum.el (gnus-summary-make-menu-bar): Avoid the + "Unrecognized menu descriptor" error in XEmacs. + +2004-08-26 Katsumi Yamaoka + + * nndoc.el (nndoc-type-alist): Fix regexp in the rfc822-forward + entry. + + * gnus-group.el (gnus-group-line-format-alist): Convert the value + of gnus-tmp-news-method into string under XEmacs. It will be + passed to gnus-correct-length which takes only a string argument. + +2004-08-24 Katsumi Yamaoka + + * gnus-util.el (gnus-bind-print-variables): New macro. + (gnus-prin1): Use it. + (gnus-prin1-to-string): Use it. + (gnus-pp): New function. + (gnus-pp-to-string): New function. + + * gnus-cus.el (gnus-agent-cat-prepare-category-field): Replace + pp-to-string with gnus-pp-to-string. + * gnus-eform.el (gnus-edit-form): Replace pp with gnus-pp. + * gnus-group.el (gnus-group-make-kiboze-group): Ditto. + * gnus-msg.el (gnus-debug): Ditto. + * gnus-score.el (gnus-score-save): Ditto. + * gnus-spec.el (gnus-update-format): Replace pp-to-string with + gnus-pp-to-string. + * legacy-gnus-agent.el (gnus-agent-unlist-expire-days): Replace pp + with gnus-pp. + * score-mode.el (gnus-score-pretty-print): Ditto. + * webmail.el (webmail-debug): Ditto. + +2004-08-23 Katsumi Yamaoka + + * gnus-art.el (article-display-face, article-display-x-face): Use + buffer-read-only. + +2004-08-22 Katsumi Yamaoka + + * gnus-art.el (article-hide-list-identifiers): Bind + inhibit-read-only as t. + +2004-08-22 Reiner Steib + + * gnus-mlspl.el (gnus-group-split-update): Fix docstring. + +2004-08-22 Stefan Monnier + + * gnus-art.el: Use inhibit-read-only instead of buffer-read-only. + (gnus-narrow-to-page): Don't assume point-min == 1. + (gnus-article-edit-mode): Derive from message-mode. + + * gnus-score.el (gnus-score-find-bnews): Simplify and don't assume + point-min == 1. + + * imap.el (imap-parse-address-list, imap-parse-body-ext): + Disable incorrect use of `assert'. + + * message.el (message-mode): Set comment-start-skip. + + +2004-08-22 Sam Steingold + + * pop3.el (pop3-leave-mail-on-server): New user variable. + (pop3-movemail): Delete mail only when it is nil. + +2004-08-21 Reiner Steib + + * nntp.el (nntp-marks-is-evil): Fix typo in docstring. + + * mml.el (mml-preview): Use `pop-to-buffer'. + + * message.el (message-goto-mail-followup-to): Insert after "To". + (message-carefully-insert-headers): Add comment. + + * gnus.el: Remove unused variable `gnus-article-check-size'. + + * gnus-sum.el (gnus-summary-make-menu-bar): Add help texts. + + * gnus-art.el (gnus-button-alist): Improve + `gnus-button-handle-library' entry. + +2004-08-19 Paul Jarc + + * nnmaildir.el (nnmaildir--emlink-p, nnmaildir--enoent-p): Use + downcase, since XEmacs capitalizes error messages differently. + From Sebastian Freundt . + +2004-08-18 Jesper Harder + + * nntp.el: Add (require 'gnus) due to reference to + `gnus-directory'. Reported by Matt Swift . + +2004-08-18 Florian Weimer + + * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Bind + `mm-fill-flowed'. + + * mm-decode.el (mm-dissect-singlepart): Check it. + +2004-08-17 Teodor Zlatanov + + * nnimap.el (nnimap-open-connection): add 'imaps' synonym to + 'imap' for netrc parsing + +2004-08-16 Reiner Steib + + * mailcap.el (mailcap-mime-data): Mark as risky. + +2004-08-15 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encode-region): Assume the close parenthesis + may be included in the encoded word. + (rfc2047-encode): Don't append a space if the encoded word + includes close parenthesis. + +2004-08-12 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encode-1, rfc2047-encode): Improve encoding + of text within parentheses. + +2004-08-06 Teodor Zlatanov + + * gnus-encrypt.el (gnus-encrypt-insert-file-contents) + (gnus-encrypt-write-file-contents): the password key is the file + name PLUS the cipher, not just the cipher. Also remove failed + passwords from the cache. + +2004-08-06 Simon Josefsson + + * gnus-sum.el (gnus-article-loose-mime): Change default to t. Doc + fix. + +2004-08-05 Katsumi Yamaoka + + * rfc2047.el (rfc2047-fold-region): Use trailing whitespace as + LWSP. + +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 + + * netrc.el: removed 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 + + * 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 + +2004-07-28 Simon Josefsson + + * pgg-pgp5.el (pgg-pgp5-encrypt-region): Accept sign + parameter (but don't use it, for now). + + * imap.el (imap-ssl-open): Use imap-process-connection-type, + instead of hard coding to nil. + +2004-07-28 Katsumi Yamaoka + + * mm-view.el (mm-inline-image-emacs): Open lines under an image + as mm-inline-image-xemacs does. + +2004-07-26 Simon Josefsson + + * gnus-group.el (gnus-group-group-map, gnus-group-make-menu-bar): + Revert part of 2004-07-17 change below. + +2004-07-25 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encode-region): Don't infloop. Suggested by + Hiroshi Fujishima . + +2004-07-25 Lars Magne Ingebrigtsen + + * flow-fill.el (fill-flowed): Remove space stuffing, and only do + quotes that actually start with ">" at the beginning of the + lines. + +2004-07-23 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encode-region): Fix last change. + (rfc2047-encode-parameter): Remove useless concat. + +2004-07-22 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encode-region): Check carefully whether to + encode special characters; fix some kind of misconfigured headers; + signal a real error if debug-on-quit or debug-on-error is non-nil. + (rfc2047-encode-max-chars): New variable. + (rfc2047-encode-1): Use it. + (rfc2047-encode-parameter): New function. + + * mml.el (mml-insert-parameter): Remove an excessive space. + +2004-07-17 Simon Josefsson + + * gnus-group.el (gnus-group-make-group-simple): Add, suggested by + Kai Grossjohann . + (gnus-group-group-map): Use it, instead of gnus-group-make-group. + (gnus-group-make-menu-bar): Ditto. + + * gnus-util.el (gnus-group-server): Add. + +2004-07-16 Jesper Harder + + * message.el (message-clone-locals): Clone sendmail and smtp + variables. + +2004-07-12 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encode-region): Fix last change. + +2004-07-12 Katsumi Yamaoka + From David Hedbor . + + * nnmail.el (nnmail-split-lowercase-expanded): New user option. + (nnmail-expand-newtext): Lowercase expanded entries if + nnmail-split-lowercase-expanded is non-nil. + +2004-07-12 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encode-region): Treat backslash-quoted + characters as non-special. + +2004-07-09 Simon Josefsson + + * gnus-agent.el (gnus-agent-synchronize-flags): Revert to ask. + Users will lose all flag changes made while unplugged with + e.g. nntp unless flag synchronization happens, thus `nil' is not a + good default. See numerous reports on ding mailing list. + +2004-07-09 Katsumi Yamaoka + + * nndoc.el (nndoc-type-alist): Improve regexp for article-begin, + add generate-head-function and generate-article-function to the + rfc822-forward entry. + (nndoc-rfc822-forward-generate-article): New function. + (nndoc-rfc822-forward-generate-head): New function. + + * mm-decode.el (mm-dissect-buffer): Simplify cleaning of CTE. + +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. + +2004-07-03 Lars Magne Ingebrigtsen + + * nnheader.el (nnheader-uniquify-message-id): New experimental + variable. + (nnheader-nov-read-message-id): Use it. + + * spam-report.el (spam-report-gmane): Add interactive. + +2004-07-02 Katsumi Yamaoka + + * mm-encode.el (mm-content-transfer-encoding-defaults): Use + qp-or-base64 for the application/* types. + +2004-07-02 Jesper Harder + + * nnrss.el (nnrss-read-group-data): Fix off-by-one error. From + Joakim Verona . + +2004-06-30 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-trim): don't allow a negative + trim value + +2004-01-25 Paul Jarc + + * nnmaildir.el (nnmaildir--condcase, nnmaildir--enoent-p): + New macro and function. + (nnmaildir--new-number, nnmaildir-request-set-mark): Use them. + +2004-06-29 Katsumi Yamaoka + + * mm-util.el (mm-enrich-utf-8-by-mule-ucs): Fix cleaning of + after-load-alist. + +2004-06-29 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-get-new-news-this-group): Don't + update info that isn't there. + +2004-06-29 Katsumi Yamaoka + + * mm-view.el (mm-inline-render-with-function): Use multibyte + buffer; decode html source by charset. + + * mm-encode.el (mm-content-transfer-encoding-defaults): Doc fix. + + * mm-util.el (mm-mime-mule-charset-alist): Add the windows-1251 + entry. From Ilya N. Golubev . + (mm-enrich-utf-8-by-mule-ucs): New function run when Mule-UCS is + loaded under XEmacs. + (): Don't make duplicated entries in mm-mime-mule-charset-alist. + +2004-06-28 Jesper Harder + + * nnheader.el (nnheader-max-head-length): Increase to 8192. + +2004-06-28 Katsumi Yamaoka + + * mm-util.el (mm-coding-system-p): Return a coding-system. + (mm-mime-mule-charset-alist): Use shift_jis instead of + iso-2022-jp-2 for the katakana-jisx0201 mule charset; add new + entries for the mime charsets iso-2022-jp-3 and shift_jis. + (mm-coding-system-priorities): Use shift_jis and iso-8859-1 + instead of japanese-shift-jis and iso-latin-1 respectively in + order to share the default value with both Emacs and XEmacs-mule. + (mm-mule-charset-to-mime-charset): Make + mm-coding-system-priorities effective. + (mm-sort-coding-systems-predicate): Canonicalize coding-systems + while predicating of candidates upon the priorities. + +2004-06-27 Jesper Harder + + * gnus-sum.el (gnus-summary-make-menu-bar): Add + gnus-uu-invert-processable. + + * gnus.el: Autoload gnus-uu-invert-processable. + +2004-06-24 Katsumi Yamaoka + + * mm-util.el (mm-with-multibyte-buffer): New macro. + + * rfc2047.el (rfc2047-encode-string): Use it. + (rfc2047-encode-region): Move point to the end of the region after + encoding. Suggested by IRIE Tetsuya . + +2004-06-23 Katsumi Yamaoka + + * gnus-cite.el (gnus-cite-parse): Don't ignore case when finding + ">From ". Thanks to Reiner Steib . + +2004-06-23 Katsumi Yamaoka + + * gnus-cite.el (gnus-cite-ignore-quoted-from): New user option. + (gnus-cite-parse): Ignore quoted envelope From_. Suggested by + Karl Chen . + +2004-06-23 Jesper Harder + + * message.el (message-idna-to-ascii-rhs-1): Don't choke on + invalid addresses. + +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-move-spam-nonspam-groups-only) + (spam-process-ham-in-nonham-groups) + (spam-process-ham-in-spam-groups): variables removed, 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 + (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 + (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-report-articles-gmane, spam-report-articles-resend): + functions removed, 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) + (spam-backend-spam-registration-function) + (spam-backend-ham-unregistration-function) + (spam-backend-spam-unregistration-function) + (spam-backend-statistical-p, spam-backend-mover-p) + (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-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-log-undo-registration, spam-register-routine) + (spam-log-processing-to-registry) + (spam-log-unregistration-needed-p): renamed "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-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 + + * 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 + + * gnus-sum.el (gnus-nov-parse-line): add the message number to + the nnheader-nov-read-message-id call + +2004-06-21 Katsumi Yamaoka + + * gnus-group.el (gnus-group-get-new-news-this-group): Don't call + gnus-activate-group twice. Suggested by Markus Peter + . + +2004-06-18 Katsumi Yamaoka + + * gnus-art.el (gnus-article-time-format): Exchange the order of + day and month in the default value; fix customization type. + (article-date-ut): Use add-text-properties. + (article-make-date-line): Use message-make-date instead of + current-time-string. + + * message.el (message-fetch-field): Don't use set-text-properties. + (message-make-date): Simplify. + + * messagexmas.el (message-xmas-make-date): New function. + (message-xmas-redefine): Defalias message-make-date to it. + +2004-06-17 Katsumi Yamaoka + + * rfc2047.el (rfc2047-syntax-table): Treat `(' and `)' as is. + (rfc2047-encode-region): Treat text within parentheses as special; + show the original text when error has occurred. + + * gnus-group.el (gnus-group-get-new-news-this-group): Pass the + already-computed method to gnus-activate-group. + + * gnus-start.el (gnus-make-hashtable-from-newsrc-alist): Make the + same select-methods identical Lisp objects. + + * gnus-srvr.el (gnus-server-set-info): Don't make a new Lisp + object when modifying the info. + +2004-06-16 Katsumi Yamaoka + + * gnus-srvr.el (gnus-server-set-info): Remove the server from + gnus-opened-servers since it has never been opened with the new + configuration yet. + +2004-06-15 Katsumi Yamaoka + + * nnheader.el (nnheader-nov-read-message-id): Pass the optional + arg to nnheader-generate-fake-message-id. + +2004-06-14 Teodor Zlatanov + + * 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 + + * gnus-sum.el (gnus-get-newsgroup-headers): call + nnheader-generate-fake-message-id with the article number + +2004-06-12 YAGI Tatsuya (tiny change) + + * gnus-art.el (gnus-article-next-page): Fix the way to find a real + end-of-buffer. + +2004-06-12 Lars Magne Ingebrigtsen + + * message.el (message-ignored-supersedes-headers): Add Approved. + +2004-06-11 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encode-message-header): Remove useless + goto-char. + (rfc2047-encode): Fold the line before encoding. + +2004-06-10 Lars Magne Ingebrigtsen + + * rfc2047.el (rfc2047-encode-message-header): Disabled header + folding -- not all headers can be folded, and this should be done + by the message composition mode. Probably. I think. + +2004-06-10 Katsumi Yamaoka + + * gnus-util.el (gnus-remove-text-with-property): Make it slightly + fast. + + * gnus-ems.el (gnus-remove-image): Don't use + message-text-with-property; remove only the image found first. + + * gnus-xmas.el (gnus-xmas-remove-image): Remove only the image + found first. + +2004-06-09 Jesper Harder + + * message.el (message-send-mail-with-sendmail): Use with-current-buffer. + +2004-06-09 Katsumi Yamaoka + + * message.el (message-text-with-property): Make it fast and accept + optional arguments. + (message-strip-forbidden-properties): Use it. + (message-fix-before-sending): Follow the m-t-w-p change. + + * gnus-ems.el (gnus-remove-image): Follow the m-t-w-p change. + +2004-06-08 Katsumi Yamaoka + + * gnus-art.el (article-hide-headers): Don't change the buffer + mistakenly when performing mml-preview even if + gnus-single-article-buffer is nil. + +2004-06-08 Kai Grossjohann + + * message.el (message-expand-name-databases): New user option. + (message-expand-name): Use it. + +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 + + * gnus.el (ham-resend-to): new group parameter + (spam-process): add ham resend option + + * spam-report.el (spam-report-resend): allow reporting ham + (spam-report-resend-ham): simple wrapper + +2004-06-06 Lars Magne Ingebrigtsen + + * message.el (message-cite-articles-with-x-no-archive): New + variable. + (message-cite-original): Use it. + +2004-06-04 Lars Magne Ingebrigtsen + + * message.el (message-cite-original): Respect X-No-Archive. + +2004-06-04 Katsumi Yamaoka + + * gnus-art.el (article-hide-headers): Refer to the values for + gnus-ignored-headers and gnus-visible-headers in the summary + buffer since a user may have set them as group parameters. + +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 + +2004-06-02 Reiner Steib + + * mail-source.el (mail-source-directory): Fix doc-string. + +2004-05-29 Teodor Zlatanov + + * assistant.el (assistant-render-text, assistant-eval): add :set + widget type, which is different because it takes and returns a + list. Much hilarity ensues. + +2004-05-28 Reiner Steib + + * gnus-art.el (gnus-button-alist): Fixed regexp for manual links. + + * gnus-group.el (gnus-group-get-new-news-this-group): Added + doc-string. + + * gnus-start.el (gnus-activate-group): Added doc-string. + +2004-05-28 Katsumi Yamaoka + + * mm-encode.el (mm-safer-encoding): Consider 7bit is safe. + +2004-05-27 Teodor Zlatanov + + * assistant.el (assistant-render-text): trying to add a :set + widget, more to come... + + * spam.el (spam-group-spam-contents-p): handle empty groupname + strings + (spam-report-articles-resend) + (spam-report-resend-register-routine): allow spam-report-resend-to + to be a group parameter or a global value + (tiny change). From Daniel Pittman . + (spam-register-routine): do registration iff any articles warrant + it. + (spam-summary-prepare-exit): changed log message for nil group + destinations + +2004-05-26 Simon Josefsson + + * starttls.el: Merge with my GNUTLS based starttls.el. + (starttls-gnutls-program, starttls-use-gnutls) + (starttls-extra-arguments, starttls-process-connection-type) + (starttls-connect, starttls-failure, starttls-success): New + variables. + (starttls-program, starttls-extra-args): Doc fix. + (starttls-negotiate-gnutls, starttls-open-stream-gnutls): New + functions. + (starttls-negotiate, starttls-open-stream): Check + `starttls-use-gnutls' and pass on to corresponding *-gnutls + function if it is set. + +2004-05-27 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encode-region): Encode encoded words in + structured fields. + +2004-05-26 Katsumi Yamaoka + + * message.el (message-resend): Bind rfc2047-encode-encoded-words. + +2004-05-26 Teodor Zlatanov + + * spam.el (spam-mark-junk-as-spam-routine) + (spam-mark-new-messages-in-spam-group-as-spam): allow user to + disable assigning the spam-mark to new messages + (spam-ham-copy-or-move-routine): todo decleared twice (tiny + change). From Adam Sj,Ax(Bgren . + +2004-05-26 Katsumi Yamaoka + + * dgnushack.el: Autoload customize-set-variable for XEmacs. + + * rfc2047.el (rfc2047-encodable-p): Don't move point. + (rfc2047-decode): Treat the ascii coding-system as raw-text by + default. + +2004-05-25 Teodor Zlatanov + + * gnus-sum.el (gnus-summary-delete-article): invoke hook with + correct data (tiny change). From Anand Mitra . + +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-group-processor-multiple-p) + (spam-group-spam-processor-report-gmane-p) + (spam-group-spam-processor-report-resend-p) + (spam-group-spam-processor-bogofilter-p) + (spam-group-spam-processor-blacklist-p) + (spam-group-spam-processor-ifile-p) + (spam-group-ham-processor-ifile-p) + (spam-group-spam-processor-spamoracle-p) + (spam-group-spam-processor-crm114-p) + (spam-group-ham-processor-bogofilter-p) + (spam-group-spam-processor-stat-p) + (spam-group-ham-processor-stat-p) + (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-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 . + + * gnus.el (spam-resend-to): new 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-23 Katsumi Yamaoka + + * mm-decode.el (mm-text-html-renderer): Make sure w3m exists in + addition to emacs-w3m. + +2004-05-23 Lars Magne Ingebrigtsen + + * assistant.el (assistant-authinfo-data): New function. + (assistant-eval): Eval for entire assistant. + + * netrc.el (netrc-services-file): New variable. + (netrc-parse-services): New function. + (netrc-find-service-name): New function. + (netrc-find-service-number): New function. + (netrc-port-equal): New function. + (netrc-machine): Use it. + + * nnimap.el (nnimap-open-connection): Use netrc. + + * gnus-util.el (gnus-netrc-get): Remove aliases. + + * gnus-sum.el (gnus-auto-center-summary): Change default to 2. + + * assistant.el (wid-edit): Fix compilation. + + * gnus-util.el (gnus-set-file-modes): Just ignore errors. + +2004-05-23 Paul Stodghill + + * gnus-util.el (gnus-set-file-modes): New function. (small + patch). + +2004-05-23 Lars Magne Ingebrigtsen + + * gnus-topic.el (gnus-topic-jump-to-topic): Goto missing topic. + + * assistant.el (assistant-render-node): Fix up rendering and + read-only text. + (assistant-render-node): Reset. + (assistant-make-read-only): Not sticky. + +2004-05-20 Danny Siu + + * 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 + + * dns.el (dns-get-txt-answer): New function. + (dns-read-txt): Ditto. + (query-dns): Use it. + +2004-05-21 Katsumi Yamaoka + + * gnus-start.el (gnus-get-unread-articles): Don't invalidate + active for foreign groups even if the group level is higher than + the specified value. + +2004-05-21 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-jump-to-group): Don't prompt for + non-active groups. + + * gnus-art.el (gnus-picon-databases): Add /usr/share/picons. + +2004-05-20 Magnus Henoch + + * dns.el (dns-read-type): Add support for SVR. (small patch) + +2004-05-20 Teodor Zlatanov + + * spam.el (spam-use-crm114, spam-crm114, spam-crm114-program) + (spam-crm114-header, spam-crm114-spam-switch) + (spam-crm114-spam-strong-switch, spam-crm114-ham-strong-switch) + (spam-crm114-positive-spam-header) + (spam-crm114-database-directory, spam-list-of-processors) + (spam-group-spam-processor-crm114-p) + (spam-group-ham-processor-crm114-p, spam-extra-header-to-number) + (spam-generic-score, spam-list-of-checks) + (spam-list-of-statistical-checks, spam-registration-functions) + (spam-check-crm114-headers, spam-crm114-score) + (spam-check-crm114, spam-crm114-register-with-crm114) + (spam-crm114-register-spam-routine) + (spam-crm114-unregister-spam-routine) + (spam-crm114-register-ham-routine) + (spam-crm114-unregister-ham-routine): add CRM114 support. From + asjo@koldfront.dk (Adam Sj,Ax(Bgren). + + * gnus.el: added 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 + (spam-report-articles-resend, + spam-report-resend-register-routine): 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 + + * gnus.el (spam-process): add spam-use-resend + +2004-05-20 TSUCHIYA Masatoshi + + * spam.el (spam-mark-spam-as-expired-and-move-routine): Return the + number of processed spam messages. + (spam-ham-copy-or-move-routine): Return the number of processed + ham messages. + (spam-summary-prepare-exit): Use the above values to decide + whether status messages shouled be displayed. + +2004-05-20 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encode-function-alist): Renamed from + `rfc2047-encoding-function-alist' in order to avoid conflicting + with the old version. + (rfc2047-encode-region): Concatenate words containing non-ASCII + characters in structured fields; don't encode space-delimited + ASCII words even in unstructured fields; don't break words at + char-category boundaries. + (rfc2047-encode-1): New function. + (rfc2047-encode): Use it; encode text so that it occupies the + maximum width within 76-column; work correctly on Q encoding for + iso-2022-* charsets. + (rfc2047-fold-region): Use existing whitespace for LWSP; make it + sure not to break a line just after the header name. + (rfc2047-b-encode-region): Removed. + (rfc2047-b-encode-string): New function. + (rfc2047-q-encode-region): Removed. + (rfc2047-q-encode-string): New function. + + * mm-util.el (mm-replace-in-string): New function. + +2004-05-20 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-inews-make-draft-meta-information): Really + get it right. + (gnus-inews-make-draft): Really. + +2004-05-19 Ben Menasha + + * nnmh.el (nnmh-request-list-1): Don't check the link count + before descending. (small patch) + +2004-05-19 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-inews-make-draft-meta-information): Fix quote + stuff. + + * gnus-start.el (gnus-subscribe-hierarchical-interactive): Match + on real group name. + + * gnus-art.el (gnus-signature-limit): Doc fix. + + * gnus-msg.el (gnus-inews-make-draft): Quote list. + + * pgg-pgp.el (pgg-pgp-verify-region): Clean up. + +2004-05-19 Michael Schierl + + * pgg-pgp.el (pgg-pgp-verify-region): Default when signature + isn't a string. + +2004-05-19 Lars Magne Ingebrigtsen + + * gnus-draft.el (gnus-draft-send): Bind + rfc2047-encode-encoded-words. + + * rfc2047.el (rfc2047-encode-region): Encode =? strings. + (rfc2047-encodable-p): Say that =? needs encoding. + (rfc2047-encode-encoded-words): New variable. + + * gnus-group.el (gnus-group-select-group): Doc fix. + + * gnus-draft.el (gnus-draft-setup): Mark all replied as replied. + + * gnus-group.el (gnus-group-mode): Set show-trailing-whitespace + to nil. + + * gnus-cache.el (gnus-cache-possibly-enter-article): Use it. + + * nnheader.el (nnheader-get-lines-and-char): New function. + +2004-05-19 Reiner Steib + + * gnus-msg.el (gnus-summary-followup-with-original): Document + yanking of region when active. + +2004-05-19 Katsumi Yamaoka + + * gnus-start.el (gnus-get-unread-articles): Do nothing for foreign + groups if the group level is higher than the specified value. + +2004-05-18 Reiner Steib + + * gnus-group.el (gnus-group-jump-to-group-prompt): Allow an alist. + (gnus-group-jump-to-group): Added prefix argument using + `gnus-group-jump-to-group-prompt'. Query before jumping to + non-active group. + + * compface.el (uncompface): Be verbose when changing + `uncompface-use-external'. + + * gnus-art.el (gnus-button-handle-man, gnus-button-alist): Try to + handle manual section. + +2004-05-18 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-button-alist): Revert previous change. + +2004-05-18 Reiner Steib + + * message.el (message-idna-to-ascii-rhs-1): Fix typo. + +2004-05-18 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-inews-do-gcc): Don't use read-only-p to see + whether backend can accept message. + + * message.el (message-idna-to-ascii-rhs-1): Don't use equalp. + +2004-05-18 Kai Grossjohann + + * nntp.el (nntp-request-set-mark, nntp-request-update-info): + Avoid creating directory when nntp-marks-is-evil is true. + Reported by Reiner Steib. + +2004-05-18 Reiner Steib + + * gnus-picon.el (gnus-picon-style): New variable. + (gnus-picon-insert-glyph): Added optional `nostring' argument. + (gnus-picon-transform-address): Support `gnus-picon-style'. From + Jesper Harder . + +2004-05-18 Lars Magne Ingebrigtsen + + * message.el (message-fill-field): Return point. + (message-generate-headers): Go to end of field. + + * gnus-start.el (gnus-get-unread-articles-in-group): Don't do + stuff for non-living groups. + +2004-05-18 Jesper Harder + + * gnus-art.el (gnus-article-followup-with-original) + (gnus-article-reply-with-original): gnus-mark-active-p -> + gnus-region-active-p. + +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 + +2004-05-17 Lars Magne Ingebrigtsen + + * mail-source.el (mail-source-delete-crash-box): Refactor. + (mail-source-fetch): Use it. + (mail-source-fetch-file): Ditto. + (mail-source-fetch-directory): Run postscript in loop. + (mail-source-fetch-pop): Delete. + (mail-source-fetch-maildir): Ditto. + (mail-source-fetch-imap): Ditto. + + * imap.el (imap-authenticators): Comment out sasl. + + * message.el (message-skip-to-next-address): New function. + (message-fill-header-address): Refactor. + (message-fill-address): Use it. + (message-delete-address): Use it. + (message-fill-header-general): Refactor. + (message-fill-field-address): Rename. + (message-narrow-to-field): Find the start of the header. + (message-header-format-alist): Don't pre-fill. + (message-fill-header): Removed. + (message-insert-header): New function. + (message-shorten-references): Use it. + + * rfc2047.el (rfc2047-field-value): Strip props. + + * mail-parse.el (mail-header-make-address): New alias. + + * ietf-drums.el (ietf-drums-make-address): New function. + + * imap.el: Add compiler directives. + + * gnus-score.el (gnus-score-edit-done): run-hook->run-hooks. + + * gnus-art.el (article-decode-idna-rhs): Don't use + message-idna-inside-rhs-p. + +2004-05-16 Lars Magne Ingebrigtsen + + * message.el (message-idna-inside-rhs-p): Removed. + (message-idna-to-ascii-rhs-1): Use proper address parsing. + + * gnus-art.el (gnus-emphasis-alist): Removed strikethru; too many + false positives. + +2004-05-16 Kim Minh Kaplan + + * imap.el (imap-sasl-make-mechanisms): Use sasl. + +2004-05-16 Lars Magne Ingebrigtsen + + * nneething.el (nneething-file-name): Don't create spurions + files. + + * gnus-msg.el (gnus-inews-do-gcc): Ignore read-only groups. + (gnus-inews-do-gcc): Remove sleep. + + * gnus-art.el (gnus-mime-delete-part): Error message when no MIME + part under point. + + * gnus-agent.el (gnus-agent-synchronize-flags): Default to nil. + (gnus-agent-regenerate-group): Using nil messages aren't valid. + +2004-05-15 Teodor Zlatanov + + * spam.el (spam-summary-prepare-exit): oops, forgot (length) + +2004-05-14 Teodor Zlatanov + + * gnus-dup.el (gnus-dup-unsuppress-article): don't assume the mail + header is not nil (tiny change). From Nelson Ferreira + . + + * spam.el (spam-summary-prepare-exit): only produce "marking spam + as expired without moving it" message when there are spam + messages left + +2004-05-14 Kai Grossjohann + + * nntp.el (nntp-request-set-mark, nntp-request-update-info): Call + nntp-possibly-create-directory, not nntp-possibly-change-group. + (nntp-marks-changed-p): New arg SERVER. + (nntp-request-update-info): Adjust caller. + +2004-05-14 Kai Grossjohann + + * nntp.el (nntp-save-marks): Pass missing arg. + +2004-05-13 Kai Grossjohann + + * nntp.el: Support marks. + (nntp-marks-is-evil, nntp-marks-file-name, nntp-marks) + (nntp-marks-modtime, nntp-marks-directory): New variables. + (nntp-request-set-mark, nntp-request-update-info) + (nntp-possibly-create-directory, nntp-marks-changed-p) + (nntp-save-marks, nntp-open-marks, nntp-marks-directory): New + functions. + +2004-05-12 Jesper Harder + + * gnus-xmas.el (gnus-xmas-select-lowest-window) + (gnus-xmas-redefine): Rename. + + * gnus-score.el (gnus-score-insert-help): Use + gnus-select-lowest-window. + + * gnus-ems.el (gnus-select-lowest-window): Copy definition of + appt-select-lowest-window and rename to gnus-select-lowest-window. + + * gnus.el: do. + +2004-05-12 TSUCHIYA Masatoshi + + * rfc2047.el (rfc2047-encode): Use uppercase letters to specify + encodings of MIME-encoded words, in order to improve + interoperability with several broken MUAs. + +2004-05-07 TSUCHIYA Masatoshi + + * mm-view.el (mm-inline-text-html-render-with-w3): Check META + tags, only when charsets are not specified in headers. + (mm-inline-text-html-render-with-w3m): Ditto. + + * lpath.el: Remove `w3m-meta-content-type-charset-regexp' and + `w3m-charset-to-coding-system'. Add `w3m-detect-meta-charset'. + +2004-05-06 TSUCHIYA Masatoshi + + * gnus-art.el (article-strip-banner): Use MIME-encoded from fields + instead of MIME-decoded from fields when checking + `gnus-article-address-banner-alist'. + +2004-05-03 Jesper Harder + + * nnrss.el (nnrss-check-group, nnrss-read-group-data): Hash on + description rather than subject. + +2004-05-02 Steve Youngs + + * dgnushack.el: Autoload `mail-fetch-field' for XEmacs. + +2004-05-01 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + 2004-05-01 Lars Magne Ingebrigtsen * gnus.el: No Gnus v0.2 is released. @@ -5,7 +3275,7 @@ 2004-05-01 Lars Magne Ingebrigtsen * gnus-agent.el (gnus-agent-read-agentview): Inline - gnus-uncompress-range. + gnus-uncompress-range. 2004-05-01 TSUCHIYA Masatoshi @@ -33,7 +3303,7 @@ (spam-bsfilter-unregister-spam-routine) (spam-bsfilter-register-ham-routine) (spam-bsfilter-unregister-ham-routine): New functions. - (spam-generic-score): Supprt bsfilter; Accept an optional argument + (spam-generic-score): Support bsfilter; Accept an optional argument to recalcurate spam score even if scoring header has already been added. (spam-bogofilter-score, spam-spamassassin-score): Accept an @@ -122,8 +3392,12 @@ * gnus-group.el (gnus-group-make-kiboze-group) (gnus-group-browse-foreign-server): do. -2004-04-22 Teodor Zlatanov +2004-04-22 Teodor Zlatanov + 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 @@ -597,7 +3871,7 @@ 2004-03-04 Kevin Greiner - * 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. @@ -1458,7 +4732,7 @@ * pgg-gpg.el (pgg-gpg-lookup-all-secret-keys) (pgg-gpg-lookup-key): Use regexp match instead of split-string (split-string is different between emacs 21.2 and - 21.4). Reported by ultrasoul@ultrasoul.com (David D. Smith). + 22.1). Reported by ultrasoul@ultrasoul.com (David D. Smith). 2004-01-08 Jesper Harder @@ -1919,7 +5193,26 @@ * gnus.el (gnus-logo-color-style): Changed colors to `no'. - * Moved to Changelog.1. + * Moved to Changelog.2. + +2004-01-04 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump version. + +2004-01-04 Lars Magne Ingebrigtsen + + * gnus.el: No Gnus v0.1 is released. + +2004-01-04 Lars Magne Ingebrigtsen + + * gnus.el: No Gnus v0.0 is released. + +2004-01-04 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + (gnus-version): No. + +See ChangeLog.2 for earlier changes. Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, @@ -1928,3 +5221,5 @@ ;; Local Variables: ;; coding: iso-2022-7bit ;; End: + +;;; arch-tag: 3f33a3e7-090d-492b-bedd-02a1417d32b4 diff --git a/lisp/ChangeLog.1 b/lisp/ChangeLog.1 index b60fb5d..9bdc55f 100644 --- a/lisp/ChangeLog.1 +++ b/lisp/ChangeLog.1 @@ -1,18943 +1,3 @@ -2004-01-04 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump version. - -2004-01-04 Lars Magne Ingebrigtsen - - * gnus.el: No Gnus v0.1 is released. - -2004-01-04 Lars Magne Ingebrigtsen - - * gnus.el: No Gnus v0.1 is released. - -2004-01-04 Lars Magne Ingebrigtsen - - * gnus.el: No Gnus v0.0 is released. - -2004-01-04 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump. - (gnus-version): No. - -2004-01-04 Lars Magne Ingebrigtsen - - * gnus.el: Gnus v5.10.6 is released. - -2004-01-04 Kai Grossjohann - - * gnus-sum.el (gnus-summary-print-article): Doc fix. - -2004-01-04 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump. - -2004-01-04 Lars Magne Ingebrigtsen - - * gnus.el: Gnus v5.10.5 is released. - -2004-01-03 Lars Magne Ingebrigtsen - - * gnus-fun.el (gnus-face-from-file): Message 9. - -2004-01-03 Romain FRANCOISE - - * gnus-fun.el (gnus-face-from-file): Use gnus-message. - -2004-01-03 Reiner Steib - - * gnus-art.el (gnus-button-mid-or-mail-heuristic): Treat Gmane - addresses specially. Fix returned value and messages. - - * mm-decode.el (mm-enable-external): New variable. - (mm-display-part): Use it. - (mm-display-external): Fix message in case of nil handle. - - * Update copyright for several files. - - * spam-report.el (spam-report-gmane): Adjust verbosity. - Delete trailing whitespace. Update copyright. - - * spam.el: Fix many (but not all) checkdoc complaints. - Delete trailing whitespace. - - * message.el (message-header-synonyms): Defcustom. - (message-get-reply-headers): Catch `Original-To'. - (message-carefully-insert-headers): Added comment. - - * gnus-sum.el (gnus-summary-make-menu-bar): Improved "Washing" menu. - -2004-01-03 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-select-newsgroup): Use cat. - - * gnus-agent.el (gnus-agent-cat-enable-undownloaded-faces): New - cat. - - * gnus.el (gnus-user-agent): Moved here. - - * gnus-msg.el (gnus-user-agent): Moved from here. - - * gnus.el (gnus-version-number): Bump. - -2004-01-03 Lars Magne Ingebrigtsen - - * gnus.el: Gnus v5.10.4 is released. - -2004-01-02 Reiner Steib - - * gnus.el (gnus-mode-line-buffer-identification): Show version in - help-echo. - (gnus-read-group): Allow most group names. Changed warning. - -2004-01-02 Lars Magne Ingebrigtsen - - * gnus-dired.el (gnus-dired-mode-map): Change keymaps. - -2004-01-02 Arne J,Ax(Brgensen - - * smime.el (smime-crl-check): Doc fix. - -2004-01-02 Edwin Steiner - - * gnus-nocem.el (gnus-nocem-enter-article): Use the real group - hashtb (tiny patch). - -2004-01-02 Kai Grossjohann - - * nnml.el (nnml-save-mail): Grok compressed articles. From - Michael Albinus . - -2004-01-02 Teodor Zlatanov - - * spam.el (spam-ham-copy-or-move-routine): use spam-list-articles - (spam-list-articles): rewritten to only check a mark once per - invocation - -2004-01-01 Simon Josefsson - - * mml-sec.el (mml-default-encrypt-method) - (mml-default-sign-method): Defcustom. - -2003-12-31 Lars Magne Ingebrigtsen - - * mml.el (mml-generate-mime-1): Remove extra ). - - * gnus-group.el (gnus-group-set-current-level): Signal errors on - topic lines. - (gnus-group-set-current-level): Fix fix. - -2003-12-31 Jeremy Maitin-Shepard - - * mml.el (mml-generate-mime-1): Use mml-compute-boundary (tiny - change). - -2003-12-30 Reiner Steib - - * gnus-group.el: Removed `(when t ...)' around `gnus-define-keys'. - (gnus-group-group-map): Added `gnus-group-read-ephemeral-group' - (already in previous commit inadvertently). - (gnus-group-make-menu-bar): Added `gnus-group-read-ephemeral-group'. - (gnus-group-read-ephemeral-group): Made interactive. - - * gnus-score.el (gnus-score-find-trace): Added comment on sync - with `gnus-score-edit-file-at-point'. - - * gnus-logic.el (gnus-score-advanced): Ditto. - - * gnus-score.el (gnus-score-edit-file-at-point): Fix for - advanced scoring. - -2003-12-30 Simon Josefsson - - * gnus-score.el (gnus-score-edit-file-at-point): Use - gnus-point-at-*, for portability. - -2003-12-30 Reiner Steib - - * gnus-art.el (gnus-treat-body-boundary): Fix doc-string and - custom type. - (gnus-button-mid-or-mail-regexp): Don't be too restrictive. - Suggested by Felix Wiemann . - (gnus-button-alist): Added "M-x ... RET" and "mid:" buttons. - Added comments about relevant RFCs. - - * gnus-sum.el (gnus-summary-mode): Untabify doc-string. - (gnus-summary-goto-article): Allow `%40'. - (gnus-summary-refer-article): Convert `%40' to `@'. - -2003-12-30 Simon Josefsson - - * smime.el (smime-crl-check): New. - (smime-verify-region): Use it. From Arne J,Ax(Brgensen - in <87llpk9v5q.fsf@seamus.arnested.dk> (tiny - change). - -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-util.el (gnus-emacs-version): Added doc-string. - - * mml.el (mml-minibuffer-read-disposition): New function. - (mml-attach-file): Use it. - (mml-preview): Added MIME preview to gnus-buffers. - -2003-12-30 Jesper Harder - - * gnus-sum.el (gnus-summary-make-menu-bar): Add ellipses. - -2003-12-30 Lars Magne Ingebrigtsen - - * gnus-start.el (gnus-get-unread-articles): Inline gnus-server-get-method. - (gnus-get-unread-articles): Cache methods. - (gnus-get-unread-articles-in-group): Indent. - - * gnus.el (gnus-version-number): Bump. - (gnus-secondary-method-p): Extend servers to methods before comparing. - (gnus-secondary-method-p): Revert. - -2003-12-30 Lars Magne Ingebrigtsen - - * gnus.el: Gnus v5.10.3 is released. - -2003-12-29 Simon Josefsson - - * gnus-agent.el (gnus-agentize): Improve auto-agentizing logic. - Suggested by Steinar Bang . - (gnus-agent-auto-agentize-methods): Customize. - -2003-12-29 Kevin Greiner - * gnus.el (gnus-server-to-method): Fixed bug in 2003-12-22 - check-in. - -2003-12-28 Adrian Lanz - - * mail-source.el (mail-source-fetch-imap): Prevent storing of - identical entries for imap mail sources, when retrieving mail - messages from an imap server within the same Gnus session several - times (tiny change). - -2003-12-28 Jesper Harder - - * mm-view.el (mm-text-html-washer-alist): Use - mm-inline-wash-with-stdin for w3m-standalone. - - * mm-decode.el (mm-text-html-renderer): Add w3m-standalone. - - * mml1991.el (mml1991-pgg-encrypt): Decode according to CTE before - encrypting. - -2003-12-28 Jesper Harder - - * mml1991.el (mml1991-pgg-sign): Use unibyte when re-encoding. - From Ivan Boldyrev (tiny change). - -2003-12-26 Katsumi Yamaoka - - * dgnushack.el: Add an advice to byte-optimize-form-code-walker to - avoid the warning ``...called for effect'' for the pop form when - running Emacs 21.3. - -2003-12-26 Jesper Harder - - * mm-bodies.el (mm-body-encoding): Don't use 7bit if the body - contains "^From " and mm-use-ultra-safe-encoding is true. - -2003-12-25 Jesper Harder - - * mml1991.el (mml1991-pgg-sign): Encode and decode according to - CTE header. Don't insert gpg output as unibyte. - -2003-12-25 Katsumi Yamaoka - - * lpath.el: Remove display-time-event-handler and open-ssl-stream; - add delete-extent for Emacs; rearrange bindings assuming w3 may - not be available and XEmacs without the file-coding feature may be - used. - -2003-12-24 Katsumi Yamaoka - - * dgnushack.el (dgnushack-compile): Increase the value for - max-specpdl-size when compiling Gnus with Emacs 20. - -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 - twice to open each server. - - * gnus-start.el (gnus-get-unread-articles-in-group): Autoload - gnus-agent-possibly-alter-active rather than inline to resolve - compiler warnings. - - * gnus.el (gnus-server-to-method): Added fallback of iterating - over gnus-newsrc-alist to resolve names of foreign servers. - Should fix recent agent bug. - -2003-12-22 Reiner Steib - - * gnus-score.el (gnus-summary-lower-score) - (gnus-summary-increase-score): Mention symbolic prefix in the - doc-string. Suggested by Karl Pfl,Ad(Bsterer . - -2003-12-21 Jesper Harder - - * gnus-agent.el (gnus-agent-read-agentview): Use - car-less-than-car. - -2003-12-20 Artem Chuprina (tiny change) - - * message.el (message-yank-buffer): Bind message-reply-buffer to - a buffer rather than a string. - -2003-12-19 Jesper Harder - - * gnus-msg.el (gnus-summary-followup): Correct documentation. - -2003-12-18 Jesper Harder - - * gnus-msg.el (gnus-inews-add-send-actions): `yanked' can be a - list of lists. Reported by Dmitri Paduchikh . - -2003-12-18 Reiner Steib - - * mm-url.el (mm-url-insert-file-contents-external) - (mm-url-insert-file-contents): Added doc-strings. Autoload. - -2003-12-18 Jesper Harder - - * gnus-cus.el (defvar): defvar - gnus-agent-cat-disable-undownloaded-faces. - -2003-12-17 Katsumi Yamaoka - - * message.el (message-forward-subject-name-subject): Use - gnus-extract-address-components instead of - mail-header-parse-address because it may be called with non-ascii - text. - -2003-12-16 Per Abrahamsen - - * nnmail.el (nnmail-split-fancy): The widget now supports - restrictions. - -2003-12-16 Katsumi Yamaoka - - * nnheader.el (nnheader-find-etc-directory): Find the newest one. - -2003-12-16 Simon Josefsson - - * sha1-el.el (autoload): Don't use ignore-errors. - (sha1-use-external): Use condition-case. Suggested by Katsumi - Yamaoka . - -2003-12-15 Katsumi Yamaoka - - * nnmail.el (nnmail-split-fancy): Make it customizable with Emacs - 20 as well. - -2003-12-15 Simon Josefsson - - * sha1-el.el (autoload): Ignore errors for - executable-find. (XEmacs ecrypto does not require sh-script where - executable.el is located.) - (sha1-use-external): Likewise. - - * sha1-el.el (sha1): Add defgroup. - (sha1-maximum-internal-length, sha1-program, sha1-use-external) - (sha1-program): Use 'sha1sum' from GNU CoreUtils instead of OpenSSL. - (sha1): Autoload. - - * nndraft.el (nndraft-request-move-article): Copy definition of - nnmh-request-move-article instead of calling it, because the nnmh - version uses nnmh-request-article which isn't the same as the - nndraft version. - -2003-12-13 Teodor Zlatanov - - * spam.el: added some gnus-registry autoloads - (spam-split-symbolic-return): makes spam-split return 'spam - instead of the value of spam-split-group when spam is detected - (spam-split-symbolic-return-positive): makes spam-split return - 'ham instead of nil when ham is detected - (spam-autodetect-recheck-messages): tells spam.el whether it - should recheck all messages in a group, or only the unseen ones - (spam-split-last-successful-check): spam-split will set this to - the last successful check; this was seen as a cleaner approach - than returning a cell like '(spam spam-use-bogofilter) - (spam-list-of-checks): documentation appended - (spam-split): accomodate the spam-split-symbolic-return and - spam-split-symbolic-return-positive variables - (spam-find-spam): new function called when the summary is built - (spam-log-registered-p): checks if a ham or spam registration has - already been done for an article - (spam-check-regex-headers, spam-check-blackholes, spam-check-BBDB) - (spam-check-ifile, spam-check-stat, spam-check-whitelist) - (spam-check-blacklist, spam-check-bogofilter-headers) - (spam-check-spamoracle): respect the spam-split-symbolic-return - and spam-split-symbolic-return-positive variables - (spam-initialize): add spam-find-spam to gnus-summary-prepare-hook - (spam-unload-hook): remove spam-find-spam from - gnus-summary-prepare-hook - - * gnus.el (spam-autodetect, spam-autodetect-methods): new - configuration items for spam autodetection - -2003-12-12 Reiner Steib - - * gnus-draft.el (gnus-draft-mode-map): Bind `e' to - `gnus-draft-edit-message'. We still have `B w' for - `gnus-summary-edit-article'. - -2003-12-12 Katsumi Yamaoka - - * nnheaderxm.el (nnheader-xmas-run-at-time): Use a simple function - definition if there is not a bug in start-itimer. - - * pgg.el (pgg-run-at-time): Ditto. - -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 - active range to include articles newly recognized as being - downloaded. - (gnus-agent-regenerate): Removed code that updated the agent's - active file as the new gnus-agent-possibly-alter-active function - obsolesced it. - - * gnus-cus.el (gnus-agent-customize-category): Added missing - agent-disable-undownloaded-faces parameter. - - * gnus-start.el (gnus-activate-group): Backed out my 2003-11-29 - patch as it was too late at adjusting the active range. - (gnus-get-unread-articles-in-group): Added call to new - gnus-agent-possibly-alter-active to adjust the active range. - -2003-12-10 Jesper Harder - - * message.el (message-get-reply-headers): Narrow to headers. - -2003-12-10 Teodor Zlatanov - - * 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) - -2003-12-10 Katsumi Yamaoka - - * nnheaderxm.el (nnheader-xmas-run-at-time): Make it work - correctly for the first argument. - - * pgg.el (pgg-run-at-time): New function. - (pgg-add-passphrase-cache): Use it. - -2003-12-10 Simon Josefsson - - * pgg-parse.el (pgg-decode-packets): Rewrite to handle corrupt - input. - (pgg-decode-armor-region): Don't parse packet if decoding fail. - -2003-12-09 Teodor Zlatanov - - * 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 Per Abrahamsen - - * nnmail.el (nnmail-lazy, nnmail-split-fancy): New widgets. - (nnmail-split-fancy): Use it. - -2003-12-08 Joel Ray Holveck (tiny change) - - * gnus-sum.el (gnus-summary-save-parts-1): Consider the "name" - parameter of Content-Type. - -2003-12-08 Katsumi Yamaoka - - * gnus-util.el: Revert 2003-12-03 change, instead, provide the - compiler macro for rmail-select-summary if rmail is not available, - and bind rmail-summary-displayed and rmail-maybe-display-summary - in order to silence the compiler even if tm is not available. - -2003-12-08 Simon Josefsson - - * flow-fill.el (fill-flowed-encode-tests, fill-flowed-test): Add. - -2003-12-08 Jesper Harder - - * gnus-msg.el (gnus-extended-version): Bind float-output-format to - nil. - -2003-12-08 Simon Josefsson - - * mml-smime.el (mml-smime-sign): Replace CRLF with LF in OpenSSL - output. Reported by Arne J,Ax(Brgensen . - -2003-12-07 Simon Josefsson - - * 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): Update. - -2003-12-07 Jesper Harder - - * spam.el (spam-check-spamoracle, spam-spamoracle-learn): Don't - use = or zerop to test the return value of call-process, because - it can be a string. - - * mail-source.el (mail-source-fetch-with-program): do. - - * mailcap.el (mailcap-viewer-passes-test): do. - - * gnus-uu.el (gnus-uu-treat-archive, gnus-uu-post-encode-mime) - (gnus-uu-post-encode-file): do. - - * gnus-soup.el (gnus-soup-pack, gnus-soup-unpack-packet): do. - - * message.el (message-fix-before-sending): Fix detection of - non-printables. Don't replace unencodable utf-8. - -2003-12-05 Jesper Harder - - * mm-url.el (mm-url-predefined-programs): Add user-agent for wget. - (mm-url-insert-file-contents-external): Signal an error if program - fails. - -2003-12-04 Teodor Zlatanov - - * spam-report.el (spam-report-gmane): iterate over articles - instead of a single one; remove interactive usage - -2003-12-03 Katsumi Yamaoka - - * dns.el: Fix misplaced eval-when-compile. - - * gnus-util.el: Require alist and provide tm-view when compiling - with XEmacs. - -2003-12-03 Steve Youngs - - * 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 - * 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 - - * 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 - -2003-12-01 Simon Josefsson - - * gnus-agent.el (gnus-agent-expire-days): Doc fix. - -2003-11-30 Simon Josefsson - - * gnus-agent.el (gnus-agent-expire-group-1): Bind message-log-max - when messaging "X % completed" to inhibit logging them to the - message buffer. - (gnus-agent-expire-group-1): Mention group name in messages. - (gnus-agent-expire-group-1): Only print a message for an article - when there actually was something done to it. - - * 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. - -2003-11-30 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-agent-covered-methods): Remove nil methods. - -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) - - * nnrss.el (nnrss-check-group): Set xml when nnrss-use-local is t. - -2003-11-29 Jesper Harder - - * gnus-group.el (gnus-group-make-menu-bar): Add - gnus-group-make-rss-group. - -2003-11-28 Reiner Steib - - * message.el: Added custom-manual links to all variables that have - an index entry in the message manual. - (message-generate-headers-first): Fixed doc-string. - -2003-11-27 Katsumi Yamaoka - - * gnus-msg.el (gnus-summary-yank-message): Don't bind - gnus-display-mime-function to nil so that non-ascii text is - decoded and attachments are not shown. - - * message.el (message-cite-original-without-signature): Replace - the value of message-reply-headers with the yanked article since - it may be a different article from the original. - (message-cite-original): Ditto. - -2003-11-25 Teodor Zlatanov - - * spam.el (spam-blacklist-ignored-regexes): new variable, so - blacklisting can ignore certain regular expressions (e.g. the - user's e-mail address) - (spam-bogofilter-spam-strong-switch, - spam-bogofilter-ham-strong-switch): options used when articles are - already registered as the opposite classification - (spam-old-ham-articles, spam-old-spam-articles): lists of ham and - spam articles, generated when a summary buffer is entered, and - consulted when it's exited so we know what articles are changing - state from spam to ham or vice-versa - (spam-xor): everyone needs a little convenience - (spam-list-of-processors): lookup table for old-style spam/ham - exits processors - (spam-group-processor-p): support old-style and new-style spam/ham - exit processors - (spam-group-processor-multiple-p): handle new-style spam/ham exit - processors - (spam-summary-prepare): use spam-old-{ham,spam}-articles; change - logic to iterate over list of processors instead of manual - individual lookup, unregister any articles that change from ham to - spam or vice-versa in the course of the summary buffer usage; use - the new spam-register-routine - (spam-ham-copy-routine, spam-ham-move-routine, - spam-mark-spam-as-expired-and-move-routine): check that the list - of groups is not nil, because apply doesn't like to apply a - function across nil - (spam-registration-functions): variable for looking up spam/ham - registration/unregistration functions based on a spam-use-* symbol - (spam-classification-valid-p, spam-process-type-valid-p) - (spam-registration-check-valid-p) - (spam-unregistration-check-valid-p): convenience functions - (spam-registration-function, spam-unregistration-function): look - up the registration/unregistration function based on a - classification and the check (spam-use-* symbol) - (spam-list-articles): generate list of spam/ham articles from a - given list of articles - (spam-register-routine): do the heavy work of registering and - unregistering articles, using all the articles in the group or - specific ones as needed - (spam-generic-register-routine): removed, no longer used - (spam-log-unregistration-needed-p, spam-log-undo-registration): - handle article registration/unregistration with a given spam/ham - processor and group - (BBDB, ifile, spam-stat, blacklists, whitelists, spam-report, - bogofilter, spamoracle): rewrite registration/unregistration - functions to take a list of articles and the unregister option. - Much hilarity ensues. - (spam-initialize): spam-stat-maybe-{save,load} already respect spam-use-stat - (spam-stat-register-ham-routine, spam-stat-register-spam-routine): - don't load and save unnecessarily - - * spam-stat.el (spam-stat-dirty): new variable, set when the stats - database is modified - (spam-stat-buffer-is-spam, spam-stat-buffer-is-non-spam) - (spam-stat-buffer-change-to-spam, spam-stat-to-hash-table) - (spam-stat-buffer-change-to-non-spam): set spam-stat-dirty when - needed - (spam-stat-save): respect spam-stat-dirty, unless the force - parameter is specified - (spam-stat-load): clear spam-stat-dirty - - * gnus.el (gnus-install-group-spam-parameters): marked the - old-style exit processors as obsolete in the docs, added the - new-style exit processors while the old ones are still allowed - - -2003-11-25 Jesper Harder - - * gnus-art.el (article-hide-boring-headers): Don't hide Reply-To - unless its list of addresses is identical to From. - -2003-11-25 Katsumi Yamaoka - - * dgnushack.el (mapc): Add the compiler macro for Emacs 20. - -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. - Compensating by adding a second text property storing the name - expected by gnus-agent. - (gnus-server-named-server): New function. - * gnus-agent.el (gnus-agent-remove-server, gnus-agent-add-server): - No longer expect an argument as it was ignored anyway. Uses the - new gnus-server-named-server function to get gnus-agent compatible - names from the server buffer. - -2003-11-20 Kevin Greiner - - * gnus.el (gnus-agent-covered-methods): Documented use of - named servers, not methods, to identity agentized groups. - Users may now change their server configurations without having - the server become "unagentized". - (gnus-agent-covered-methods): Removed from gnus-variable-list to - avoid storing two copies of gnus-agent-covered-methods, one in - .newsrc.eld and the other in agent/lib/servers. - (gnus-server-to-method): Do not cache server for the nil method. - (gnus-method-to-server): New function. Associate named server - with all, even foreign, methods. - (gnus-agent-method-p, gnus-agent-method-p-cache): Incorporated - simple last-response cache to offset performance lose of having to - always convert methods to named servers. - * gnus-agent.el (gnus-agent-expire-days): Removed obsolete - documentation. - (gnus-agentize, gnus-agent-add-server, gnus-agent-remove-server): - Modified to support new definition of gnus-agent-covered-method. - (gnus-agent-read-servers): Rewritten to convert old method data - into server names. - (gnus-agent-read-servers-validate) - (gnus-agent-read-servers-validate-native): New functions. - (gnus-agent-write-servers): No longer use gnus-method-simplify as - it failed to simplify foreign methods. - (gnus-agent-close-connections, gnus-agent-synchronize-flags) - (gnus-agent-possibly-synchronize-flags, gnus-agent-fetch-session) - (gnus-agent-regenerate): Uses new gnus-agent-covered-methods - function as gnus-agent-covered-methods variable no longer provides - methods. - (gnus-agent-covered-methods): New function - (gnus-agent-expire-group, gnus-agent-expire): Final message will, - if gnus-verbose is greater than 4, report statistics of NOV - entries and files deleted as well as total bytes recovered. - (gnus-agent-expire-done-message): New function - (gnus-agent-unread-articles): Bug fix. No longer drops last - unread article onto read list. - (gnus-agent-regenerate-group): Changed prompt to use typical - style. - (gnus-agent-group-covered-p): Rewrote to internally use - gnus-agent-method-p. - * gnus-int.el (gnus-start-news-server): Partially convert old - gnus-agent-covered-methods to new format so that gnus-open-server - functions correctly. - * gnus-srvr.el (gnus-server-insert-server-line): Replaced - gnus-agent-covered-methods with gnus-agent-method-p. - * gnus-start.el (gnus-clear-system): Added - gnus-agent-covered-methods to compensate for removing it from - gnus-variable-list. - (gnus-setup-news): Complete conversion of old - gnus-agent-covered-methods to new format so that secondary and - foreign servers can be correctly opened. - -2003-11-20 Teodor Zlatanov - - * spam.el (spam-ham-copy-or-move-routine): add respooling - support, not working well yet - - * gnus.el (ham-process-destination): make 'respool option the - only one, so it can't be chosen together with other groups - -2003-11-19 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-track-extra): make it a set of - choices instead of a boolean - (gnus-registry-track-subject-p, gnus-registry-track-sender-p): - new convenience functions - (gnus-registry-split-fancy-with-parent): use convenience - functions, also don't return extra tracking info if sender or - subject is found in more than one groups - (gnus-registry-add-group): use new convenience functions to - decide if sender and subject should be tracked - - * gnus.el (ham-process-destination): add 'respool option, - unused by spam.el yet - -2003-11-19 Katsumi Yamaoka - - * gnus-score.el (gnus-decay-score): Return a surely smaller value - than the argument in XEmacs. - -2003-11-18 Reiner Steib - - * 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 . - -2003-11-17 Lars Magne Ingebrigtsen - - * html2text.el (html2text-remove-tags): Remove the tag in a - simpler way to avoid inflooping. - -2003-11-17 Simon Josefsson - - * imap.el (imap-gssapi-auth-p): Don't check capability (some - servers remove AUTH=GSSAPI from capability response returned after - successful authentication). - -2003-11-16 Jesper Harder - - * gnus.el (gnus-getenv-nntpserver): Fix regexp and simplify. - Reported by Artem Chuprina . - -2003-11-14 Simon Josefsson - - * mm-util.el (mm-charset-synonym-alist): Map BIG5-HKSCS to BIG5 - when it isn't available. - -2003-11-13 Alex Schroeder - - * nnrss.el (nnrss-check-group): Use dc:contributor if neither - rss:author nor dc:creator is provided. - -2003-11-13 Katsumi Yamaoka - - * mm-decode.el (mm-dissect-buffer): Save start="" value - contained in Content-Type header of multipart/related messages. - - * mm-view.el (mm-w3m-cid-retrieve-1): New function. - (mm-w3m-cid-retrieve): Use it. - - * mml.el (mml-generate-mime-1): Add start="" to Content-Type. - (mml-insert-mime-headers): Insert Content-ID header. - (mml-insert-mml-markup): Insert start="" value. - -2003-11-12 Teodor Zlatanov - - * nnml.el (nnml-request-accept-article): pass sender to - nnmail-cache-insert - - * nnmh.el (nnmh-request-accept-article): pass sender to - nnmail-cache-insert - - * nnmbox.el (nnmbox-request-accept-article): pass sender to - nnmail-cache-insert - - * nnfolder.el (nnfolder-request-accept-article): pass sender to - nnmail-cache-insert - - * nnbabyl.el (nnbabyl-request-accept-article): pass sender to - nnmail-cache-insert - - * nnmail.el (nnmail-cache-insert): accept sender parameter and - pass it to the nnmail-spool-hook - - * gnus-registry.el (gnus-registry-track-extra): clarify doc - (gnus-registry-action): add sender lexical var and pass it to - gnus-registry-add-group - (gnus-registry-spool-action): take a sender parameter, pass to - gnus-registry-add-group - (gnus-registry-split-fancy-with-parent): trace by sender in - addition to subject - (gnus-registry-fetch-sender-fast): new function - (gnus-registry-add-group): accept sender parameter - -2003-11-11 Teodor Zlatanov - - * spam.el (spam-ham-copy-routine, spam-ham-move-routine) - (spam-mark-spam-as-expired-and-move-routine): allow for the - groups to be a list of a single item - - * gnus.el (gnus-install-group-spam-parameters): - ham-process-destination and spam-process-destination allow lists now - -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-insert-wide-reply'. - (message-change-subject): Fixed comment. - -2003-11-10 Simon Josefsson - - * pgg-def.el (pgg-encrypt-for-me): Change default from nil to t. - -2003-11-09 Simon Josefsson - - * pgg-gpg.el (pgg-gpg-encrypt-region): Cache passphrase under hex - key id too (for decryption). - (pgg-gpg-sign-region): Likewise. - -2003-11-09 Simon Josefsson - - * 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 - . - -2003-11-07 Teodor Zlatanov - - * nnmail.el (nnmail-cache-insert): make sure that the - nnmail-spool-hook is called with a valid newsgroup name (though - it may be wrong) - - * gnus.el (gnus-group-real-prefix): return nil if group is not a - string, instead of triggering an error - -2003-11-06 Teodor Zlatanov - - * gnus.el (gnus-group-guess-full-name-from-command-method): new function - - * gnus-registry.el (gnus-registry-fetch-group): use long names if - requested - (gnus-registry-split-fancy-with-parent): when long names are in - use, strip the name if we're in the native server, or else return nothing - (gnus-registry-spool-action, gnus-registry-action): use - gnus-group-guess-full-name-from-command-method instead of - gnus-group-guess-full-name - - * spam.el (spam-mark-spam-as-expired-and-move-routine) - (spam-ham-copy-or-move-routine): prevent article deletions or - moves unless the backend allows it - - * gnus.el (gnus-install-group-spam-parameters): fixed parameters - to list spamoracle as well, suggested by Jean-Marc Lasgouttes - - - * spam.el (spam-spamoracle): doc change, suggested by Jean-Marc - Lasgouttes - -2003-11-04 Katsumi Yamaoka - - * gnus-score.el (gnus-decay-score): Protect against arithmetic - errors. Tiny patch from Norbert Koch . - -2003-10-31 Teodor Zlatanov - - * spam.el - (spam-log-processing-to-registry): improved message and comments - (spam-log-unregistration-needed-p): new function - (spam-ifile-register-spam-routine) - (spam-ifile-register-ham-routine, spam-stat-register-spam-routine) - (spam-stat-register-ham-routine) - (spam-blacklist-register-routine) - (spam-whitelist-register-routine) - (spam-bogofilter-register-spam-routine) - (spam-bogofilter-register-ham-routine) - (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): change - spam-log-processing-to-registry invocations appropriately - -2003-10-31 Simon Josefsson - - * 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 Teodor Zlatanov - - * spam.el (autoload): autoload the gnus-registry functions we'll - need - (spam-log-to-registry): new variable for interfacing with the - gnus-registry - (spam-install-hooks): variable had the wrong customization group - (spam-fetch-field-message-id-fast): convenience function for fetch - a message ID quickly - (spam-log-processing-to-registry): new function - (spam-ifile-register-spam-routine) - (spam-ifile-register-ham-routine, spam-stat-register-spam-routine) - (spam-stat-register-ham-routine) - (spam-blacklist-register-routine) - (spam-whitelist-register-routine) - (spam-bogofilter-register-spam-routine) - (spam-bogofilter-register-ham-routine) - (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): add - spam-log-processing-to-registry invocations - - * gnus-registry.el: fixed docs in the preface to mention - gnus-registry-initialize - (gnus-registry-store-extra): remove cached extra entry - information when new extra entry is stored - -2003-10-29 Simon Josefsson - - * message.el (message-forward-make-body-plain): Fix ARG=1 mode - after separating m-f-m-b. - -2003-10-29 Simon Josefsson - - * message.el (message-forward-make-body-plain): Remove ignored - headers. Tiny patch from Andre Srinivasan . - (message-forward-make-body-plain): Fix ARG=1. - -2003-10-28 Jesper Harder - - * message.el (message-forward-subject-name-subject) - (message-forward-subject-author-subject): Decode non-ASCII - newsgroup names. - (autoload): Autoload gnus-group-decoded-name. - -2003-10-27 Simon Josefsson - - * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): New optional - parameter key, overrides the key id used to store passphrase - under (uses true key id from gpg output if nil). - (pgg-gpg-encrypt-region): Search for passphrase using user suplied - string STR, instead of (pgg-lookup-key STR t). - (pgg-gpg-encrypt-region): Store passphrase under user suplied - string, instead of real key id taken from gpg output. - (pgg-gpg-decrypt-region): Likewise. - (pgg-gpg-sign-region): Likewise. - * pgg.el (pgg-decrypt-region): Don't set pgg-default-user-id. - -2003-10-27 Romain FRANCOISE - - * gnus-art.el (gnus-article-goto-prev-page): Doc fix. - -2003-10-27 Simon Josefsson - - * mm-bodies.el (mm-body-encoding): Don't use QP when message body - only consists of short lines and ASCII, when - mm-use-ultra-safe-encoding. Refer to 'About foo' thread in - gnus-bug, e.g. , for more discussion. - This make it possible to pipe the raw RFC 822 message into 'gpg' - and have the signature work. Potential problem: what if message - contain data that would be dash-escaped by OpenPGP - implementations? Then PGP 2.x might not be able to parse the raw - RFC 822 message correctly. If that problem is worth fixing, it - should be fixed by detecting the situation, instead of applying QP - to everything. Based on discussion with "John A. Martin" - . - -2003-10-27 Teodor Zlatanov - - * spam.el (spam-mark-spam-as-expired-and-move-routine) - (spam-ham-copy-or-move-routine): don't ask when deleting copied - articles, and use move instead of copy when possible - (spam-split): added the option of specifying a string as a - spam-split parameter; such a string will override - spam-split-group temporarily. - - * nnmail.el (nnmail-cache-insert): protect from nil message IDs, - but should we do something else? - - * gnus-registry.el (gnus-registry-spool-action): protect from nil - message IDs - -2003-10-26 Simon Josefsson - - * gnus-art.el (gnus-button-alist): Allow & in mailto URLs. - (gnus-header-button-alist): Likewise. - (gnus-url-mailto): Handle ?to parameters. Replace \r\n with \n. - Reverse parameter list to use same order as in the URL. Reported - by f95-msv@f.kth.se (M,Ae(Brten Svantesson). - -2003-10-25 Teodor Zlatanov - - * spam.el (spam-move-spam-nonspam-groups-only): documentation fix - for the variable - -2003-10-25 Steve Youngs - - * Makefile.in (clean-some): Remove auto-autoloads.* and - custom-load.* as well. - (distclean): Ditto. - - * dgnushack.el (dgnushack-make-load): Add a local vars section to - the dummy gnus-load.el. - -2003-10-24 Teodor Zlatanov - - * spam.el (spam-ham-copy-or-move-routine): do not delete if copy - is t, also don't intepret the list of groups as a list of lists - (spam-mark-spam-as-expired-and-move-routine) - (spam-ham-copy-or-move-routine): delete articles only if 1 or - more groups were specified (and "copy" was not specified for - spam-ham-copy-or-move-routine) (fixed twice) - -2003-10-24 Katsumi Yamaoka - - * nndoc.el (nndoc-guess-type): Reverse the sort order. Suggested - by ARISAWA Akihiro . - (nndoc-dissect-buffer): Don't miss even-numbered articles. - -2003-10-24 Steve Youngs - - * dgnushack.el (dgnushack-gnus-load-file): Set to - "auto-autoloads.el" if building with XEmacs. - (dgnushack-cus-load-file): Set to "custom-load.el" if building - with XEmacs. - (dgnushack-make-cus-load): We don't delete the resulting file if - building with XEmacs so byte-compile it. - (dgnushack-make-load): When building with XEmacs do nothing except - byte-compile the autoload file and create a dummy gnus-load.el - file. - -2003-10-23 Katsumi Yamaoka - - * message.el (message-make-fqdn): Bind case-fold-search. - Suggested by Christopher Richards . - -2003-10-23 Teodor Zlatanov - - * gnus.el (spam-process-destination, ham-process-destination): - allow multiple groups as a choice - - * spam.el (spam-check-blackholes): remove "[IP address]" - requirement, now just "IP address" is enough for detection for - blackhole checking - (spam-check-blackholes): oops, the dots were not escaped - (spam-mark-spam-as-expired-and-move-routine): added multiple group - support (multiple copies, then delete) - (spam-ham-copy-routine): new function - (spam-ham-move-routine): new function - (spam-ham-copy-or-move-routine): new function (used to be - spam-ham-move-routine), handle multiple groups - (spam-summary-prepare-exit): call the new functions - -2003-10-23 Simon Josefsson - - * flow-fill.el (fill-flowed-encode, fill-flowed): Autoload. - -2003-10-22 Katsumi Yamaoka - - * gnus-art.el (gnus-emphasis-strikethru): Use the :strike-through - attribute in Emacs. - -2003-10-21 Katsumi Yamaoka - - * message.el (message-bounce): Don't erase except bounced header. - -2003-10-21 Teodor Zlatanov - - * spam.el (spam-reverse-ip-string): new function to reverse an IP - address in a string - (spam-check-blackholes): use spam-reverse-ip-string - -2003-10-21 Katsumi Yamaoka - - * gnus-art.el (gnus-narrow-to-page): Clear as well as set the - value for gnus-page-broken. - - * gnus-sum.el (gnus-summary-beginning-of-article): Use - gnus-break-pages instead of gnus-page-broken. - (gnus-summary-end-of-article): Use gnus-break-pages instead of - gnus-page-broken; narrow to the end of a page beforehand. - (gnus-summary-toggle-header): Use gnus-break-pages instead of - gnus-page-broken; remove delimiter buttons unless gnus-break-pages - is non-nil. - -2003-10-21 Lars Magne Ingebrigtsen - - * gnus-picon.el (gnus-picon-transform-address): Protect against - errors. - -2003-10-20 Katsumi Yamaoka - - * gnus-msg.el (nnspool-rejected-article-hook): Remove defvar. - (xemacs-codename): Move defvar to gnus-util.el. - - * gnus-util.el (xemacs-codename): Defvar when compiling. - -2003-10-20 Lars Magne Ingebrigtsen - - * spam-report.el (spam-report-url-ping-plain): Include a - User-Agent. - - * gnus-msg.el (gnus-extended-version): Use it. - - * gnus-util.el (gnus-emacs-version): Separated out into own - function. - -2003-10-19 Reiner Steib - - * message.el (message-mode-field-menu): Added - message-generate-unsubscribed-mail-followup-to. - (message-forward-subject-fwd): Avoid double "Fwd: " - (message-change-subject): Added comment. - -2003-10-19 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-nov-parse-line): Remove condition-cases. - - * mml.el (mml-insert-mime): Quote mml. - -2003-10-19 Katsumi Yamaoka - - * gnus-sum.el (gnus-remove-odd-characters): Use - mm-subst-char-in-string instead of subst-char-in-string. - (gnus-summary-refer-article): Use gnus-replace-in-string instead - of replace-regexp-in-string. - -2003-10-19 Jesper Harder - - * gnus-uu.el (gnus-uu-uustrip-article): Really strip directory - from file name. - -2003-10-18 Jesper Harder - - * gnus-sum.el (gnus-summary-save-parts-last-directory): Default - to mm-default-directory. - (gnus-summary-save-parts-1): Use mm-file-name-rewrite-functions. - -2003-10-18 Lars Magne Ingebrigtsen - - * pop3.el (pop3-read-response): Check whether the process is - alive. - - * gnus-sum.el (gnus-summary-refer-article): Strip spaces. - - * rfc2047.el (rfc2047-encode-region): Do error out on invalid - strings. - - * nntp.el (nntp-retrieve-headers-with-xover): Get error messages - right. - - * gnus-agent.el (gnus-agent-read-servers): Remove sit-for. - - * gnus-art.el (article-treat-dumbquotes): Doc fix. - - * message.el (message-field-value): New function. - (message-insert-disposition-notification-to): Use Reply-To, too. - - * imap.el (imap-mailbox-status): Upcase STATUS commands. - - * gnus-sum.el (gnus-remove-odd-characters): New function. - (gnus-nov-parse-line): Use it. - -2003-10-18 Matt Swift - - * mm-decode.el (mm-inline-media-tests): Recognize pjpeg as jpeg. - -2003-10-18 Romain FRANCOISE - - * message.el (message-forward-make-body): does both - m-f-make-body-mml and m-f-make-body-plain, resulting in a strange - message buffer. - -2003-10-18 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-narrow-to-page): Only break page if it's - broken. - - * nnrss.el (nnrss-find-rss-via-syndic8): Return nil if xml-rpc - isn't available. - - * message.el (message-hidden-headers): Doc fix. - -2003-10-18 Jesper Harder - - * gnus-msg.el (gnus-summary-resend-message-edit): Avoid error when - fields aren't found. - -2003-10-18 Simon Josefsson - - * message.el (message-forward-make-body-plain) - (message-forward-make-body-mime, message-forward-make-body-mml) - (message-forward-make-body-digest-plain) - (message-forward-make-body-digest-mime) - (message-forward-make-body-digest): New, derived from - message-forward-make-body. - (message-forward-make-body): Use them. - (message-forward-show-mml): New default 'best. - (message-forward-make-body): Support it. - -2003-10-18 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-article-mode): Set gnus-page-broken to nil. - (gnus-article-prepare): Don't set to t. - (gnus-narrow-to-page): Set to t if we break. - -2003-06-11 Daniel N,Ai(Bri - - * message.el (message-resend): Generate Resent-Message-ID header. - -2003-10-18 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-article-next-page): Don't go to the next line - before checking end-of-buffer. - (gnus-mime-delete-part): Don't insert parts twice. - -2003-10-17 Lars Magne Ingebrigtsen - - * gnus-art.el (article-update-date-lapsed): Make sure point - doesn't move around (much). - -2003-07-28 Vasily Korytov - - * mail-source.el (mail-source-keyword-map): List "cur" before - "new" for maildirs. - -2003-10-17 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-enter-digest-group): ogroup, nor - group. - - * gnus-msg.el (gnus-inews-insert-archive-gcc): Use the parent - name for gcc-self. - (gnus-inews-insert-archive-gcc): Paren mistake. - - * gnus-sum.el (gnus-summary-enter-digest-group): Add - parent-group. - - * gnus-art.el (gnus-ignored-headers): Add more headers. - - * rfc2047.el (rfc2047-encode): See which encoding is shorter -- - base64 or QP. - - * nnmail.el (nnmail-article-group): Default to "bogus". - - * mail-source.el (mail-source-delete-incoming): Change to nil. - -2003-10-16 Katsumi Yamaoka - - * mail-source.el (mail-source-fetch-imap): Fix mismatched parens. - -2003-10-16 Lars Magne Ingebrigtsen - - * mail-source.el (defvar): Add post/pre/scripts. - (mail-source-fetch-imap): Use them. - - * nndraft.el (nndraft-request-move-article): Fix infinite - recursion. - - * gnus-group.el (gnus-group-mark-regexp): Jump to groups. - -2003-10-16 Ed L. Cashin - - * imap.el (imap-interactive-login): Set imap-password to nil if - login fails. - -2003-10-16 Lars Magne Ingebrigtsen - - * message.el (message-inserted-headers): New variable. - (message-mode): Make local. - (message-mode): Set all the local action variables to nil. - -2003-10-16 Katsumi Yamaoka - - * mm-decode.el (mm-inline-text-html-with-images): Doc fix. - (mm-w3m-safe-url-regexp): Doc fix. - -2003-10-12 Jesper Harder - - * gnus-sum.el (gnus-summary-respool-query): Don't narrow to head, - it's done by nnmail-article-group. - - * gnus-uu.el (gnus-uu-grab-articles): Fix misplaced parens. - From Mark Hood (tiny change) - -2003-10-10 Jesper Harder - - * mm-decode.el (mm-file-name-delete-gotchas): Avoid infloop in - XEmacs. - -2003-10-10 Teodor Zlatanov - - * spam.el (spam-initialize): new function, does the spam-face - update and all the hooks, replaces spam-install-hooks-function - - * gnus-registry.el (gnus-registry-initialize): new autoloaded - function to explicitly initialize the registry - -2003-10-10 Katsumi Yamaoka - - * mm-decode.el (mm-w3m-safe-url-regexp): Doc fix. - - * mm-view.el (mm-w3m-mode-map): Doc fix. - (mm-inline-text-html-render-with-w3m): Add a comment. - -2003-10-10 Lars Magne Ingebrigtsen - - * gnus-group.el: Remove superfluous eval-when-compiles. - -2003-10-10 Jesper Harder - - * gnus-group.el (gnus-group-suspend): Reset gnus-backlog-articles. - -2003-10-08 Lars Magne Ingebrigtsen - - * dns.el (query-dns): Don't error out on malformed resolv files. - -2003-10-06 Jesper Harder - - * gnus.el (gnus-group-faq-directory): Update .tw entry. From - Albert Chun-Chieh Huang - -2003-10-03 Teodor Zlatanov - - * spam.el (spam-check-blackholes): exit the loop if matches are - found (idea from Adrian Lanz ) - (spam-check-bogofilter-headers, spam-check-blackholes, spam-check-BBDB) - (spam-from-listed-p): use nnmail-fetch-field instead of message-fetch-field - - -2003-10-03 Katsumi Yamaoka - - * mm-decode.el (mm-attachment-file-modes): Change the default - value into 384 from ?\600 which doesn't mean an integer in XEmacs. - -2003-10-03 Jesper Harder - - * mm-decode.el (mm-file-name-delete-control) - (mm-file-name-delete-gotchas): New functions. - (mm-file-name-rewrite-functions): Use them. - (mm-attachment-file-modes): New option. - (mm-save-part-to-file): Use it. - -2003-10-02 Reiner Steib - - * spam.el (spam-install-hooks-function): Added Autoload cookie. - -2003-10-02 Jesper Harder - - * pgg-def.el (pgg-default-keyserver-address): Change to - subkeys.pgp.net. From Michael Shields - -2003-10-01 Simon Josefsson - - * message.el (message-idna-to-ascii-rhs-1): RHS can be terminated - by ',', as in 'foo@example.org, bar@example.org'. - -2003-10-01 Jesper Harder - - * message.el (message-send): Fix reversed logic of supersedes - check. - -2003-09-30 Reiner Steib - - * gnus-art.el (gnus-article-view-part-as-charset): Doc fix, - suggested by Norbert Koch . - -2003-09-29 Katsumi Yamaoka - - * gnus-topic.el (gnus-topic-goto-missing-topic): Revert 2003-02-09 - change in order to correct the position where an invisible topic - (because gnus-topic-display-empty-topics is nil) may be inserted. - -2003-09-22 Katsumi Yamaoka - - * message.el (message-ignored-supersedes-headers): Add X-Payment. - -2003-09-20 Jesper Harder - - * rfc2047.el (rfc2047-encode): Limit line length to 76 characters. - -2003-09-20 Simon Josefsson - - * tls.el (tls-process-connection-type): Doc fix. - - * imap.el (imap-starttls-open): Rewrite, should support both old - starttls.el and new starttls.el that uses GNUTLS. - -2003-09-18 Katsumi Yamaoka - - * gnus-art.el (gnus-treat-display-x-face): Use set-default instead - of custom-set-default which isn't available in old XEmacsen. - -2003-09-17 Jesper Harder - - * gnus-msg.el (gnus-summary-resend-message-edit): Don't convert - to MML. MIME -> MML -> MIME does not work for PGP/MIME. - - * message.el (message-bounce, message-forward-show-mml): do. - -2003-09-13 Jesper Harder - - * rfc2047.el (rfc2047-charset-encoding-alist): Add viscii. - (rfc2047-encode): Add factors for big5, gb2312 and euc-kr. - - * nnweb.el (nnweb-google-parse-1): Fix parsing. - -2003-09-12 Jesper Harder - - * gnus-group.el (gnus-group-fetch-control): ISC changed - compression from .Z to .gz. - - * rfc2047.el (rfc2047-header-encoding-alist): Add "Approved" to - address-mime. - -2003-09-11 Jesper Harder - - * rfc2047.el (rfc2047-encode): Restrict encoded-words to 75 - characters. - -2003-09-10 Jesper Harder - - * gnus.el (gnus-group-charter-alist): Update. - -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) - -2003-09-08 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-delete-id): function to - completely delete an ID, including all the cache hashtables - (gnus-registry-delete-group): use gnus-registry-delete-id - (gnus-registry-simplify-subject): only run if the argument is a - string, return nil otherwise - -2003-09-07 Jesper Harder - - * gnus-msg.el (gnus-summary-resend-bounced-mail): Docstring fix. - -2003-09-05 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-split-fancy-with-parent): yet - another error *sigh* - - * gnus-registry.el (gnus-registry-fetch-extra-entry): don't use - puthash unless gnus-registry-entry-caching is on - (gnus-registry-split-fancy-with-parent): misplaced parenthesis - made everything a part of the 'else' - (gnus-registry-save): used 'entry-caching' instead of 'caching' - -2003-09-05 Jesper Harder - - * gnus-art.el (gnus-button-alist): Improve Info regexp. - -2003-09-04 Teodor Zlatanov - - * gnus-registry.el: added brief explanation of basics - (gnus-registry-track-extra): new variable for tracking of message - subjects - (gnus-registry-entry-caching): caching parameter, used for extra - data - (gnus-registry-minimum-subject-length): minimum subject length - before it's considered when tracing subjects - (gnus-registry-save): accomodate extra data entry caching - (gnus-registry-action): change function name, add the subject and - pass it to gnus-registry-add-group - (gnus-registry-spool-action): change function name, add the - subject and pass it to gnus-registry-add-group - (gnus-registry-split-fancy-with-parent): add subject tracking - (gnus-registry-register-message-ids): pass subject to - gnus-registry-add-group - (gnus-registry-simplify-subject) - (gnus-registry-fetch-simplified-message-subject-fast): new - functions - (gnus-registry-fetch-extra, gnus-registry-fetch-extra-entry): add - extra data entry caching - (gnus-registry-add-group): handle the extra subject parameter - (gnus-registry-install-hooks, gnus-registry-unload-hook): fix the - gnus-register-* function names - - * nnmail.el (nnmail-cache-insert): add subject parameter, pass it - on to the nnmail-spool-hook - - * nnbabyl.el (nnbabyl-request-accept-article): added subject to - nnmail-cache-insert call - - * nndiary.el (nndiary-request-accept-article): added subject to - nnmail-cache-insert call - - * nnfolder.el (nnfolder-request-accept-article): added subject to - nnmail-cache-insert call - - * nnimap.el (nnimap-split-articles): added subject to - nnmail-cache-insert call - (nnimap-request-accept-article): added subject to - nnmail-cache-insert call - - * nnmbox.el (nnmbox-request-accept-article): added subject to - nnmail-cache-insert call - - * nnmh.el (nnmh-request-accept-article): added subject to - nnmail-cache-insert call - - * nnml.el (nnml-request-accept-article): added subject to - nnmail-cache-insert call - -2003-09-04 Jesper Harder - - * gnus-art.el (gnus-button-handle-info-url) - (gnus-button-handle-info-url-gnome) - (gnus-button-handle-info-url-kde, gnus-button-alist): Handle GNOME - and KDE style Info URLs. - - * gnus-util.el (gnus-url-unhex-string): Don't replace "+" with " ". - -2003-09-02 Jesper Harder - - * rfc2047.el (rfc2047-fold-region): Don't fold at the beginning - of the field. - -2003-09-01 Simon Josefsson - - * mml.el (mml-insert-mime-headers-always): New variable. - (mml-insert-mime-headers): Use it. Based on (tiny) patch from - Lars Balker Rasmussen . - -2003-08-30 Simon Josefsson - - * 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). - -2003-08-29 Simon Josefsson - - * gnus-group.el (gnus-group-delete-group): Doc fix. Suggested by - Jochen K,A|(Bpper . - -2003-08-29 Katsumi Yamaoka - - * gnus-art.el (article-display-x-face): Make it possible to set - the gnus-article-x-face-command variable to the lambda form. - -2003-08-27 Simon Josefsson - - * mm-decode.el (mm-remove-part): Try to kill external displayers - cleanly first (if it refuses, C-g aborts loop and kill process - unconditionally). Also make sure process is dead before we remove - the files it may be using. Reported by David Coe - . - -2003-08-27 Jesper Harder - - * gnus-cache.el (gnus-cache-generate-active): Fix bug in - replacement. From Vagn Johansen (tiny - change). - -2003-08-25 Katsumi Yamaoka - - * gnus-art.el: Don't use defvaralias. - (gnus-treat-display-x-face): Warn if the obsolete variable - `gnus-treat-display-xface' exists. - -2003-08-25 Jesper Harder - - * gnus-art.el (gnus-treat-display-face): Fix typo. - (gnus-treat-display-xface): Rename to gnus-treat-display-x-face - (reported by Jochen K,A|(Bpper ) - -2003-08-24 Jesper Harder - - * gnus-art.el (gnus-header-button-alist, gnus-button-alist): Fix - type. - -2003-08-22 Jesper Harder - - * message.el (message-make-forward-subject-function): Fix - customize mismatch. - - * gnus.el (gnus-message-archive-method): do. - -2003-08-20 Reiner Steib - - * gnus.el (gnus-read-group): Offer to continue only if the invalid - char is `/' and add more information for the user. - - * gnus-art.el (gnus-button-alist): Add `+' (gnus-button-handle-man). - (gnus-header-button-alist): Added `In-Reply-To'. - - * nnimap.el (nnimap-open-connection): Allow different user names - on the same server (and in the same authinfo file). - -2003-08-20 Jesper Harder - - * gnus-sieve.el (gnus-sieve-crosspost): Fix type. - - * message.el (message-make-forward-subject-function): Add - message-forward-subject-name-subject to choices. - - * gnus-art.el (gnus-article-edit-done, gnus-article-edit-exit): - Redisplay article after editing. - -2003-08-20 Simon Josefsson - - * 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 - - * gnus-score.el (gnus-summary-score-effect): Fix interactive use. - -2003-08-10 Teodor Zlatanov - - * gnus-draft.el (gnus-draft-send-all-messages): ask if all drafts - should be sent unless gnus-expert-user is on - -2003-08-09 Jesper Harder - - * pgg-gpg.el (pgg-gpg-extra-args): Fix customization type. - -2003-08-07 Jesper Harder - - * pgg-gpg.el (pgg-gpg-process-region): Bind - default-enable-multibyte-characters to nil. - -2003-08-07 Katsumi Yamaoka - - * canlock.el (canlock-password): Fix customization type. - (canlock-password-for-verify): Ditto. - * deuglify.el (gnus-outlook-deuglify-unwrap-min): Ditto. - (gnus-outlook-deuglify-unwrap-max): Ditto. - (gnus-outlook-deuglify-unwrap-stop-chars): Ditto. - * gnus-sum.el (gnus-sum-thread-tree-root): Ditto. - (gnus-sum-thread-tree-false-root): Ditto. - (gnus-sum-thread-tree-single-indent): Ditto. - * message.el (message-archive-note): Ditto. - (message-subscribed-address-file): Ditto. - (message-user-fqdn): Ditto. - * spam-report.el (spam-report-gmane-regex): Ditto. - * spam.el (spam-blackhole-good-server-regex): Ditto. - - * gnus-start.el (gnus-save-killed-list): Fix last change. - * message.el (message-courtesy-message): Ditto. - -2003-08-07 Jesper Harder - - * gnus-art.el (gnus-header-face-alist): Revert previous change. - (gnus-header-newsgroups-face): Explain that it's only used for - crossposts. - -2003-08-07 Katsumi Yamaoka - - * gnus-registry.el (gnus-registry-max-entries): Fix customization - type. - * gnus-score.el (gnus-adaptive-word-length-limit): Ditto. - * gnus.el (gnus-refer-article-method): Ditto. - * message.el (message-courtesy-message): Ditto. - -2003-08-06 Jesper Harder - - * gnus-art.el (gnus-header-face-alist): Fix "Newsgroups" entry. - From Chunyu Wang (tiny patch) - -2003-08-05 Katsumi Yamaoka - - * gnus-start.el (gnus-save-killed-list): Fix customization type. - * gnus-sum.el (gnus-thread-hide-subtree): Ditto. - * gnus.el (gnus-use-long-file-name): Ditto. - -2003-08-04 Jesper Harder - - * gnus-group.el (gnus-group-rename-group): Don't allow renaming to - an existing name. - - * gnus-sum.el (gnus-summary-highlight): Add uncached to docstring. - - * nnmail.el (nnmail-large-newsgroup): Docstring fix. - - * nntp.el (nntp-large-newsgroup): do. - - * nnspool.el (nnspool-large-newsgroup): do. - - * gnus-cus.el (gnus-group-parameters): Typo. - -2003-07-31 Simon Josefsson - - * mml-sec.el (mml-signencrypt-style-alist): Use separate S/MIME - method by default (revert partial 2003-07-10 patch). - -2003-07-28 Dave Love - - * pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el: Require cl when compiling. - -2003-07-26 Teodor Zlatanov - - * 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 - - * flow-fill.el (fill-flowed): Empty lines separate paragraphs - even if the preceding line ends with a soft break. Tiny patch - from Mark Thomas . - -2003-07-25 Teodor Zlatanov - - * spam.el (spam-use-regex-body, spam-regex-body-spam) - (spam-regex-body-ham): new variables, default to nil/empty/empty - (spam-install-hooks): added spam-use-regex-body to list or - pre-install conditions - (spam-list-of-checks): added spam-use-regex-body and - spam-check-regex-body to list of checks - (spam-list-of-statistical-checks): added spam-use-regex-body to - list of statistical checks - (spam-check-regex-body): invokes spam-check-regex-headers with - appropriate variable masking - (spam-check-regex-headers): changes to print "body" or "header" - where appropriate - -2003-07-25 Jesper Harder - - * smime.el (smime-ask-passphrase): Use read-passwd rather than - comint-read-noecho. The former is more secure. - -2003-07-24 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-cache-whitespace): make "adding - whitespace" message level 5 instead of 4 - (gnus-registry-clean-empty-function): new function to remove empty - registry entries - (gnus-registry-clean-empty): new variable to enable cleaning the - registry when saving it by calling gnus-registry-clean-empty-function - - * spam.el (spam-summary-prepare-exit): use spam-process-ham-in-spam-groups - (spam-process-ham-in-spam-groups): new variable - -2003-07-24 Jesper Harder - - * pgg-gpg.el (pgg-gpg-process-region): Add "--yes" to options. - - * pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el, pgg.el: Reapply changes - from 2003-04-03 to fix security problem. See - http://www.debian.org/security/2003/dsa-339 - -2003-07-23 Teodor Zlatanov - - * gnus.el (gnus-install-group-spam-parameters): add the - gnus-ticked-mark to the possible choices of ham marks - - * spam.el (spam-process-ham-in-nonham-groups): new variable - (spam-summary-prepare-exit): use spam-process-ham-in-nonham-groups - -2003-07-23 Jesper Harder - - * rfc2047.el (rfc2047-header-encoding-alist): Add Mail-Followup-To - and Mail-Copies-To to address-mime. - (rfc2047-narrow-to-field): Use rfc2047-point-at-bol. - -2003-07-19 Jesper Harder - - * mm-util.el (mm-coding-system-priorities): Docstring improvement. - -2003-07-17 Jesper Harder - - * gnus-sum.el (gnus-thread-latest-date): Move condition-case to - the right place. - -2003-07-14 Simon Josefsson - - * mail-source.el (mail-source-fetch-imap): Don't assume - imap-error-text returns something. - -2003-07-12 Nevin Kapur - - * nnimap.el (nnimap-request-newgroups): Use the pattern in - nnimap-list-pattern instead of "*". - -2003-07-10 Simon Josefsson - - * mml-sec.el (mml-signencrypt-style-alist): Use "combined" by - default. Improve docstring. - -2003-07-10 Kai Gro,A_(Bjohann - - * imap.el (imap-arrival-filter): Fix test for missing process - buffer. - -2003-07-09 Kai Gro,A_(Bjohann - From Gaute B Strokkenes (tiny patch). - - * imap.el (imap-wait-for-tag): Clarify comment. Use timeout zero - for second, after-process-has-died, accept-process-output. - (imap-arrival-filter): If PROC has no buffer, do nothing. - -2003-07-09 Jesper Harder - - * flow-fill.el: Docstring and message fixes. - - * deuglify.el: do. - - * gnus-int.el: do. - - * gnus-msg.el: do. - - * gnus-util.el: do. - - * gnus-draft.el: do. - - * gnus-start.el: do. - - * gnus.el: do. - - * gnus-group.el: do. - - * gnus-art.el: do. - - * gnus-sum.el: do. - - * mail-source.el (mail-source-movemail): Handle non-numerical - return values. - -2003-07-08 Jesper Harder - - * mailcap.el (mailcap-parse-args-syntax-table) - (mailcap-viewer-passes-test): Docstring fix. - - * mm-bodies.el (mm-long-lines-p): Docstring fix. - - * mm-decode.el (mm-w3m-safe-url-regexp, mm-verify-option) - (mm-decrypt-option, mm-handle-set-external-undisplayer) - (mm-file-name-replace-whitespace): Docstring fix. - - * mm-uu.el (mm-uu-emacs-sources-regexp): Docstring fix. - (mm-uu-pgp-signed-test): Fix message. - - * mml.el (mml-tweak-sexp-alist): Docstring fix. - (mml-parse-1, mml-insert-mime-headers): Fix message. - - * message.el (message-archive-header) - (message-subscribed-address-functions) - (message-subscribed-addresses, message-subscribed-regexps) - (message-canlock-generate) - (message-generate-new-buffer-clone-locals): Docstring fixes. - -2003-07-07 Kai Gro,A_(Bjohann - - * imap.el (imap-wait-for-tag): After the process has died, look - for more output still pending. From Gaute B Strokkenes - (tiny patch). - -2003-07-07 Teodor Zlatanov - - * spam.el (spam-bogofilter-score): redisplay article normally - after spam-bogofilter-score is called - -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. - -2003-07-04 Dave Love - - * rfc2047.el (rfc2047-q-encode-region): Exclude especials from - characters not encoded, and make the list more legible. - -2003-07-04 Jesper Harder - - * message.el (message-make-from): Revert change from 2002-01-08. - -2003-06-29 Lars Magne Ingebrigtsen - - * nnheader.el (nnheader-init-server-buffer): Don't add - nntp-server-buffer to list of Gnus buffers. - -2003-06-25 Teodor Zlatanov - - * spam.el (spam-parse-list): prevent empty ("") strings - -2003-06-24 Teodor Zlatanov - - * spam.el (spam-parse-list): use gnus-extract-address-components - instead of ietf-drums-parse-addresses - (spam-from-listed-p): let* was unnecessary - -2003-06-24 Lars Magne Ingebrigtsen - - * gnus-ems.el (gnus-put-image): Mark the right text segment with - gnus-image-category. - - * gnus-srvr.el (gnus-browse-unsubscribe-group): Strip prefix from - native groups. - - * gnus-topic.el (gnus-group-prepare-topics): Update topic line - format specs. - - * gnus-picon.el: Written by moi, moi, moi. - - * gnus-group.el (gnus-group-kill-group): Clean up. - -2003-06-23 Teodor Zlatanov - - * spam.el (spam-from-listed-p, spam-parse-list): use - ietf-drums-parse-addresses to extract the address portion of the - whitelist/blacklist file if it looks like an address can be found - -2003-06-23 Didier Verna - - * gnus-ems.el (gnus-put-image): New argument CATEGORY. Add it as a - text property. - (gnus-remove-image): New argument CATEGORY. Only remove if - category matches. - * gnus-xmas.el (gnus-xmas-put-image): - (gnus-xmas-remove-image): Ditto, with extents. - * gnus-art.el (gnus-delete-images): Pass CATEGORY argument to - gnus-[xmas-]remove-image. - (article-display-face): Don't always act as a toggle. Call - `gnus-put-image' with CATEGORY argument. - (article-display-x-face): Call `gnus-put-image' with CATEGORY - argument. - * smiley.el (smiley-region): Ditto. - * gnus-fun.el (gnus-display-x-face-in-from): Ditto. - * gnus-picon.el (gnus-picon-insert-glyph): Ditto. - (gnus-treat-mail-picon): Don't always act as a toggle. - * gnus-picon.el (gnus-treat-newsgroups-picon): Ditto. - -2003-06-23 Didier Verna - - * gnus-art.el (article-display-face): Check for existence of the - original article buffer before switching to it. - -2003-06-20 Jesper Harder - - * mm-util.el (mm-append-to-file): Say "Appended to". Suggested by - Dan Jacobson . - - * mm-view.el (mm-inline-message): Bind - gnus-original-article-buffer to the buffer in the mml handle - holding the message. - -2003-06-20 Katsumi Yamaoka - - * message.el (sender, from): No need to bind them. - -2003-06-19 Teodor Zlatanov - - * spam.el (spam-enter-list): search-forward specified wrong - -2003-06-19 Lars Magne Ingebrigtsen - - * gnus-art.el: Comment fix. - -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-19 Teodor Zlatanov - - * spam.el (spam-enter-list): do not enter duplicate addresses into - the whitelist/blacklist - -2003-06-19 Jesper Harder - - * nnheader.el (nnheader-init-server-buffer): Add - nntp-server-buffer to gnus-buffers. - - * gnus-start.el (gnus-clear-system): Now we don't need to kill - nntp-server-buffer separately. - -2003-06-18 Didier Verna - - * gnus-art.el (article-display-face): Correctly toggle between - display and hiding. Handle multiple Face headers. - -2003-06-17 Dave Love - - * nnimap.el: Require cl when compiling. - - * message.el (message-fix-before-sending): Reinstate nullifying - the invisible text property. - (sender, from): Defvar when compiling. - (message-is-yours-p): Remove autoload cookie. - -2003-06-17 Reiner Steib - - * gnus-util.el (gnus-extract-address-components): Added - doc-string. - -2003-06-16 Kai Gro,A_(Bjohann - - * nnml.el (nnml-current-group-article-to-file-alist): Don't read - overview when using compressed files. From Michael Albinus - . - -2003-06-16 Katsumi Yamaoka - - * gnus-sum.el (gnus-summary-refer-parent-article): Extract - Message-ID from In-Reply-To header. - -2003-06-16 Katsumi Yamaoka - - * message.el (message-is-yours-p): Narrow to head; extract from - and sender by itself. - (message-cancel-news, message-supersede): Remove useless things. - -2003-06-15 Reiner Steib - - * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Bind - `gnus-article-emulate-mime'. - -2003-06-15 Kai Gro,A_(Bjohann - From Tommi Vainikainen . - - * message.el (message-is-yours-p): New function. Separated common - code from message-cancel-news and message-supersede. Added - matching code which uses message-alternative-emails regexp as last - resort. - (message-cancel-news, message-supersede): Use message-is-yours-p. - -2003-06-13 Kai Gro,A_(Bjohann - - * nnimap.el (nnimap-split-articles): Narrow the right buffer to - the headers. From Niklas Morberg . - -2003-06-12 Dave Love - - * nnheader.el (nnheader-functionp): Deleted. - - * nnmail.el (nnmail-split-fancy-syntax-table): Define all in - defvar. - (nnmail-version): Deleted. - (nnmail-check-duplication, nnmail-expiry-target-group): Don't use - nnheader-functionp. - -2003-06-10 Teodor Zlatanov - - * 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 - - - * spam.el (spam-use-spamoracle): new variable - (spam-install-hooks): add spamoracle to the list of conditions - for activation of spam-install-hooks - (spam-spamoracle): new variable customization group - (spam-spamoracle, spam-spamoracle): new variables - (spam-group-spam-processor-spamoracle-p) - (spam-group-ham-processor-spamoracle-p): new functions - (spam-summary-prepare-exit): added spamoracle ham/spam exit processing - (spam-list-of-checks, spam-list-of-statistical-checks): add - spam-use-spamoracle - (spam-check-spamoracle, spam-spamoracle-learn) - (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): new functions - - * gnus.el (gnus-group-spam-exit-processor-spamoracle) - (gnus-group-ham-exit-processor-spamoracle): new variables for SpamOracle - (spam-process, ham-process): added spamoracle spam/ham processors - -2003-06-08 Jesper Harder - - * message.el (message-beginning-of-line): Docstring improvement. - Suggested by Michael R. Wolf - -2003-06-07 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-make-menu-bar): Removed ["Add buttons" - gnus-summary-display-buttonized t] - -2003-06-07 Kai Gro,A_(Bjohann - - * nnmail.el (nnmail-split-fancy-match-partial-words): Doc string - fix. Reported by Johan Bockg,Ae(Brd . - -2003-06-07 Jesper Harder - - * message.el (message-beginning-of-line): Docstring improvement. - -2003-06-06 Jesper Harder - - * gnus-srvr.el (gnus-browse-foreign-server): Parse garbage NNTP - groups correctly. - -2003-06-06 Kai Gro,A_(Bjohann - From Benjamin Rutt . - - * message.el (message-fetch-field): Augment documentation to state - the narrowed-to-headers restriction. - (message-change-subject, message-reduce-to-to-cc) - (message-generate-unsubscribed-mail-followup-to) - (message-insert-importance-high, message-insert-importance-low) - (message-insert-or-toggle-importance) - (message-insert-disposition-notification-to): Narrow to headers - before calling message-fetch-field or message-remove-header. - -2003-06-06 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-trim): fix for when - gnus-registry-max-entries is nil - -2003-06-05 Lars Magne Ingebrigtsen - - * qp.el (quoted-printable-decode-region): Don't error out on - malformed text. - -2003-06-04 Lars Magne Ingebrigtsen - - * rfc2047.el (rfc2047-encode-region): Don't error out on invalid - strings. - -2003-06-04 Jesper Harder - - * mml1991.el (mml1991-pgg-sign): Insert pgg output as unibyte. - From: Ivan Boldyrev (tiny - change) - -2003-06-03 Dave Love - - * gnus-soup.el (gnus-soup-send-packet): Don't use - message-functionp. - - * gnus.el (gnus-agent-cache): Doc fix. - (gnus-other-frame): Quote lambda used as hook. - - * message.el: Doc fixes. - (message-functionp): Deleted. Callers changed. - (message-fix-before-sending): Highlight with overlays. Clarify - `illegible text' messages. - (rmail-enable-mime-composing, gnus-message-group-art): Defvar when - compiling. - (gnus-find-method-for-group, nnvirtual-find-group-art): Autoload. - -2003-06-03 Kai Gro,A_(Bjohann - - * nnmail.el (nnmail-split-fancy-match-partial-words): New user - option. - (nnmail-split-it): Obey it. Don't let-bind regexp twice. - - * message.el (message-fetch-field): Mention narrow-to-headers - requirement. - -2003-06-03 Jesper Harder - - * gnus-xmas.el (gnus-xmas-create-image): Use - insert-file-contents-literally. From: Eric Eide - - -2003-06-02 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-fetch-group): always return the - short name of the group - -2003-06-02 Jesper Harder - - * gnus-cus.el (defvar): Silence byte-compiler warnings. - - * gnus-sum.el (gnus-get-newsgroup-headers): Unfold headers. - -2003-05-31 Jesper Harder - - * gnus-art.el (article-unsplit-urls): Use gnus-treat-article - rather than gnus-display-mime-function. - -2003-05-30 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-use-long-group-names): new variable - (gnus-registry-add-group): use it - (gnus-registry-trim-articles-without-groups): new variable - (gnus-registry-delete-group): use it - (gnus-registry-unload-hook): uninstall all the hooks - - * spam.el (spam-install-hooks-function, spam-unload-hook): new - functions so users that load spam.el for customization don't get - all the hooks installed - (spam-install-hooks): new variable, set to t by default if user - has one of the spam-use-* variables set - - * spam-stat.el (spam-stat-install-hooks, spam-stat-unload-hook): new - functions so users that load spam-stat.el for customization don't get - all the hooks installed - -2003-05-30 Dave Love - - * rfc2047.el (rfc2047-decode): Don't use - mm-with-unibyte-current-buffer. - - * qp.el (quoted-printable-decode-string): Use - mm-with-unibyte-buffer. - -2003-05-29 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-save): allow forced saving even - when registry is not dirty. Use gnus-registry-trim to shorten the - gnus-registry-alist. - (gnus-registry-max-entries): new variable - (gnus-registry-trim): new function, trim gnus-registry-alist to - size gnus-registry-max-entries, sorting by entry mtime so the - newest entries stick around - - * gnus-start.el (gnus-gnus-to-quick-newsrc-format): instead of - just one specific variable, allow a list of specific variables - -2003-05-28 Dave Love - - * rfc2047.el (rfc2047-encode-region): Skip ASCII at beginning and - end of region. - -2003-05-28 Jesper Harder - - * lpath.el: Add put-char-table and get-char-table. - -2003-05-28 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-dirty): flag for modified registry - (gnus-registry-save, gnus-registry-read) - (gnus-registry-store-extra, gnus-registry-clear): use it (note - that gnus-registry-store-extra is invoked for all modifications to - set the mtime, so gnus-registry-dirty only needs to be set there) - -2003-05-23 Simon Josefsson - - * mml1991.el (mml1991-pgg-sign): Use mml-sender instead of - message-sender. - - * gnus-art.el (gnus-use-idna): Check if idna-program is installed. - - * message.el (message-use-idna): Ditto. - -2003-05-20 Dave Love - - * rfc2047.el (rfc2047-q-encoding-alist): Deleted. - (rfc2047-q-encode-region): Don't use it. - (rfc2047-encode-message-header) <(eq method 'mime)>: Bind - rfc2047-encoding-type to `mime'. - (rfc2047-encode-string, rfc2047-encode): Doc fix. - -2003-05-20 Jesper Harder - - * message.el (message-send-mail): Don't insert a courtesy copy - notice in base64 encoded messages. - -2003-05-16 Katsumi Yamaoka - - * gnus-sum.el (gnus-summary-move-article): Don't copy expirable - marks if the destination group is not auto-expirable. - -2003-05-14 Katsumi Yamaoka - - * dgnushack.el (assq-delete-all): Removed the compiler macro. - -2003-05-14 Kevin Greiner - - * gnus-agent.el (gnus-agentize): Updated documentation to match - usage. - (gnus-agent-expire-group-1): Do not skip over a group when the - force argument is set. - * gnus.el (gnus-agent): Updated documentation to reflect that - gnus-agent now defaults to t. - -2003-05-14 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump. - -2003-05-14 Lars Magne Ingebrigtsen - - * gnus.el: Gnus v5.10.2 is released. - -2003-05-14 Lars Magne Ingebrigtsen - - * mail-source.el (mail-source-delete-incoming): Changed to t. - - * rfc2047.el (rfc2047-syntax-table): Funcall. - - * lpath.el ((featurep 'xemacs)): Added set-char-table-range. - ((featurep 'xemacs)): No, don't. - - * rfc2047.el (rfc2047-encodable-p): Use the header charset. - - * gnus-sum.el (gnus-summary-reselect-current-group): Supply - leave-hidden. - -2003-05-14 Jonathan Kamens - - * gnus-sum.el (gnus-summary-exit): Added `leave-hidden'. (Tiny - patch.) - -2003-05-13 Lars Magne Ingebrigtsen - - * gnus-registry.el (gnus-registry-store-extra-entry): Use - gnus-assq-delete-all. - - * gnus-xmas.el (gnus-xmas-assq-delete-all): New function. - - * message.el (message-ignored-bounced-headers): Add Delivered-To. - - * gnus-sum.el (gnus-summary-find-next): Indent. - (gnus-summary-find-prev): Ditto. - (gnus-summary-catchup): Doc fix. - (gnus-summary-mark-current-read-and-unread-as-read): New function. - (gnus-summary-catchup): Really mark after point. - - * gnus-util.el (gnus-user-date): Use %d instead of %m. - (gnus-user-date): Use floating point time so that we don't get - overflows. - - * gnus-sum.el (gnus-summary-local-variables): Clean up. - - * gnus-fun.el (gnus-display-x-face-in-from): Don't use centering - since none of the other image things do. - -2003-05-13 Katsumi Yamaoka - - * dgnushack.el (assq-delete-all): New compiler macro for Emacs 20. - -2003-05-12 Katsumi Yamaoka - - * lpath.el: Fbind find-coding-system. - - * dgnushack.el (dgnushack-make-load): Remove redundant format call - in message. Suggested by Yoichi NAKAYAMA . - * pop3.el (pop3-movemail): Ditto. - -2003-05-12 Colin Marquardt (tiny change) - - * gnus.el (gnus-agent): Docstring fix. - -2003-05-12 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-install): new variable - (gnus-registry-fetch-extra, gnus-registry-fetch-extra-entry) - (gnus-registry-store-extra-entry, gnus-registry-delete-group) - (gnus-registry-add-group): add a modification timestamp to each entry - (gnus-registry-install-hooks): new function - -2003-05-12 Kevin Greiner - - * gnus-agent.el (gnus-agent-cat-name): Eval macro while compiling. - (gnus-agent-cat-disable-undownloaded-faces): New function. - Accessor for new agent property - 'agent-disable-undownloaded-faces'. - gnus-cus.el (gnus-agent-parameters): Added - agent-disable-undownloaded-faces and corrected documentation. - (gnus-agent-cat-prepare-category-field, - gnus-agent-customize-category): Changed to avoid creating free - references to each field's symbol. - gnus-sum.el (gnus-summary-use-undownloaded-faces): New local variable. - (gnus-select-newgroup): Initialize it. - (gnus-summary-highlight-line): Use it. - -2003-05-12 Dave Love - - * mm-util.el (mm-read-charset): Deleted. - (mm-coding-system-mime-charset): New. - (mm-read-coding-system, mm-mule-charset-to-mime-charset) - (mm-charset-to-coding-system, mm-mime-charset) - (mm-find-mime-charset-region): Use it. - (mm-default-multibyte-p): Fix non-mule case. - - * rfc2047.el (rfc2047-point-at-bol, rfc2047-point-at-bol): Eval - and compile. - (rfc2047-syntax-table): Fix building table to work in Emacs 22. - (rfc2047-unfold-region): Delete unused var `leading'. - -2003-05-12 Simon Josefsson - - * pgg.el (pgg-temp-buffer-show-function): Reuse existing visible - output window if one is available. Tiny patch from Ville Skytt,Ad(B - . - -2003-05-11 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Added - space. - -2003-05-11 Jesper Harder - - * gnus-sum.el (gnus-summary-enter-digest-group): Don't do article - washing etc. - (gnus-handle-ephemeral-exit): Don't reload article after exiting. - - * nndoc.el (nndoc-type-alist): `mime-digest' should be before - `mime-parts'. - -2003-05-10 Jesper Harder - - * gnus-cite.el (gnus-article-hide-citation-maybe): Make toggling - work. Update mode-line. - -2003-05-10 Lars Magne Ingebrigtsen - - * gnus.el (gnus-logo-color-alist): Added no colours. - -2003-05-09 Dave Love - - * utf7.el (mm-util): Require. - (utf7-direct-encoding-chars, utf7-imap-direct-encoding-chars): - Defconst, not defvar. - (utf7-utf-16-coding-system): New. - (utf7-encode-internal): Hoist concat out of loop. - (utf7-fragment-encode): Use mm-with-unibyte-current-buffer. - (utf7-get-u16char-converter) [utf7-utf-16-coding-system]: New - case. - (utf7-latin1-u16-char-converter): Encode the region. - (utf7-u16-latin1-char-converter): Decode the region. - (utf7-encode, utf7-decode): Fix multibyteness. - - * mm-bodies.el (mm-body-7-or-8): Don't special-case mule. - (mm-encode-body): Use mm-read-coding-system, not mm-read-charset. - (mm-uu-yenc-decode-function): Defvar when compiling. - (mm-encode-body, mm-decode-body): Doc fix. - -2003-05-09 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-unregistered-group-regex): - removed in favor of the group/topic/global variables - (gnus-registry-register-message-ids): fixed test to omit - gnus-registry-unregistered-group-regex - - * gnus.el (gnus-variable-list): removed gnus-registry-alist and - gnus-registry-headers-alist from the list - (gnus-registry-headers-alist): removed - (registry-ignore): new parameter, with accompanying - gnus-registry-ignored-groups global variable - - * gnus-start.el (gnus-clear-system): no need to clear the - registry, we can do it ourselves - (gnus-gnus-to-quick-newsrc-format): extra parameters so it can be - used by gnus-registry.el - - * 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 Jesper Harder - - * gnus-picon.el (gnus-picon-transform-address): Parse the encoded - address. - -2003-05-08 Teodor Zlatanov - - * gnus-start.el (gnus-clear-system): added gnus-registry-alist to - the list of cleared variables - - * gnus-registry.el (gnus-registry-split-fancy-with-parent): - 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 Kai Gro,A_(Bjohann - - * gnus-sum.el (gnus-summary-next-page): Mention - `gnus-article-skip-boring' in docstring. - -2003-05-08 Jesper Harder - - * rfc2231.el (rfc2231-parse-string): "=" should have whitespace - syntax here. - - * ietf-drums.el (ietf-drums-syntax-table): "=" should not have - whitespace syntax class when parsing email addresses. - - * message.el (message-forward-subject-name-subject): Don't use - mail-decode-encoded-word-string before parsing from. - -2003-05-07 ShengHuo ZHU - - * message.el (message-setup-1): Setup alternative email before - generate-headers. - - (message-forward-subject-name-subject): Fix the case when the - field "from" doesn't exist. - -2003-05-07 Dave Love - - * rfc2047.el (rfc2047-encode-region): Skip \n as whitespace. - - * mm-util.el (mm-find-mime-charset-region): Expurgate utf-16 from - possible values. - -2003-05-07 Jesper Harder - - * message.el (message-kill-to-signature): Fix. - -2003-05-06 Jesper Harder - - * gnus-sum.el (gnus-auto-goto-ignores): Docstring fix. - - * gnus-art.el (gnus-mime-display-multipart-as-mixed) - (gnus-mime-display-multipart-related-as-mixed) - (gnus-button-mid-or-mail-heuristic-alist): do. - -2003-05-05 Dave Love - - * mm-util.el (mm-default-multibyte-p): New. - (mm-coding-system-p): Maybe use find-coding-systems. - -2003-05-04 Dave Love - - * rfc2047.el (with-syntax-table): Define if necessary. - (rfc2047-syntax-table): Fix last change for XEmacs. - (rfc2047-parse-and-decode): Revert last change. - -2003-05-03 Jesper Harder - - * gnus.el: Don't test for `mm-guess-mime-charset'. - - * mm-util.el (mm-guess-mime-charset): Remove. Not used any more. - - * gnus.el (gnus-default-charset): Set default value to - `undecided'. - - * gnus-art.el (article-decode-charset): Don't supply 4th arg to - mm-decode-body. - - * 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) - - * gnus-util.el (gnus-multiple-choice): Add ", ?". - -2003-05-03 Dave Love - - * rfc2047.el (rfc2047-syntax-table): Don't call make-char-table - with 2 args. - (rfc2047-decode-string): Don't set the buffer multibyte before - calling buffer-string. - - * mm-encode.el (mm-long-lines-p): Autoload. - (mm-encode-content-transfer-encoding): Doc fix. Don't make buffer - unibyte. Signal error on unknown encoding. - (mm-encode-buffer, mm-qp-or-base64): Doc fix. - - * rfc2047.el (rfc2047-point-at-bol, rfc2047-point-at-eol): New. - Callers of gnus- versions changed to use them. - (rfc2047-header-encoding-alist): Add `address-mime' part. Doc - fixes. - (rfc2047-encoding-type): New. - (rfc2047-encode-message-header): Use mm-charset-to-coding-system. - Don't include header name field in encoding. Add `address-mime' - case and bind rfc2047-encoding-type for `mime' case. - (rfc2047-encodable-p): Deleted. - (rfc2047-syntax-table): New. - (rfc2047-encode-region, rfc2047-encode): Rewritten to take account - of rfc2047 rules with respect to rfc2822 tokens and to do encoding - in place rather than by passing strings. - (rfc2047-encode-string): Doc fix. - (rfc2047-q-encode-region): Don't use - mm-with-unibyte-current-buffer. - (rfc2047-encoded-word-regexp): eval-and-compile. - (rfc2047-decode-region): Avoid concatenation in loop. - (rfc2047-parse-and-decode): Remove useless disjunction. - -2003-05-02 Dave Love - - * rfc2047.el (rfc2047-q-encode-region, rfc2047-decode): Use - mm-with-unibyte-current-buffer. - (ietf-drums, gnus-util): don't require. - - * sieve.el (sieve-manage-mode-menu): Define before use. - - * mml-smime.el (message-narrow-to-headers): Autoload. - - * mm-util.el (mm-coding-system-p): Don't override nil from - coding-system-p. - (mm-mule4-p, mm-disable-multibyte-mule4) - (mm-with-unibyte-current-buffer-mule4): Deleted. - (mm-multibyte-p): Use defun, not defalias. - (mm-make-temp-file): Moved to group at top of file. - (mm-point-at-eol, mm-point-at-bol): New. - - * gnus-cite.el (gnus-art): Require. - - * gnus-ems.el (gnus-get-buffer-create) - (nnheader-find-etc-directory, message-text-with-property): - Autoload. - (gnus-tmp-unread, gnus-tmp-replied, gnus-tmp-score-char) - (gnus-tmp-indentation, gnus-tmp-opening-bracket, gnus-tmp-lines) - (gnus-tmp-name, gnus-tmp-closing-bracket, gnus-tmp-subject-or-nil) - (gnus-check-before-posting): Only defvar when compiling. - - * gnus-int.el (gnus-agent-expire): Autoload, don't defun. - - * gnus-util.el (rmail-default-rmail-file, mm-text-coding-system): - Defvar when compiling. - (gnus-output-to-rmail): Require mm-util. - - * mail-source.el (mail-source-callback): Use mm-make-temp-file. - (mail-source-make-complex-temp-name): Deleted. - - * message.el (message-use-idna): Use mm-coding-system-p. - (message-tokenize-header, message-make-organization) - (message-make-from): Use with-temp-buffer. - (message-set-work-buffer): Deleted. - (message-fill-paragraph): Use `if' not `and' for compiler warning. - (message-check-news-header-syntax): Remove useless lambda. - (message-forward-make-body): Use mm-disable-multibyte, - mm-with-unibyte-current-buffer, mm-enable-multibyte. - (message-replace-chars-in-string): Deleted. - - * mm-extern.el (mm-extern-local-file): Use mm-disable-multibyte. - (mm-extern-url): Use mm-with-unibyte-current-buffer, - mm-disable-multibyte. - (mm-extern-anon-ftp): Use mm-disable-multibyte. - - * mml1991.el (mml1991-mailcrypt-encrypt, mml1991-gpg-encrypt): Use - mm-with-unibyte-current-buffer. - - * mml2015.el (mml): Require. - (mml2015-mailcrypt-encrypt, mml2015-gpg-encrypt): Use - mm-with-unibyte-current-buffer. - - * nnheader.el (gnus-util): Require. - - * nntp.el (format-spec, format-spec-make, open-tls-stream): - Autoload. - - * rfc2231.el (mail-header-remove-comments, mm-encode-body) - (mail-header-remove-whitespace): Autoload. - - * sieve-manage.el (starttls-negotiate): Autoload. - -2003-05-01 Lars Magne Ingebrigtsen - - * nnrss.el (nnrss-find-rss-via-syndic8): Indent. - -2003-05-01 Mark A. Hershberger - - * nnrss.el (nnrss-find-rss-via-syndic8): Don't error out. - -2003-05-01 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump. - -2003-05-01 Teodor Zlatanov - - * spam-report.el (spam-report-gmane-regex): docstring fix. From - Jon Ericson (tiny change) - - * gnus.el (gnus-install-group-spam-parameters): docstring fix. - From Jon Ericson (tiny change) - - * gnus-registry.el (gnus-registry-fetch-extra) - (gnus-registry-store-extra, gnus-registry-group-count): new functions - (gnus-registry-fetch-group, gnus-registry-delete-group) - (gnus-registry-add-group): changed to work with extra data element - if present - -2003-05-01 Lars Magne Ingebrigtsen - - * gnus.el: Gnus v5.10.1 is released. - -2003-05-01 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.24 is released. - -2003-05-01 Lars Magne Ingebrigtsen - - * dgnushack.el (when): Check whether defadvice is fbound. - -2003-05-01 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-unregistered-group-regex): new variable - (gnus-registry-register-message-ids): use it - -2003-05-01 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump. - - * gnus.el: Update copyright for several files. - -2003-05-01 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.23 is released. - -2003-05-01 Lars Magne Ingebrigtsen - - * spam-stat.el (spam-stat-test-directory): Compare against zero. - -2003-05-01 Trey Jackson (tiny change) - - * spam-stat.el (spam-stat-test-directory): Skip 0 length files. - -2003-05-01 Lars Magne Ingebrigtsen - - * message.el (message-forward-subject-name-subject): Decode - string when forwarding. - -2003-05-01 Oystein Viggen - - * dgnushack.el (when): Add defadvice. - -2003-05-01 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump. - -2003-05-01 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.22 is released. - -2003-05-01 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.21 is released. - -2003-05-01 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump. - -2003-05-01 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.20 is released. - -2003-05-01 Vasily Korytov - - * gnus-dired.el (gnus-dired-mode-map): Move to C-c C-l. - -2003-04-30 Mark A. Hershberger - - * mm-url.el (mm-url-insert-file-contents): set url-current-object - in the case where mm-url-use-external is set. - - * nnrss.el (nnrss-request-article): Change the messages created to - multipart/alternative. Hopefully fixes a problem interaction with - w3m. - (nnrss-find-rss-via-syndic8): Better handling if xml-rpc.el isn't - around. - -2003-05-01 Lars Magne Ingebrigtsen - - * message.el (message-check-news-header-syntax): Alter "posting" - message. - - * nnrss.el (nnrss-node-text): Don't use char classes. - -2003-05-01 David Z. Maze - - * nnrss.el (nnrss-find-rss-via-syndic8): Have an `error' branch - in condition-case. - -2003-05-01 Lars Magne Ingebrigtsen - - * message.el (message-required-headers): Remove In-Reply-To. - - * gnus-int.el (gnus-open-server): Revert changes. - -2003-04-30 Kai Gro,A_(Bjohann - - * gnus-int.el (gnus-open-server): Try to open unagentized servers - even when unplugged. - -2003-04-30 Reiner Steib - - * gnus-art.el (gnus-button-prefer-mid-or-mail): Fixed typo in - doc-string. - -2003-05-01 Steve Youngs - - * lpath.el: Add a section for non-Mule XEmacsen. - fbind `find-charset-string' and `coding-system-base' in that - section. - - * gnus-util.el (gnus-completing-read-maybe-default): New. - (gnus-completing-read): Use it. - - * mm-view.el (mm-view-pkcs7-decrypt): Ditto. - - * gnus-art.el (gnus-read-string): New. - (gnus-summary-pipe-to-muttprint): Use it. - - * gnus-xmas.el (gnus-xmas-open-network-stream): New. - - * dns.el (dns-make-network-process): Use it. - - Take care of some differences between XEmacs 21.1 and newer - versions of XEmacs. - -2003-04-30 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-split-fancy-with-parent): added - diagnostic message - (gnus-registry-grep-in-list): don't run when word is nil - (gnus-registry-fetch-message-id-fast): new function - (gnus-registry-delete-group, gnus-registry-add-group): make sure - the id and group are not nil - (gnus-registry-register-message-ids): new function - (gnus-register-action): optimized logical flow - (gnus-summary-prepare-hook): added gnus-registry-register-message-ids - -2003-04-30 Kai Gro,A_(Bjohann - - * gnus-delay.el (gnus-delay-article): Call - `gnus-agent-queue-setup' to create the delay group. - - * gnus-agent.el (gnus-agent-queue-setup): Support optional arg - for the (queue) group name. - -2003-04-30 Simon Josefsson - - * mm-util.el (mm-charset-to-coding-system): Use user specified - charset unless coding-system-get is fboundp. - -2003-04-30 Kevin Greiner - - * gnus-agent.el (gnus-agent-cat-defaccessor, gnus-agent-cat-name): - Wrapped in eval-when-compile. - (gnus-agent-mode): Bind gnus-agent-go-online to nil as you - shouldn't be asked twice to go online with each server. - (gnus-agent-get-undownloaded-list, gnus-agent-fetch-articles, - gnus-agent-crosspost, gnus-agent-flush-cache, - gnus-agent-fetch-session, gnus-agent-unread-articles, - gnus-agent-uncached-articles, gnus-agent-regenerate-group, - gnus-agent-group-covered-p): Expanded pop macros used for - effect. Avoids compilation warning in emacs 21.3. - - * gnus-int.el (gnus-open-server): Restructured to only open - nnagent when gnus-plugged is nil. - -2003-04-30 Katsumi Yamaoka - - * lpath.el: Fbind string-to-multibyte. - -2003-04-30 Steve Youngs - - * dgnushack.el: Add some missing autoloads for XEmacs 21.1. - -2003-04-29 Teodor Zlatanov - - * gnus-registry.el (gnus-registry-fetch-group): faster - (gnus-registry-delete-group): new function - (gnus-registry-add-group): new function - (gnus-register-spool-action): use it - (gnus-register-action): use it - (gnus-registry-translate-from-alist) - (gnus-registry-translate-to-alist): remove the headers registry - for now - -2003-04-29 Reiner Steib - - * gnus-art.el (gnus-button-alist): Fixed CTAN regexp. - -2003-04-29 Teodor Zlatanov - - * spam-report.el (spam-report-gmane): gnus-summary-article-number - is not necessary, just use the function parameter - -2003-04-29 Karl Pflysterer - - * spam-stat.el (spam-stat-save): No longer font-locks the file - when saving - -2003-04-29 Katsumi Yamaoka - - * canlock.el: Bind mail-header-separator when compiling (XEmacs - provides it in mail-lib/auto-autoloads.el). - -2003-04-29 Simon Josefsson - - * mml2015.el (mml2015-pgg-sign): Use mml-sender instead of - message-sender. - - * mml.el (mml-generate-mime-1): Set mml-sender too. - -2003-04-29 Jesper Harder - - * gnus-sum.el (gnus-summary-display-while-building): Docstring fix. - - * mm-url.el (mm-url-use-external): do. - -2003-04-29 Simon Josefsson - - * canlock.el (mail-fetch-field): Autoload it (fix xemacs compile - warnings). - - * sieve-mode.el (c-mode): Ditto. - - * pgg.el (run-at-time): Ditto. - - * mm-url.el (require): Require timer when compiling for - with-timeout macro (fix xemacs compile warnings). - -2003-04-28 Dave Love - - * gnus-util.el (nnheader): Don't require. - (Nnheader-narrow-to-headers, nnheader-replace-chars-in-string): - Autoload. - - * spam.el: Require cl when compiling. - - * dns.el: Require cl when compiling. - -2003-04-28 Jesper Harder - - * gnus-art.el (gnus-article-goto-next-page) - (gnus-article-goto-prev-page): Revert 2003-02-12 change to make - gnus-pick-mode work. - -2003-04-28 Steve Youngs - - * Makefile.in (FLAGS): Use @FLAGS@. - -2003-04-27 Reiner Steib - - * gnus-art.el (gnus-mime-display-multipart-as-mixed) - (gnus-mime-display-multipart-alternative-as-mixed) - (gnus-mime-display-multipart-related-as-mixed): Added doc-strings, - allow customization. - -2003-04-27 Kevin Greiner - - * dgnushack.el (dgnushack-compile-verbosely): New function. Not - currently called (See source for explanation). - -2003-04-27 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-catchup): Don't mark ticked messages. - (gnus-summary-mark-read-and-unread-as-read): Take an optional - mark. - - * gnus.el (gnus-version-number): Bump. - -2003-04-27 06:47:31 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.19 is released. - -2003-04-27 Kevin Greiner - - * gnus-registry.el (gnus-register-spool-action): Replaced literal - carriage-return character with its escape sequence. - -2003-04-27 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-catchup-from-here): Doc fix. - - * nnrss.el (nnrss-node-text): Use only one - gnus-replace-in-string. - - * gnus.el: Remove gnus-functionp throughout. - - * gnus-util.el (gnus-functionp): Removed. - - * gnus-msg.el (gnus-summary-wide-reply-with-original): Doc fix. - - * message.el (message-required-headers): Add In-Reply-To. - -2003-04-27 Marshall T. Vandegrift - - * gnus-fun.el (gnus-face-from-file): Bind coding-system-for-read - to binary. - -2003-04-27 Jesper Harder - - * mml.el (mml-preview): do. - - * message.el (message-mode): do. - - * gnus-undo.el (gnus-undo-mode): do. - - * gnus-topic.el (gnus-topic-mode): do. - - * gnus-sum.el (gnus-summary-mode, gnus-summary-edit-article): do. - - * gnus-msg.el (gnus-setup-message) - (gnus-inews-add-send-actions, gnus-configure-posting-styles): do. - - * gnus-gl.el (gnus-grouplens-mode): do. - - * gnus-art.el (gnus-mime-save-part-and-strip) - (gnus-mime-delete-part): Use it. - - * gnus-util.el (gnus-make-local-hook): New function. - -2003-04-25 Simon Josefsson - - * nnrss.el (nnrss-node-text): Don't use a star. - (nnrss-node-text): Use g-r-i-s, not g-r-r-i-s which doesn't exist. - -2003-04-24 Dave Love - - * mm-encode.el (mm-long-lines-p): Autoload. - (mm-encode-content-transfer-encoding): Don't try to make buffer - unibyte before decoding. Don't ignore errors for base64 encoding. - - * qp.el (quoted-printable-decode-region): Use mm-insert-byte. - Signal error on malformed text, as for base64. - (quoted-printable-encode-region): DTRT in Emacs 22. - - * mm-util.el (mm-make-temp-file, mm-insert-byte): New. - (mm-auto-save-coding-system): Consider utf-8-emacs. - (mm-mime-mule-charset-alist, mm-mule-charset-to-mime-charset) - (mm-charset-to-coding-system, mm-mime-charset) - (mm-find-mime-charset-region): Check for :mime-charset coding - systems property. - - * mml-sec.el (mml2015, mml1991): Don't require. - (mml2015-sign, mml2015-encrypt, mml1991-sign, mml1991-encrypt) - (message-goto-body, mml-insert-tag): Autoload. - - * mm-decode.el (mm-tmp-directory): Re-write to help avoid warnings. - - * gnus-start.el (message-make-date): Autoload rather than - requiring message. - - * gnus-group.el (gnus-group-name-charset-group-alist): Use - mm-coding-system-p. - (gnus-cache-active-altered): Defvar when compiling. - (gnus-group-delete-group): Re-write to help avoid warnings. - - * gnus-art.el (gnus-use-idna): Use mm-coding-system-p. - - * pgg.el: Split eval-when-compile forms. - -2003-04-24 Reiner Steib - - * gnus-group.el (gnus-large-ephemeral-newsgroup) - (gnus-fetch-old-ephemeral-headers): News variables. - (gnus-group-read-ephemeral-group): Use them. - -2003-04-24 Simon Josefsson - - * sieve.el (sieve-upload): Don't use replace-regexp-in-string. - - * nnrss.el (nnrss-node-text): Ditto. - -2003-04-24 Katsumi Yamaoka - - * gnus-msg.el (gnus-inews-do-gcc): Make sure the obsolete variable - gnus-inews-mark-gcc-as-read exists. - -2003-04-23 Simon Josefsson - - * gnus-sieve.el (gnus-sieve-generate): Rewrite regexp search so it - doesn't exceed the regexp stack space. - -2003-04-23 Jesper Harder - - * gnus-msg.el (gnus-inews-mark-gcc-as-read): Don't defvar it. - - * gnus-art.el (gnus-article-hide-pgp-hook): do. - -2003-04-23 Reiner Steib - - * mml.el (mml-preview): Bind `=', RET, and mouse-2. - -2003-04-23 Jesper Harder - - * mm-bodies.el (mm-decode-body): Don't override supplied charset. - -2003-04-23 Katsumi Yamaoka - - * dgnushack.el (merge, copy-list): Remove compiler macros. - (butlast): Add a compiler macro. - -2003-04-22 Paul Jarc - - * gnus-util.el (gnus-merge): Added "type" argument to match CL - merge and gnus-sum.el's expectations. - -2003-04-21 Reiner Steib - - * gnus-art.el (gnus-button-url-regexp): Added nntp. - - * message.el (message-generate-headers-first): Default to - '(references). - - * gnus-art.el (gnus-mime-delete-part): Require confirmation. - -2003-04-21 Jesper Harder - - * smime.el (smime-decrypt-region): Insert From header. - -2003-04-21 Kai Gro,A_(Bjohann - - * gnus-fun.el (gnus-face-from-file, gnus-convert-png-to-face): - Max length of header is 726, not 740. From Gaute B Strokkenes - . - -2003-04-20 Jesper Harder - - * nndb.el, mml1991.el: Fix license template. - -2003-04-20 Simon Josefsson - - * nnimap.el (nnimap-split-articles): Don't download body unless - required. - - * imap.el (imap-gssapi-open, imap-ssl-open): Erase buffer before - starting process, like imap-kerberos4-open does. - - * mml-smime.el, rfc1843.el, dig.el, smime.el, uudecode.el: Fix - license template. - - * mml-sec.el: Fix license template. - - * gnus-sieve.el, sieve.el, sieve-manage.el, sieve-mode.el: Fix - license template. - - * pgg-def.el, pgg.el, pgg-gpg.el, pgg-parse.el, pgg-pgp5.el, - pgg-pgp.el: Fix license template. - -2003-04-19 Jesper Harder - - * gnus-sum.el (gnus-summary-delete-article): Improve docstring. - -2003-04-19 Teodor Zlatanov - - * spam.el (spam-move-spam-nonspam-groups-only): dumb typo fix - -2003-04-18 Teodor Zlatanov - - * spam.el (spam-split): allow a particular check as a parameter, - e.g. (: spam-split 'spam-use-bogofilter) - (spam-mark-only-unseen-as-spam): new parameter, see doc - (spam-mark-junk-as-spam-routine): use - spam-mark-only-unseen-as-spam, simplify routine to take advantage - of gnus-newsgroup-unread as well as gnus-newsgroup-unseen - -2003-04-17 Teodor Zlatanov - - * gnus.el (gnus-group-short-name, gnus-group-prefixed-p): new functions - (gnus-group-guess-full-name): don't prefix the group twice - - * nnmail.el (nnmail-split-fancy-with-parent): docstring fix - - * gnus-registry.el (gnus-registry-clear) - (gnus-registry-fetch-group, gnus-registry-grep-in-list) - (gnus-registry-split-fancy-with-parent): new functions - (gnus-register-spool-action, gnus-register-action): simplified the format - (gnus-registry): new customization group - (gnus-registry-unfollowed-groups): new variable - -2003-04-17 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-button-alist): Add nntp: urls. - (gnus-header-button-alist): Ditto. - -2003-04-17 Dave Love - - * gnus-util.el (gnus-string-equal): Revert last change. - -2003-04-17 Lars Magne Ingebrigtsen - - * gnus-srvr.el (gnus-browse-make-menu-bar): Fix typo. - -2003-04-17 Mike Woolley - - * gnus-sum.el (gnus-sum-thread-tree-false-root): New variable. - -2003-04-15 Michael Shields - - * gnus-art.el (article-hide-boring-headers): Hide Reply-To: if - the broken-reply-to group parameter is set. Idea from Vasily - Korytov . - -2003-04-17 Steve Youngs - - * dgnushack.el: 'setenv' is in env.el for XEmacsen <= 21.4, but in - process.el in XEmacsen >= 21.5. - -2003-04-17 Steve Youngs - - * dgnushack.el: Add a whole swag of autoloads and defaliases to - satisfy the byte-compiler when building with XEmacs. - - * lpath.el (maybe-bind): Add 'w3-meta-content-type-charset-regexp' - and 'w3-meta-charset-content-type-regexp' in XEmacs. The upstream - W3 doesn't have these. - - * mailcap.el: Maybe require 'lpr in XEmacs. - -2003-04-16 Simon Josefsson - - * mml2015.el (mml2015-pgg-sign): Bind pgg-default-user-id to MML - sender tag, if available. - -2003-04-16 Teodor Zlatanov - - * gnus-registry.el (gnus-register-action) - (gnus-register-spool-action, hashtable-to-alist) - (gnus-registry-translate-from-alist, alist-to-hashtable) - (gnus-registry-translate-to-alist, gnus-registry-headers-hashtb): - new variables and function fixes - - * gnus.el (gnus-registry-headers-alist): new variable to hold - article header data - (gnus-variable-list): save gnus-registry-headers-alist - - * spam-report.el (Module): new module for spam reporting - - * gnus.el (spam-process): added - gnus-group-spam-exit-processor-report-gmane to the list of choices - (gnus-install-group-spam-parameters): defined new spam exit processor - - * spam.el (autoload): autoload spam-report-gmane when needed - (spam-report-gmane-register-routine): glue for spam-report.el - (spam-group-spam-processor-report-gmane-p): glue for the - gnus-group-spam-exit-processor-report-gmane spam processor - (spam-summary-prepare-exit): check the report-gmane spam processor - and run spam-report-gmane-register-routine if it's active - - From John Wiegley - - * spam.el (spam-bogofilter-score): check bogofilter headers before - checking bogofilter itself - -2003-04-16 Dave Love - - * gnus-agent.el: Wrap defsetf in eval-when-compile. - (gnus-agent-cat-defaccessor): Don't use gensym. - - * mml1991.el: Require cl, mm-util when compiling. - (quoted-printable-decode-region, quoted-printable-encode-region): - Autoload. - - * pgg.el: Require cl when compiling. - - * nnmail.el (gnus): Require. - - * gnus-util.el: Move provide to end. - (gnus-string-equal): Maybe use compare-strings. - (gnus-merge): New. - - * gnus-sum.el (gnus-summary-prepare-threads): Don't use copy-list. - (gnus-summary-insert-articles): Use gnus-merge. - - * gnus-fun.el: Require cl and mm-util when compiling. - - * gnus-diary.el (gnus-diary-delay-format-french) - (gnus-diary-delay-format-english): Don't use setf with nthcdr. - - * nndiary.el (nndiary-compute-reminders): Don't use setf with - nthcdr. - -2003-04-16 Kevin Greiner - - * gnus-agent.el (gnus-agent-make-cat): Added optional parameter to - specify a predicate other than false. - (gnus-category-read): Use the new feature to create a 'default' - category with a 'short' predicate. - -2003-04-16 Lars Magne Ingebrigtsen - - * message.el (message-unique-id): Comment change. - - * gnus-art.el (gnus-article-next-page-1): New function. - (gnus-article-next-page): Use it. - -2003-04-15 Teodor Zlatanov - - * spam.el (spam-split): added save-restriction to save-excursion - -2003-04-15 Reiner Steib - From Julien Avarre - - * gnus-fun.el: Fixed autoload cookie. - -2003-04-15 Paul Jarc - From Remi Letot - - * nnmaildir.el (nnmaildir-request-scan): Use gnus-remove-if - instead of remove-if. - -2003-04-14 Katsumi Yamaoka - - * gnus-msg.el (gnus-summary-news-other-window): Use delq and - copy-sequence instead of remove which is a cl run-time function in - Emacs 20. - -2003-04-14 Jesper Harder - - * gnus-msg.el (gnus-summary-news-other-window): Make a buffer - local copy of gnus-discouraged-post-methods with the current - method removed. - -2003-04-14 Simon Josefsson - - * mailcap.el (mailcap-mime-data): Add application/pgp-keys. - -2003-04-13 Reiner Steib - - * mm-util.el (mm-sort-coding-systems-predicate): Convert elements - of `mm-coding-system-priorities' to base coding system. - - * gnus-sum.el: Added coding cookie ("middle dot" in - gnus-summary-morse-message). - -2003-04-13 Simon Josefsson - - * gnus-art.el (article-fill-long-lines) - (article-verify-x-pgp-sig, article-decode-group-name) - (gnus-mime-button-menu): Split >80 character lines. - -2003-04-13 Jesper Harder - - * gnus-sum.el (gnus-summary-local-variables): Use defvar since - we're let-binding it. - - * nnmbox.el (nnmbox-mbox-buffer): It's not a constant. - -2003-04-13 Lars Magne Ingebrigtsen - - * message.el (message-hide-headers): Don't do intangible. - - * gnus.el (gnus-group-prefixed-name): Comment out the test for - colon. - - * gnus-srvr.el (gnus-browse-read-group): Don't give the real name - to the ephemeral entry, but the prefixed name. - - * gnus.el (gnus-group-prefixed-name): Clean up. - -2003-04-13 Kevin Greiner - - * gnus-agent.el (gnus-agent-group-pathname): Bind - gnus-command-method so that gnus-agent-directory will always - return a valid directory. - * gnus-cache.el (gnus-cache-enter-article): Remove article from - gnus-newsgroup-undownloaded so that the summary will display the - article as downloaded. - (gnus-cache-remove-article): If the article isn't in the agent, - remove it from gnus-newsgroup-undownloaded so that the summary - will display the article as undownloaded. - -2003-04-13 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump. - -2003-04-13 01:12:01 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.18 is released. - -2003-04-13 Lars Magne Ingebrigtsen - - * gnus-draft.el (gnus-draft-send): Add message-hidden-headers. - -2003-04-12 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-article-next-page): Use - gnus-article-over-scroll. - (gnus-article-over-scroll): New variable. - - * message.el (message-newline-and-reformat): Place a boundary - before filling. - (message-make-forward-subject-function): Changed default to - message-forward-subject-name-subject. - (message-forward-subject-name-subject): New function. - - * nnimap.el (nnimap-split-fancy): Ditto. - - * gnus-sum.el (gnus-summary-line-message-size): Ditto. - - * gnus-cus.el (gnus-group-parameters): Removed "which see". - - * mml.el (mml-minibuffer-read-file): Bind - completion-ignored-extensions to nil. - - * message.el (message-fix-before-sending): Comment fix. - (message-fix-before-sending): Make hidden headers visible. - (message-hide-headers): Bind after-change-functions to nil. - (message-forbidden-properties): Put invisible and intangible - back. - (message-strip-forbidden-properties): Ignore message-hidden text. - - * gnus-msg.el: Hide headers. - - * message.el (message-hidden-headers): New variable. - (message-hide-headers): New function. - (message-hide-header-p): New function. - (message-hide-header-p): Change logic. - (message-forbidden-properties): Remove intangible nil invisible - nil. - (message-hide-headers): Narrow to headers. - - * lpath.el (featurep): Bind Info-directory, Info-menu. - -2003-04-12 Jesper Harder - - * mm-bodies.el (mm-body-charset-encoding-alist): UTF-16 *must* be - encoded. - (mm-encode-body): Don't corrupt UTF-16. - (mm-body-encoding): Pay attention to mm-body-charset-encoding-alist. - -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 - downloaded into the agent. - (gnus-agent-group-path): Modified to match nnmail-group-pathname - so that the agent front-end and back-end (nnagent) always use the - same directory. - (gnus-agent-group-pathname): New function. Wrapper for - nnmail-group-pathname. - (gnus-agent-expire-unagentized-dirs): New variable. May be - customized to disable gnus-agent-expire-unagentized-dirs. - (gnus-agent-expire-unagentized-dirs): Expand gnus-agent-directory - as the directories in gnus-agent-expire-current-dirs were - expanded. - -2003-04-10 Jesper Harder - - * gnus-sum.el (gnus-summary-make-menu-bar): Disable "Encrypt - body" entry in read only groups. - -2003-04-09 Jesper Harder - - * gnus-sum.el (gnus-summary-make-menu-bar): Disable "Import file" - and "Create article" items in non-editable groups. - -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 - use the fully qualified group name as gnus-active-to-gnus-format - blindly prefixes group names with server names. - (gnus-agent-save-group-info): Merge BOTH min/max of current active - range, was just merging min, with specified active range. - (gnus-agent-expire): Save agent's active ranges after - expiring all groups. - (gnus-agent-expire-group-1): Update min of agent's active range to - min article currently fetched. - (gnus-agent-expire-unagentized-dirs): Avoid asking to delete the - same ancestor multiple times. - - * gnus-async.el (gnus-asynchronous): Moved defcustom of - gnus-asynchronous away from defgroup of gnus-asynchronous. This - seems to fix an intermittant error in which loading gnus-async - fails to define gnus-asynchronous (the variable). - - * gnus-sum.el: Concur with Steve Young, 5th argument to 'load' is - non-essential. Removed on all platforms. - (gnus-select-newsgroup): When the agent is active, expand the - group's active range to include fetched articles that are no - longer in the server's active range. - - * gnus-util.el (gnus-with-output-to-file): Removed all of the - print-* bindings as they should be handled by the function doing - the printing. - -2003-04-09 Jesper Harder - - * mm-uu.el (mm-uu-copy-to-buffer): buffer-file-coding-system - might be unbound in non-MULE XEmacsen. - -2003-04-08 Jesper Harder - - * mm-uu.el (mm-uu-diff-groups-regexp, mm-uu-type-alist) - (mm-uu-diff-extract, mm-uu-diff-test): New functionality: - recognize diffs. - - * mm-bodies.el (mm-decode-body): Use the supplied charset - unconditionally if `code-pages' hasn't been loaded. - -2003-04-07 Jesper Harder - - * gnus-art.el (article-verify-x-pgp-sig): Don't use - `insert-buffer', the docstring says "This function is meant for - the user to run interactively. Don't call it from programs!" - - * mm-extern.el (mm-extern-mail-server): do. - - * mml1991.el (mml1991-mailcrypt-sign, mml1991-mailcrypt-sign) - (mml1991-gpg-sign, mml1991-gpg-encrypt, mml1991-pgg-sign) - (mml1991-pgg-encrypt): do. - - * pgg.el (pgg-decrypt-region): do. - - * mm-view.el (mm-view-pkcs7-decrypt): do. - - * mml-smime.el (mml-smime-verify): do. - - * mml.el (mml-insert-mime, mml-preview): do. - - * mml2015.el (mml2015-gpg-decrypt-1, mml2015-gpg-sign) - (mml2015-gpg-encrypt, mml2015-pgg-clear-decrypt) - (mml2015-pgg-encrypt): do. - -2003-04-06 Katsumi Yamaoka - - * mm-bodies.el (mm-decode-body): Silence XEmacs when compiling. - -2003-04-06 Jesper Harder - - * mm-uu.el (mm-uu-copy-to-buffer): Copy - `buffer-file-coding-system' to the new buffer. - (mm-uu-pgp-signed-extract-1): Don't copy - `buffer-file-coding-system' here. - - * mm-bodies.el (mm-decode-body): last-coding-system-used doesn't - exist in XEmacs. - (mm-decode-body): Add missing quote. - - * mm-uu.el (mm-uu-pgp-signed-extract-1): Set - buffer-file-coding-system. - - * mm-bodies.el (mm-decode-body): Set buffer-file-coding-system to - last-coding-system-used. - - * mml2015.el (mml2015-pgg-clear-verify): Encode the text - according to buffer-file-coding-system. - - * pgg-gpg.el (pgg-gpg-process-region): Revert previous change. - - * pgg-pgp.el (pgg-pgp-process-region, pgg-pgp-verify-region) - (pgg-pgp-snarf-keys-region): do. - - * pgg-pgp5.el (pgg-pgp5-verify-region) - (pgg-pgp5-snarf-keys-region, pgg-pgp5-process-region): do. - - * pgg.el (pgg-make-temp-file, pgg-temporary-file-directory): do. - -2003-04-05 Teodor Zlatanov - - * spam.el (spam-split): (save-excursion) around (widen) - (spam-ham-move-routine): Use spam-group-ham-mark-p, not - spam-group-spam-mark-p (from Michael Shields ) - -2003-04-05 Steve Youngs - - * 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 - - * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound - print-escape-nonascii to fix more characters in compiled format - specs. - -2003-04-05 Jesper Harder - - * gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player): - Fix customization type. - -2003-04-04 Kevin Greiner - - * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound - print-quoted, print-readably, print-escape-multibyte, and - print-level to match original behavior of gnus-prin1. This should - repair the format of .newsrc.eld when using compiled format specs. - -2003-04-04 Jesper Harder - - * gnus-group.el (tool-bar-map): defvar it. - - * gnus-art.el (tool-bar-map): do. - - * gnus-sum.el (tool-bar-map): do. - -2003-04-03 Jesper Harder - - * earcon.el (earcon-regexp-alist): catmeow is a wav file. - -2003-04-03 Reiner Steib - - * gnus-art.el (gnus-button-ctan-directory-regexp): Changed meaning - and value. - (gnus-button-alist): Use it. - -2003-04-03 Jesper Harder - - * pgg-gpg.el (pgg-gpg-process-region): do. - - * pgg-pgp.el (pgg-pgp-process-region, pgg-pgp-verify-region) - (pgg-pgp-snarf-keys-region): do. - - * pgg-pgp5.el (pgg-pgp5-verify-region) - (pgg-pgp5-snarf-keys-region, pgg-pgp5-process-region): Use it. - - * pgg.el (pgg-make-temp-file): New function. `make-temp-name' is - unsafe. - (pgg-temporary-file-directory): Remove. - -2003-04-02 Katsumi Yamaoka - - * lpath.el: Fbind Info-directory and Info-menu. - -2003-04-02 Reiner Steib - - * gnus-util.el (gnus-message): Added doc-string. - - * gnus-score.el (gnus-score-find-trace): Changed behavior of `q'. - (gnus-score-edit-file-at-point): Goto first match when using `e'. - -2003-04-01 Reiner Steib - - * gnus-art.el (gnus-button-ctan-directory-regexp): New variable. - (gnus-button-alist): Use it. Changed CTAN and "setq" entries. - -2003-04-01 Katsumi Yamaoka - - * nntp.el (nntp-via-rlogin-command-switches): Doc fix. - (nntp-open-via-rlogin-and-telnet): Disable the telnet linemode. - -2003-03-31 Kevin Greiner - - * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound - print-escape-newlines to print escape sequences rather than - literal newline characters. - -2003-03-31 Reiner Steib - - * gnus-art.el (gnus-button-valid-fqdn-regexp): Use - `message-valid-fqdn-regexp' for initialization. - (gnus-button-handle-info-url): Renamed and extended version of - `gnus-button-handle-info'. - (gnus-button-message-level): Renamed from `gnus-button-mail-level' - (gnus-button-handle-symbol, gnus-button-handle-library) - (gnus-button-handle-info-keystrokes): New functions. - (gnus-button-browse-level): New variable. - (gnus-button-alist): Use them. Added levels. - (gnus-header-button-alist): Added levels. - -2003-03-31 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump. - -2003-03-31 20:08:19 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.17 is released. - -2003-03-31 Lars Magne Ingebrigtsen - - * gnus-start.el (gnus-unload): Removed. - - * pop3.el (pop3-read-response): Use - nnheader-accept-process-output. - (pop3-retr): Ditto. - - * mm-view.el (mm-text-html-renderer-alist): Add -nolist to Lynx. - (mm-text-html-washer-alist): Ditto. - -2003-03-31 Simon Josefsson - - * imap.el (imap-gssapi-program): Also try GNU SASL. - (imap-gssapi-open): Accept GNU SASL greeting. - (imap-read-timeout): New. - (imap-wait-for-tag): Use it. - -2003-03-31 Lars Magne Ingebrigtsen - - * nntp.el (nntp-accept-process-output): Use new function. - - * nnheader.el (nnheader-read-timeout): New variable. - (nnheader-accept-process-output): New function. - - * nntp.el (nntp-read-timeout): Removed. - - * gnus-sum.el (gnus-summary-prepare-threads): Add comment. - -2003-03-30 Katsumi Yamaoka - - * gnus-cache.el (gnus-cache-braid-nov): Revoke last change. - -2003-03-30 Simon Josefsson - - * message.el (message-idna-inside-rhs-p): Narrow to header before - searching. - - * gnus-art.el (article-decode-idna-rhs): More restrictive regexp. - -2003-03-30 Lars Magne Ingebrigtsen - - * nnmail.el (nnmail-process-mmdf-mail-format): Indent. - -2003-03-28 Vasily Korytov - - * message.el (message-make-in-reply-to): Use - mail-extract-address-components to determine sender's - name/address. - -2003-03-30 Lars Magne Ingebrigtsen - - * nndoc.el (nndoc-type-alist): Move mime-parts further ahead. - - * gnus-registry.el (gnus-registry-translate-to-alist): Make a - valid lambda. - (gnus-registry-translate-from-alist): Ditto. - - * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bind - print-length to nil. - - * gnus-sum.el (gnus-summary-highlight-line-0): Indent. - - * gnus-fun.el (gnus-fun-ppm-change-string): New function. - (gnus-grab-cam-face): Use it. - -2003-03-28 Paul Jarc - - * nnmaildir.el (nnmaildir-request-set-mark) - (nnmaildir-close-group): Allow each mark directory in a group to - have its own inode for mark files, to accommodate AFS. - -2003-03-28 Teodor Zlatanov - - * gnus-start.el (gnus-read-newsrc-el-hook): new hook called by - gnus-read-newsrc-el-file - (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-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-27 Simon Josefsson - - * gnus-art.el (article-decode-group-name): Be correct instead of - smart. - -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 - for both Emacsen. - -2003-03-27 Jesper Harder - - * gnus-sum.el (gnus-article-loose-mime) - (gnus-article-emulate-mime): Move to gnus-article-mime customize - group. - - * gnus-msg.el (gnus-mailing-list-groups): Fix customize type and - doc string. - -2003-03-26 Kevin Ryde - - * gnus-sum.el (gnus-summary-find-for-reselect): Renamed from - gnus-summary-find-uncancelled, skip temporary articles inserted by - "refer" functions. - -2003-03-26 Vasily Korytov - - * smiley.el (smiley-buffer): New function. - -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 - gnus-summary-update-download-mark (which updates the article's - face by calling gnus-summary-update-line AND updates the download - mark to show that the article was fetched). - -2003-03-23 Kevin Greiner - - * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Provides - option of deleting agent directories for groups/servers that are - not currently agentized. - (gnus-agent-expire): Use gnus-agent-expire-unagentized-dirs. - - * gnus-int.el (gnus-open-server): Report backend errors in - condition handler. - -2003-03-23 Simon Josefsson - - * message.el (message-idna-to-ascii-rhs-1): Don't continue outside - header. - - * rfc2047.el (rfc2047-header-encoding-alist): Make Followup-To - same as Newsgroups. - - * nntp.el (nntp-open-connection-function): Mention - nntp-open-tls-stream. - (nntp-open-tls-stream): New function. - - * tls.el: New file. - - * nnimap.el (nnimap-server-port, nnimap-stream): Say TLS/SSL - instead of SSL. - (nnimap-stream): Add other streams, link to imap variables. - (nnimap-authenticator): Add other authenticator, link to imap - variables. - - * imap.el: Autoload open-tls-stream. - (imap-streams): Add tls in front of ssl. - (imap-stream-alist): Add tls. - (imap-default-tls-port): New variable. - (imap-tls-p, imap-tls-open): New functions. - -2003-03-22 ShengHuo ZHU - - * mm-url.el (mm-url-insert-file-contents): parse url only if - results is a list. - -2003-03-22 Lars Magne Ingebrigtsen - - * mail-source.el (mail-source-fetch-imap): Revert. - -2003-03-22 Svend Tollak Munkejord - - * deuglify.el (gnus-outlook-repair-attribution-outlook): Use a - less strict regexp. - -2003-03-22 Lars Magne Ingebrigtsen - - * mail-source.el (mail-source-fetch-imap): Use buffer name for - more imap function. - -2003-03-21 Simon Josefsson - - * gnus-art.el (article-decode-group-name): Replace Newsgroups and - Followup-To data inline. - -2003-03-21 Jesper Harder - - * gnus-art.el (gnus-treat-display-xface): Don't enable if - icontopbm isn't available. - -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. - - * gnus-sum.el (eval-when-compile): Modified to resolve - compile-time warnings. - - * gnus-uu.el (gnus-uu-mark-series): Added informative msg. - Reports length of series so that the user can compare N with a - subject that should, if the entire series is present, contain - '(.../N)'. - (gnus-uu-delete-work-dir): Avoid hanging when O/S forbids deletion - of temp file (Win-XP may leave the temp file locked when the - uudecode process fails). - -2003-03-20 ShengHuo ZHU - - * message.el (message-split-line): Ignore error. - - * lpath.el (split-line): Avoid split-line warning message. - -2003-03-20 Kim F. Storm - - * message.el (message-split-line): New function. - (message-mode-map): Remap split-line to message-split-line. - -2003-03-20 Katsumi Yamaoka - - * message.el (message-make-overlay): Defalias it to make-overlay. - (message-delete-overlay): Defalias it to delete-overlay. - (message-overlay-put): Defalias it to overlay-put. - (message-idna-to-ascii-rhs-1): Use them. - - * messagexmas.el (message-xmas-redefine): Defalias some overlay - functions to extent functions. - -2003-03-20 Reiner Steib - - * message.el (message-check-news-header-syntax): Fixed regexp. - -2003-03-20 ShengHuo ZHU - - * rfc2231.el (rfc2231-decode-encoded-string): Downcase charset. - - * mm-url.el (mm-url-insert): Move url-current-object stuff into - mm-url-insert-file-contents. - - * nnrss.el (nnrss-fetch): Fetch the local stuff. - (nnrss-check-group): Use it. - -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. - - Implemented support for Mark Pilgrim's RSS Autodiscovery.[2] This - means that if you want to read the RSS feed for example.com, all - you have to do is hit "G R http://www.example.com/ RET" and - nnrss.el will find and the feed listed on the site or (if you have - loaded xml-rpc.el) look it up on syndic8.com. - - Marked the message as HTML (by adding a Content-Type header) so - that Gnus will render it as html if the user wants that. - - Implemented the ability to save nnrss-group-alist so that any new - feeds the you subscribe to will be found the next time you start - up. - - Implemented support for RSS 2.0 elements (author, pubDate). - - Prefer for over where both - elements exist. - - * mm-url.el (mm-url-insert): Set url-current-object. - - * gnus-group.el (gnus-group-make-rss-group): New function. - -2003-03-20 Katsumi Yamaoka - - * message.el (message-idna-to-ascii-rhs-1): Don't use replace-* - for highlight overlays. - -2003-03-20 Katsumi Yamaoka - - * gnus-cache.el (gnus-cache-braid-nov): Test if a line looks like - a NOV. - -2003-03-20 Simon Josefsson - - * message.el (message-use-idna): Disable if UTF-8 unavailable. - (message-idna-to-ascii-rhs): Use it. - - * gnus-art.el (gnus-use-idna): Disable if UTF-8 unavailable. - -2003-03-19 Teodor Zlatanov - - * spam.el (spam-group-ham-mark-p, spam-group-spam-mark-p) - (spam-group-ham-marks, spam-group-spam-marks): new functions - (spam-spam-marks, spam-ham-marks): removed in favor of the - spam-marks and ham-marks parameters - (spam-generic-register-routine, spam-ham-move-routine): use the - new spam-group-{spam,ham}-mark-p functions - - * gnus.el (spam-marks, ham-marks): new group parameters with - default values same as the old spam-spam-marks and spam-ham-marks - -2003-03-19 Simon Josefsson - - * gnus-art.el (gnus-article-decode-hook): Add IDNA. - (gnus-use-idna): New variable. - (article-decode-idna-rhs): New function. - - * message.el (message-use-idna): New variable. - (message-mode-field-menu): Add entry for IDNA. - (message-idna-inside-rhs-p, message-idna-to-ascii-rhs-1) - (message-idna-to-ascii-rhs): New function. - (message-generate-headers): Invoke IDNA code. - -2003-03-19 Paul Jarc - - * nnmaildir.el (nnmaildir--system-name): New function. - (nnmaildir-request-accept-article): Use it. - -2003-03-19 Katsumi Yamaoka - - * gnus-util.el (gnus-byte-compile): Make it work silently as the - gnus-compile function does. - - * gnus-sum.el (gnus-summary-highlight-line-0): Revoke the last - bogus change. - -2003-03-19 Jesper Harder - - * mm-util.el (mm-mule-charset-to-mime-charset): Test if - sort-coding-systems is defined. - -2003-03-18 Paul Jarc - - * nnmaildir.el (nnmaildir-open-server, nnmaildir-request-scan) - (nnmaildir-request-create-group, nnmaildir-request-delete-group): - Replace create-directory with target-prefix. - -2003-03-18 Jesper Harder - - * mm-bodies.el (mm-decode-coding-region-safely): Don't use - find-charset-string which is slooow in XEmacs. - -2003-03-18 Katsumi Yamaoka - - * gnus-sum.el (gnus-summary-highlight-line-0): Silence the byte- - compiler under XEmacs. - -2003-03-18 Jesper Harder - - * gnus-art.el (gnus-treat-highlight-signature): Make the default - work for multipart/signed where the message text isn't `last'. - -2003-03-18 Katsumi Yamaoka - - * mm-view.el (mm-setup-w3m): Set w3m-display-inline-images to - the value of mm-inline-text-html-with-images. - (mm-inline-text-html-render-with-w3m): Don't bind - w3m-display-inline-images. - - * gnus-art.el (gnus-article-wash-html-with-w3m): Don't bind - w3m-display-inline-images. - - * lpath.el: Bind w3m-display-inline-images; bind mm-w3m-mode-map - regardless of an Emacs flavor. - -2003-03-18 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump. - -2003-03-18 00:38:22 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.16 is released. - -2003-03-18 Lars Magne Ingebrigtsen - - * lpath.el (featurep): Bind mm-w3m-mode-map. - -2003-03-17 Paul Jarc - - * nnmail.el (nnmail-cache-primary-mail-backend): Not all - 'respool-able backends define a global nnchoke-get-new-mail - variable. - -2003-03-17 Reiner Steib - - * gnus-art.el (gnus-mime-delete-part): New function. - (gnus-mime-action-alist, gnus-mime-button-commands): Use it. - -2003-03-17 Lars Magne Ingebrigtsen - - * message.el (message-check-news-header-syntax): Don't push - groups twice onto list of unknown groups. - - * nndoc.el (nndoc-type-alist): Move exim-bounce a bit further - back. - - * nnheader.el (nnheader-find-etc-directory): Doc fix. - - * gnus-msg.el (gnus-inews-add-send-actions): Don't restore window - config unless the summary buffer exists. - - * gnus-sum.el (gnus-summary-next-group): Semi-exit group first to - that target group is computed correctly when articles are marked - as read by Xref handling. - - * mail-source.el (mail-source-fetch-imap): Pass buffer-name to - imap-open. - - * message.el (message-send-mail): Add courtesy string to Bcc's, - too. - - * gnus-cite.el (gnus-cited-line-p): New function. - -2003-03-15 Jesper Harder - - * mm-bodies.el (mm-decode-body): Add new optional parameter, - force, to use the supplied charset unconditionally. - - * gnus-art.el (article-decode-charset): Use it. - -2003-03-14 Jesper Harder - - * mm-bodies.el (mm-decode-coding-region-safely): New function. - (mm-decode-body): Use it. - - * rfc2047.el (rfc2047-decode-region): do. - (rfc2047-decode-string): Guess coding system if the default is - invalid. - -2003-03-12 Paul Jarc - - * nnmaildir.el (nnmaildir-request-update-info): Pretend missing - articles are marked 'read, so we get correct article counts. - -2003-03-13 Katsumi Yamaoka - - * gnus-art.el (gnus-insert-mime-button): Exclude a newline from - the button. - (gnus-insert-prev-page-button): Ditto. - (gnus-insert-next-page-button): Ditto. - (gnus-insert-mime-security-button): Ditto. - - * mm-view.el (mm-inline-image-emacs): Open the bottom of an image - one line. Suggested by Greg Klanderman . - (mm-inline-image-xemacs): Ditto. - -2003-03-12 Paul Jarc - - * nnmaildir.el (nnmaildir--parse-filename, nnmaildir--sort-files, - nnmaildir--scan, nnmaildir-request-accept-article): Changes for - the recent filename uniqueness discussion. - -2003-03-12 Katsumi Yamaoka - - * mm-view.el (mm-inline-image-emacs): Make it delete an excessive - newline next time. - (mm-inline-image-xemacs): Ditto. - -2003-03-10 Jesper Harder - - * gnus-agent.el (gnus-agent-synchronize-flags-server): Don't use - kill-line. - -2003-03-09 Jesper Harder - - * gnus-msg.el (gnus-inews-insert-archive-gcc): Don't use - kill-line. - -2003-03-09 Kevin Greiner - - * gnus-agent.el (gnus-agent-fetched-hook): New variable. Just - fixing the code to match the documentation. - (gnus-agent-fetch-selected-article): Replaced - gnus-summary-update-article-line with gnus-summary-update-line as - the former did not correctly recalculate the thread indentation. - (gnus-agent-find-parameter): The agent-predicate, if not found - anywhere else, defaults to the value of gnus-agent-predicate. - (gnus-agent-fetch-session): Fixed typo; now executes - gnus-agent-fetched-hook rather than the undocumented - gnus-agent-fetch-hook. - (gnus-agent-fetch-group-1): Removed part of 2003-03-06 fix. The - default agent predicate is now provided by - gnus-agent-find-parameter. - (gnus-agent-message): New macro. This macro avoids potentially - costly parameter evaluation when the message's level is too high - to display. - (gnus-agent-expire-group-1): Disabled undo tracking in temp - overview buffer. Uses new gnus-agent-message macro to reduce - overhead of optional messages. Reversed message levels to - emphasize percent completion messages. Detailed messages of - little use except when debugging code. - -2003-03-08 Teodor Zlatanov - - * spam.el (spam-ham-move-routine): use - spam-mark-ham-unread-before-move-from-spam-group - (spam-mark-ham-unread-before-move-from-spam-group): new variable - -2003-03-07 Teodor Zlatanov - - * spam.el: load nnimap.el when compiling - (spam-setup-widening): use - nnimap-split-download-body-default instead of - nnimap-split-download-body which is a user-customizable variable - -2003-03-07 Simon Josefsson - - * nnimap.el (nnimap-split-download-body-default): New, holds - default for n-s-d-b. - (nnimap-split-download-body): Add new setting (symbol default), - which uses contents of n-s-d-b-d, and made it the default. - -2003-03-07 Teodor Zlatanov - - * spam.el (spam-use-hashcash): new variable - (spam-list-of-checks): added spam-use-hashcash with associated - spam-check-hashcash - (spam-check-hashcash): new function, installed iff hashcash.el is - loaded - (spam-setup-widening): don't use (return) - -2003-03-06 Kevin Greiner - - * gnus-agent.el (gnus-agent-fetch-group-1): Added default - predicate of `false' to avoid an error when a group defines no - predicate. Fixed typo that disabled agent scoring (i.e. the - low/high predicates should now work). - -2003-03-06 Teodor Zlatanov - - * spam.el: add spam-maybe-spam-stat-load to - gnus-get-top-new-news-hook, remove it from gnus-get-new-news-hook - (spam-bogofilter-register-with-bogofilter): use - spam-bogofilter-spam-switch and spam-bogofilter-ham-switch - (spam-bogofilter-spam-switch, spam-bogofilter-ham-switch): new - custom variables to replace "-s" and "-n" - - * gnus-group.el (gnus-group-get-new-news): call the new - gnus-get-top-new-news-hook hook - - * gnus-start.el (gnus-get-top-new-news-hook): new hook, run ONLY - by gnus-get-new-news, NOT by gnus-group-get-new-news-this-group - -2003-03-06 Lars Magne Ingebrigtsen - - * mm-uu.el (mm-uu-pgp-encrypted-test): Fix message. - -2003-03-06 Katsumi Yamaoka - - * gnus-cus.el (gnus-group-customize): Don't use delete-if which is - a cl run-time function. - -2003-03-06 Kevin Greiner - - * gnus-agent.el (gnus-agent-fetch-group-1): Added missing binding - on gnus-agent-short-article. - (gnus-category-read): Replaced CL function mapcar* with new macro: - gnus-mapcar. - * gnus-util.el (gnus-mapcar): New macro. Generalizes mapcar to - support functions that accept multiple parameters. A separate - sequence must be provided for each parameter in the function. - Iteration stops when the end of the shortest list is reached. - -2003-03-06 Jesper Harder - - * nnimap.el (nnimap-request-accept-article): Use delete-region. - - * html2text.el (html2text-clean-dtdd, html2text-delete-tags) - (html2text-delete-single-tag, html2text-clean-anchor) - (html2text-remove-tags): Use delete-region. - (html2text-fix-paragraphs): Simplify. - - * mml1991.el (mml1991-mailcrypt-sign, mml1991-mailcrypt-encrypt) - (mml1991-gpg-sign, mml1991-gpg-encrypt, mml1991-pgg-sign) - (mml1991-pgg-encrypt, mml1991-pgg-encrypt): Use delete-region, not - kill-region. - -2003-03-04 John Paul Wallington - - * gnus-agent.el (gnus-agent-enable-expiration) - (gnus-agent-article-alist, gnus-agent-article-alist) - (gnus-agent-cat-defaccessor): Doc fixes. - -2003-03-04 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-function-implies-unread-1): Grok - byte-compiled functions. - -2003-03-04 Kevin Greiner - - * gnus-sum.el (gnus-auto-goto-ignores): New variable. Provides - customization between new maneuvering (which permits selecting - undownloaded articles) and old maneuvering (which skipped over - undownloaded articles) behaviors. - (gnus-summary-find-next): Pass through the unread and subject - parameters when calling gnus-summary-find-prev. - (gnus-summary-find-next,gnus-summary-find-prev): Apply - gnus-auto-goto-ignores to filter out unacceptable articles. - -2003-03-04 Jesper Harder - - * mail-source.el (mail-source-read-passwd): Remove. `read-passwd' - exists in all supported Emacs versions, so we don't need this - compatibility function. - (mail-source-fetch-pop, mail-source-check-pop) - (mail-source-fetch-webmail): Use read-passwd. - - * nntp.el (nntp-send-authinfo, nntp-send-nosy-authinfo) - (nntp-open-telnet, nntp-open-via-telnet-and-telnet): Use - read-passwd. - - * nnwarchive.el (nnwarchive-open-server): Use read-passwd. - - * imap.el (imap-read-passwd): Remove. - (imap-interactive-login): Use read-passwd. - - * canlock.el (canlock-read-passwd): Remove. - (canlock-insert-header, canlock-verify): Use read-passwd. - - * sieve-manage.el (sieve-manage-read-passwd): Remove. - (sieve-manage-interactive-login): Use read-passwd. - - * pop3.el (pop3-read-passwd): Remove. - (pop3-movemail, pop3-get-message-count, pop3-apop): Use - read-passwd. - - * pgg.el (pgg-read-passphrase): Simplify. - -2003-03-04 Kevin Greiner - - * gnus-agent.el (gnus-agent-mode): Fixed the mode line reports - 'plugged' when actually 'unplugged' bug. - (gnus-category-read): Ignore nil values when converting an - old-format category so that the new-format category will default - those attributes to the global variables. - -2003-03-03 Reiner Steib - - * mail-source.el (mail-source-delete-old-incoming-confirm): Fixed - doc-string. - -2003-03-03 Jesper Harder - - * nnrss.el (nnrss-decode-entities-unibyte-string): Use `buffer-string'. - * nndoc.el (nndoc-dissect-mime-parts-sub): do. - * nndb.el (nndb-request-accept-article, nndb-status-message): do. - * mm-url.el (mm-url-decode-entities-string): do. - * mml1991.el (mml1991-mailcrypt-sign, mml1991-gpg-sign): do. - * mm-decode.el (mm-find-raw-part-by-type): do. - * message.el (message-send-mail-partially) - (message-send-mail-with-sendmail): do. - * gnus-uu.el (gnus-uu-save-article, gnus-uu-reginize-string): do. - * gnus-kill.el (gnus-pp-gnus-kill): do. - * gnus-art.el (gnus-article-treat-unfold-headers) - (gnus-article-encrypt-body): do. - -2003-02-24 Reiner Steib - - * mail-source.el (mail-source-delete-incoming): Allow integer value. - (mail-source-delete-old-incoming-confirm): New variable. - (mail-source-delete-old-incoming): Use it. New function. - (mail-source-callback): Call `mail-source-delete-old-incoming' if - `mail-source-delete-incoming' is a nonnegative integer. - -2003-03-03 Reiner Steib - - * gnus-msg.el (gnus-extended-version): Fix for 'emacs-gnus-config. - (gnus-user-agent): Fixed typo. - -2003-03-03 Kevin Greiner - - * gnus-agent.el (gnus-agent-enable-expiration): Fixed documentation. - (gnus-agent-expire-group-1): Removed invalid (interactive) specifier. - -2003-03-03 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-agent-fetch-articles): Fix nil message. - (gnus-agent-fetch-session): Allow debugging to take place. - -2003-03-03 Jesper Harder - - * gnus-sum.el (gnus-highlight-selected-summary) - (gnus-article-get-xrefs, gnus-summary-show-thread): Use - `gnus-point-at-bol' and `gnus-point-at-eol' instead of - `(progn (beginning-of-line) (point))'. It's shorter, faster, - and makes it clear that we don't need the side effect. - * gnus-util.el (gnus-delete-line): do. - * gnus-xmas.el (gnus-group-add-icon): do. - * nnmail.el (nnmail-article-group, nnmail-cache-fetch-group): do. - * nntp.el (nntp-send-authinfo-from-file): do. - * nnml.el (nnml-header-value): do. - * nnheader.el (nnheader-insert-references): do. - * gnus-cite.el (gnus-article-highlight-citation) - (gnus-cite-parse): do. - * gnus-score.el (gnus-score-followup): do. - * gnus-draft.el (gnus-draft-send): do. - * gnus-group.el (gnus-group-highlight-line): do. - * gnus-cache.el (gnus-cache-braid-nov): do. - * nnfolder.el (nnfolder-retrieve-headers) - (nnfolder-request-article): do. - * gnus-art.el (article-hide-boring-headers) - (gnus-article-hide-header): do. - - * nnheader.el (nnheader-find-nov-line): Use gnus-delete-line. - * nnml.el (nnml-request-replace-article): do. - * nnmbox.el (nnmbox-request-move-article, nnmbox-delete-mail): do. - * nnfolder.el (nnfolder-request-move-article): do. - * gnus-cache.el (gnus-cache-possibly-remove-article): do. - * gnus-art.el (gnus-mm-display-part): do. - - * gnus-art.el (gnus-article-goto-part): Use gnus-goto-char. - -2003-03-02 Kevin Greiner - - * nntp.el (nntp-possibly-change-group): Avoid calling - process-buffer on nil (Which happened when you lost your - connection while fetching); instead signal a "Server Closed - Connection" error. - -2003-03-02 Kevin Greiner - - * gnus-agent.el (gnus-agent-enable-expiration): New - variable. Either ENABLE or DISABLE. Sets default behavior for - selecting which groups are expired. - (gnus-agent-cat-set-property, gnus-agent-cat-defaccessor, - gnus-agent-set-cat-groups): Provides abstract interface for - accessing agent category. Category now implemented by an alist. - (gnus-agent-add-group, gnus-agent-remove-group, - gnus-category-insert-line, gnus-category-edit-predicate, - gnus-category-edit-score, gnus-category-edit-groups, - gnus-category-copy, gnus-category-add, gnus-group-category): Use - new agent category abstraction. - (gnus-agent-find-parameter): New function. Search for agent - configuration parameter first in the group's parameters, then its - topics (if any), and then the group's category. If not found - anywhere, use the original defined constants. - (gnus-agent-fetch-headers, gnus-agent-fetch-group-1): Use new - gnus-agent-find-parameter. - (gnus-agent-fetch-headers, gnus-agent-uncached-articles): Clearing - gnus-agent-cache now blocks retrieving headers and articles from - the local cache. Fetched content is still added to the cache - before being returned. - (gnus-agent-fetch-session): Use error-message-string to generate - displayed error message. - (gnus-agent-customize-category): New Command. 'e' in category - buffer opens category customization buffer. - (gnus-category-read): Reads either positional or alist format; - returns alist format. - (gnus-category-write): Writes category file compatible with - current, and previous, versions of gnus-agent. - (gnus-category-make-function, gnus-category-make-function-1): - Corrected documentation; parameter is predicate NOT category. - (gnus-predicate-implies-unread): Now works in more cases per the - todo comment. - (gnus-function-implies-unread-1): New function. Supports - gnus-predicate-implies-unread. - (gnus-agent-expire-group): Command now provides default of group - under point. - (gnus-agent-expire-group-1): Obeys new agent-enable-expiration and - agent-days-until-old parameters. No longer supports - gnus-agent-expire-days being set to an alist. - (gnus-agent-request-article): Now performs its own checks of - gnus-agent, gnus-agent-cache, and gnus-plugged rather than - assuming that the caller will do them correctly. - (): Added one-time hook to gnus-group-prepare-hook. Detects when - gnus-agent-expire-days is set to an alist. Converts said alist - into group parameter so that gnus-agent-expire-days will not be - needed. - * gnus-art.el (gnus-request-article-this-buffer): Conditional - checks surrounding gnus-agent-request-article removed; now - performed by gnus-agent-request-article. - * gnus-cus.el (gnus-agent-parameters): New variable. List of - customizable group/topic parameters that regulate the agent. - (gnus-group-customize): Uses gnus-agent-parameters. Replaced - kill-buffer with gnus-kill-buffer to remove the killed buffer from - the list of gnus buffers. - (gnus-trim-whitespace): Removes leading and trailing whitespace - from multiline strings. - (gnus-agent-cat-prepare-category-field, - gnus-agent-customize-category): Constructs a category - customization buffer. - * gnus-int.el (gnus-retrieve-headers, - gnus-request-expire-articles): No longer checks gnus-agent-cache - as it is handled internally by the agent. - (gnus-request-head, gnus-request-body): Conditional checks - surrounding gnus-agent-request-article removed; now performed by - gnus-agent-request-article. - - * gnus-start.el (): Added defvar statements to resolve compilation - warnings. - (gnus-long-file-names): New function. Isolates platform dependent - msdos-long-file-names. - (gnus-save-startup-file-via-temp-buffer): New variable. Provides - option of writing directly to file. Avoids memory exhausted - errors when .newsrc.eld is huge. - (gnus-save-newsrc-file): Uses new - gnus-save-startup-file-via-temp-buffer. - (gnus-gnus-to-quick-newsrc-format): Rewritten to write to - standard-output. - (gnus-display-time-event-handler): Changed to alias from a defun - to avoid a compile-time warning when display-time-event-handler is - not defined. - * gnus-util.el (gnus-with-output-to-file): New macro. Binds - standard-output such that prin1 and princ will write directly to a - file. - - * gnus.el (gnus-agent-cache): Expanded documentation. - (gnus-summary-high-undownloaded-face): Removed second bold keyword - so that this face is actually bold. - - * nnkiboze.el (nnkiboze-request-article): Only use the cache when - gnus-use-cache has been set. - -2003-03-02 Jesper Harder - - * nnvirtual.el (nnvirtual-update-xref-header): Simplify. - -2003-03-01 Jesper Harder - - * gnus-art.el (gnus-article-refer-article): Be more permissive. - -2003-03-01 ShengHuo ZHU - - * 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 - problems. - -2003-03-01 Teodor Zlatanov - - * spam.el (spam-maybe-spam-stat-load, spam-maybe-spam-stat-load): - load stats iff spam-use-stat is on - - * spam.el: add spam-maybe-spam-stat-load to gnus-startup hook, - also use spam-maybe-spam-stat-load and spam-maybe-spam-stat-save - instead of spam-stat-load and spam-stat-save in the - gnus-get-new-news-hook and gnus-save-newsrc-hook, respectively - -2003-03-01 ShengHuo ZHU - - * mm-view.el (mm-inline-text): Ignore errors from enriched-decode. - -2003-03-01 Lars Magne Ingebrigtsen - - * message.el (message-make-fqdn): Protect against nil user-mail. - -2003-02-28 Vasily Korytov - - * gnus-art.el (gnus-boring-article-headers): New values: - 'to-list and 'cc-list. - -2003-02-28 Teodor Zlatanov - - * spam.el (spam-setup-widening): new function to set - nnimap-split-download-body, we add it to gnus-get-new-news-hook - (spam-list-of-statistical-checks): list of statistical splitter - checks - (spam-split): added a widen call when a statistical check is - enabled - -2003-02-28 Reiner Steib - - * gnus-msg.el (gnus-user-agent): Changed default to - 'emacs-gnus-type, renamed 'full. - -2003-02-28 ShengHuo ZHU - - * nnfolder.el (nnfolder-request-accept-article): Don't use - mail-header-unfold-field. - -2003-02-27 ShengHuo ZHU - - * imap.el (imap-ssl-open): Don't depend on ssl.el. - * nntp.el (nntp-open-ssl-stream): Don't depend on ssl.el. - -2003-02-26 Teodor Zlatanov - - * spam.el: add spam-stat-load to gnus-get-new-news-hook - (spam-split): remove spam-stat-load call - -2003-02-26 Simon Josefsson - - * gnus-sum.el (gnus-summary-toggle-header): Run - gnus-article-decode-hook instead of calling a-decode-encoded-words - directly (the latter is run as part of the former). - -2003-02-26 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-expire-group): Remove debug. - -2003-02-25 Jesper Harder - - * message.el (message-sendmail-envelope-from): New option. - (message-sendmail-envelope-from): New function. - (message-send-mail-with-sendmail): Use it. - -2003-02-25 Reiner Steib - - * gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): Added - compensation for TDMA addresses. - -2003-02-24 Reiner Steib - - * gnus-msg.el (gnus-user-agent): New variable. - (gnus-version-expose-system): Removed. Obsoleted by - `gnus-user-agent'. - (gnus-extended-version): Use `gnus-user-agent'. - -2003-02-24 Teodor Zlatanov - - * spam.el (spam-stat-register-spam-routine, - spam-stat-register-ham-routine): remove spam-stat-save - (spam-stat hook): add spam-stat-save to the gnus-save-newsrc-hook - -2003-02-24 Kevin Greiner - - * gnus-group.el (gnus-topic-mode-p): Fixed free variable - reference. - -2003-02-24 Kevin Greiner - - * nnheader.el (nnheader-find-nov-line): Changed midpoint - calculation to avoid integer overflow. - -2003-02-24 Reiner Steib - - * gnus-start.el (gnus-backup-startup-file): Fixed custom type. - -2003-02-24 Ted Zlatanov - * spam.el: disabled spam-get-article-as-filename - - From Michael Shields - - * gnus-group.el (gnus-group-is-exiting-without-update-p): New. - * gnus-sum.el (gnus-summary-exit-no-update): Use it. - * gnus-sum.el (gnus-summary-expire-articles): Use it. - * spam.el (spam-summary-prepare-exit): Use it. - * gnus.el (gnus-install-group-spam-parameters): New. - * spam.el (spam-group-ham-processor-copy-p): New. - * spam.el (spam-summary-prepare-exit): Support for ham copying. - * spam.el (spam-mark-spam-as-expired-and-move-routine): Fix bug - that would cause the current message to be moved if the group had - no spam. - * spam.el (spam-ham-move-routine): New `copy' argument. - -2003-02-24 Kai Gro,A_(Bjohann - From Martin Thornquist - - * gnus-topic.el (gnus-topic-select-group): Select last group if - after last group. - * gnus-group.el (gnus-group-select-group): Ditto. - -2003-02-24 Katsumi Yamaoka - - * gnus-art.el (popup-menu): Compiler macro for Emacs 20. - (gnus-article-refer-article): Use gnus-point-at-(b|e)ol instead of - point-at-(b|e)ol which aren't available in Emacs 20. - - * gnus-registry.el (puthash): Alias to cl-puthash for Emacs 20. - -2003-02-23 Kevin Greiner - - * gnus-start.el (gnus-activate-group): Re-enabled the catch error - clause of the condition-case statement. Errors connecting to a - server no longer terminate gnus. - - * gnus-agent.el (gnus-agent-toggle-plugged): Renamed parameter to - make its use obvious. Added no-nothing case to avoid - opening(closing) servers when already open(closed). - (gnus-agent-while-plugged): Added macro to facilitate internal use - of gnus-agent-toggle-plugged. - (gnus-agent-fetch-group): Use new gnus-agent-while-plugged to - temporarily open servers. - (gnus-agent-get-undownloaded-list): Sort list of article numbers - as sorting gnus-newsgroup-headers is wrong. - (gnus-agent-summary-fetch-group): Use new gnus-agent-while-plugged - to temporarily open servers. Corrected logic to handle setting - gnus-agent-mark-unread-after-downloaded. - (gnus-agent-fetch-articles): Now handles headers with missing - article sizes and/or missing article lengths. Now clears the - message buffer when finished. - (gnus-agent-fetch-group-1): Position point before calling - gnus-summary-set-agent-mark. - (gnus-get-predicate): Corrected description, parameter is - predicate not category. - (gnus-agent-expire-group): Adapted the gnus-agent-expire-* code to - provide a separate single group expiration function. - (gnus-agent-regenerate-group): Now clears the message buffer when - finished. - -2003-02-23 Kai Gro,A_(Bjohann - - * gnus.el (gnus-agent-target-move-group-header): New variable. - * gnus-draft.el (gnus-draft-send): If special header - "X-Gnus-Agent-Target-Move-Group" is present, do like Gcc into - that group, instead of performing the regular sending functions. - -2003-02-23 Katsumi Yamaoka - - * gnus-xmas.el (gnus-xmas-mime-button-menu): Accept a prefix arg. - -2003-02-20 Reiner Steib - - * message.el (message-user-fqdn, message-valid-fqdn-regexp): New - variables. - (message-make-fqdn): Use it. Improved validity check. - -2003-02-23 Lars Magne Ingebrigtsen - - * message.el (message-user-mail-address): Check whether - user-mail-address looks valid. - - * gnus-msg.el (gnus-mailing-list-followup-to): New function. - - * gnus-util.el (gnus-fetch-original-field): New function. - -2003-02-23 Kai Gro,A_(Bjohann - - * message.el (message-mode): \\(...\\) around additional - paragraph-separate alternative. - -2003-02-23 Jesper Harder - - * gnus-art.el (gnus-mime-button-commands): Add ellipsis. - (gnus-mime-button-menu): Define MIME popup menu with easy-menu to - display key bindings. - (gnus-mime-button-menu): Rewrite. - -2003-02-23 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-button-url-regexp): Removed `. - -2003-02-23 Max Froumentin - - * gnus-art.el (gnus-button-url-regexp): Remove `, enter '. - -2003-02-23 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-mime-action-on-part): Require a match - interactively. - - * gnus-start.el (gnus-save-newsrc-file): Use - gnus-backup-startup-file. - (gnus-backup-startup-file): New variable. - -2003-02-22 Lars Magne Ingebrigtsen - - * gnus.el (gnus-summary-buffer-name): Moved function here. - - * gnus-draft.el (defun): Remove debug. - -2003-02-22 Jesper Harder - - * gnus-sum.el (gnus-summary-refer-article): Skip method if we - can't open server. - -2003-02-22 Lars Magne Ingebrigtsen - - * gnus-draft.el (defun): Configure posting styles. - - * 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 - - * message.el (message-mode): MML tags separate paragraphs. Small - change from David S Goldberg . - - * gnus-agent.el (gnus-agent-get-undownloaded-list): Sort - `gnus-newsgroup-headers'. - - * gnus-art.el (gnus-article-refer-article): Grok more message id - formats. From Karl Pfl,Ad(Bsterer . - -2003-02-22 Jesper Harder - - * mm-decode.el (mm-path-name-rewrite-functions): Doc fix: don't - use "path name". - -2003-02-21 Teodor Zlatanov - - * gnus-sum.el (gnus-summary-move-article) - (gnus-summary-expire-articles): send data header for article, not - just article ID - - * gnus-registry.el (gnus-registry-hashtb, gnus-register-action) - (gnus-register-spool-action): added hashtable of message ID keys - with message motion data - -2003-02-21 Florian Weimer - From Reiner Steib . - - * gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): New - variable, used in `gnus-button-mid-or-mail-heuristic'. - (gnus-button-mid-or-mail-heuristic): New function derived from - Florian Weimer's Perl script. - (gnus-button-handle-mid-or-mail): Allow a function instead of - 'guess. - (gnus-button-guessed-mid-regexp): Removed. - -2003-02-20 Katsumi Yamaoka - - * message.el (message-resend): Bind message-setup-hook to nil; - remove X-Draft-From header. - -2003-02-20 Jesper Harder - - * gnus-sum.el (gnus-simplify-subject-fully, gnus-subject-equal) - (gnus-newsgroup-undownloaded) - (gnus-summary-save-parts-default-mime, gnus-auto-select-next): - Doc fixes. - -2003-02-17 John Paul Wallington - - * gnus.el (gnus-shell-command-separator, gnus-email-address) - (gnus-default-charset, gnus-other-frame-parameters): Doc fixes. - -2003-02-20 Jesper Harder - - * gnus-spec.el (gnus-xmas-format): Use insert instead of - insert-string which is obsolete in Emacs 21.4. - - * message.el (message-cross-post-followup-to-header): do. - - * spam.el (spam-ifile-register-with-ifile) - (spam-stat-register-spam-routine) - (spam-stat-register-ham-routine) - (spam-bogofilter-register-with-bogofilter): do. - - * mailcap.el (mailcap-mime-data): Fix typo. - - * gnus-topic.el (gnus-topic-make-menu-bar): Add ellipsis. - -2003-02-19 Reiner Steib - - * gnus-cite.el (gnus-cite-unsightly-citation-regexp) - (gnus-cite-parse): Renamed `gnus-unsightly-citation-regexp' to - `gnus-cite-unsightly-citation-regexp'. - -2003-02-19 Katsumi Yamaoka - - * gnus-msg.el (gnus-copy-article-buffer): Copy an article header - even if there's just a header. - -2003-02-19 Jesper Harder - - * message.el (message-fix-before-sending): Fix highlighting of - illegible and invisible text. - - * gnus-util.el (gnus-multiple-choice): Separate choices with - ",,A (B". Suggested by Dan Jacobson . - -2003-02-18 Jesper Harder - - * gnus-sum.el (gnus-summary-exit-no-update): Use gnus-kill-buffer. - -2003-02-18 Teodor Zlatanov - - * spam.el (spam-ham-move-routine) - (spam-mark-spam-as-expired-and-move-routine): use - gnus-summary-kill-process-mark and gnus-summary-yank-process-mark - around process-mark manipulation on the group - -2003-02-17 Kai Gro,A_(Bjohann - - * gnus-sum.el (gnus-summary-make-menu-bar): Add MIME/Multipart - submenu. - -2003-02-17 Lars Magne Ingebrigtsen - - * mail-source.el (mail-source-fetch): Reverse the return value of - the continuation question. - -2003-02-16 Lars Magne Ingebrigtsen - - * nndraft.el (nndraft-request-move-article): Bind - nnmh-allow-delete-final to t. - -2003-02-14 ShengHuo ZHU - - * mm-uu.el (mm-uu-uu-filename): Fix use of character constant. - -2003-02-11 Stefan Monnier - - * nntp.el (nntp-accept-process-output): Don't use point-max to get - the buffer's size. - -2003-01-31 Joe Buehler - - * nnheader.el: Added cygwin to system-type comparisons. - -2003-01-27 Juanma Barranquero - - * imap.el (imap-mailbox-status): Fix typo. - -2003-02-14 ShengHuo ZHU - - * gnus-art.el (gnus-article-prepare): Don't set agent mark if - online. - -2003-02-14 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-group-make-menu-bar): Include all - commands. - * gnus-sum.el: Small change from Frank Weinberg - : - (gnus-auto-center-group): New variable. - (gnus-summary-read-group-1): Use it. - (gnus-summary-next-group): Fix docstring. - -2003-02-13 Katsumi Yamaoka - - * gnus-util.el (gnus-faces-at): Simplify. - -2003-02-13 Teodor Zlatanov - - * spam.el (spam-ham-move-routine) - (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 - - * 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 . - -2003-02-13 Katsumi Yamaoka - - * gnus-art.el (gnus-article-only-boring-p): Make sure that the - gnus-article-boring-faces variable is bound; use gnus-faces-at. - - * gnus-util.el (gnus-faces-at): New macro. - -2003-02-13 Michael Shields - - * gnus-cite.el - (gnus-cite-attribution-suffix, gnus-cite-parse): - Better handling for Microsoft citation styles. - (gnus-unsightly-citation-regexp): New. - -2003-02-12 Michael Shields - - * gnus-art.el (article-strip-banner): Strip both per-group and - per-user-address banners. - (article-really-strip-banner): New. - -2003-02-12 Michael Shields - - * gnus-sum.el (gnus-article-goto-next-page, - gnus-article-goto-prev-page): Call gnus-summary-*-page, instead of - relying on the summary bindings of `n' and `p'. - -2003-02-12 Michael Shields - - * gnus-art.el (gnus-article-only-boring-p): New. - (gnus-article-skip-boring): New. - * gnus-cite.el (gnus-article-boring-faces): New. - * gnus-sum.el (gnus-summary-next-page): Use - gnus-article-only-boring-p. - -2003-02-12 Teodor Zlatanov - - * spam.el (spam-mark-spam-as-expired-and-move-routine) - (spam-ham-move-routine): unmark all articles before marking those - of interest and calling gnus-summary-move-article - -2003-02-12 Jesper Harder - - * gnus.el (gnus-kill-buffer): Move to gnus.el because it's - logically the complement of gnus-get-buffer-create and - gnus-add-buffer. - - * gnus-util.el (gnus-kill-buffer): do. - - * nnmail.el: Autoload gnus-kill-buffer. - -2003-02-11 Kevin Greiner - - * gnus-agent.el (gnus-summary-set-agent-mark): Added call to - gnus-summary-goto-subject as gnus-summary-update-mark operates on - the current LINE. - (gnus-agent-summary-fetch-group): Minimized the number of times - that the article is updated in the buffer. - -2003-02-11 Teodor Zlatanov - - * spam.el (spam-ham-move-routine): use the process-mark instead of - gnus-current-article when moving articles - (spam-mark-spam-as-expired-and-move-routine): ditto, use the process-mark - -2003-02-11 Lars Magne Ingebrigtsen - - * gnus-topic.el (gnus-topic-expire-articles): Recursive. - (gnus-topic-catchup-articles): Ditto. - (gnus-topic-mark-topic): Reverse recursive logic. - -2003-02-11 Jesper Harder - - * gnus-sum.el (gnus-summary-refer-thread): Handle case where - gnus-refer-thread-limit is t. - -2003-02-10 Jesper Harder - - * mm-util.el (mm-mule-charset-to-mime-charset): Use - sort-coding-systems to prefer utf-8 over utf-16. - -2003-02-09 Kevin Greiner - - * gnus-agent.el (gnus-agent-expire-days): - gnus-request-move-article depends on gnus-agent-expire to clean up - the cache after moving the article. Therefore, g-a-e-d can NOT - default to nil or can gnus-agent-expire be disabled by doing so. - If you don't want to run gnus-agent-expire, don't call it. - (gnus-agent-expire): The broken test to disable gnus-agent-expire - when g-a-e-d was NOT nil was removed. - (gnus-agent-article-name): Removed unnecessary input test as - article IDs are always strings. - (gnus-agent-regenerate-group): Added check to protect against - servers that generate absurdly long article IDs. Valid IDs are - less than 10 digits to avoid overflow errors. Fixed logic error - when ensuring that the final article ID is present in the new - alist. - -2003-02-09 Lars Magne Ingebrigtsen - - * gnus-topic.el (gnus-topic-goto-missing-topic): Just move to the - next line after finding the parent. - -2003-02-08 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bumped. - -2003-02-08 23:23:27 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.15 is released. - -2003-02-08 Michael Welsh Duggan - - * nnmail.el (nnmail-split-it): If a message ends up matching the - same mailbox more than once, it will cause duplicates to appear - in the mailbox. - -2003-02-08 Simon Josefsson - - * 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 Jesper Harder - - * gnus-art.el (gnus-article-refer-article): Use - gnus-replace-in-string. - - * gnus-util.el (gnus-map-function): Remove unneeded let-binding. - (gnus-remove-duplicates): do. - -2003-02-07 Teodor Zlatanov - - * gnus-int.el (gnus-internal-registry-spool-current-method): new variable - (gnus-request-scan): set - gnus-internal-registry-spool-current-method to gnus-command-method - before a request-scan operation - - * gnus-registry.el (regtest-nnmail): use - gnus-internal-registry-spool-current-method - -2003-02-07 Lars Magne Ingebrigtsen - - * mail-source.el (mail-source-fetch): Typo fix. - -2003-02-07 Teodor Zlatanov - - * nnmail.el (nnmail-spool-hook): new hook - (nnmail-cache-insert): call nnmail-spool-hook - - * gnus-registry.el: new file with examples of using the hooks - - * gnus.el (gnus-registry): added registry customization group - (gnus-group-prefixed-name): improve function to return full group - name optionally - (gnus-group-guess-prefixed-name): shortcut to - gnus-group-prefixed-name, using just the group name - (gnus-group-full-name): always get a group's full name - (gnus-group-guess-full-name): shortcut, using just the group name - - * gnus-sum.el (gnus-summary-article-move-hook) - (gnus-summary-article-delete-hook) - (gnus-summary-article-expire-hook): new hooks - (gnus-summary-move-article, gnus-summary-expire-articles) - (gnus-summary-delete-article): invoke the new hooks - -2003-02-07 Frank Weinberg - - * gnus-art.el (gnus-article-refer-article): Strip leading "news:" - from message-ID - -2003-02-07 Jesper Harder - - * gnus-util.el (gnus-run-hooks): Use save-current-buffer. - -2003-02-07 John Paul Wallington - - * mm-util.el (mm-delete-duplicates, mm-append-to-file) - (mm-write-region, mm-detect-coding-region): Doc fixes. - -2003-02-07 Lars Magne Ingebrigtsen - - * mail-source.el (mail-source-fetch): Ignore errors. - (mail-source-ignore-errors): New variable. - - * gnus-sum.el (gnus-summary-refer-thread): Don't re-fetch current - articles. - - * gnus-msg.el (gnus-version-expose-system): Change default. - -2003-02-07 Vasily Korytov - - * gnus-msg.el (gnus-version-expose-system): New variable. - -2003-02-07 Simon Josefsson - - * mml-sec.el (mml-unsecure-message): Don't use kill-region. Tiny - patch from deskpot@myrealbox.com (Vasily Korytov). - -2003-02-02 Lars Magne Ingebrigtsen - - * gnus-art.el (article-display-face): Get the Face header from - the current buffer. - -2003-02-06 Katsumi Yamaoka - - * gnus-art.el (gnus-mime-view-part-internally): Bind - buffer-read-only to nil. - -2003-02-05 Katsumi Yamaoka - - * gnus-agent.el (gnus-agent-expire-1,2): Pass the dir argument - from g-a-e-1 to g-a-e-2. - -2003-02-05 Teodor Zlatanov - - * spam.el (spam-check-BBDB): no need to regexp-quote the argument - of bbdb-search-simple, use spam-use-BBDB-exclusive - (spam-check-whitelist): use spam-use-whitelist-exclusive - (spam-use-whitelist-exclusive): new variable affecting - spam-use-whitelist - (spam-use-BBDB-exclusive): new variable affecting spam-use-BBDB - -2003-02-05 Simon Josefsson - - * gnus-agent.el (gnus-agent-expire-days): Change default to nil. - (gnus-agent-expire): Don't expire if g-a-e-d is nil. - (gnus-agent-expire): Move most code into gnus-agent-expire-1. - (gnus-agent-expire-1): New. - (gnus-agent-expire-1): Move code into gnus-agent-expire-2. - (gnus-agent-expire-2): New. - -2003-02-05 Jesper Harder - - * gnus-util.el (gnus-delete-if): Rename to gnus-remove-if. - "delete-if" is misleading because it isn't actually destructive. - - * gnus-topic.el (gnus-group-prepare-topics): Use new name. - - * nnmail.el (nnmail-purge-split-history): do. - - * gnus-win.el (gnus-get-buffer-window): do. - - * gnus-sum.el (gnus-simplify-whitespace): Remove unnecessary - let-binding. - (gnus-simplify-all-whitespace): do. - -2003-02-05 Katsumi Yamaoka - - * gnus-delay.el (gnus-delay-article): Fix binding of the - nndraft:delayed group. - -2003-02-04 Teodor Zlatanov - - * gnus.el (spam group parameters): change 'other to 'const in - the group parameter definitions to soothe XEmacs - -2003-02-04 Kai Gro,A_(Bjohann - - * gnus-delay.el (gnus-delay-article): Really create - nndraft:delayed group if it doesn't exist. - -2003-02-04 Jesper Harder - - * gnus-sum.el (gnus-summary-search-article): Speed up by - disabling various visual features while searching. - (gnus-summary-recenter): Test gnus-auto-center-summary first. - -2003-02-03 Jesper Harder - - * spam.el (spam-list-of-checks): Don't quote nil and t in - docstrings. From the elisp manual: - - When a documentation string refers to a Lisp symbol, write - it [..] with single-quotes around it. [..] There are two - exceptions: write t and nil without single-quotes. - - * messcompat.el (message-from-style): do. - - * message.el (message-send-mail): do. - - * gnus-util.el (gnus-use-byte-compile): do. - - * gnus-score.el (gnus-score-lower-thread): do. - - * gnus-int.el (gnus-server-unopen-status): do. - - * gnus.el (gnus-define-group-parameter, gnus-large-newsgroup) - (large-newsgroup-initial, gnus-install-group-spam-parameters): do. - - * gnus-cus.el (gnus-group-customize, gnus-score-parameters) - (gnus-group-parameters): do. - - * gnus-art.el (gnus-article-mime-match-handle-function): do. - - * mm-decode.el (mm-text-html-renderer): do. - -2003-02-02 Katsumi Yamaoka - - * nnheader.el (nnheader-directory-separator-character): Change the - way to compute the dafault value. - -2003-02-02 Jesper Harder - - * gnus-art.el (gnus-button-handle-describe-key): Implement it. - (gnus-button-alist): Fix regexp for describe-key. - (gnus-button-handle-describe-function) - (gnus-button-handle-describe-variable) - (gnus-button-handle-apropos, gnus-button-handle-apropos-command) - (gnus-button-handle-apropos-variable) - (gnus-button-handle-apropos-documentation): Docstring fix. - - * gnus-util.el (gnus-kill-buffer): Use get-buffer. - -2003-02-01 Lars Magne Ingebrigtsen - - * gnus-draft.el (gnus-group-send-queue): Bind gnus-posting-styles - to nil. - - * nnmail.el: Removed gnus-util autoload. - - * gnus.el: Use gnus-prin1-to-string throughout. - - * gnus-util.el (gnus-prin1-to-string): Bind print-length and - print-level. - - * gnus-art.el (article-display-x-face): Removed grey x-face stuff. - (gnus-treat-display-grey-xface): Removed. - - * gnus-fun.el (gnus-grab-cam-face): New. - (gnus-convert-image-to-gray-x-face): Removed. - (gnus-convert-gray-x-face-to-xpm): removed. - (gnus-convert-gray-x-face-region): Removed. - (gnus-grab-gray-x-face): Removed. - - * nnmail.el (nnmail-expiry-wait-function): Doc indent. - -2003-01-31 Jesper Harder - - * gnus-util.el (gnus-kill-buffer): Functions in gnus-util - shouldn't depend on the rest of Gnus, so test if gnus-buffers is - bound. - - * nnmail.el (nnmail-cache-close): Use gnus-kill-buffer. - -2003-01-30 Jesper Harder - - * gnus-cite.el (gnus-cite-reply-regexp, gnus-cite-always-check): - Remove -- these are bogus options which are never used. - -2003-01-29 Jesper Harder - - * gnus-art.el (gnus-article-mode): Use summary tool bar. - -2003-01-27 Teodor Zlatanov - - * spam.el (spam-check-blackholes) - (spam-blackhole-good-server-regex): new variable to skip some IPs - when checking blackholes; use it - (spam-check-bogofilter-headers) - (spam-bogofilter-bogosity-positive-spam-header): new variable, in - case more X-Bogosity is used than just "Yes/No" - (spam-ham-move-routine): semi-fixed, only first article is - properly moved now - -2003-01-27 Jesper Harder - - * gnus-util.el (gnus-kill-buffer): Remove buffer from gnus-buffers - as well. - - * gnus-sum.el (gnus-select-newsgroup): Use gnus-kill-buffer. - - * gnus-score.el (gnus-score-headers, gnus-score-find-bnews): do. - - * gnus-start.el (gnus-save-newsrc-file, gnus-clear-system): do. - - * gnus-bcklg.el (gnus-backlog-shutdown): do. - - * gnus-srvr.el (gnus-server-exit, gnus-browse-exit): do. - -2003-01-26 Lars Magne Ingebrigtsen - - * gnus-fun.el (gnus-face-encode): New function. - (gnus-convert-png-to-face): Use it. - - * gnus-sum.el (gnus-summary-make-menu-bar): Added M-& to marks. - -2003-01-26 Jesper Harder - - * mm-decode.el (mm-dissection-list): Remove. - (mm-dissect-singlepart): Don't push to mm-dissection-list, it's - only used in mm-remove-all-parts. - (mm-remove-all-parts): Remove it, it's never called. - -2003-01-25 Simon Josefsson - - * gnus-group.el (gnus-group-make-group): Report errors. - - * nnimap.el (nnimap-request-create-group): Ditto. - - * sieve-manage.el (sieve-manage-is-okno): Parse literal strings. - - * sieve.el (sieve-upload): Fix error printing. - - * mm-encode.el (mm-qp-or-base64): Always QP iff - mm-use-ultra-safe-encoding and cleartext PGP. - - * gnus-sum.el (gnus-summary-select-article): Inhibit - redisplay (mainly for secured messages). - - * nnmail.el (nnmail-article-group): Copy body too (but don't - process it). - -2003-01-25 Jesper Harder - - * gnus-art.el (gnus-article-setup-buffer): Reset - gnus-button-marker-list. - -2003-01-25 Lars Magne Ingebrigtsen - - * nntp.el (nntp-read-timeout): Default to using a second delay - under Microsoft Windows. - -2003-01-24 Lars Magne Ingebrigtsen - - * nnheader.el (nnheader-directory-separator-character): New - variable. - -2003-01-24 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-max-fetch-size) - (gnus-agent-article-alist, gnus-agent-get-undownloaded-list) - (gnus-agent-catchup, gnus-agent-summary-fetch-group) - (gnus-agent-fetch-articles, gnus-agent-backup-overview-buffer) - (gnus-agent-flush-cache, gnus-agent-fetch-headers) - (gnus-agent-braid-nov, gnus-agent-load-alist) - (gnus-agent-article-alist-save-format) - (gnus-agent-read-agentview, gnus-agent-save-alist) - (gnus-agent-fetch-group-1, gnus-agent-expire) - (gnus-agent-uncached-articles, gnus-agent-retrieve-headers) - (gnus-agent-regenerate-group): Reformat to keep under eighty - columns. Reword docstrings so that first line is under eighty - chars and a complete sentence. Still need to work on the rear - end of the file, in particular gnus-agent-expire. - -2003-01-24 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-agentize): Indent. - - * gnus.el (gnus-version-number): Bumped. - -2003-01-24 20:32:44 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.14 is released. - -2003-01-24 Kai Gro,A_(Bjohann - - * gnus-sum.el (gnus-summary-prepare-threads): Reset state for %B - before beginning. Tiny patch from Mark Thomas - . - -2003-01-24 Teodor Zlatanov - - * spam.el (spam-check-blackholes, spam-split) - (spam-mark-junk-as-spam-routine, spam-summary-prepare-exit): added - gnus-message calls to show to users what spam.el is doing - -2003-01-24 Jesper Harder - - * gnus-msg.el (gnus-message-replysign) - (gnus-message-replyencrypt): Fix typo. - -2003-01-24 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-mime-security-show-details): Toggle showing - details. - -2003-01-23 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-article-press-button): let* -> let. - (gnus-mime-security-show-details): Cleaned up. - (gnus-mime-security-press-button): Save excursion. - (gnus-insert-mime-security-button): Clean up. - - * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Doc fix. - - * gnus-async.el (gnus-async-wait-for-article): Don't use a - timeout. - - * nntp.el (nntp-accept-process-output): Removed timeout. - (nntp-read-timeout): New variable. - (nntp-accept-process-output): Use it. - - * gnus-sum.el (gnus-data-find-list): Remove *. - -2003-01-23 Kevin Greiner - - * gnus-sum.el (gnus-summary-first-subject): Fixed bug that I - introduced on 2002-01-22. - (gnus-summary-first-unseen-or-unread-subject): Ditto. - -2003-01-23 Teodor Zlatanov - - * spam.el (spam-check-regex-headers, spam-list-of-checks) - (spam-regex-headers-spam, spam-regex-headers-ham): added spam/ham - checks of incoming mail based on simple header regexp matching - -2003-01-22 Teodor Zlatanov - - * gnus-sum.el (gnus-spam-mark): set to `$' - -2003-01-22 Kevin Greiner - - * gnus-agent.el (gnus-agent-get-undownloaded-list): Now computes - gnus-newsgroup-unfetched, the list of articles whose headers have - not been fetched from the server. - - * gnus-sum.el (gnus-summary-find-next): Removed undownloaded - parameter as it never worked due to a bug. Added check to prevent - selection of any article in the gnus-newsgroup-unfetched list. - (gnus-summary-find-prev): Added check to prevent selection of any - article in the gnus-newsgroup-unfetched list. - (gnus-summary-first-subject): Documented API. Modified - implementation so that constraints are handled independently. - Added check to prevent selection of any article in the - gnus-newsgroup-unfetched list. - (gnus-summary-first-unseen-subject): Updated parameters in - gnus-summary-first-subject call to match new API. - (gnus-summary-first-unseen-or-unread-subject): Ditto. - (gnus-summary-catchup): Do not mark unfetched articles as read. - -2003-01-22 Jesper Harder - - * gnus-art.el (gnus-treat-strip-pgp, gnus-article-hide-pgp-hook): - make-obsolete-variable allows only two arguments in XEmacs and - Emacs 20. - - * gnus-sum.el (gnus-summary-wash-hide-map): Remove - gnus-article-hide-pgp. - (gnus-summary-make-menu-bar): do. - - * gnus-art.el (gnus-treat-strip-pgp): Make obsolete. - (gnus-treatment-function-alist): Remove gnus-treat-strip-pgp and - gnus-article-hide-pgp. - (article-hide-pgp): Remove. - (gnus-article-hide): Remove gnus-article-hide-pgp. - - * gnus.el: Remove gnus-article-hide-pgp - -2003-01-21 Lars Magne Ingebrigtsen - - * message.el (message-required-headers): Doc fix. - -2003-01-21 Teodor Zlatanov - - * spam.el (spam-group-ham-processor-bogofilter-p): fixed bug - (spam-ifile-register-ham-routine, spam-ifile-ham-category): new - option to make ifile a purely binary classifier - -2003-01-21 Lars Magne Ingebrigtsen - - * mml-sec.el (mml-secure-sign-pgpauto): Renamed. - (mml-secure-encrypt-pgpmime): Removed double. - - * gnus-sum.el (gnus-summary-mark-article-as-replied): Added - debugging statements. - -2003-01-21 Andreas Fuchs - - * mml-sec.el (mml-sign-alist): Added pgpauto. - -2003-01-21 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bumped version number. - -2003-01-21 07:15:41 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.13 is released. - -2003-01-21 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-button-url-regexp): Removed |. - - * message.el (message-send-hook): Doc fix. - - * gnus-win.el (gnus-buffer-configuration): Display article - instead of article-copy when `reply'. - -2003-01-21 Jesper Harder - - * gnus.el (gnus-format): Change customize group to gnus. - (gnus-cache): Add link. - (gnus-group-charter-alist): Fix docstring. - -2003-01-20 Jesper Harder - - * mailcap.el (mailcap-print-command): lpr-command might be - unbound in XEmacs. - -2003-01-18 Kevin Greiner - - * gnus-agent.el (gnus-agent-regenerate-group): Added interactive form. - - * gnus-sum.el (gnus-summary-update-article-line): Fixed - calculation of net characters added for use in the gnus-data - structure. - -2003-01-18 Kai Gro,A_(Bjohann - - * nnmail.el (nnmail-process-unix-mail-format): Improve error - message. Suggested by Jari Aalto. - -2003-01-17 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-article-followup-with-original): Clean up. - (gnus-article-reply-with-original): Ditto. - - * gnus-sum.el (gnus-summary-catchup): Make sure downloadable, - read articles don't become unread. - -2003-01-17 Simon Josefsson - - * gnus-fun.el (gnus-x-face-from-file): - (gnus-face-from-file): Suggest image format in minibuffer prompt. - - * gnus-fun.el (gnus-convert-image-to-x-face-command) - (gnus-convert-image-to-face-command): Doc fix. - -2003-01-17 Lars Magne Ingebrigtsen - - * gnus-fun.el (gnus-convert-face-to-png): Protect against errors. - -2003-01-17 Jesper Harder - - * gnus-art.el (gnus-mime-print-part): Use mm-save-part-to-file to - avoid encoding problems. - - * mailcap.el (mailcap-ps-command): New variable. - (mailcap-mime-data): Add print entry where applicable. Use - pdftotext on a tty. - -2003-01-16 ShengHuo ZHU - - * gnus-sum.el (gnus-alter-header-function): Add type and group. - -2003-01-16 Simon Josefsson - - * gnus-fun.el (gnus-convert-image-to-x-face-command) - (gnus-convert-image-to-face-command, gnus-x-face-from-file) - (gnus-face-from-file): Doc fix; don't mention image format. - -2003-01-16 Teodor Zlatanov - - * spam.el (spam-get-article-as-filename): new function (unused for now) - (spam-get-article-as-buffer): new function - (spam-get-article-as-string): use spam-get-article-as-buffer - (spam-summary-prepare-exit): fixed bug, noticed by Malcolm Purvis - -2003-01-15 ShengHuo ZHU - - * gnus-agent.el: Don't use `path'. - From the GNU coding standards: - - Please do not use the term ``pathname'' that is used in Unix - documentation; use ``file name'' (two words) instead. We use - the term ``path'' only for search paths, which are lists of - directory names. - - * nnsoup.el (nnsoup-file-name): Ditto. - - * nnmail.el (nnmail-pathname-coding-system): Ditto. - (nnmail-group-pathname): Ditto. - - * nnimap.el (nnimap-group-overview-filename): Ditto. - - * nnheader.el (nnheader-pathname-coding-system): Ditto. - (nnheader-group-pathname): Ditto. - - * nnfolder.el (nnfolder-group-pathname): Ditto. - - * gnus.el (gnus-home-directory): Ditto. - - * gnus-group.el (gnus-group-icon-list): Ditto. - -2003-01-16 Jesper Harder - - * gnus-art.el (gnus-mime-print-part): Use mm-handle-media-type. - - * message.el (message-mode-menu): Use it. - (message-mode-menu): Deactivate "Yank Original" if there's no - reply buffer. - - * messagexmas.el (message-xmas-redefine): Redefine in XEmacs. - - * message.el (message-mark-active-p): New function. - -2003-01-15 Teodor Zlatanov - - * spam.el (spam-use-bogofilter-headers, spam-bogofilter-header) - (spam-bogofilter-database-directory): new variables - (spam-check-bogofilter-headers, spam-check-bogofilter) - (spam-bogofilter-register-with-bogofilter) - (spam-bogofilter-register-spam-routine) - (spam-bogofilter-register-ham-routine) - (spam-group-ham-processor-bogofilter-p): new functions for the new - Bogofilter interface - (spam-summary-prepare-exit): use the new Bogofilter functions - (spam-list-of-checks): added spam-use-bogofilter-headers - (spam-bogofilter-score): rewrote function - (spam-check-bogofilter): optional score parameter, uses - spam-check-bogofilter-headers better - (spam-check-bogofilter-headers): optional score parameter - - * gnus.el (gnus-install-group-spam-parameters): new variable, t by - default, in the gnus-start customization group. Used to disable - the spam-*/ham-* parameters. - (gnus-group-ham-exit-processor-bogofilter): new ham processor - -2003-01-15 Jesper Harder - - * gnus-xmas.el (gnus-xmas-redefine): Use region-exists-p in - XEmacs. - - * gnus-ems.el (gnus-mark-active-p): do. - -2003-01-15 Kevin Ryde - - * gnus.texi (Using MIME): Mention auto-compression-mode with - gnus-mime-copy-part. - -2003-01-15 Lars Magne Ingebrigtsen - - * message.el (message-send): Don't warn about duplicates when - superseding. - -2003-01-15 Simon Josefsson - - * nnimap.el (nnimap-split-download-body): New variable. - (nnimap-split-articles): Use it. - -2003-01-14 Kevin Greiner - - * gnus-agent.el (gnus-agent-check-overview-buffer): This data - integrity checker was incorrectly flagging, and removing, articles - whose article number was negative. - (gnus-agent-fetch-group-1): When executed in the group's summary - buffer, refresh each downloaded line to update the status flag and - font. Preserve the value of gnus-newsgroup-headers so that - gnus-agent-fetch-articles can split the requests by size. - (gnus-agent-expire): Corrected day calculation for when - gnus-agent-expire-days contains a list. - -2003-01-14 Lars Magne Ingebrigtsen - - * gnus-audio.el (gnus-audio-au-player): Use executable-find. - -2003-01-13 Jhair Tocancipa Triana - - * gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player): Use - /usr/bin/play as default player. - (gnus-audio-play): Added ARG-DESCRIPTOR to prompt for a file to play. - -2003-01-14 Katsumi Yamaoka - - * gnus-msg.el (gnus-inews-add-send-actions): Allow a list of - articles to be marked as well. - -2003-01-14 Kevin Greiner - * gnus-agent.el (gnus-agent-get-undownloaded-list): Include the - fictious headers generated by nnagent (ie. Undownloaded Article - ####) in the list of articles that have not been downloaded. - - * gnus-int.el (): Added require declarations to resolve - compile-time warnings. - (gnus-open-server): If the server status is set to offline, - recursively execute gnus-open-server to open the offline backend - (e.g. nnagent). - -2003-01-14 Jesper Harder - - * gnus-art.el (gnus-article-reply-with-original): Use - gnus-mark-active-p. - (gnus-article-followup-with-original): do. - -2003-01-13 Reiner Steib - - * gnus-sum.el: Removed `(when t ...)' around `gnus-define-keys'. - -2003-01-13 Reiner Steib - - * gnus-score.el (gnus-score-edit-file-at-point): New function. - (gnus-score-find-trace): Bind it to `e' key. Added `q' for quit. - -2003-01-13 Romain FRANCOISE - - * gnus-fun.el (gnus-x-face-from-file): Quote file name. - (gnus-face-from-file): Ditto. - -2003-01-13 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-articles-to-read): Don't just apply - gnus-alter-articles-to-read-function to the unread articles. - -2003-01-13 Reiner Steib - - * deuglify.el (gnus-article-outlook-unwrap-lines) - (gnus-article-outlook-repair-attribution) - (gnus-article-outlook-rearrange-citation): New function names, - renamed from "gnus-outlook-" to "gnus-article-outlook-". Changed - doc-string. - - * gnus-sum.el (gnus-summary-mode-map): Use new function names, - removed `W k' key binding (use `W Y f' instead). - (gnus-summary-make-menu-bar): Use new function names. - -2003-01-13 Simon Josefsson - - * gnus-fun.el (gnus-random-x-face): Doc fix. - (gnus-insert-random-x-face-header): New function. - -2003-01-13 Jesper Harder - - * gnus-sum.el (gnus-summary-make-menu-bar): Deactivate items if - mark is not active. - - * gnus-msg.el (gnus-inews-do-gcc): Comment. - - * gnus-ems.el (gnus-mark-active-p): New function. - - * gnus-group.el (gnus-topic-mode-p): New function. - (gnus-group-make-menu-bar): Show more key bindings in topic mode. - Deactivate items if mark is not active. - -2003-01-12 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bumped version. - (gnus-summary-line-format): Doc fix. - -2003-01-12 22:02:49 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.12 is released. - -2003-01-12 Lars Magne Ingebrigtsen - - * mail-source.el (mail-sources): Removed autoload to make it - compile under XEmacs. - -2003-01-12 Raymond Scholz - - * gnus-msg.el (gnus-confirm-mail-reply-to-news): May be a - regexp or a function too. - (gnus-confirm-treat-mail-like-news): New variable. Ask for - confirmation even if the original article is mail. - -2003-01-12 Lars Magne Ingebrigtsen - - * gnus-msg.el (gnus-inews-add-send-actions): Get the right - articles to be marked when not yanking. - -2003-01-12 Fran,Ag(Bois-David Collin - - * mm-decode.el (mm-get-part): Use mm-with-unibyte-current-buffer. - -2003-01-12 Lars Magne Ingebrigtsen - - * gnus-fun.el (gnus-face-from-file): Autoload. - - * gnus-cite.el (gnus-cite-delete-overlays): Protect against more - errors. - -2003-01-12 Simon Josefsson - - * sieve.el (sieve-upload-and-bury): New. Suggested by - kai.grossjohann@uni-duisburg.de (Kai Gro,A_(Bjohann). - - * sieve-mode.el (sieve-mode-map): Bind s-u-a-b to C-c C-c. - Suggested by kai.grossjohann@uni-duisburg.de (Kai Gro,A_(Bjohann). - -2003-01-12 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-ignored-headers): Don't include the ^ and : - in every string. - - * gnus.el (gnus-version-number): Bumped version number. - -2003-01-12 13:46:20 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.11 is released. - -2003-01-12 Jesper Harder - - * message.el (message-fetch-reply-field): Narrow to headers. - - * gnus-msg.el (gnus-inews-do-gcc): Don't try to mark GCC's as read - if Gnus isn't alive. - -2003-01-11 Kevin Greiner - - * gnus-agent.el (gnus-agent-fetch-group-1): Remove downloadable - marks from articles that are already stored in the agent. - (gnus-agent-backup-overview-buffer): New debug tool. Creates a - backup copy of an invalid .overview file for later analysis. - -2003-01-12 Gregorio Gervasio, Jr. - - * gnus-sum.el (gnus-summary-exit): Reverse change to make group - exit work with two frames. - -2003-01-11 Fran,Ag(Bois-David Collin - - * message.el (message-forward-make-body): Use mule4. - -2003-01-11 Lars Magne Ingebrigtsen - - * message.el (message-mode-map): Move wide-reply command. - -2003-01-10 Reiner Steib - - * deuglify.el (gnus-outlook-deuglify-attrib-verb-regexp): Added - castellano. - (gnus-outlook-display-hook): New variable. - (gnus-outlook-display-article-buffer): New function. - (gnus-outlook-unwrap-lines, gnus-outlook-repair-attribution) - (gnus-outlook-deuglify-article): Made them interactive and added - optional arg. Use `g-o-d-a-b'. - (gnus-article-outlook-deuglify-article): Use `g-o-d-a-b'. - - * gnus-sum.el: Added autoloads. - (gnus-summary-mode-map): Added gnus-summary-wash-deuglify-map. - (gnus-summary-make-menu-bar): Added "(Outlook) Deuglify" menu. - -2003-01-11 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-display-mime): Use the mime emulation - variable. - - * gnus-sum.el (gnus-article-emulate-mime): New variable. - - * gnus-start.el (gnus-read-newsrc-el-file): Make sure that the - newsrc-alist is initialized properly. - - * mail-source.el (mail-sources): Autoload. - - * gnus-sum.el (gnus-summary-make-false-root-always): Default to - nil. - - * gnus-msg.el (gnus-configure-posting-styles): Make sure we don't - insert two newlines. - - * message.el (message-check-news-header-syntax): Compute the - header length correctly. - -2003-01-10 Kevin Greiner - - * gnus-agent.el (gnus-agent-expire): Do not remove article from - alist when keeping fetched article file. - (gnus-agent-retrieve-headers): When parsing response for article - numbers, use the same algorithm as gnus-agent-braid-nov to protect - against garbage in the server's response. - - * gnus-int.el (gnus-request-expire-articles, - gnus-request-move-article): Only expire when the group's server - has been agentized. - -2003-01-10 Lars Magne Ingebrigtsen - - * gnus-cite.el (gnus-cite-delete-overlays): Protect against - errors when deleting overlays. - - * gnus-score.el (gnus-score-followup): Allow tracing. - - * gnus-art.el (gnus-treat-display-face): New variable. - (article-display-face): New command. - - * gnus-fun.el (gnus-face-from-file): New function. - (gnus-convert-face-to-png): Ditto. - - * gnus-art.el (gnus-ignored-headers): Added Face. - -2003-01-10 Simon Josefsson - - * nndraft.el (nndraft-request-group): Avoid crash in - directory-files when draft directory doesn't exists. - - * gnus-sum.el (gnus-select-article-hook): Add :option. - -2003-01-10 Teodor Zlatanov - - * spam.el (spam-use-stat): new variable - (spam-group-spam-processor-stat-p) - (spam-group-ham-processor-stat-p): new convenience functions - (spam-summary-prepare-exit): add spam/ham processors to sequence - (spam-list-of-checks): add spam-use-stat to list of checks - (spam-split): conditionally load the spam-stat tables - (spam-stat-register-spam-routine, spam-stat-register-ham-routine, - spam-check-ifile): new functions - - * spam-stat.el (spam-stat): typo fix - (spam-stat-install-hooks): new variable - (spam-stat-split-fancy-spam-group): added documentation clarification - (spam-stat-split-fancy-spam-threshhold): new variable - (spam-stat-install-hooks): make hooks conditional - (spam-stat-split-fancy): use spam-stat-split-fancy-spam-threshhold - - * gnus.el (gnus-group-ham-exit-processor-stat, spam-process): add - spam-stat ham/spam processor symbols - -2003-01-10 Lars Magne Ingebrigtsen - - * gnus-start.el (gnus-read-newsrc-el-file): Make sure the .eld - file exists. - -2003-01-10 Simon Josefsson - - * gnus-sum.el (gnus-summary-read-group-1): Don't select first - undownloaded/downloadable only when unplugged. - -2003-01-10 Jesper Harder - - * gnus-srvr.el (gnus-browse-foreign-server): Optimize inner loop. - -2003-01-09 Teodor Zlatanov - - * spam.el (spam-check-ifile): fixed call-process-region to use the - db parameter only if it's set - (spam-ifile-register-with-ifile): ditto - -2003-01-09 Alex Schroeder - - * spam-stat.el (spam-stat-save): Set spam-stat-ngood and - spam-stat-nbad before creating the hash table. - (spam-stat-reset): Set spam-stat-ngood and spam-stat-nbad to 0. - Changed copyright statement to FSF. - -2003-01-09 Kevin Greiner - - * gnus-agent.el (gnus-agent-catchup): Do not mark cached nor - processable articles as read. - (gnus-agent-summary-fetch-series): Remove processable and - downloadable marks on all downloaded articles in the series. - - * nntp.el (nntp-report): Throw error after reporting the problem. - (nntp-accept-process-output): Corrected error check to report an - error when the process is nil. - -2003-01-09 Simon Josefsson - - * message.el (message-tool-bar-map): Add preview. - -2003-01-09 Jesper Harder - - * mml.el (mml-preview): Get rid of MIME handles and buffers after - previewing. - -2003-01-08 Paul Jarc - - * nnmaildir.el (nnmaildir--grp-add-art): Fix wrong-type-argument - bug when the (n+1)th article to be added to a group has a smaller - number than the n articles already added. - -2003-01-08 Jesper Harder - - * message.el (message-mode-field-menu): Use backquote. - -2003-01-08 Teodor Zlatanov - - * spam.el: fixed the BBDB autoloads again, using - bbdb-search-simple now (which is not a macro, thank god) - - * lpath.el (bbdb-search): removed function from maybe-fbind list - - * gnus.el (ham-process-destination): added new parameter for - destination of ham articles found in spam groups at summary exit - - * spam.el (spam-get-ifile-database-parameter): use spam-ifile-database-path - (spam-check-ifile, spam-ifile-register-with-ifile): use spam-get-ifile-database-parameter - (spam-ifile-database-path): added new parameter for ifile's database - (spam-move-spam-nonspam-groups-only): new parameter to determine - if spam should be moved from all groups or only some - (spam-summary-prepare-exit): fixed logic to use - spam-move-spam-nonspam-groups-only when deciding to invoke - spam-mark-spam-as-expired-and-move-routine; always invoke that - routine after the spam has been expired-or-moved in case there's - some spam left over; use spam-ham-move-routine in spam groups - (spam-ham-move-routine): new function to move ham articles to the - ham-process-destinations group parameter - -2003-01-08 Lars Magne Ingebrigtsen - - * gnus-spec.el (gnus-parse-complex-format): %~ => ~*. - - * gnus-agent.el (gnus-agent-fetch-selected-article): Use - gnus-summary-update-article-line. - -2003-01-08 Simon Josefsson - - * nnmail.el (nnmail-expiry-target-group): Request group, create it - not successful. - -2003-01-08 Katsumi Yamaoka - - * lpath.el (bbdb-records): Fbind it for both Emacs and XEmacs. - -2003-01-07 Teodor Zlatanov - - * spam.el (spam-check-ifile): fixed the spam-ifile-all-categories - logic, finally - -2003-01-08 Lars Magne Ingebrigtsen - - * gnus-spec.el (gnus-parse-format): %C is a complex format. - (gnus-parse-format): Change to %~. - - * message.el (message-generate-headers): Don't generate optional - empty headers. - -2003-01-07 Reiner Steib - - * message.el (message-cross-post-default) - (message-cross-post-note-function, message-shoot-gnksa-feet) - (message-strip-subject-trailing-was, message-change-subject) - (message-mark-insert-file, message-cross-post-followup-to) - (message-cross-post-followup-to, message-mode-map) - (message-generate-unsubscribed-mail-followup-to) - (message-make-mail-followup-to): Minor changes to doc-strings and - error messages. Updated copyright line. - - * message.el (message-make-mail-followup-to, - message-generate-unsubscribed-mail-followup-to): New function - names. Renamed functions: "-mft" -> "-mail-followup-to". - (message-make-mft, message-gen-unsubscribed-mft): Removed function - names. - - * mml.el (mml-preview-insert-mail-followup-to): New function name. - (mml-preview-insert-mft): Removed function name. - (mml-preview): Use new function names. - - * gnus-art.el (gnus-article-edit-mode-map): Use new function names. - - * message.el (message-mode-field-menu): Moved header related - commands from "Message" to "Field" menu. - -2003-01-07 Reiner Steib - - * message.el (message-generate-headers-first): Added customization - if variable is a list. - -2003-01-07 Michael Shields - - * gnus-art.el (gnus-article-next-page): Correctly handle the case - where the last line of the article is the last line of the window. - -2003-01-08 Lars Magne Ingebrigtsen - - * gnus-msg.el (gnus-debug): Use ignore-errors. - - * gnus-agent.el (gnus-agent-fetch-selected-article): Use - `gnus-summary-update-line'. - -2003-01-08 Simon Josefsson - - * gnus-art.el (gnus-unbuttonized-mime-types) - (gnus-buttonized-mime-types): Doc fix. - -2003-01-08 Jesper Harder - - * mm-decode.el (mm-inline-media-tests): .xpm is 'x-xpixmap'. - -2003-01-07 ShengHuo ZHU - - * nnrss.el (nnrss-group-alist): Add and clear up. - -2003-01-07 Teodor Zlatanov - - * spam.el: removed unnecessary condition-case for loading bbdb-com.el - - * lpath.el (bbdb-search): added BBDB functions for a better way to - fix missing functions - - * spam.el (spam-check-ifile): if should be an unless - - * spam.el: define 'ignore alias for spam-BBDB-register-routine, - spam-enter-ham-BBDB, and bbdb-create-internal initially to hush up warnings - (spam-ifile-all-categories): doc string fixed to be less than 80 chars - -2003-01-07 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-make-menu-bar): Added - gnus-summary-refer-thread to thread menu. - -2003-01-07 Kevin Greiner - - * gnus-agent.el (gnus-agent-fetch-group-1): When fetching within a - summary buffer, articles that cannot be fetched are marked as - canceled. - - * nntp.el (nntp-with-open-group): The quit signal handler must - propagate the quit signal to the next outer handler so that the - caller knows that the request aborted abnormally. - -2003-01-07 Teodor Zlatanov - - * spam.el (spam-check-ifile, spam-ifile-register-with-ifile) - (spam-ifile-register-spam-routine) - (spam-ifile-register-ham-routine): added ifile functionality that - does not use ifile-gnus.el to classify and register articles - (spam-get-article-as-string): convenience function - (spam-summary-prepare-exit): added ifile spam and ham registration - (spam-ifile-all-categories, spam-ifile-spam-category) - (spam-ifile-path, spam-ifile): added customization options - - * gnus.el (gnus-group-ham-exit-processor-ifile): added ifile ham - exit processor - (spam-process): added gnus-group-ham-exit-processor-ifile to the - list of choices - -2003-01-07 Lars Magne Ingebrigtsen - - * gnus-score.el (gnus-score-followup): Also score immediate - followups. - -2003-01-06 Lars Magne Ingebrigtsen - - * nnweb.el (nnweb-asynchronous-p): Changed to nil. - -2003-01-07 Simon Josefsson - - * message.el (message-mode-menu): Fix receipt balloon help. - -2003-01-07 Jesper Harder - - * gnus-msg.el (gnus-group-post-news): Don't assume that "" will - always be interpreted as news. - -2003-01-07 Simon Josefsson - - * gnus-sieve.el (gnus-sieve-script): Use the crosspost argument to - gnus-sieve-script, instead of the global variable - gnus-sieve-crosspost. One-line patch from Steinar Bang - . - -2003-01-06 Kevin Greiner - - * gnus.el: Renamed gnus-summary-*-uncached-face as - gnus-summary-*-undownloaded-face to avoid confusing the agent with - the cache. - - * gnus-sum.el: Ditto. - -2003-01-06 Kevin Greiner - - * gnus-agent.el (gnus-agent-fetch-group): Modified to permit execution - in either the group or summary buffer. - New command "JS", in summary buffer, will fetch articles per the - group's category, predicate, and processable flags. - (gnus-agent-summary-fetch-series): Rewritten to call - gnus-agent-session-fetch-group once with all articles in the - series. - (gnus-agent-summary-fetch-group): Fixed bug and modified code to - return list of fetched articles. - (gnus-agent-fetch-articles): Split fetch list into sublists such - that the article buffer is only slightly larger than - gnus-agent-max-fetch-size. Added unwind-protect to ensure that - the group's article alist is saved. - (gnus-agent-fetch-headers): The 'killed' and 'cached' marks no - longer result in the agent trying to fetch an article. - (gnus-agent-fetch-group-1): Can now be called in either the group - or summary buffer. Removed the max-fetch-size code that I added - on 2002-12-13 as that capability is now part of - gnus-agent-fetch-articles. Added code to update summary buffer. - When called in the group buffer, articles that can not be fetched - are AUTOMATICALLY MARKED AS READ. - - * gnus-sum.el (): Modified eval-when-compile to minimize - misleading compilation warnings. - (gnus-update-summary-mark-positions): Changed code to use - gnus-undownloaded-mark rather than gnus-downloaded-mark. - - * nnheader.el (nnheader-insert-nov-file): Do not try to insert an - empty file as the parser assumes that the file isn't empty. - - * nntp.el (nntp-send-string): The process-send-string call can, - because it performs I/O on the process, change the process' state - from open to closed. If this happens, call nntp-report - immediately to report the broken connection. - (nntp-report): Rewritten to avoid needing a global variable to - determine the appropriate course of action. Instead, two function - implementations are provided and the nntp-report function value is - bound to the appropriate implementation. - (nntp-retrieve-data): Moved nntp-report call to end of implementation. - (nntp-with-open-group): Now binds nntp-report's function cell - rather than binding gnus-with-open-group-first-pass. Added a - condition-case to detect a quit during a nntp command. When the - quit occurs, the current connection is closed as a fetch articles - request could have several megabytes queued up for reading. - (nntp-retrieve-headers): Bind articles to itself. If - nntp-with-open-group repeats this command, I must have access to - the original list of articles. - (nntp-retrieve-groups): Ditto for groups. - (nntp-retrieve-articles): Ditto for articles. - (*): Replaced nntp-possibly-change-group calls to - nntp-with-open-group forms in all, but one, occurrance. - (nntp-accept-process-output): Bug fix. Detect when called with - null process. - -2003-01-06 Jesper Harder - - * mm-util.el (mm-find-mime-charset-region): Don't do Latin-9 hack - if we don't need to. - (mm-iso-8859-x-to-15-region): Fix misplaced parenthesis. - -2003-01-06 Lars Magne Ingebrigtsen - - * gnus-group.el (gnus-group-make-web-group): Pass the select - method on to group-create. - (gnus-group-line-format-alist): %U is an integer. - - * gnus-sum.el (gnus-summary-exit-no-update): Don't update - ephemeral groups. - (gnus-summary-read-group-1): Ditto. - (gnus-group-make-articles-read): Ditto. - - * mm-url.el (mm-url-program): Doc fix. - - * message.el (message-mode-map): Rebound - message-insert-wide-reply. - -2003-01-05 Katsumi Yamaoka - - * gnus-xmas.el (gnus-xmas-group-startup-message): Bind the oort - color as `gnus-group-startup-message' does. - -2003-01-05 Teodor Zlatanov - - * spam.el: fixed line lengths to 80 chars or less - - * gnus-sum.el (gnus-read-mark-p): added the spam-mark as a - "not-read" mark - (gnus-summary-mark-forward): added the spam-mark to the list of - marks not to be marked as "read" when viewed - -2003-01-05 Lars Magne Ingebrigtsen - - * gnus-msg.el (gnus-inews-make-draft): Quote article-reply. - - * gnus-group.el (gnus-number-of-unseen-articles-in-group): - Protect against unactive groups. - - * message.el (message-check-news-header-syntax): Check long - header lines. - (message-check-news-header-syntax): Update `start'. - - * gnus-group.el (gnus-group-expire-articles): Doc fix. - (gnus-group-line-format): %U. - (gnus-group-line-format-alist): ?U. - (gnus-number-of-unseen-articles-in-group): New function. - - * nntp.el (nntp-accept-process-output): Use a 0.1 second timeout. - - * gnus.el (gnus-version-number): Bump version number. - -2003-01-05 01:53:30 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.10 is released. - -2003-01-05 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Fix version number. - -2003-01-05 01:40:09 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.08 is released. - -2003-01-04 Jesper Harder - - * mm-util.el: Add mm-string-make-unibyte. - - * gnus-group.el (gnus-group-jump-to-group): Make it work for - UTF-8 groups. - -2003-01-04 Lars Magne Ingebrigtsen - - * gnus.el (gnus-variable-list): Write gnus-format-specs last. - - * gnus-sum.el (gnus-summary-goto-subjects): Fix typo. - -2003-01-04 Kevin Ryde - - * gnus-art.el (gnus-mime-jka-compr-maybe-uncompress): New - function. - -2003-01-04 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-exit): Bind gnus-group-is-exiting-p. - (gnus-summary-read-group-1): Update group line. - (gnus-summary-exit-no-update): Update group on exit. - - * gnus-group.el (gnus-group-line-format): Add %*. - (gnus-group-line-format-alist): Ditto. - (gnus-group-insert-group-line): Set it. - (gnus-group-is-exiting-p): New variable. - (gnus-group-insert-group-line): Use it. - -2003-01-03 Teodor Zlatanov - - * spam.el (spam-enter-ham-BBDB, spam-BBDB-register-routine): - enable BBDB ham processing - (spam-blacklist-register-routine): enable blacklist spam processing - (spam-whitelist-register-routine): enable whitelist ham processing - (spam-fetch-field-from-fast): fast fetching of the "from" field - from (gnus-data-list) - (spam-summary-prepare-exit): works completely now - (spam-use-blacklist): oops, should be nil by default - (spam-summary-prepare-exit): spam-use-PROCESSOR is only for - split processing now; before it was for summary exit as - well but that's done with the spam-contents and spam-process - parameters now - -2003-01-03 Jesper Harder - - * mml.el (mml-insert-tag): Don't quote non-ASCII unibyte - characters. - -2003-01-02 Teodor Zlatanov - - * spam.el (spam-group-spam-contents-p, spam-group-ham-contents-p) - (spam-group-processor-p, spam-group-processor-bogofilter-p) - (spam-group-processor-ifile-p, spam-group-processor-blacklist-p) - (spam-group-processor-whitelist-p, spam-group-processor-BBDB-p) - (spam-mark-spam-as-expired-and-move-routine) - (spam-generic-register-routine, spam-BBDB-register-routine) - (spam-ifile-register-routine, spam-blacklist-register-routine) - (spam-whitelist-register-routine): new functions - (spam-summary-prepare-exit): added summary exit processing (expire - or move) of spam-marked articles for spam groups; added slots for - all the spam-*-register-routine functions - -2003-01-03 Lars Magne Ingebrigtsen - - * pop3.el (pop3-retr): Wait 500 msecs. - (pop3-read-response): Ditto. - - * gnus-msg.el (gnus-setup-message): Get the evaliation order - right. - (gnus-inews-make-draft): New function. - (gnus-setup-message): Use it. - - * message.el (message-required-headers): Add From. - -2003-01-02 Katsumi Yamaoka - Trivial patch from Norbert Koch . - - * gnus-msg.el (gnus-gcc-externalize-attachments): Fix typo. - -2003-01-02 Lars Magne Ingebrigtsen - - * message.el (message-generate-headers): Let header formatters do - their work. - -2003-01-02 Raymond Scholz - - * deuglify.el (gnus-article-outlook-deuglify-article): - Rehighlight, reapply treatments and call - `gnus-article-prepare-hook'. Suggested by Niels Olof Bouvin. - (gnus-outlook-repair-attribution-block): Recognize cited - attributions. Suggested by Niklas Morberg. - -2003-01-02 Pete Kazmier - - * gnus-art.el (gnus-treat-predicate): Check condition first. - -2003-01-02 Jesper Harder - - * lpath.el: Add url-http-file-exists-p. - - * gnus-group.el (gnus-group-fetch-charter): Use - http://TLH.news-admin.org/charters/GROUPNAME as a fallback. - -2003-01-02 Lars Magne Ingebrigtsen - - * message.el (message-draft-headers): Also generate From to get a - nicer draft buffer summary. - - * gnus-xmas.el (gnus-xmas-read-event-char): Take an optional - parameter. - - * gnus-art.el (article-wash-html): Clean up. - (article-wash-html): Typo fix. - - * gnus-msg.el (gnus-summary-mail-forward): Clean up. - (gnus-summary-mail-forward): To many lists of lists. - - * gnus-art.el (article-wash-html): Clean up. - -2003-01-02 pete-temp - - * gnus-art.el (gnus-treat-wash-html): New variable. - -2003-01-02 Lars Magne Ingebrigtsen - - * message.el (message-check-news-header-syntax): Allow posting. - (message-check-news-header-syntax): Fix logic for sure, this - time. - -2003-01-02 Matthieu Moy - - * message.el (message-check-news-header-syntax): Check syntax of - continuation headers. - -2003-01-02 Reiner Steib - - * gnus-art.el (gnus-button-url-regexp, - (gnus-button-mid-or-mail-regexp, gnus-button-alist, - (gnus-header-button-alist): Regexps are case insensitive here. - -2003-01-02 Simon Josefsson - - * dig.el (query-dig): Doc fix. - -2003-01-02 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-fetch-selected-article): Update whole - summary buffer line, not just the download mark. - -2003-01-02 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-goto-subjects): New function. - (gnus-summary-insert-dormant-articles): New command and - keystroke. - - * gnus-cache.el (gnus-summary-insert-cached-articles): Use new - function for mass insertion of subjects. - - * nndraft.el (nndraft-generate-headers): Don't move point. - - * gnus.el (nnheader): Require nnheader. - - * nndraft.el (nndraft-request-associate-buffer): Use - make-local-variable. - -2003-01-02 Michael Shields - - * nndraft.el (nndraft-request-associate-buffer): Make - write-contents-hooks buffer-local before setting it. - -2003-01-02 Lars Magne Ingebrigtsen - - * gnus.el (gnus-group-parameter-value): Take an extra param. - (gnus-group-fast-parameter): Let group param results be nil. - - * gnus-art.el (gnus-article-forward-header): New function. - (article-date-ut): Use it to remove continuation date headers. - - * gnus-sum.el (gnus-summary-walk-group-buffer): Supply prompt to - read-event. - (gnus-summary-remove-bookmark): Clean up. - (gnus-summary-set-bookmark): Clean up. - - * gnus-util.el (gnus-read-event-char): Take an optional prompt. - - * gnus.el (gnus-group-startup-message): Bind data-directory to - the Gnus etc directory. - -2003-01-01 Teodor Zlatanov - - * spam.el (spam-summary-prepare-exit): added slots for spam- and - ham-processing of articles; use the new - spam-group-(spam|ham)-contents-p functions - (spam-group-spam-contents-p, spam-group-ham-contents-p): new - convenience functions - (spam-mark-junk-as-spam-routine): use the new - spam-group-spam-contents-p function - - * gnus.el (spam-process, spam-contents, spam-process-destination): - added new parameters with corresponding global variables - (gnus-group-spam-exit-processor-ifile, - gnus-group-spam-exit-processor-bogofilter, - gnus-group-spam-exit-processor-blacklist, - gnus-group-spam-exit-processor-whitelist, - gnus-group-spam-exit-processor-BBDB, - gnus-group-spam-classification-spam, - gnus-group-spam-classification-ham): added new symbols for the - spam-process and spam-contents parameters - - * spam.el (spam-ham-marks, spam-spam-marks): changed list - customization and list itself to store mark symbol rather than - mark character. - (spam-bogofilter-register-routine): added logic to generate mark - values list from spam-ham-marks and spam-spam-marks, so (member) - would work. - -2003-01-02 Katsumi Yamaoka - - * message.el (message-cross-post-followup-to): Fix comment. - -2003-01-01 Teodor Zlatanov - - * spam.el (spam-ham-marks, spam-spam-marks): changed list - customization and list itself to store mark symbol rather than - mark character. - (spam-bogofilter-register-routine): added logic to generate mark - values list from spam-ham-marks and spam-spam-marks, so (member) - would work. - -2003-01-01 Raymond Scholz - - * message.el (message-signature-insert-empty-line): New variable. - -2002-12-30 Reiner Steib - - * message.el: Renamed functions and variables: "xpost" -> - "cross-post", "-fup2" -> "-followup-to". - (message-cross-post-old-target, message-cross-post-default, - message-cross-post-note, message-followup-to-note, - message-cross-post-note-function): New variables names. - (message-xpost-old-target, message-xpost-default, - message-xpost-note, message-fup2-note, - message-xpost-note-function): Removed variable names. - (message-cross-post-followup-to-header, - message-cross-post-insert-note, message-cross-post-followup-to): - New function names. - (message-xpost-fup2-header, message-xpost-insert-note, - message-xpost-fup2): Removed function names. - -2002-12-30 Reiner Steib - - * message.el (message-send-mail): Added message-cleanup-headers to - prevent newlines in headers. - -2003-01-01 Lars Magne Ingebrigtsen - - * dns.el (dns-make-network-process): Comment. - - * gnus-sum.el (gnus-summary-display-while-building): Default to - nil. - -2003-01-01 Wes Hardaker - - * gnus-sum.el (gnus-summary-display-while-building): New - variable. - -2003-01-01 Raymond Scholz - - * deuglify.el (gnus-outlook-rearrange-article): Kill overlays - before rearranging the article. - -2003-01-01 Lars Magne Ingebrigtsen - - * nndraft.el (nndraft-generate-headers): New function. - (nndraft-request-associate-buffer): Use it to write headers on - buffer save. - - * message.el (message-generate-headers): Let the function be a - lambda form. - (message-draft-headers): New variable. - - * gnus-msg.el (gnus-inews-make-draft-meta-information): New - function. - (gnus-setup-message): Use it. - - * message.el (message-generate-headers-first): Doc fix. - (message-setup-1): Use new function for getting which headers to - generate. - (message-headers-to-generate): New function. - -2003-01-01 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-save-alist): Make directory. - -2002-12-31 Reiner Steib <4uce.02.r.steib@gmx.net> - - * gnus-sum.el (gnus-summary-limit-to-age): Make prompt string - mention negatives. - -2002-12-31 Raymond Scholz - - * deuglify.el (gnus-outlook-rearrange-article): Use - `transpose-regions' instead of tempering the kill-ring. - (gnus-article-outlook-deuglify-article): Rehighlight article - instead of a complete redisplay. - -2002-12-31 Teodor Zlatanov - - * spam.el: most defvars are defcustoms now - - patches from Michael Shields - - * spam.el (spam-bogofilter-articles): Select the article - body using gnus-summary-show-article t instead of - gnus-summary-select-article; this presents the raw text - without running any hooks. - - * spam.el (spam-bogofilter-articles): Use message-remove-header - to remove headers; the old way incorrectly removed just the first - line of folded headers. - -2002-12-31 Katsumi Yamaoka - - * gnus-start.el (gnus-load): Replace `ding-file' with `file'. - -2002-12-30 Lars Magne Ingebrigtsen - - * gnus-start.el (gnus-load): New function. - (gnus-read-newsrc-el-file): Use it. - -2002-12-30 Reiner Steib - - * gnus-art.el (gnus-button-valid-fqdn-regexp): New variable. - (gnus-button-handle-apropos-documentation): New function. - (gnus-button-handle-ctan): New function. - (gnus-button-alist): Use them. Improve some regexps. - (gnus-button-prefer-mid-or-mail): Addition to doc-string. - -2002-12-30 Reiner Steib - - * message.el (message-subscribed-p): New function. - (message-send-mail): Use it. - * mml.el (mml-preview-insert-mft): New function. - (mml-preview): Use it. - -2002-12-30 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-thread-latest-date): Protect against errors - when sorting by date. - - * gnus-art.el (gnus-article-edit-mode): New variable. - (gnus-article-setup-buffer): Warn user about discarding edits. - - * gnus-sum.el (gnus-summary-pipe-output): Clean up. - (gnus-summary-pipe-output): Take a symbolic prefix to save all - headers. - - * mm-uu.el (mm-uu-configure-list): Default to (shar . disabled). - -2002-12-30 Reiner Steib - - * message.el (message-completion-alist): Added "Mail-Followup-To" - and "Mail-Copies-To". - -2002-07-21 Jesper harder - - * gnus-group.el: Add key bindings for - gnus-group-sort-groups-by-real-name and - gnus-group-sort-selected-groups-by-real-name. - -2002-07-21 Jesper harder - - * gnus.texi (Sorting Groups): Add key bindings for - gnus-group-sort-groups-by-real-name and - gnus-group-sort-selected-groups-by-real-name. - -2002-12-30 Teodor Zlatanov - - * spam.el (spam-use-dig): new variable for blackhole checking - through dig.el - (spam-check-blackholes): added dig.el checking functionality and - more verbose reporting; query-dig is autoloaded from dig.el - (spam-use-blackholes): disabled by default - (spam-blackhole-servers): removed rbl.maps.vix.com from the - blackhole servers list - -2002-12-30 Lars Magne Ingebrigtsen - - * message.el (message-required-headers): New variable. - -2002-12-30 Teodor Zlatanov - - * dig.el (query-dig): new function - -2002-12-30 Lars Magne Ingebrigtsen - - * flow-fill.el (fill-flowed): Don't infloop on too long fill - prefixes. - - * dns.el (query-dns): Protect against errors. - - * gnus-msg.el (gnus-article-yanked-articles): New variable. - (gnus-inews-add-send-actions): Mark all answered messages as - answered. - -2002-08-10 Jari Aalto - - * nnmail.el (nnmail-split-it): Added tracing to - `:' split rule - -2002-08-13 Hrvoje Niksic - - * mm-decode.el (mm-mailcap-command): Remove the quotes around '%s' - and "%s" so we don't overquote them. - -2002-08-13 Hrvoje Niksic - - * (mm-display-external): Display the actual command that has been - executed in the echo area. - -2002-12-29 Lars Magne Ingebrigtsen - - * gnus-topic.el (gnus-topic-display-missing-topic): Bind entry. - - * message.el (message-with-reply-buffer): New macro. - (message-fetch-reply-field): Use it. - (message-insert-wide-reply): New command and keystroke. - (message-carefully-insert-headers): New function. - (message-insert-to): Use new function. - - * gnus-topic.el (gnus-topic-display-missing-topic): New function. - (gnus-topic-goto-missing-group): Use it. - - * message.el (message-required-news-headers): Removed Lines. - (message-reply): Don't insert References first. - (message-followup): Ditto. - (message-make-references): New function. - (message-followup): Set message-reply-headers before generating - the buffer stuff. - -2002-12-29 Jesper Harder - - * mml.el (mml-generate-mime-1): Reverse the order of - encoding/flowing. - -2002-12-29 Lars Magne Ingebrigtsen - - * nnmail.el (nnmail-expiry-target-group): Mark articles as read - after moving them. - - * gnus-sum.el (gnus-summary-dummy-line-format): Update format to - fit with newer standard format. - (gnus-summary-make-false-root-always): New variable. - (gnus-gather-threads-by-subject): Use it. - - * message.el (message-get-reply-headers): Take an address list - optional argument. - -2002-12-28 Lars Magne Ingebrigtsen - - * gnus.el (gnus-keep-backlog): Change default to 20. - - * gnus-agent.el (gnus-agent-check-overview-buffer): Start from - start. - (gnus-agent-check-overview-buffer): Remove negative article - numbers. - - * nnmail.el (nnmail-split-fancy-with-parent-ignore-groups): Doc fix. - (nnmail-cache-ignore-groups): Doc fix. - - * nnimap.el (nnimap-debug): Made into a flag and defcustomed. - (nnimap-debug-buffer): New variable. - (nnimap-debug): Use it. - -2002-12-28 Lars Magne Ingebrigtsen - - * gnus.el (gnus-summary-high-uncached-face): New color scheme. - -2002-12-28 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-agent-check-overview-buffer): Sort lines if - they aren't already sorted. - -2002-12-28 Jesper Harder - - * message.el (message-mode-menu): Add ellipses to menu items - expecting user interaction. - (message-mode-field-menu): do. - -2002-12-26 Jesper Harder - - * gnus-sum.el (gnus-summary-highlight-line): Don't bind `list' -- - it isn't used any more. - -2002-12-22 Jesper Harder - - * binhex.el (binhex-decoder-program): Fix docstring. - -2002-12-21 Kai Gro,A_(Bjohann - - * 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 - - * gnus-int.el (gnus-request-update-info): nnchoke-r-u-i might not - return the info object. - -2002-12-18 Paul Jarc - - * gnus-int.el (gnus-request-update-info): Artificially add - (1 . (1- min)) to the read range, in case the backend doesn't - store marks for nonexistent articles. - -2002-12-17 Katsumi Yamaoka - - * binhex.el (binhex-insert-char): Eval-and-compile. - -2002-12-17 Jesper Harder - - * lpath.el: Add tool-bar-local-item-from-menu. - - * message.el (message-tool-bar-local-item-from-menu): New function. - (message-tool-bar-map): Use it. - -2002-12-14 Jesper Harder - - * gnus-uu.el (gnus-uu-digest-headers): Mention nil value in docstring. - - * gnus-art.el (gnus-article-header-rank): Last header in - gnus-sorted-header-list should have higher rank than non-members. - -2002-12-13 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-close-agent): Don't blank out the list of - covered methods. - -2002-12-12 Kai Gro,A_(Bjohann - - * nntp.el (nntp-with-open-group-first-pass): Do not wrap in - eval-when-compile. Suggested by 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 - even though no headers may have been fetched - (gnus-agent-fetch-group-1, and perhaps others, require this - behavior). - (gnus-agent-fetch-group-1): Fetch articles in chucks so that the - server buffer is constrained by gnus-agent-max-fetch-size. - Multiple chunks in the same group may perform arbitrarily large - updates. - -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 - - * gnus.el (gnus-summary-high-uncached-face, - gnus-summary-normal-uncached-face, gnus-summary-low-uncached-face) - New faces. - - * gnus-agent.el (gnus-agent-downloaded-article-face): REMOVED. I - added this on 2002-11-23 but it just wasn't working out as - intended. The idea isn't entirely dead, three new faces - gnus-summary-*-uncached-face are being added to gnus.el to provide - the basis for an improved implementation. - (gnus-agent-read-servers): Undo the change made on 2002-11-23. The - proper file to open is lib/servers. - (gnus-summary-set-agent-mark): Expanded documentation. Unmarking - (i.e. removing the article from gnus-newsgroup-downloadable) will - now restore the article's default mark rather than simply setting - no mark. - (gnus-agent-get-undownloaded-list): Corrected documentation. - Added code to set new summary local variable, - gnus-newsgroup-agentized. Reworked impl so that it doesn't create - a temporary list. No longer sets gnus-newsgroup-downloadable. - (gnus-agent-summary-fetch-group): Keep gnus-newsgroup-undownloaded - up to date. Call new gnus-summary-update-download-mark to keep - summary buffer up-to-date. - (gnus-agent-fetch-selected-article): Keep - gnus-newsgroup-undownloaded up to date. - (gnus-agent-fetch-articles): Return list of articles that were - successfully fetched. - (gnus-agent-check-overview-buffer): No more thingatpt. - (gnus-agent-expire): No longer deletes NOV entries of unread - articles. - (gnus-agent-unread-articles): New function. - (gnus-agent-regenerate-group): The article number must be - terminated by a tab character. Added more messages to report - repairs. Inhibit quits while writing changes so it is now safe - have to quit regeneration. Renamed gnus-tmp-downloaded back to - downloaded to 1) resolve the unbound references and 2) avoid - confusing this list with the gnus-tmp-downloaded in gnus-sum.el - - * gnus-art.el (gnus-article-prepare): The agent - downloaded/undownloaded mark is no longer stored as the article's - mark. - - * gnus-salt.el (gnus-tree-highlight-node): Added uncached as - gnus-summary-highlight may use it. Added downloaded as - gnus-summary-highlight was using it. - - * gnus-sum.el (gnus-undownloaded-mark): Changed from ?@ to ?- as - the download mark now follows Kai's +/- convention. - (gnus-downloaded-mark): Added ?+ mark. - (gnus-summary-highlight): Added rules to select - gnus-summary-high-uncached-face, - gnus-summary-normal-uncached-face, and - gnus-summary-low-uncached-face. Removed the - gnus-agent-downloaded-article-face. - (gnus-summary-line-format-alist): Implemented the download flag - format (?O) as named in the manual. This implementation displays - either gnus-undownloaded-mark, gnus-downloaded-mark, or - gnus-no-mark. - (gnus-newsgroup-agentized): New local variable that identifies - which groups are agentized. While the agent is now on by default, - you don't have to agentize every server that you use. - (gnus-update-summary-mark-positions): Completed support for the - download type of mark. - (gnus-summary-insert-line): Added undownloaded to the parameters. - (gnus-summary-prepare-threads): Set gnus-tmp-downloaded for - reference by the gnus-summary-line-format-spec. - - * nntp.el (nntp-with-open-group): This macro handles dropped or - broken connections by opening a new connection and repeating the - failed command. - (nntp-retrieve-headers-with-xover): Some NNTP servers respond to - XOVER commands preceeding the active articles with the nov entry - of the first available article. When gnus connected to such a - server, the unexpected nov entry would result in duplicate lines - in the agent's overview file. This patch fixes the duplicate - lines problem and improves performance by skipping over all - articles IDs that preceed the first nov entry in the server's - reply. - -2002-12-11 Katsumi Yamaoka - - * gnus-sum.el (gnus-tmp-downloaded): New internal variable. - (gnus-summary-highlight): Use it instead of `downloaded'. - (gnus-summary-highlight-line): Ditto. - - * gnus-agent.el (gnus-agent-regenerate-group): Ditto. - -2002-12-11 Lars Magne Ingebrigtsen - - * gnus.el (gnus-variable-list): Add gnus-agent-covered-methods. - - * gnus-agent.el (gnus-agent-check-overview-buffer): Remove debug - calls. - - * gnus-sum.el (gnus-summary-highlight-line): Don't set the - downloaded variable if we're in an uncovered group. - - * gnus-agent.el (gnus-agent-downloaded-article-face): Change the - font to soemthing less noticeable. - (gnus-agent-group-covered-p): New function. - -2002-12-09 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-braid-nov): Remove corrupted lines. - Because of an unknown bug, the group buffer is saved in .overview - file. - -2002-12-09 Kai Gro,A_(Bjohann - - * nntp.el (nntp-send-command): Braino in last commit. Replace - `and' with `or'. - -2002-12-08 Kai Gro,A_(Bjohann - - * nntp.el (nntp-send-command): Assume that echo does not happen - when nntp-open-connection-function is nntp-open-network-stream. - Suggested by Sebastian D.B. Krause . - -2002-12-07 ShengHuo ZHU - - * nnslashdot.el (nnslashdot-retrieve-headers-1): Update the parser. - -2002-12-06 Paul Jarc - - * nnmaildir.el (nnmaildir-request-group): bugfix: don't erase - nntp-server-buffer if we aren't going to write to it. - -2002-12-04 Katsumi Yamaoka - Trivial patch from Itai Zukerman . - - * mm-decode.el (mm-w3m-safe-url-regexp): Fix parenthesis. - -2002-12-04 Katsumi Yamaoka - - * rfc2047.el (rfc2047-decode-region): Remove newlines between - decoded words. - -2002-12-03 Kai Gro,A_(Bjohann - - * gnus.el (fboundp): After loading mm-util, make sure it was the - right one. - -2002-11-29 Kai Gro,A_(Bjohann - - * gnus-art.el (gnus-inhibit-mime-unbuttonizing): Moved here from - gnus-sum. Made into a user option. - - * gnus-sum.el (gnus-simplify-ignored-prefixes) - (gnus-summary-mark-article-as-unread) - -2002-11-29 ShengHuo ZHU - - * time-date.el (date-to-time): Typo. - - * parse-time.el: Typo. - - * nnsoup.el (nnsoup-retrieve-headers): Typo. - - * nnmail.el (nnmail-split, nnmail-process-unix-mail-format): Typos. - - * nnimap.el: - (nnimap-split-rule, nnimap-find-minmax-uid): Typos. - - * mm-encode.el (mm-safer-encoding): Typo. - - * messcompat.el: Typo. - - * message.el (message-face-alist): Typo. - - * imap.el (imap-interactive-login, imap-open): Typos. - - * ietf-drums.el (ietf-drums-text-token, ietf-drums-qtext-token): Typos. - - * gnus.el: Typo. - - * gnus-win.el (gnus-configure-frame): Typo. - - * gnus-util.el (gnus-atomic-progn-assign): Typo. - - * gnus-topic.el (gnus-topic-sort-topics): Typo. - - * gnus-sum.el (gnus-summary-article-number) - (gnus-summary-read-group-1, gnus-summary-mark-article) - (gnus-summary-fetch-faq, gnus-refer-article-methods): Typos. - - * gnus-mule.el (gnus-mule-add-group): Typo. - - * gnus-mlspl.el (gnus-group-split-fancy): Typo. - - * gnus-group.el (gnus-group-fetch-faq): Typo. - - * gnus-art.el (gnus-decode-header-methods): Typo. - - * flow-fill.el: Typo. - -2002-11-19 Stefan Monnier - - * binhex.el (binhex-decode-region): Don't hardcode point-min == 1. - -2002-11-29 Kai Gro,A_(Bjohann - - * gnus-sum.el (gnus-simplify-ignored-prefixes) - (gnus-summary-mark-article-as-unread) - (gnus-mark-article-as-unread, gnus-summary-highlight-line): - Reformatting to avoid long lines. - (gnus-inhibit-mime-unbuttonizing): Moved to gnus-art. - -2002-11-28 Daiki Ueno - - * gnus-agent.el (gnus-agent-fetch-group-1): Article numbers should - be accessed through `mail-header-number'. - -2002-11-27 Kevin Greiner - - * gnus-sum.el (gnus-summary-insert-old-articles): No longer passes - compressed range to gnus-summary-insert-articles. - -2002-11-26 Kevin Ryde - - * gnus-art.el (gnus-mime-copy-part): Look for filename - parameter under content-disposition, not content-type. - - * gnus-sum.el (gnus-summary-find-uncancelled): New function. - (gnus-summary-reselect-current-group): Use it. - -2002-11-26 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-uncached-articles): if - gnus-agent-load-alist fails, return ARTICLES. - - * nnrss.el (nnrss-group-alist): Update the link of Jabber. - -2002-11-26 Kai Gro,A_(Bjohann - - * gnus-sum.el (gnus-summary-insert-old-articles): Remove - superfluous function call. - (gnus-summary-catchup-all, gnus-summary-catchup-all-and-exit): - Add warning to docstring. - -2002-11-26 Katsumi Yamaoka - - * gnus-agent.el: Autoload number-at-point instead. - (gnus-agent-check-overview-buffer): No warning for deactivate-mark. - -2002-11-26 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-check-overview-buffer): Explicitly - require thingatpt (for number-at-point) and protect against - deactivate-mark being unbound (on XEmacs). - -2002-11-25 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-check-overview-buffer): Make debugger - print message on entry. - - From Kevin Greiner . - - * gnus-range.el (gnus-range-difference): New function. - * gnus-sum.el (gnus-summary-insert-old-articles): Use it. - -2002-11-24 Kai Gro,A_(Bjohann - - * gnus-sum.el (gnus-summary-insert-old-articles): Use - gnus-remove-from-range instead of gnus-range-difference which - doesn't exist. - -2002-11-23 Kai Gro,A_(Bjohann - From Kevin Greiner . - - * gnus-agent.el (gnus-agent-downloaded-article-face): New face, - used for showing which articles have been downloaded. - (gnus-agent-article-alist): Format change. Add documentation. - (gnus-agent-summary-mode-map): New keybinding `J s' for fetching - process-marked articles. - (gnus-agent-summary-fetch-series): Command for `J s'. Articles - in the series are individually fetched to minimize lose of - content due to an error/quit. - (gnus-agent-synchronize-flags-server, gnus-agent-add-server): Use - gnus-message instead of message. - (gnus-agent-read-servers): Use file lib/methods instead of - lib/servers. TODO: Why? - (gnus-summary-set-agent-mark): Adapt to new agent-alist format. - (gnus-agent-get-undownloaded-list): Remove articles that appear to - come from the agent. This means that they are not downloaded. - (gnus-agent-fetch-selected-article): Don't use history. - (gnus-agent-save-history, gnus-agent-enter-history) - (gnus-agent-article-in-history-p, gnus-agent-history-path): - Removed function; history is not used anymore. - (gnus-agent-fetch-articles): Fix handling of crossposted articles. - (gnus-agent-crosspost): Started rewrite then realized that a typo - in gnus-agent-fetch-articles ensures that this function is never - called. This will need to be fixed later. - (gnus-agent-check-overview-buffer): Some sanity checks on the - agent overview buffer. This is a safety net used during - development. - (gnus-agent-flush-cache): The gnus-agent-article-alist format has - changed, write a number to the file indicating this. - (gnus-agent-fetch-headers): Rewrite to respect - gnus-agent-consider-all-articles without relying on the - `.fetched' files. Make it fast. - (gnus-agent-braid-nov): Change resulting from - gnus-agent-fetch-headers change. - (gnus-agent-load-alist, gnus-agent-save-alist): Don't use - `.fetched' files. - (gnus-agent-read-agentview): New function, used by - gnus-agent-load-alist. - (gnus-agent-load-fetched-headers): Remove. - (gnus-agent-save-alist): Rewrite to accomodate new format. - (gnus-agent-fetch-group-1): Make sure list of articles is in the - same order as in gnus-newsgroup-headers. - (gnus-agent-expire): Document and implement extra args ARTICLES, - GROUP, FORCE. Do not restrict usage. - (gnus-agent-uncached-articles): New function. - (gnus-agent-retrieve-headers): Use it. - (gnus-agent-regenerate-group): No longer needs to be called from - gnus-agent-regenerate. Individual groups may be regenerated. The - regeneration code now fixes duplicate, and mis-ordered, NOV entries. - The article fetch dates are validated in the article alist. The - article alist is pruned of entries that do not reference existing - NOV entries. All changes are computed then applied with - inhibit-quit bound to t. As a result, it is now safe to quit out of - regeneration. The optional clean parameter has been replaced with - an optional reread parameter. Clean is no longer necessary as - regeneration gets the appropriate setting from - gnus-agent-consider-all-articles. The new reread parameter will - result in fetched, or all, articles being marked as unread. - (gnus-agent-regenerate): Removed code to regenerate the history - file as it is no longer used. - - * gnus-start.el (gnus-make-ascending-articles-unread): New - function, for efficient mass-marking. - - * gnus-sum.el (gnus-summary-highlight): Use new face for - downloaded articles. - (gnus-article-mark): Prefer to indicate read/unread status over - downloaded status. - (gnus-summary-highlight-line-0): New function, maybe rehighlights - line. - (gnus-summary-highlight-line): Use new face for downloaded - articles. - (gnus-summary-insert-old-articles): Improved performance by - replacing the initial LIST of older articles with a compressed - RANGE of older articles. Some servers appear to lie about - their active range so the original list could contain millions - of article numbers. The range is not expanded into a list - until the optional ALL parameter has been applied. - -2002-11-18 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-category-mode): Typo in doc string. - -2002-11-21 Teodor Zlatanov - - * spam.el: - added patch from Andreas Fuchs to prevent apply errors - - * spam.el: added `M s t' and `M s x' key mappings - -2002-11-20 Simon Josefsson - - * gnus-sum.el (gnus-summary-morse-message): Narrow to body. - -2002-11-19 Simon Josefsson - - * gnus-sum.el (gnus-summary-morse-message): Load - morse.el (unmorse-region not autoloaded in Emacs 20 nor XEmacs). - (unmorse-region): Autoload it instead. - -2002-11-18 Simon Josefsson - - * gnus-sum.el (gnus-summary-morse-message): New function. - (gnus-summary-wash-map): Bind to `W m'. - (gnus-summary-make-menu-bar): Add. - - * nnimap.el (nnimap-request-expire-articles): Compress sequence - before storing \Deleted mark on expired articles. - -2002-11-17 Shenghuo Zhu - Trivial patch from Markus Rost - - * gnus-sum.el (gnus-summary-goto-unread): Doc fix - escape open - parens in column 0. - -2002-11-17 Juanma Barranquero - - * nnweb.el (nnweb-google-create-mapping): Fix typo. - - * nnlistserv.el (nnlistserv-kk-create-mapping): Likewise. - - * gnus-nocem.el (gnus-nocem-liberal-fetch): Likewise. - -2002-11-17 ShengHuo ZHU - - * message.el (message-set-auto-save-file-name): Use - make-directory, to avoid the dependence on gnus-util. - -2002-11-16 Simon Josefsson - - * nnimap.el (nnimap-callback-callback-function): - (nnimap-callback-buffer): Removed, these cannot be global but must - be embedded into the callback. - (nnimap-make-callback): New. Embedd article number, callback and - buffer in function. - (nnimap-callback, nnimap-request-article-part): Update. - -2002-11-15 Katsumi Yamaoka - - * mml.el (mml-preview): Bind message-this-is-mail if it is mail. - -2002-11-13 Kai Gro,A_(Bjohann - - * gnus.el (gnus-summary-line-format): Document %C. - -2002-11-11 Simon Josefsson - - * pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify): Display - output when called interactively. - -2002-11-08 Katsumi Yamaoka - - * gnus-art.el (gnus-article-edit-exit): Kill local variables. - - * message.el (message-draft-coding-system): Improve comment; use - mm-auto-save-coding-system for the default value. - - * nndraft.el (nndraft-request-article): Revert to the state before - 2002-10-29; regexp-quote mail-header-separator. - -2002-11-06 Jesper Harder - - * gnus-draft.el (gnus-draft-setup): Set gnus-message-group-art to - allow editing of drafts from an nnvirtual group. - -2002-11-06 Katsumi Yamaoka - - * nndraft.el (nndraft-request-article): Replace emacs-mule with - mm-auto-save-coding-system. - - * message.el (message-draft-coding-system): Default to - iso-2022-7bit. - - * mm-util.el (mm-auto-save-coding-system): Undo last change to - restore the default value to emacs-mule or escape-quoted. - -2002-11-05 Katsumi Yamaoka - - * gnus-art.el (gnus-article-encrypt-body): Inhibit encrypting of - a delayed or a queued article as well as a draft. - - * gnus-sum.el (gnus-summary-edit-article): Inhibit editing of a - delayed or a queued article in the raw format; treat a delayed - article as a raw article as well as a draft. - (gnus-summary-setup-default-charset): Clear gnus-newsgroup-charset - for the delayed group. - - * nndraft.el (nndraft-request-article): Ignore auto save files for - a delayed or a queued article; don't bother to decode a queued - article; don't bind nnmail-file-coding-system for a queued article. - - * nnmail.el (nnmail-split-fancy-with-parent): Ignore the delayed - and the queue group. - -2002-11-04 Jesper Harder - - * gnus-group.el (gnus-group-delete-group): - gnus-cache-active-hashtb might be void. - -2002-11-02 Simon Josefsson - - * pgg-gpg.el (pgg-gpg-encrypt-region): Makes PGG respect the - setting of the default user ID. From Raymond Scholz - . - -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 - * 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. - -2002-10-31 Kai Gro,A_(Bjohann - - * gnus-util.el (gnus-user-date-format-alist): Clarify and correct - documentation. - -2002-10-28 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-fetched-headers) - (gnus-agent-load-fetched-headers) - (gnus-agent-save-fetched-headers): Remove variable and two - functions. Kevin Greiner's version of gnus-agent-fetch-headers - works better. - (gnus-agent-fetch-headers): New implementation from Kevin - Greiner. Uses gnus-agent-article-alist to store information - about fetched messages which aren't on the server anymore. The - trick is to return a list of considered messages to the caller, - but to only fetch those which haven't been fetched yet. - -2002-10-30 Simon Josefsson - - * pgg-def.el (pgg-passphrase-cache-expiry): New, defcustom. - - * pgg.el (pgg-passphrase-cache-expiry): Removed. - -2002-10-30 TSUCHIYA Masatoshi - - * mm-view.el (mm-w3m-local-map-property): Make it work with older - versions of emacs-w3m than 1.3.3. - - * lpath.el: Bind w3m-minor-mode-map. - - * mm-view.el (mm-w3m-mode-command-alist) - (mm-w3m-mode-dont-bind-keys, mm-w3m-mode-ignored-keys): Removed. - (mm-w3m-mode-map): Undefined for Emacs21 and XEmacs. - (mm-setup-w3m): Simplified. - (mm-w3m-local-map-property): New function. - (mm-inline-text-html-render-with-w3m): Use it. - - * gnus-art.el (gnus-article-wash-html-with-w3m): Use - mm-w3m-local-map-property. - -2002-10-29 Katsumi Yamaoka - - * mm-util.el (mm-auto-save-coding-system): Default to - iso-2022-7bit. - - * nndraft.el (nndraft-request-article): Decode an article using - the coding-system emacs-mule if it seems to have been saved using - emacs-mule. - (nndraft-request-replace-article): Use message-draft-coding-system - instead of mm-auto-save-coding-system for the draft or delayed - group. - -2002-10-28 Josh - - * mml.el (mml-mode-map): Fixed keybindings for mml-secure-* - functions. - -2002-10-28 Katsumi Yamaoka - From mah@everybody.org (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 - mm-url-use-external. - -2002-10-26 Kai Gro,A_(Bjohann - - * nnimap.el (nnimap-request-article-part): Try harder to show - group name in debugging message. - -2002-10-25 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-save-fetched-headers): Create - directory if it doesn't exist. - (gnus-agent-fetch-headers): Remove old cruft that tried to - abstain from downloading articles more than once if - gnus-agent-consider-all-articles was true. This is now done - properly via the .fetched files. - -2002-10-25 Katsumi Yamaoka - - * nndraft.el (nndraft-request-article): Treat delayed articles - like drafts. - -2002-10-24 Katsumi Yamaoka - - * gnus-agent.el (gnus-agent-load-alist): Fix parenthesis. - -2002-10-24 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-save-alist, gnus-agent-load-alist): - Remove unused optional arg DIR and corresponding code. - - * nnimap.el (nnimap-request-article-part): Include group name in - debugging output. - -2002-10-24 Paul Jarc - - * gnus-agent.el (gnus-agent-fetch-headers): Add some comments. - -2002-10-23 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-fetched-headers): New variable, - contains range of headers that have been fetched by the agent - already. Compare gnus-agent-article-alist. - (gnus-agent-file-header-cache): Like - gnus-agent-file-loading-cache, but for gnus-agent-fetched-headers. - (gnus-agent-fetch-headers): Improve comment. Revert to old - seen/recent logic. - Remember which headers have been fetched before and don't fetch - them again the next time round. - (gnus-agent-load-fetched-headers) - (gnus-agent-save-fetched-headers): New functions, for remembering - which headers have been fetched before. - -2002-10-23 Katsumi Yamaoka - - * lpath.el: Remove useless bindings. - -2002-10-22 Jesper Harder - - * gnus-sum.el (gnus-summary-execute-command): Disable visual - features while searching. - -2002-10-22 TSUCHIYA Masatoshi - - * pgg.el (pgg-snarf-keys): Do not refer unbinded local variables. - -2002-10-22 Simon Josefsson - - * pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify) - (pgg-snarf-keys): Add. - -2002-10-22 Katsumi Yamaoka - - * lpath.el: Fbind bbdb-records. - - * spam.el: Don't autoload bbdb-records. - -2002-10-22 Katsumi Yamaoka - - * spam.el: Set autoload for bbdb-records after loading bbdb-com to - prevent inf-loop. - -2002-10-22 Lars Magne Ingebrigtsen - - * nnslashdot.el: Removed some test lines. - More test. - -2002-10-21 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-fetch-headers): Remove articles that - are known to be downloaded already. - -2002-10-21 Lars Magne Ingebrigtsen - - * mm-view.el (mm-text-html-renderer-alist): Add w3m-standalone. - (mm-text-html-washer-alist): Ditto. - -2002-10-19 TSUCHIYA Masatoshi - - * nnheader.el (nnheader-remove-body): Fix an error of detecting - boundary between headers and body. - * nnml.el (nnml-parse-head): Ditto. - -2002-10-20 Lars Magne Ingebrigtsen - - * nnslashdot.el (nnslashdot-generate-active): Ignore any bogus - entries. - - * gnus-group.el (gnus-fetch-group): Allow an optional - specification of the articles to select. - - * gnus-srvr.el (gnus-server-prepare): Removed superfluous cdr. - -2002-10-20 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-fetch-group-1): After fetching - headers from the group, update variable `articles' to contain - only those numbers where headers exist. (When fetching all - articles in a group, Gnus creates lots of numbers where there is - no articles.) - -2002-10-20 Steve Youngs - - * pgg-parse.el (pgg-parse-public-key-algorithm-alist): XEmacs - doesn't have the 'alist custom type, use cons cells instead. - (pgg-parse-symmetric-key-algorithm-alist): Ditto. - (pgg-parse-hash-algorithm-alist): Ditto. - (pgg-parse-compression-algorithm-alist): Ditto. - (pgg-parse-signature-type-alist): Ditto. - - * pgg-gpg.el (pgg-gpg-extra-args): Fix custom mismatch. - - * pgg-pgp5.el (pgg-pgp5-extra-args): Ditto. - - * pgg-pgp.el (pgg-pgp-extra-args): Ditto. - -2002-10-19 Simon Josefsson - - * nnimap.el (nnimap-open-server): Check imap-state in IMAP server - buffer. - -2002-10-18 Kai Gro,A_(Bjohann - - * gnus-spec.el (gnus-make-format-preserve-properties) - (gnus-xmas-format, gnus-parse-simple-format): Preserve text - properties also on XEmacs. `gnus-xmas-format' is like format but - preserves text properties on XEmacs (though it only understands - simple format specs). The variable - `gnus-make-format-preserve-properties' controls whether the - function is used, and is checked in `gnus-parse-simple-format'. - Patch by Paul Moore . - - * gnus-agent.el (gnus-agent-fetch-articles): More debugging - output. - (gnus-agent-consider-all-articles): New variable. - (gnus-agent-get-undownloaded-list): Comment that marks todo item. - (gnus-agent-fetch-headers): Depending on - gnus-agent-consider-all-articles, maybe get all articles. - (gnus-category-predicate-alist, gnus-agent-read-p): New predicate - `read'. - (gnus-predicate-imples-unread): New function. - (gnus-agent-fetch-headers): Optimize to call - gnus-list-of-unread-articles if that is sufficient. - Check unseen and recent instead of seen and recent. - (gnus-agent-fetch-headers): Abstain from calling - gnus-list-range-intersection if range (a . b) would have (> a b). - -2002-10-18 Katsumi Yamaoka - - * message.el (message-send-mail): Make it possible to perform - edebug-defun. - -2002-10-18 Simon Josefsson - - * gnus-art.el (gnus-button-man-handler): Change default to - `manual-entry' (defined in both emacsen). - (gnus-button-man-handler): Remove emacsen difference and use - `manual-entry'. - -2002-10-18 Katsumi Yamaoka - - * spam.el: Wrap autoload settings for bbdb-records, - executable-find and ifile-spam-filter with eval-and-compile. - (spam-display-buffer-contents): Remove. - (spam-bogofilter-score): Merge spam-display-buffer-contents. - -2002-10-17 Ted Zlatanov - - * spam.el (spam-display-buffer-contents): New function. - (spam-bogofilter-score): use spam-display-buffer-contents, patch - from Katsumi Yamaoka . - -2002-10-17 TSUCHIYA Masatoshi - - * nnheader.el (nnheader-parse-naked-head): New function. - (nnheader-parse-head): Use the above function, in order to handle - continuation lines properly. - (nnheader-remove-body): New function. - (nnheader-remove-cr-followed-by-lf): New function. - (nnheader-ms-strip-cr): Use the above function. - - * gnus-agent.el (gnus-agent-regenerate-group): Call - `nnheader-remove-body'; use `nnheader-parse-naked-head' instead of - `nnheader-parse-head'. - * gnus-cache.el (gnus-cache-possibly-enter-article): Ditto. - - * gnus-msg.el (gnus-inews-yank-articles): Do not unfold - continuation lines by itself; call `nnheader-parse-naked-head' - instead of `nnheader-parse-head'. - * nndiary.el (nndiary-parse-head): Ditto. - * nnfolder.el (nnfolder-parse-head): Ditto. - * nnimap.el (nnimap-retrieve-headers-progress): Ditto. - * nnmaildir.el (nnmaildir--update-nov): Ditto. - * nnml.el (nnml-parse-head): Ditto. - -2002-10-17 Steve Youngs - - * gnus-art.el (gnus-button-man-handler): Add 'manual-entry' for - XEmacs, default to it if featurep 'xemacs. - -2002-10-16 Katsumi Yamaoka - - * spam-stat.el: Check for the existence of hash functions instead - of the Emacs version to decide whether to load cl. Suggested by - Kai Gro,A_(Bjohann. - -2002-10-15 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-fetch-selected-article): Open history - if it isn't open yet. - -2002-10-14 Katsumi Yamaoka - - * gnus-group.el: Require mm-url only when compiling. - (gnus-group-fetch-charter): Require mm-url. - - * spam-stat.el: Require cl for the functions gethash, - hash-table-count, make-hash-table and mapc for Emacs 20. - (puthash): Alias to cl-puthash for Emacs 20. - (with-syntax-table): New macro for Emacs 20. - -2002-10-12 Jesper Harder - - * gnus-spec.el (gnus-pad-form): Use gnus-string-width-function. - -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. - -2002-10-12 Simon Josefsson - - * message.el (message-beginning-of-line): New variable. - (message-beginning-of-line): Use it. - -2002-10-11 Ted Zlatanov - - * spam.el: more compilation fixes for BBDB - - * spam-stat.el added code from Alex Schroeder - (spam-stat-reduce-size): Interactive. - (spam-stat-reset): New function. - (spam-stat-save): Interactive. - -2002-10-11 Katsumi Yamaoka - - * gnus.el: Autoload gnus-delay-initialize. - - * message.el: Autoload gnus-delay-article. - -2002-10-11 Jesper Harder - - * gnus-spec.el (gnus-balloon-face-function): Use the help-echo - text property in Emacs. - -2002-10-11 Simon Josefsson - - * mml2015.el (mml2015-pgg-decrypt, mml2015-pgg-clear-decrypt) - (mml2015-pgg-verify, mml2015-pgg-clear-verify): Remove CR. - - * mml1991.el (mml1991-pgg-sign): Remove CR. - -2002-10-10 Simon Josefsson - - * mml2015.el (mml2015-pgg-decrypt): Set gnus details even when - decrypt failed. - (mml2015-trust-boundaries-alist): Removed. - (mml2015-gpg-extract-signature-details): Don't use it. - (mml2015-unabbrev-trust-alist): New. - (mml2015-gpg-extract-signature-details): Use it. - -2002-10-10 Ted Zlatanov - - * spam.el: compilation fixes, spam-check-bbdb function is nil if no - BBDB installed - - * spam-stat.el: added code from Alex Schroeder to do - statistical analysis of spam in Lisp only - -2002-10-10 Simon Josefsson - - * nnimap.el (nnimap-open-server): Re-open server if it isn't in - auth, selected or examine state. - - * pgg-gpg.el (pgg-gpg-verify-region): Filter out stuff into output - buffer and error buffer depending on type of information. - - * mml2015.el (mml2015-gpg-extract-signature-details): Parse - --status-fd stuff even if gpg.el is not used (revert earlier - change). - (mml2015-pgg-{clear-,}verify): Store both output and errors as - gnus details. - (mml2015-pgg-{clear-,}verify): Extract signature info from errors - buffer. - - * pgg.el (pgg-verify-region): Use it. - - * pgg-def.el (pgg-query-keyserver): New variable. - - * pgg.el (pgg-decrypt-region): Bind pgg-default-user-id to - key-identifier in packet. Is this a good idea? - - * mml.el (mml-mode-map): Add security commands that operates on - MIME parts. - (mml-menu): And menu items for them. - - * mml1991.el (mml1991-pgg-encrypt): Remove headers. - - * mml.el (mml-parse-1): Support sender in #secure tags. - - * mml1991.el (mml1991-pgg-sign): Only use message-sender if it is - defined. - - * mml-sec.el (mml-smime-encrypt-buffer): Warn about combined signing. - (mml-pgp-encrypt-buffer): Support combined signing. - - * mml1991.el (mml1991-mailcrypt-encrypt): Support combined signing. - (mml1991-gpg-encrypt): Ditto. - (mml1991-pgg-encrypt): Ditto. - (mml1991-encrypt): Pass sign parameter. - - * mml-sec.el (mml-signencrypt-style-alist): Defcustom. - (mml-signencrypt-style): Mention the variable. - -2002-10-09 Simon Josefsson - - * mml1991.el (mml1991-pgg-sign): Bind pgg-default-user-id, not - pgg-gpg-user-id. - - * pgg.el (pgg-insert-url-with-w3): Ignore errors. - (pgg-fetch-key-function): Nil if w3 is not installed. - -2002-10-08 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-fetch-selected-article): Bind - gnus-agent-current-history. - -2002-10-06 Simon Josefsson - - * imap.el (imap-parse-status): Don't use read to read token. - -2002-10-05 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-fetch-selected-article): Do nothing - for methods not covered by the agent, and when unplugged. - -2002-10-05 Simon Josefsson - - * pgg-gpg.el (pgg-gpg-encrypt-region): Query passphrase when - signing. - - * gnus-agent.el (gnus-agent-read-servers): If getting method from - a named server fails, ignore the server. - - * mml1991.el (mml1991-pgg-sign): Do QP. - - * pgg-gpg.el (pgg-gpg-encrypt-region): Make signencrypt really - work. - -2002-10-04 Simon Josefsson - - * pgg-gpg.el (pgg-gpg-encrypt-region): Make signencrypt work. - - * pgg-pgp.el (pgg-pgp-verify-region): Inline - binary-write-decoded-region from MEL. - - * pgg.el (pgg-encrypt-region): Support sign. - - * pgg-gpg.el (pgg-gpg-encrypt-region): Ditto. - - * mml2015.el (mml2015-pgg-encrypt): Ditto. - - * pgg.el, pgg-def.el, pgg-parse.el, pgg-gpg.el, pgg-pgp5.el, - pgg-pgp6.el: Moved from ../pgg/. Modifications compared to EMIKO - branch where PGG was taken from in the ChangeLog entries below. - -2002-10-01 Simon Josefsson - - * pgg-pgp.el: Don't require mel. Don't use luna. - (pgg-scheme-pgp-instance, pgg-make-scheme-pgp): Remove. - (pgg-pgp-process-region): Use expand-file-name instead of concat. - (pgg-pgp-process-region): Don't use binary-funcall. - - * pgg-pgp5.el (pgg-pgp5-process-region): Don't use binary-funcall. - - * pgg-gpg.el (pgg-gpg-process-region): Use expand-file-name - instead of concat. - - * pgg-pgp5.el (pgg-pgp5-process-region): Ditto. - -2002-09-29 Simon Josefsson - - * pgg-parse.el (pgg-char-int, pgg-string-as-unibyte): Prevent byte - compile warnings. - - * pgg.el (pgg-decrypt-region): Don't parse packet. - - * pgg.el, pgg-gpg.el, pgg-pgp5.el: Don't depend on luna.el. - -2002-09-29 Daiki Ueno - - * pgg.el: Remove dependency on calist.el. - -2002-09-28 Simon Josefsson - - * pgg.el (pgg-temporary-file-directory): New variable. - (pgg-verify-region): Don't assume set-buffer-multibyte exists. - - * pgg-pgp5.el (pgg-pgp5-process-region, pgg-scheme-verify-region) - (pgg-scheme-snarf-keys-region): Use pgg-temporary-file-directory. - - * pgg-parse.el (pgg-char-int): Defalias. - (pgg-format-key-identifier, pgg-byte-after, pgg-read-byte) - (pgg-read-bytes, pgg-read-body): Use it. - (pgg-decode-packets): Don't use MEL, use base64-*. - (pgg-parse-armor): Don't assume set-buffer-multibyte exists. - (pgg-string-as-unibyte): Defalias. - (pgg-parse-armor-region): Use it. - - * pgg-gpg.el (pgg-gpg-process-region): Use - pgg-temporary-file-directory. - - * luna.el: Don't def-edebug. - - * pgg-pgp5.el (pgg-scheme-verify-region): Inline - binary-write-decoded-region from MEL. - - * pgg-pgp5.el, pgg-gpg.el: Don't require mel. - - * alist.el, calist.el: Don't require product/APEL. - - * pgg-parse.el (top-level): Remove dependency on static.el, - pccl.el, mel.el. - (pgg-parse-crc24, pgg-parse-crc24-string): Only define if - `define-ccl-program' is boundp, instead of using broken. - -2002-10-01 Simon Josefsson - - * message.el (message-required-mail-headers): Remove Lines:. - -2002-10-03 Kai Gro,A_(Bjohann - From 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-group-fetch-control to summary key map and menu. - -2002-10-03 Paul Jarc - - * nnmaildir.el (nnmaildir--group-maxnum-art): fix maximum article - number when there are no articles. - -2002-10-03 Kai Gro,A_(Bjohann - - * gnus-agent.el (gnus-agent-summary-fetch-group): Optional prefix - arg ALL means to fetch all articles, not only downloadable ones. - (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 . - - * gnus-ems.el (gnus-x-splash): Set coding-system-for-read to - raw-text. - -2002-09-30 Ted Zlatanov - - * spam.el: merged changes from pinard@iro.umontreal.ca (Fran,Ag(Bois - Pinard). - Major revamp of the code, documentation is in comments in the file - for now. - -2002-09-30 Simon Josefsson - - * mml2015.el (mml2015-pgg-clear-verify): Verifying in a unibyte - buffer seem to be needed? - -2002-09-29 Simon Josefsson - - * mml1991.el (pgg-output-buffer, pgg-errors-buffer): Prevent byte - compile warnings. - - * mml1991.el (mml1991-function-alist): Add pgg. - (mml1991-pgg-sign, mml1991-pgg-encrypt): New functions. - (mml1991-pgg-encrypt): Fix recipients querying. - -2002-09-28 Simon Josefsson - - * mml2015.el (autoload): Autoload correct files. Trivial patch - from dme@dme.org. - (mml2015-pgg-decrypt, mml2015-pgg-verify): Make sure either nil or - handle is returned. - -2002-09-27 Katsumi Yamaoka - - * gnus-start.el (gnus-fixup-nnimap-unread-after-getting-new-news): - Protect against non-existent of `nnimap-mailbox-info'. - -2002-09-27 Simon Josefsson - - * gnus-start.el (gnus-fixup-nnimap-unread-after-getting-new-news): New. - (gnus-setup-news-hook): Use it. - (gnus-after-getting-new-news-hook): Ditto. - - * nnimap.el (nnimap-fixup-unread-after-getting-new-news): Remove. - -2002-09-27 Katsumi Yamaoka - From Mats Lidell . - - * gnus-art.el (gnus-article-mode-syntax-table): Replace "-" to " ". - -2002-09-27 TSUCHIYA Masatoshi - - * gnus-sum.el (gnus-nov-parse-line): When an error is signaled in - the part to decode encoded words, use raw words instead of decoded - words. - -2002-09-26 ShengHuo ZHU - - * nnimap.el (nnimap-update-unseen): Use gnus-gethash-safe. - - * mm-view.el (mm-w3m-mode-ignored-keys): New variable. - (mm-setup-w3m): Use it. - -2002-09-27 Simon Josefsson - - * gnus-art.el (gnus-article-mode-syntax-table): Make M-. work in - article buffers. - - * nnimap.el (nnimap-fixup-unread-after-getting-new-news): Autoload - it just in case. - (nnimap-update-unseen): New function; update unseen count in - `n-m-info'. - (nnimap-close-group): Call it. - - * gnus-start.el (gnus-setup-news-hook): Add n-f-u-a-g-n-n. - (gnus-after-getting-new-news-hook): Ditto. - - * nnimap.el (nnimap-retrieve-groups): Move the quick mail check - message into verboselevel 9. Change slow mail check message. - (nnimap-retrieve-groups): Use prefixed names in n-mailbox-info. - (nnimap-fixup-unread-after-getting-new-news): New function, to be - used as a hook after getting new mail. - -2002-09-26 Simon Josefsson - - * imap.el (imap-parse-resp-text-code): The UNSEEN value in - SELECT/EXAMINE is first unseen article, not number of unseen - articles. Make them distinct by renaming the former to - `first-unseen' instead of `unseen'. - - * nnimap.el (nnimap-retrieve-groups): Get uidvalidity and unseen - too. - (nnimap-retrieve-groups): Don't used cached data if uidvalidity - changed. - (nnimap-retrieve-groups): Store uidvalidity and unseen data too. - - * gnus-int.el (gnus-server-unopen-status): Defcustom. - - * mml-sec.el (mml-signencrypt-style): Docstring to font-lock - better. - - * mml2015.el (mml2015-pgg-decrypt): Only add security information - if dissecting resulting buffer actually had any information. - -2002-09-26 Katsumi Yamaoka - - * gnus-group.el (gnus-group-sort-by-method): Remove `symbol-name' - because the function `string<' allows symbols. - - * gnus-sum.el (gnus-summary-make-menu-bar): Ditto. - -2002-09-25 ShengHuo ZHU - - * message.el (message-forward-make-body): Revert an early change - because 8-bit utf-8 emails. - -2002-09-25 Bj,Av(Brn Torkelsson - - * gnus-agent.el (gnus-category-line-format): Doc fixes (mostly added - links to Info) - * gnus-art.el (gnus-treat-highlight-signature): - * gnus-art.el (gnus-treat-buttonize): - * gnus-art.el (gnus-treat-buttonize-head): - * gnus-art.el (gnus-treat-emphasize): - * gnus-art.el (gnus-treat-strip-cr): - * gnus-art.el (gnus-treat-unsplit-urls): - * gnus-art.el (gnus-treat-leading-whitespace): - * gnus-art.el (gnus-treat-hide-headers): - * gnus-art.el (gnus-treat-hide-boring-headers): - * gnus-art.el (gnus-treat-hide-signature): - * gnus-art.el (gnus-treat-fill-article): - * gnus-art.el (gnus-treat-hide-citation): - * gnus-art.el (gnus-treat-hide-citation-maybe): - * gnus-art.el (gnus-treat-strip-list-identifiers): - * gnus-art.el (gnus-treat-strip-pgp): - * gnus-art.el (gnus-treat-strip-pem): - * gnus-art.el (gnus-treat-strip-banner): - * gnus-art.el (gnus-treat-highlight-headers): - * gnus-art.el (gnus-treat-highlight-citation): - * gnus-art.el (gnus-treat-date-ut): - * gnus-art.el (gnus-treat-date-local): - * gnus-art.el (gnus-treat-date-english): - * gnus-art.el (gnus-treat-date-lapsed): - * gnus-art.el (gnus-treat-date-original): - * gnus-art.el (gnus-treat-date-iso8601): - * gnus-art.el (gnus-treat-date-user-defined): - * gnus-art.el (gnus-treat-strip-headers-in-body): - * gnus-art.el (gnus-treat-strip-trailing-blank-lines): - * gnus-art.el (gnus-treat-strip-leading-blank-lines): - * gnus-art.el (gnus-treat-strip-multiple-blank-lines): - * gnus-art.el (gnus-treat-unfold-headers): - * gnus-art.el (gnus-treat-fold-headers): - * gnus-art.el (gnus-treat-fold-newsgroups): - * gnus-art.el (gnus-treat-overstrike): - * gnus-art.el (gnus-treat-display-xface): - * gnus-art.el (gnus-treat-display-smileys): - * gnus-art.el (gnus-treat-from-picon): - * gnus-art.el (gnus-treat-mail-picon): - * gnus-art.el (gnus-treat-newsgroups-picon): - * gnus-art.el (gnus-treat-body-boundary): - * gnus-art.el (gnus-treat-capitalize-sentences): - * gnus-art.el (gnus-treat-fill-long-lines): - * gnus-art.el (gnus-treat-play-sounds): - * gnus-art.el (gnus-treat-translate): - * gnus-art.el (gnus-treat-x-pgp-sig): - * gnus-art.el (gnus-mime-button-line-format): - * gnus-art.el (gnus-button-man-level): - * gnus-art.el (gnus-button-emacs-level): - * gnus-cus.el (gnus-group-parameters): - * gnus-gl.el (bbb-build-mid-scores-alist): - * gnus-group.el (gnus-group-line-format): - * gnus-mlspl.el (gnus-group-split-setup): - * gnus-mlspl.el (gnus-group-split): - * gnus-msg.el (gnus-mailing-list-groups): - * gnus-msg.el (gnus-posting-styles): - * gnus-nocem.el (gnus-nocem-issuers): - * gnus-score.el (gnus-score-regexp-bad-p): - * gnus-srvr.el (gnus-server-line-format): - * gnus-topic.el (gnus-topic-line-format): - * gnus.el (gnus-summary-line-format): - * mail-source.el (mail-sources): - * message.el (message-subscribed-address-file): - * nnmail.el (nnmail-split-fancy): - -2002-09-24 Evgeny Roubinchtein - - * mail-source.el(mail-source-run-script): use `functionp' to test - whether the argument `script' is in fact a function. - (mail-sources): adjust the defcustom to allow users to specify a - function or a string as the value of the `:prescript' and - `:postscript' arguments of the `file' and `pop3' mail sources. - -2002-09-25 Paul Jarc - - * nnmaildir.el (nnmaildir--grp-add-art): fix minimum article - number when article 1 does not exist. - -2002-09-25 Kai Gro,b_(Bjohann - - * 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. - (gnus-button-handle-describe-function) - (gnus-button-handle-describe-variable): Doc fix. From Reiner Steib. - (gnus-button-handle-describe-key, gnus-button-handle-apropos) - (gnus-button-handle-apropos-command): Doc fix. From Reiner Steib. - -2002-09-25 Mark A. Hershberger - Trivial patch. - - * nnrss.el (nnrss-save-server-data): Save nnrss-group-alist in - the file. - -2002-09-24 ShengHuo ZHU - - * gnus-start.el (gnus-1): Create nndraft:queue, nndraft:drafts. - -2002-09-24 Simon Josefsson - - * mml2015.el (top-level): Require mm-util for mm-make-temp-file. - (mml2015-use): Prefer PGG if installed. - (mml2015-function-alist): Add PGG wrappers. - (mml2015-gpg-extract-signature-details): Check mml2015-use too. - (mml2015-gpg-extract-signature-details): PGG strips "gpg: " - prefix, make regexp optionally skip it. - (mml2015-pgg-decrypt, mml2015-pgg-clear-decrypt) - (mml2015-pgg-verify, mml2015-pgg-clear-verify, mml2015-pgg-sign) - (mml2015-pgg-encrypt): New functions. - (defvar, autoload): Prevent byte-compile warnings. - -2002-09-24 Katsumi Yamaoka - From TSUCHIYA Masatoshi . - - * gnus-art.el (article-strip-banner): Check for the existence of - from header. - -2002-09-23 Kai Gro,b_(Bjohann - - * 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. - - * nnmaildir.el (nnmaildir--update-nov): fix wrong-type error when - nnmail-extra-headers is non-nil. - -2002-09-23 Paul Jarc - - * nnmaildir.el: Store article numbers persistently. General - revision. - (nnmaildir-request-expire-articles): handle 'immediate and 'never - for nnmail-expiry-wait; delete instead of moving if 'force is - given. - -2002-09-23 Simon Josefsson - Trivial fix from beaker@iavmb.pl (Krzysztof J,Bj(Bdruczyk). - - * smime.el (smime-sign-buffer): Get key and extra certs. - (smime-get-key-with-certs-by-email): Utility function. - -2002-09-21 ShengHuo ZHU - Trivial patch from Micha Wiedenmann - - * gnus-soup.el (gnus-soup-add-article): Mark as read only when the - article exists. - -2002-09-20 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-next-group): Switch to the summary buffer. - -2002-09-20 Kai Gro,b_(Bjohann - From Reiner Steib. - - * gnus-art.el (gnus-button-handle-custom, - gnus-button-handle-mid-or-mail, - gnus-button-handle-describe-{function,variable,key}, - gnus-button-handle-apropos{,command,variable}): New functions. - (gnus-button-prefer-mid-or-mail,gnus-button-guessed-mid-regexp, - gnus-button-{man,emacs,mail}-level): New variables. - (gnus-button-alist): Use the above to buttonize emacs and mail - related links. - -2002-09-18 Juanma Barranquero - - * gnus-int.el (gnus-status-message): Fix spacing. - - * imap.el (imap-continuation): Fix typos. - -2002-09-18 ShengHuo ZHU - - * gnus-msg.el (gnus-configure-posting-styles): Sort results. - - * gnus-art.el (gnus-article-reply-with-original): Correct - with-current-buffer scope. - - * message.el (message-completion-alist): Add Reply-To, From, etc. - -2002-09-18 Simon Josefsson - - * nnimap.el (nnimap-request-expire-articles): Make flag setting - conditional. From Nevin Kapur . - -2002-09-17 Simon Josefsson - - * nnimap.el (nnimap-expiry-target): Don't search for which - articles exists here. - (nnimap-request-expire-articles): Do it here instead. Only expire - when articles are found. Suggested by Nevin Kapur - . - -2002-09-17 Kai Gro,A_(Bjohann - From Reiner Steib . - - * message.el (message-strip-subject-trailing-was) - (message-change-subject, message-add-archive-header) - (message-xpost-fup2-header, message-xpost-insert-note) - (message-xpost-fup2, message-reduce-to-to-cc): New functions - adopted from message-utils.el. Add functions to the keymap, mode - describtion and menu. - (message-change-subject,message-xpost-fup2): Signal error if - current header is empty. - (message-xpost-insert-note): Changed insert position. - (message-archive-note): Ensure to insert note in message body (not - in head). - (message-archive-header, message-archive-note) - (message-xpost-default, message-xpost-note, message-fup2-note) - (message-xpost-note-function): New variables adopted from - message-utils.el. Changed some doc-strings. - (message-mark-insert-{begin,end}): Rename from - message-{begin,end}-inserted-text-mark (message-utils.el), changed - values. - (message-subject-trailing-was-query) - (message-subject-trailing-was-ask-regexp) - (message-subject-trailing-was-regexp): New variables. - (message-to-list-only): Added doc-string and menu entry. - - * message-utils.el: Removed. Functions are now in message.el. - -2002-09-16 ShengHuo ZHU - - * gnus-art.el (gnus-article-reply-with-original, - gnus-article-followup-with-original): Switch to - gnus-summary-buffer before reply/followup. - -2002-09-15 John Paul Wallington - - * gnus-sum.el (gnus-summary-toggle-header): The article window may - not exist. Toggle it anyway. - -2002-09-13 ShengHuo ZHU - - * gnus-msg.el (gnus-copy-article-buffer): Bind mail-header-separator. - - * gnus-art.el (article-fill-long-lines): Fill-paragraph properly. - Trivial patch from Urban Engberg . - - * rfc2047.el (message-posting-charset): Defvar it. - (rfc2047-charset-encoding-alist): Use B for iso-8859-7 and - iso-8859-8. Fix doc. Suggested by Dave Love . - - * mail-source.el (mail-source-fetch): Hide password. - - * gnus-sum.el (gnus-summary-next-group): Semi-exit only when needed. - -2002-09-12 Katsumi Yamaoka - From John Paul Wallington . - - * gnus.el (gnus-visual, gnus-meta): Fix typo. - -2002-09-11 Katsumi Yamaoka - - * gnus-art.el (gnus-article-address-banner-alist): Doc fix. - -2002-09-11 Simon Josefsson - - * nnimap.el (nnimap-expiry-target): Only expiry-target existing articles. - (nnimap-split-rule): Doc fix. - (nnimap-request-expire-articles): Cleanup code. - -2002-09-11 Katsumi Yamaoka - From TSUCHIYA Masatoshi . - - * gnus-art.el (gnus-article-address-banner-alist): New option. - (article-strip-banner): Refer the above option to split banners of - free mail servers, when no group parameter is specified. - -2002-09-10 Katsumi Yamaoka - - * nntp.el (nntp-wait-for-string): Check for a process in the - current buffer instead of `nntp-server-buffer'. - -2002-09-09 Simon Josefsson - - * gnus-art.el (gnus-button-man-handler): New variable. - (gnus-button-alist): Use g-b-handle-man. - (gnus-button-handle-man): New, call g-b-man-handler. - -2002-09-08 Simon Josefsson - - * gnus-art.el (gnus-button-alist): Buttonize man page links. - -2002-09-07 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-article-dumbquotes-map): Add \230. - -2002-09-06 Lars Magne Ingebrigtsen - - * gnus-srvr.el (gnus-browse-make-menu-bar): Add "d". - - * gnus-sum.el (gnus-summary-limit-to-unseen): New command and - keystroke. - - * gnus-srvr.el (gnus-browse-describe-group): New command and - keystroke. - -2002-09-06 Katsumi Yamaoka - - * gnus-art.el (gnus-article-treat-body-boundary): Don't quote a - value for gnus-decoration property. - -2002-09-06 Kai Gro,b_(Bjohann - - * nnmail.el (nnmail-cache-fetch-group): Don't return "" (empty - string) as group name in case we have a CRLF in the file. - -2002-09-04 Jesper Harder - - * rfc1843.el (rfc1843-decode-loosely): Move to mime customization - group. - (rfc1843-decode-hzp): do. - (rfc1843-newsgroups-regexp): do. - -2002-09-04 Simon Josefsson - - * message.el (message-canlock-generate): Make sure sha1 doesn't - call external programs. - -2002-09-03 Simon Josefsson - - * nntp.el (nntp-wait-for-string): Dont infloop if process died. - - * gnus-agent.el (gnus-agent-batch): Add doc. - -2002-09-03 Josh Huber - - * gnus-msg.el (gnus-summary-handle-replysign): Change the order we - check for signed and encrypted parts. - * mml.el (mml-parse-1): Correct small typo which preventing - setting recipients in a secure tag. - -2002-09-03 Katsumi Yamaoka - - * mm-util.el (mm-coding-system-priorities): Default to a list of - iso-2022-jp and others for the Japanese environment. - -2002-09-03 Katsumi Yamaoka - - * gnus-util.el (gnus-frame-or-window-display-name): Exclude - invalid display names. - -2002-08-30 Simon Josefsson - - * gnus-group.el (gnus-group-fetch-control): Fix typo in last - commit. From Reiner Steib <4uce.02.r.steib@gmx.net>. - -2002-08-26 Jesper Harder - - * gnus.el (gnus-group-charter-alist): New option. - (gnus-group-fetch-control-use-browse-url): New option. - - * gnus-group.el (gnus-group-fetch-charter): New function. - (gnus-group-fetch-control): New function. - Add them to the keymap and menu. Require mm-url. - -2002-08-30 Katsumi Yamaoka - - * gnus-mlspl.el (gnus-group-split-fancy): Doc fix. - From Alex Schroeder . - -2002-08-29 Jesper Harder - - * gnus-group.el (gnus-group-make-menu-bar): Add ellipses to menu - items expecting user interaction. - - * gnus-topic.el (gnus-topic-make-menu-bar): do. - - * gnus-sum.el (gnus-summary-make-menu-bar): do. - - * gnus-srvr.el (gnus-server-make-menu-bar): do. - - * mml.el (mml-menu): do. - -2002-08-28 Katsumi Yamaoka - - * mail-source.el (mail-source-touch-pop): New function. - - * message.el (message-smtpmail-send-it): New function. - (message-send-mail-function): Add it for a candidate. - -2002-08-27 Simon Josefsson - - * gnus-msg.el (posting-charset-alist): Use - gnus-define-group-parameter instead of defcustom. - (gnus-put-message): Handle SPC in GCC. - (gnus-inews-insert-gcc): Ditto. - (gnus-inews-insert-archive-gcc): Ditto. - -2002-08-26 Simon Josefsson - - * gnus-agent.el (gnus-agent-auto-agentize-methods): New variable. - (gnus-agentize): Auto agentize all nntp and nnimap groups. - (gnus-agent-possibly-save-gcc): Autoload. - Suggested by (KOSEKI Yoshinori) . - -2002-08-26 Katsumi Yamaoka - - * gnus.el (gnus-other-frame-function): New user option. - (gnus-other-frame): Use it; add a doc-string; make it work with - the gnuclient program. - - * gnus-util.el (gnus-frame-or-window-display-name): New function. - - * lpath.el: Fbind `frame-parameter', `make-frame-on-display', - `device-connection' and `dfw-device'. - -2002-08-22 Kai Gro,b_(Bjohann - - * gnus-art.el (gnus-emphasis-alist): Strikethru had a lot of false - positives, make it stricter. From Jochen Hein (trivial change). - -2002-08-21 Katsumi Yamaoka - - * gnus.el (gnus-other-frame): Trivial fix. - -2002-08-21 Katsumi Yamaoka - - * gnus.el (gnus-other-frame-parameters): New user option. - (gnus-other-frame-object): New variable. - (gnus-other-frame): Make it search for existing Gnus frame; don't - read new news; delete frame on exit. - - * gnus-util.el (gnus-select-frame-set-input-focus): New function. - - * lpath.el: Fbind w32-focus-frame and x-focus-frame. - -2002-08-20 Katsumi Yamaoka - From $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'. - * nnheader.el (nnheader-file-name-translation-alist): Ditto. - -2002-08-20 ShengHuo ZHU - - * gnus-art.el (gnus-button-url-regexp): Use POSIX regexp if possible. - - * nnmh.el (nnmh-request-list-1): Use %.0f instead of %d to - avoid arithmetic errors. - -2002-08-20 Katsumi Yamaoka - - * gnus-art.el: Don't fbind `gnus-article-replace-with-quoted-text'. - -2002-08-19 Katsumi Yamaoka - - * message.el (message-ignored-supersedes-headers): Add X-Hashcash. - (message-ignored-resent-headers): Add envelope From. - -2002-08-18 Kai Gro,b_(Bjohann - - * gnus.el (gnus-summary-line-format): Document %k specifier. - -2002-08-17 Kai Gro,b_(Bjohann - - * gnus-sum.el (gnus-summary-line-message-size): New function. - (gnus-summary-line-format-alist): Use it. - -2002-08-15 Katsumi Yamaoka - - * gnus-art.el (article-make-date-line): Refer to the value for - `gnus-article-time-format' in the summary buffer. - - * message.el (message-cite-prefix-regexp): Exclude ":" and ",A;(B". - -2002-08-14 Simon Josefsson - - * gnus-art.el (gnus-button-alist): Use ' not ` for default value - quoting. - (gnus-button-alist): Fix doc. - (gnus-header-button-alist): Use ' not ` for default value quoting. - (gnus-header-button-alist): Don't inline gnus-button-url-regexp, - rationale similar to 2002-05-01 change. - (gnus-article-add-buttons-to-head): Evaluate expression. - - * gnus-sum.el (gnus-summary-make-menu-bar): Add MIME button option. - -2002-08-14 Katsumi Yamaoka - - * message.el (message-font-lock-keywords): Refer to the value for - `message-cite-prefix-regexp' dynamically. - -2002-08-13 Katsumi Yamaoka - - * gnus-art.el (gnus-decode-header-methods): Doc fix. - -2002-08-12 Simon Josefsson - - * imap.el (imap-shell-open): Allow non-list `imap-shell-program'. - (imap-shell-open): Skip initial junk before IMAP greeting. - -2002-08-11 Simon Josefsson - - * message-utils.el (message-xpost-default, - message-xpost-fup2-header, message-xpost-fup2): Fixed - Typos. Trivial changes from Reiner Steib - <4uce.02.r.steib@gmx.net>. - -2002-08-09 Simon Josefsson - - * message.el (message-canlock-password): Set - canlock-password-for-verify to newly generated canlock-password. - When Emacs is restarted, Custom makes sure this is set, but during - the same session we must set it manually. - -2002-08-07 Jesper Harder - - * yenc.el: New file. - - * mm-uu.el (mm-uu-yenc-decode-function): New variable. - (mm-uu-type-alist): Add yenc. - (mm-uu-yenc-filename): New function. - (mm-uu-yenc-extract): New function. - - * mm-bodies.el (mm-decode-content-transfer-encoding): Add yenc. - -2002-08-06 ShengHuo ZHU - - * dgnushack.el (merge): Don't use coerce. - -2002-05-27 Jesper Harder - - * mailcap.el (mailcap-mime-data): Test window-system rather than - mm-device-type. - (mailcap-mime-data): Call xdvi and gv with "-safer". - - * mm-util.el: Don't define mm-device-type. - -2002-08-05 Simon Josefsson - - * mm-util.el (mm-coding-system-priorities): coding-system type not - supported everywhere. - -2002-08-04 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bumped version number. - -2002-08-04 01:48:57 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.07 is released. - -2002-08-04 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-thread-sort-functions): Doc fix. - (gnus-article-sort-functions): Doc fix. - (t): New keystroke. - (gnus-article-sort-by-random): New function. - (gnus-thread-sort-by-random): New function. - -2002-08-02 Simon Josefsson - - * gnus-logic.el (gnus-advanced-integer): Swap arguments in - funcall. From Scott A Crosby . - -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 . - - * nnweb.el (nnweb-type, nnweb-type-definition) - (nnweb-gmane-create-mapping, nnweb-gmane-wash-article) - (nnweb-gmane-search, nnweb-gmane-identity): Added gmane - functionality. - * nnweb.el: Removed old non-functioning search engines. - -2002-07-27 Simon Josefsson - - * message.el (message-forward-make-body): Don't use - `message-forward-ignored-headers' when doing a "raw" followup (it - is important to preserve e.g. CTE). - - * flow-fill.el (fill-flowed): Disable filladapt-mode. - - * gnus-sieve.el (gnus-sieve-guess-rule-for-article): Don't - regexp-quote, Cyrus Sieve is fixed. - - * sieve-manage.el (sieve-manage-deletescript): New function. - - * sieve.el (sieve-manage-mode-map): Fix down-mouse-2 and down-mouse-3. - (sieve-manage-mode): Fix menubar. - (sieve-activate): Change some messages. - (sieve-deactivate-all): New function. - (sieve-deactivate): New alias. - (sieve-remove): New function. - (sieve-help): Fix help. - All suggested by Ned Ludd. - -2002-07-24 Katsumi Yamaoka - - * mm-decode.el (mm-inline-text-html-with-images): Doc fix. - (mm-w3m-safe-url-regexp): New user option. - - * mm-view.el (mm-inline-text-html-render-with-w3m): Use - `mm-w3m-safe-url-regexp' to bind `w3m-safe-url-regexp'. - -2002-07-23 Karl Kleinpaste - - * gnus-sum.el (gnus-summary-delete-article): Force - 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 . - - * nnmail.el (nnmail-fancy-expiry-target): Treat nonexisting - headers as empty headers. - -2002-07-21 Kai Gro,b_(Bjohann - From 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 . - - * nnfolder.el (nnfolder-retrieve-headers): Avoid searching the - entire file for each of a sequence of missing articles. - - * gnus-salt.el (gnus-binary-display-article): Respect an existing - value for gnus-view-pseudos. - - * gnus-sum.el (gnus-summary-insert-new-articles): Count down to - avoid nreverse. - -2002-07-14 Kai Gro,b_(Bjohann - From Ted Zlatanov . - - * gnus-sum.el (gnus-auto-expirable-marks): Remove `spam'. - (gnus-summary-mode-line-format-alist): Add %h for number of - spams. - (gnus-newsgroup-spam-marked): New variable. - (gnus-summary-local-variables): Add gnus-newsgroup-spam-marked. - (gnus-article-read-p, gnus-article-mark) - (gnus-set-global-variables, gnus-set-global-variables) - (gnus-article-marked-p, gnus-summary-mark-article-as-read) - (gnus-summary-mark-article-as-unread) - (gnus-summary-mark-article-as-unread, gnus-summary-mark-article) - (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 - - * nnimap.el (nnimap-split-to-groups): Allow group string to be a - function. From KANEMATSU Daiji . - -2002-07-09 Nevin Kapur - - * gnus-sum.el (gnus-summary-delete-article): Respect group - parameters while expiring. - -2002-07-08 Simon Josefsson - - * gnus-art.el (article-make-date-line): Fix string. From Henrik - Enberg. - -2002-07-08 Kai Gro,b_(Bjohann - - * gnus-art.el (article-unsplit-urls): Only display MIME when this - function is called interactively. From Niklas Morberg. - -2002-07-06 ShengHuo ZHU - - * gnus-topic.el (gnus-topic-indent, gnus-topic-unindent): Change - cdaar to cdar and car. - - * nnsoup.el (nnsoup-retrieve-headers, nnsoup-request-type) - (nnsoup-read-active-file, nnsoup-article-to-area): Ditto. - -2002-07-05 Katsumi Yamaoka - - * gnus-sum.el (gnus-summary-toggle-header): Show headers anyway; - don't break a narrowed article. - - * nntp.el (nntp-via-rlogin-command-switches): Doc fix. - (nntp-open-via-rlogin-and-telnet): Ditto. - -2002-07-02 Didier Verna - - * nnmail.el (nnmail-split-methods): fix custom type. - -2002-07-02 Kai Gro,b_(Bjohann - - * gnus-art.el (article-unsplit-urls): Keep URL buttonized after - unsplitting. From Niklas Morberg . - -2002-07-01 Kai Gro,b_(Bjohann - - * gnus-msg.el (gnus-summary-resend-default-address): New user option. - (gnus-summary-resend-message): Use it. - -2002-06-28 Katsumi Yamaoka - - * 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 - - * 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 - - * nntp.el (nntp-open-via-rlogin-and-telnet): Revert last change. - -2002-06-28 Katsumi Yamaoka - - * nntp.el (nntp-open-via-rlogin-and-telnet): Hide commandline args. - -2002-06-26 Kai Gro,b_(Bjohann - - * message.el (message-font-lock-keywords): Revert 2002-06-22 - change. - -2002-06-24 Kai Gro,b_(Bjohann - - * message.el (message-font-lock-keywords): Put colon in header - name match. - -2002-06-22 Kai Gro,b_(Bjohann - - * message.el (message-font-lock-keywords): Don't use header faces - in the body. Thanks to Stefan Monnier for the hint on the - implementation. - -2002-05-09 Miles Bader - - * gnus-cite.el (gnus-cite-blank-line-after-header): New variable. - (gnus-article-hide-citation): Respect it. - -2002-04-12 Juanma Barranquero - - * pop3.el (pop3-open-server): Fix typo. - -2002-06-18 Josh Huber - - * gnus.el (gnus-find-subscribed-addresses): Use add-to-list - instead of push to ignore duplicate to-(list|address) values. - * nnmail.el (nnmail-cache-ignore-groups): New. - * nnmail.el (nnmail-cache-insert): Obey nnmail-cache-ignore-groups - -2002-06-18 Kai Gro,b_(Bjohann - - * gnus-delay.el (gnus-delay-send-queue): Delete the delay header - before sending. Suggested by Jan Rychter. - -2002-06-18 Katsumi Yamaoka - - * dgnushack.el (remove): New compiler macro. - (last, coerce, subseq): Remove compiler macros for those built-in - or unused functions. - -2002-06-17 Kai Gro,b_(Bjohann - - * 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. - -2002-06-16 Kai Gro,b_(Bjohann - - * 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 - - * gnus-cache.el (gnus-cache-remove-article): n is &optional. From - Reiner Steib <4uce.02.r.steib@gmx.net>. - -2002-06-15 ShengHuo ZHU - - * nnheader.el (nnheader-file-name-translation-alist): Set the - default value for MS Windows systems. - - * gnus-ems.el (nnheader-file-name-translation-alist): Removed. - -2002-06-14 Katsumi Yamaoka - - * message.el (message-beginning-of-line): Keep the region active - in XEmacs. Suggested by TAKAHASHI Kaoru . - -2002-06-13 Josh Huber - - * gnus-msg.el (gnus-summary-followup): Use g-s-handle-replysign. - * gnus-msg.el (gnus-summary-reply): Ditto. - * gnus-msg.el (gnus-summary-handle-replysign): New. - -2002-06-12 Katsumi Yamaoka - - * message.el (message-send-mail-with-sendmail): Kill errbuf even - if sending failed. - -2002-06-11 Josh Huber - - * gnus-start.el (gnus-dribble-enter): Don't call set-window-point anymore - * mml2015.el (mml2015-mailcrypt-encrypt): Accept optional argument - to sign while encrypting. - -2002-06-11 Simon Josefsson - - * gnus-int.el (gnus-request-move-article): Agent expire article if - successfuly moved. - - * nnweb.el (nnweb-google-create-mapping): Honors the value of - nnweb-max-hits. From Niklas Morberg . - -2002-06-10 Simon Josefsson - - * gnus-int.el (gnus-request-expire-articles): Fix last change? - -2002-06-09 Simon Josefsson - - * gnus-sum.el (gnus-summary-delete-article): Don't agent expire here. - - * gnus-int.el (gnus-request-expire-articles): Do it here instead. - -2002-06-08 ShengHuo ZHU - - * flow-fill.el (fill-flowed): Ignore errors. - -2002-06-06 Simon Josefsson - - * message.el (message-send-mail-with-sendmail): Improve error message. - -2002-06-06 Kai Gro,b_(Bjohann - - * message.el (message-interactive): Change default from nil to t. - Better to be safe than to be fast. - -2002-06-05 Kai Gro,b_(Bjohann - - * message.el (message-send-mail-with-sendmail): Check return value - from call-process-region. - -2002-06-04 Simon Josefsson - - * gnus-msg.el (gnus-group-mail, gnus-group-news) - (gnus-group-post-news, gnus-summary-mail-other-window) - (gnus-summary-news-other-window, gnus-summary-post-news): Bind - gnus-article-copy to nil, thereby inhibiting the `header' posting - style match to use data from last viewed article. - Suggested by Hrvoje Niksic. - -2002-06-04 Katsumi Yamaoka - - * spam.el (spam-point-at-eol): New alias. - (spam-parse-whitelist): Use it. - -2002-06-03 Simon Josefsson - - * nnmail.el (nnmail-mail-splitting-decodes): New variable. - (nnmail-article-group): Use it. - -2002-05-30 Kai Gro,b_(Bjohann - - * gnus-msg.el (gnus-inews-yank-articles): Merge split header lines - so that code reading them won't be surprised. From Jesper Harder - . - -2002-05-29 Simon Josefsson - - * gnus-sum.el (gnus-summary-delete-article): Agent expire deleted - articles. - - * gnus.el (gnus-agent-cache): Doc fix. - (gnus-agent): Change default to t. - - * gnus-agent.el (gnus-agent-expire): Make it accept optional - ARTICLES, GROUP and FORCE parameters. - -2002-05-28 Simon Josefsson - - * gnus-group.el (gnus-group-line-format): Doc fix. - -2002-05-28 Kai Gro,b_(Bjohann - - * gnus-msg.el (gnus-inews-yank-articles): Unfold headers of - original article before yanking. From Jesper Harder - . - -2002-05-26 Simon Josefsson - - * gnus-sum.el (gnus-summary-menu-split): New function. - (gnus-summary-make-menu-bar): Split charset submenu. - (gnus-summary-menu-maxlen): New variable. - (gnus-summary-menu-split): Use it. - -2002-05-25 Simon Josefsson - - * mml.el (mml-preview): Generate some headers. - - * gnus.el (gnus-large-newsgroup): Fix :type. - - * nnimap.el (nnimap-nov-is-evil): Change default to t (because the - Agent cache NOV's by default now). - (nnimap-nov-is-evil): Make it default to `gnus-agent' instead. - -2002-05-18 Jesper Harder - - * gnus-sum.el (gnus-dependencies-add-header): Avoid one unecessary - call to gnus-parent-id when we check for References loops. - (gnus-summary-prepare-threads): Avoid simplifying every Subject - twice by saving the simplified subject string in simp-subject. - -2002-05-23 Simon Josefsson - - * gnus-msg.el (gnus-confirm-mail-reply-to-news): Typo. Trivial - change from Benjamin Rutt . - - * nnweb.el (nnweb-type): Remove dejanewsold. Trivial change from - Niklas Morberg . - -2002-05-22 Simon Josefsson - - * sieve.el (sieve-change-region): Define it before it is used. - - * 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 - . - - * nnimap.el (nnimap-nov-is-evil): Improve doc. - -2002-05-21 Simon Josefsson - - * sieve-mode.el (sieve-manage): Fix autoloads. - - * sieve-manage.el (sieve-manage-cram-md5-auth): Just send the SASL - name (makes it work with recent Cyrus timsieved). - -2002-05-20 Jason - Trivial patch. - - * gnus-art.el (gnus-request-article-this-buffer): Try - reconnecting if you don't get the message. - -2002-05-20 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-enter-digest-group): Only get - Reply-To headers from the headers. - -2002-05-18 Lars Magne Ingebrigtsen - - * mm-url.el (mm-url-insert): Remove junk message. - -2002-05-17 Lars Magne Ingebrigtsen - - * nnslashdot.el (nnslashdot-request-list): Parse new html. - (nnslashdot-use-front-page): New variable. - (nnslashdot-request-list): Use it. - - * mm-url.el (mm-url-timeout): New variable. - (mm-url-retries): Ditto. - (mm-url-insert): Use it. - -2002-05-16 Simon Josefsson - - * gnus-sum.el (gnus-simplify-all-whitespace): New function. - (gnus-simplify-subject-functions): Mention g-s-a-w. - -2002-05-15 Josh Huber - - * nnbabyl.el (nnbabyl-request-accept-article): Pass group to - nnmail-cache-insert. - * nndiary.el (nndiary-request-accept-article): Ditto. - * nnfolder.el (nnfolder-request-accept-article): Ditto. - * nnimap.el (nnimap-request-accept-article): Ditto. - * nnmail.el (nnmail-process-unix-mail-format): Ditto. - * nnmail.el (nnmail-check-duplication): Ditto. (from gnus-art) - * nnmbox.el (nnmbox-request-accept-article): Ditto. - * nnmh.el (nnmh-request-accept-article): Ditto. - * nnmail.el (nnmail-cache-insert): Change group to required, - removed code which tried to figure out the group. - -2002-05-13 Josh Huber - - * mml.el (mml-generate-mime-1): Fix mml generation for signed only - messages. From Hans de Graaff . - * nnml.el (nnml-request-accept-article): Pass in the group name to - nnmail-cache-insert, since it's available. - -2002-05-10 ShengHuo ZHU - - * nndoc.el (nndoc-mime-digest-type-p): Set proper file-end. - -2002-05-08 Kai Gro,b_(Bjohann - From Florian Weimer . - - * gnus.el (subscribed): New group parameter. - (gnus-find-subscribed-addresses): Use it. - -2002-05-08 Josh Huber - - * mml-sec.el (mml-signencrypt-style-alist): Rename. Also, changed - the default for pgpmime to support pgp v2. - * mml-sec.el (mml-signencrypt-style): New accessor function to - allow users to get/set the signencrypt style more easily without - frobbing the alist directly. - * mml.el (mml-generate-mime-1): Use accessor function. - -2002-05-08 Kai Gro,b_(Bjohann - - * gnus-art.el (gnus-article-mode-syntax-table): Specify matching - parenthesis for "<" and ">". Suggested by Andreas Schwab - . - -2002-05-07 Kai Gro,b_(Bjohann - - * nnmail.el (nnmail-cache-insert): Prefer group-art over group - when intuiting the group the message is written to. From Josh - Huber . - -2002-05-06 Simon Josefsson - - * gnus-topic.el (gnus-group-topic-parameters): Work when group - buffer doesn't show group. From Matt Armstrong . - -2002-05-06 Josh Huber - - * mml2015.el (mml2015-gpg-encrypt): Changed name of optional - argument, and fixed compiler warning. (added autoload for - gpg-encrypt). - -2002-05-04 Simon Josefsson - - * mml1991.el (mml1991-function-alist): Doc fix. - - * mml.el (mml-preview): Bind gnus-newsrc-hashtb temporarily if it - doesn't exist (for previewing messages without having Gnus - started). - - * mm-util.el (mm-coding-system-priorities): Defcustom. - - * mm-encode.el (mm-content-transfer-encoding-defaults): Defcustom. - -2002-05-01 Josh Huber - - * gnus-msg.el (gnus-message-replysignencrypted): enabled by - default. - * mml-sec.el: - * mml-sec.el (mml-signencrypt-style): New. - * mml-sec.el (mml-pgpmime-encrypt-buffer): Accept optional - argument `sign'. - * mml-sec.el (mml-secure-message-encrypt-pgp): Changed default to - signencrypt. - * mml-sec.el (mml-secure-message-encrypt-pgpmime): Ditto. - * mml.el (mml-generate-mime-1): Changed logic so a part which is - both signed & encryped is processed in one operation. (rather than - two separate ops: sign, then encrypt) - * mml2015.el (mml2015-gpg-extract-signature-details): Give some - indication if a message is signed by an expired key. - * mml2015.el (mml2015-gpg-encrypt): Accept optional argument which - enables combined sign & encrypt operation. (this was always on - before). - * mml2015.el (mml2015-encrypt): Accept optional argument `sign'. - -2002-05-01 Simon Josefsson - - * nnimap.el (nnimap-retrieve-groups): Use separate data for each - server. - (nnimap-mailbox-info): defvar instead of defvoo. - -2002-05-01 20:09:21 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.06 is released. - -2002-05-01 Lars Magne Ingebrigtsen - - * lpath.el: Bind url-package-version. - -2002-05-01 Simon Josefsson - - * nnfolder.el (nnfolder-request-delete-group): Figure out nov/mrk - filename before deleting the group itself, because the presence of - a group filename decides if long filenames are used or not. - - * gnus-art.el (gnus-button-alist): Don't inline - gnus-button-url-regexp. This makes it possible to change g-b-u-r - without also modifying g-button-alist. - (gnus-button-alist): Fix type to allow variable as well as regexp. - (gnus-article-add-buttons): Evaluate regexp. Strings evaluate to - themselves, variables to its contents. - (gnus-button-entry): Ditto. - -2002-05-01 Simon Josefsson - - * imap.el (imap-parse-resp-text-code, imap-parse-status): Treat - UIDNEXT as a string. - - * nnimap.el (nnimap-string-lessp-numerical): New function. - (nnimap-retrieve-groups): Compare UIDNEXT as strings instead of - integers. - -2002-04-29 Simon Josefsson - - * nnmail.el (nnmail-cache-insert): Accept optional group - parameter. - - * nnimap.el (nnimap-retrieve-groups): Don't send STATUS when - n-r-g-a is disabled. - -2002-04-29 Simon Josefsson - - * nnimap.el (nnimap-split-fancy): Fix doc. - (nnimap-split-fancy): Fix doc. - - * nnimap.el (nnimap-retrieve-groups-asynchronous): New variable. - (nnimap-mailbox-info): New internal variable. - (nnimap-retrieve-groups): Implement faster new mail check. - - * nnimap.el (nnimap-split-articles): Support - nnmail-cache-accepted-message-ids. - (nnimap-request-accept-article): Ditto. - - * imap.el (imap-mailbox-status-asynch): New command. - -2002-04-29 Nevin Kapur - - * gnus.el (gnus-find-subscribed-addresses): Return nil when there - are no subscribed mail groups. - - Strip quoted names when comparing addresses - -2002-04-28 Jesper Harder - - * mm-decode.el (mm-text-html-renderer): Change customize type to - const. - - * gnus-msg.el (gnus-discouraged-post-methods): Fix typo. - (gnus-debug-exclude-variables): do. - -2002-04-27 ShengHuo ZHU - - * gnus-msg.el (gnus-article-mail): Use gnus-msg-mail instead. - Trivial change from Karl Pfl,Ad(Bsterer . - -2002-04-27 Katsumi Yamaoka - - * dns.el (dns-make-network-process): New macro. - (query-dns): Use it. - -2002-04-27 ShengHuo ZHU - - * gnus-msg.el (gnus-summary-reply): Remove unbound variable - article-buffer. - - * mm-url.el (mm-url-package-name): New variable. - (mm-url-package-version): New variable. - (mm-url-insert-file-contents): Bind url-package-name and - url-package-version here. - * nnrss.el (nnrss-insert-w3): Move the bindings. - - * nnrss.el (nnrss-insert-w3): Bind url-package-name and - url-package-version. Trivial change from Andrew J Cosgriff - - - * mm-decode.el (mm-save-part): Fill in file name when GUI saving - attachments. Trivial change from Peter 'Luna' Runestig - . - -2002-04-19 Jesper Harder - - * nnkiboze.el (nnkiboze-request-scan): Call - nnkiboze-possibly-change-group. - (nnkiboze-generate-group): Use mm-with-unibyte to avoid encoding - problems. - (nnkiboze-generate-group): Set newsrc to the *highest* article - number kibozed, not the lowest. - -2002-04-15 Jesper Harder - - * gnus-art.el (article-unsplit-urls): Allow trailing SPC. - -2002-04-24 Kai Gro,b_(Bjohann - From Dan Christensen . - - * nndoc.el (nndoc-type-alist, nndoc-lanl-gov-announce-type-p) - (nndoc-transform-lanl-gov-announce, nndoc-generate-lanl-gov-head): - Recognize math postings. Extract Date (now ignores "(15kb)"). - Extract email address using gnus-extract-address-components - instead of just taking the first word. Create Date and From - headers for message which are missing these headers. Get rid - of spurious \\ lines (purely cosmetic). Extend body-end and - file-end regexps, to exclude more garbage from the message. - Make URL rephrasing regexp more flexible, to match current - format. - -2002-04-23 Simon Josefsson - - * netrc.el: New file, functions copied from gnus-util.el by Ted - Zlatanov . - - * gnus-util.el: Require netrc. - (gnus-netrc-get, gnus-netrc-machine, gnus-parse-netrc): Aliased to - new code in netrc.el. - -2002-04-23 Kai Gro,b_(Bjohann - - * gnus-msg.el (gnus-summary-resend-message-edit): Remove - message-ignored-resent-headers, too. From Matthieu Moy - . - -2002-04-22 Bj,Av(Brn Torkelsson - - * gnus-srvr.el (gnus-server-browse-in-group-buffer): it is a - boolean not a string - * gnus-group.el (gnus-group-line-format): add description of %C - * gnus-group.el (gnus-group-line-format-alist): add gnus-tmp-comment - as %C - * gnus-group.el (gnus-group-insert-group-line): add gnus-tmp-comment - -2002-04-22 Paul Jarc - - * nnmaildir.el (nnmaildir-request-scan): typo: set - nnmaildir-get-new-mail, not nnmaildir-new-mail. Don't call - nnmail-get-new-mail for 'find-new-groups. - -2002-04-21 Paul Jarc - - * nnmaildir.el (nnmaildir-request-update-info, - nnmaildir-request-group, nnmaildir-retrieve-groups): remove - unnecessary calls to nnmaildir-request-scan. - -2002-04-20 Josh Huber - - * gnus-msg.el: - * gnus-msg.el (gnus-message-replysign): New. - * gnus-msg.el (gnus-message-replyencrypt): New. - * gnus-msg.el (gnus-message-replysignencrypted): New. - * gnus-msg.el (gnus-summary-reply): Use the three new variables - (above) to automatically encrypt/sign to encrypted/signed - messages. - * message.el: - * message.el (message-mode-map): Add keybinding for - `message-to-list-only' - * message.el (message-mode): Add description for - `message-to-list-only' - * message.el (message-to-list-only): New. - * message.el (message-make-mft): Changed to use the cl loop macro, - and added optional flag to return only the matched list. (for use - in new message-to-list-only function) - -2002-04-20 Josh Huber - - * gnus-msg.el: - * gnus-msg.el (gnus-message-replysign): - * gnus-msg.el (gnus-replysign): New. - * gnus-msg.el (gnus-replyencrypt): New. - * gnus-msg.el (gnus-replysignencrypted): New. - * gnus-msg.el (gnus-summary-reply): - * message.el: - * message.el (message-mode-map): - * message.el (message-mode): - * message.el (message-to-list-only): New. - * message.el (message-make-mft): - -2002-04-19 ShengHuo ZHU - - * gnus-win.el (gnus-configure-windows-hook): Fix typo. - -2002-04-18 Josh Huber - - * 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 . - - * spam.el (spam-whitelist, spam-blacklist, spam-enter-whitelist): - Improve docstring. - (spam-enter-blacklist): New command. - - * gnus-sum.el (gnus-spam-mark): New mark. - (gnus-auto-expirable-marks): Add gnus-spam-mark. - (gnus-summary-make-tool-bar): Correct conditional. - (gnus-summary-limit-to-unread): Add gnus-spam-mark. - (gnus-summary-mark-as-spam): New command. - -2002-04-13 Josh Huber - - * mml-sec.el (mml-secure-message): changed to support arbritrary - modes. - * mml-sec.el (mml-secure-message-encrypt-(smime|pgp|pgpmime)): - changed to support "signencrypt" mode. - * mml.el (mml-parse-1): changed to support different secure modes - more easily. (for signencrypt) - -2002-04-11 Stefan Monnier - - * gnus-sum.el (gnus-update-summary-mark-positions) - (gnus-summary-toggle-header): - * gnus-uu.el (gnus-uu-binhex-article, gnus-uu-reginize-string) - (gnus-uu-expand-numbers, gnus-uu-post-make-mime) - (gnus-uu-post-encoded): - * nnfolder.el (nnfolder-possibly-change-group): - * nnimap.el (nnimap-retrieve-headers): - * nnmbox.el (nnmbox-create-mbox): Don't assume point-min == 1. - -2002-04-08 Stefan Monnier - - * nnml.el (nnml-save-nov, nnml-generate-nov-file): - * pop3.el (pop3-md5): Don't hardcode point-min == 1. - -2002-04-12 Katsumi Yamaoka - - * 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 - - * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Force - viewing of security buttons. Thanks to Nicolas Kowalski - . - - * smime.el (smime-CA-directory): Fix doc. Thanks to Arne - J,Ax(Brgensen . - (smime-sign-buffer): Work in XEmacs. Thanks to Nicolas Kowalski - . - (smime-decrypt-buffer): Ditto. - -2002-04-11 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-article-prepare): Place point on the emtpy - header line. - -2002-04-11 Per Abrahamsen - - * gnus.el (gnus-refer-article-method): Change `dejanews' to `google'. - -2002-04-08 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-delete-marked-with): Fix typo. - -2002-04-07 ShengHuo ZHU - - * mm-view.el (mm-inline-text-html-render-with-w3): Don't ignore - errors when debug. - -2002-04-07 Josh Huber - - * message.el (message-make-mft): Changed MFT code from using - message-recipients (which included Bcc) to use only the To and CC - headers. - -2002-04-05 Per Abrahamsen - - * gnus-art.el (gnus-treat-from-picon): Add to gnus-picon group and - add link. - (gnus-treat-mail-picon): Ditto. - (gnus-treat-newsgroups-picon): Ditto. - (gnus-picon-databases): Fix custom type. - (gnus-picon-databases): Add link. - (gnus-article-x-face-command): Add to gnus-picon group. - -2002-04-01 Jesper Harder - - * message.el (message-buffer-naming-style): Remove. - -2002-04-02 ShengHuo ZHU - - * gnus-group.el (gnus-group-make-tool-bar): Load tool-bar first. - - * message.el (message-tool-bar-map): Ditto. - - * gnus-sum.el (gnus-summary-make-tool-bar): Ditto. - -2002-04-01 ShengHuo ZHU - - * nnwarchive.el (nnwarchive-mail-archive-article): Fix typo. - -2002-04-01 Paul Jarc - - * nnmaildir.el: fixed some buggy invocations of nnmaildir--pgname. - -2002-03-31 Andrew Cohen - Trivial patch. - - * dns.el: open-network-stream under XEmacs does udp. - -2002-03-31 Lars Magne Ingebrigtsen - - * spam.el (spam-enter-whitelist): New function. - (spam-parse-whitelist): Ditto. - (spam-refresh-list-cache): Ditto. - (spam-address-whitelisted-p): New function. - - * dns.el (query-dns): Use TCP when make-network-process isn't - available. - (dns-servers): New variable. - (dns-parse-resolv-conf): New function. - (query-dns): Use it. - - * spam.el: New file. - - * dns.el (query-dns): Test. - -2002-03-31 Lars Magne Ingebrigtsen - - * lpath.el (featurep): Bind make-network-process. - -2002-03-31 Paul Jarc - - * nnmaildir.el: Use defstruct. Use a single copy of - nnmail-extra-headers to save memory. Store server's group name - prefix instead of each group's prefixed name. - * nnnil.el (nnnil-retrieve-headers, nnnil-request-list): Erase - nntp-server-buffer. - -2002-03-31 Lars Magne Ingebrigtsen - - * dns.el: New file. - -2002-03-28 Simon Josefsson - - * gnus-sum.el (gnus-summary-dummy-line-format): - * gnus.el (gnus-summary-line-format): Fixing links to Info. - Trivial change from Bj,Av(Brn Torkelsson . - -2002-03-29 Kai Gro,b_(Bjohann - - * gnus-sum.el (gnus-summary-move-article) - (gnus-summary-copy-article): Mention `gnus-move-split-methods' in - the doc string. - -2002-03-28 Simon Josefsson - - * mml-sec.el (mml-secure-message): Search after - mail-header-separator from top of message. - -2002-03-28 Paul Jarc - - * nnmaildir.el: Cosmetic changes. - (nnmaildir--with-nntp-buffer, nnmaildir--with-work-buffer, - nnmaildir--with-nov-buffer, nnmaildir--with-move-buffer, - nnmaildir--group-ls): New macros/functions. Use them. - (nnmaildir--unlink): Evalutate argument only once. - -2002-03-27 Jesper Harder - - * gnus-sum.el (gnus-summary-highlight): Use `eq' when comparing - symbols. - (gnus-summary-highlight-line): Use `gnus-point-at-bol' and - `gnus-point-at-eol'. - -2002-03-27 Paul Jarc - - * nnmaildir.el (nnmaildir--subdir, nnmaildir--nov-dir, - nnmaildir--marks-dir): New macros. Use them. - Use inhibit-quit for atomicity instead of in-memory journaling. - (nnmaildir--edit-prep): New function. - (Local Variables): Use it. - -2002-03-26 Pavel@Janik.cz (Pavel Jan,Am(Bk) - - * gnus-sum.el (gnus-summary-make-menu-bar): Fix typo. - -2002-03-25 Simon Josefsson - - * message.el (message-mode): Fix doc. - -2002-03-25 Simon Josefsson - - * message.el (message-subject-re-regexp): Skip Re[42]: junk. From - Matthieu Moy . - -2002-03-24 Jesper Harder - - * mml-sec.el (mml-unsecure-message): Add docstring. - -2002-03-23 ShengHuo ZHU - - * nnmail.el (nnmail-large-newsgroup): Fix doc, allow non-numeric - value. - Trivial change from andre@slamdunknetworks.com - -2002-03-22 Josh Huber - - * mml.el (mml-mode-map): Added a keybinding for - `mml-unsecure-message'. Also, added a menu entry for said - function in the Attachments menu. - -2002-03-22 Katsumi Yamaoka - - * canlock.el (canlock-version): Remove. - (canlock-sha1-with-openssl): Don't use `canlock-string-as-unibyte' - here; simplify \x insertions. - (canlock-sha1): New function, always return a unibyte string. - (canlock-make-cancel-key): Use `canlock-sha1'; simplify truncation - of a password. - (canlock-insert-header): Use `canlock-sha1'. - (canlock-verify): Ditto. - -2002-03-21 ShengHuo ZHU - - * message.el (message-fix-before-sending): Add an option that - ignores illegible text. - Trivial change from Mark Milhollan - - * message.el (message-font-lock-keywords): Support multi-line MML - tags. - - * 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 - - * gnus-sum.el (gnus-summary-make-menu-bar): Use intern'ed function - symbols for "View as different encoding" submenu. - -2002-03-19 Simon Josefsson - - * gnus-sum.el (gnus-summary-make-menu-bar): Add "View as different - encoding" submenu. - -2002-03-19 ShengHuo ZHU - - * gnus-group.el (gnus-group-process-prefix): Make sure there is a mark. - -2002-03-19 Kai Gro,b_(Bjohann - - * gnus-sum.el (gnus-sum-thread-tree-root) - (gnus-sum-thread-tree-single-indent) - (gnus-sum-thread-tree-vertical, gnus-sum-thread-tree-indent) - (gnus-sum-thread-tree-leaf-with-other) - (gnus-sum-thread-tree-single-leaf): Make customizable. - -2002-03-16 Simon Josefsson - - * gnus-util.el (gnus-extract-address-components): Don't break on - names such as James "Kibo" Parry. From Francis Litterio - . - -2002-03-13 Simon Josefsson - - * pop3.el (pop3-open-server): Revert multibyte change. From - Pavel@Janik.cz (Pavel Jan,Am(Bk). - - * message.el (message-send-mail-with-qmail): Make it work. From - Pavel@Janik.cz (Pavel Jan,Am(Bk). - -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 - - * 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). - -2002-03-12 ShengHuo ZHU - - * message.el (message-abbrevs-loaded): Remove. - (mailabbrev): Require it. - - * nnslashdot.el (nnslashdot-request-article): Remove IFRAME. - -2002-03-12 Katsumi Yamaoka - - * pop3.el (pop3-open-server): Set process buffer unibyte. - -2002-03-10 Lars Magne Ingebrigtsen - - * gnus-fun.el (gnus-subscribe-to-mailing-list): New function. - -2002-03-10 ShengHuo ZHU - - * nnslashdot.el (nnslashdot-request-article): Remove javascript - too. - -2002-03-09 ShengHuo ZHU - - * 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 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. - - * nndoc.el (nndoc-mail-in-mail-type-p): Break a long regexp into - pieces. - -2002-03-05 Paul Jarc - - * nnnil.el: New file. - * gnus.el (gnus-valid-select-methods): Include nnnil. - -2002-03-05 ShengHuo ZHU - - * message.el (message-syntax-checks): Because canlock is - supported, we disable sender syntax check. - (message-shoot-gnksa-feet): Add cancel-messages option doc. - - * gnus-draft.el (gnus-draft-send): If interactive, use its default - value of message-syntax-checks. - - * qp.el (quoted-printable-decode-region): Doc addition. - From: Eli Zaretskii - - * mail-source.el (make-source-make-complex-temp-name): Use - make-temp-file. - - * mm-util.el (mm-make-temp-file): New function. - * nneething.el (nneething-file-name): Use it. - * mml-smime.el (mml-smime-encrypt): Ditto. - * mm-view.el (mm-inline-wash-with-file): Ditto. - * mm-decode.el (mm-display-external, mm-create-image-xemacs): Ditto. - * gnus-uu.el (gnus-uu-decode-binhex, gnus-uu-decode-binhex-view) - (gnus-uu-digest-mail-forward, gnus-uu-initialize): Ditto. - * gnus-start.el (gnus-slave-save-newsrc): Ditto. - * gnus-fun.el (gnus-convert-image-to-gray-x-face): Ditto. - * gnus-art.el (gnus-mime-print-part): Ditto. - -2002-03-04 Paul Jarc - - * message.el (nnmaildir-article-number-to-base-name): New - function. - (nnmaildir-base-name-to-article-number): New function. - -2002-03-04 Katsumi Yamaoka - - * smime.el (smime-make-temp-file): Don't quote - `temporary-file-directory'. - -2002-03-04 Simon Josefsson - - * smime.el (smime-sign-region): Rename argument keyfiles to - keyfile. You only sign something with one key. - (smime-sign-buffer): Better completing-read prompt. - (smime-decrypt-buffer): Ditto. - - * smime.el (smime-make-temp-file): Make it work under XEmacs. - - * mm-view.el (mm-view-pkcs7-decrypt): Better prompt for - completing-read. - (mm-view-pkcs7-decrypt): CRLF->LF. - -2002-03-04 Paul Jarc - - * message.el (message-hierarchical-addresses): New variable. - (message-get-reply-headers): Use it. - From Ted Zlatanov - -2002-03-03 ShengHuo ZHU - - * 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 - - * gnus-util.el (gnus-multiple-choice): Use message. XEmacs only - takes one argument in read-char. - - * message.el (message-fix-before-sending): Forward a char. - Check mmu-multibyte-p, add control-1. - -2002-03-01 ShengHuo ZHU - - * gnus-start.el (gnus-read-init-file): Ditto. - - * gnus-agent.el (gnus-agent-fetch-session): Ditto. - - * dgnushack.el (dgnushack-make-load): Ditto. - - * mail-source.el (mail-source-fetch): Extract the right error - code. - - * message.el (message-fix-before-sending): Check illegible text. - - * gnus-util.el (gnus-multiple-choice): New function. - - * gnus-kill.el (gnus-score-insert-help): Removed, because it is - also defined in gnus-score.el. - -2002-03-01 Paul Jarc - - * message.el (message-get-reply-headers): downcase email addresses - for comaparisons for duplicate removal. - -2002-03-01 ShengHuo ZHU - - * mm-view.el (mm-view-pkcs7-verify): New function. A bogus - implementation of PKCS#7, which just allows users read the - message. - (mm-view-pkcs7): Use it. - -2002-02-27 ShengHuo ZHU - - * gnus.el (large-newsgroup-initial): New parameter. - - * gnus-sum.el (gnus-articles-to-read): Use large-newsgroup-initial. - (gnus-summary-insert-old-articles): Ditto. - -2002-02-26 ShengHuo ZHU - - * 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 - - * nnagent.el (nnagent-retrieve-headers): Remove articles with - small numbers. - -2002-02-24 ShengHuo ZHU - - * deuglify.el: Fix comments. - -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. - - * mm-decode.el (mm-text-html-renderer): Add html2text. - - * html2text.el: Face lift. - - * html2text.el: New file from Joakim Hove . - -2002-02-22 ShengHuo ZHU - - * gnus-sum.el: Add gnus-article-outlook-deuglify-article. - - * 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 . - - * mm-decode.el (mm-display-external): Use - mm-file-name-rewrite-functions. From - -2002-02-22 Paul Jarc - - * nnmaildir.el (nnmaildir-request-list): Report the highest - article number, not the total number of articles. - -2002-02-21 ShengHuo ZHU - - * gnus-sum.el: Move uu key map here. - (gnus-summary-make-menu-bar): Add gnus-summary-save-parts. - -2002-02-21 Paul Jarc - - * nnmaildir.el (nnmaildir-request-expire-articles): Use - nnmail-expiry-wait* if expire-age parameter is not set. - -2002-02-21 ShengHuo ZHU - - * gnus-group.el (gnus-group-sort-groups-by-real-name): New - function. - (gnus-group-sort-selected-groups-by-real-name): New function. - (gnus-group-make-menu-bar): Add sort by real name. - - * gnus-sum.el (gnus-dependencies-add-header): If replaced, don't - rebuild. - (gnus-summary-edit-article-done): Gnus-get-newsgroup-headers takes - nil as dependencies as well. - -2002-02-20 ShengHuo ZHU - - * nndoc.el (nndoc-dissect-mime-parts-sub): Fix MIME-Version header - for mime-parts. - - * gnus-art.el (gnus-article-edit-done): Widen the buffer. - - * 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. - - * 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 - - * many files: Remove trailing whitespaces, replace spc+tab with - tab, replace leading whitespaces with tabs. - -2002-02-19 Paul Jarc - - * gnus-sum.el (gnus-summary-toggle-header): Fix handling of - articles with no body and no blank line after the header. - -2002-02-19 ShengHuo ZHU - - * mm-decode.el (mm-dissect-multipart): Consider the case of empty - parts. - - * ietf-drums.el (ietf-drums-syntax-table): Modify syntax of - non-ascii chars. - - * rfc2231.el (rfc2231-parse-string): Support non-ascii chars. - - * gnus-art.el (gnus-article-wash-html-with-w3): Remove - w3-delay-image-loads. - * mm-view.el (mm-inline-text-html-render-with-w3): Ditto. - (mm-w3-prepare-buffer): Ditto. - - * mail-source.el (mail-source-fetch-directory): Run scripts. - -2002-02-19 Lars Magne Ingebrigtsen - - * gnus-fun.el (gnus-respond-to-confirmation): Do the right thing - for Majordomo confirmations. - -2002-02-18 Lars Magne Ingebrigtsen - - * gnus-fun.el (gnus-respond-to-confirmation): New command. - -2002-02-11 Lars Magne Ingebrigtsen - - * nnultimate.el (nnultimate-retrieve-headers): Clean up. - -2002-02-18 Paul Jarc - - * gnus-util.el (gnus-parent-id): Ignore trailing whitespace in the - References header field. From Mark Thomas . - -2002-02-18 ShengHuo ZHU - - * mm-view.el (mm-inline-render-with-file): With unibyte buffer. - (mm-inline-render-with-stdin): Ditto. - (mm-inline-render-with-function): Ditto. - (mm-inline-wash-with-file): Bind coding-system-for-write. - (mm-inline-wash-with-stdin): Ditto. - -2002-02-18 ShengHuo ZHU - - Suggested by Felix Natter - - * gnus-art.el (gnus-mime-view-part-externally): Rename from - gnus-mime-externalize-view. - (gnus-mime-view-part-internally): Rename from - gnus-mime-internalize-view. - (gnus-article-view-part-externally): Rename from - gnus-article-externalize-part. - (gnus-mime-action-alist): Change correspondingly. - (gnus-mime-button-commands): Ditto. - (gnus-mime-action-alist): Remove duplication. - - * gnus-sum.el (gnus-summary-mime-map): Change correspondingly. - -2002-02-18 ShengHuo ZHU - - * mm-decode.el (mm-dissect-buffer): Add loose-mime parameter. - - * gnus-art.el (gnus-display-mime): Use it. - - * mm-partial.el (mm-partial-find-parts): Use it. - - * gnus-sum.el (gnus-article-loose-mime): Rename from - gnus-article-no-strict-mime. - (gnus-summary-save-parts): Use it. - -2002-02-18 Katsumi Yamaoka - - * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Remove unused - local variable. - - * gnus-art.el (article-display-x-face): Don't sort multiple - X-Faces. - -2002-02-18 Katsumi Yamaoka - - * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Improved to speed - up. Suggested by Yuuichi Teranishi . - - * gnus-art.el (article-display-x-face): Sort gray X-Faces. - -2002-02-17 ShengHuo ZHU - - Some ideas is inspired by code from Hrvoje Niksic - - - * gnus-art.el (gnus-article-wash-function): Set the default to - nil, so that we use mm-text-html-renderer instead. - (article-wash-html): Use mm-text-html-renderer. - - * mm-decode.el (mm-inline-media-tests): Use mm-inline-text-*. - (mm-text-html-renderer): New variable. - (mm-inline-text-html-renderer): Set the default to nil, so that we - use mm-text-html-renderer instead. - - * mm-view.el (mm-inline-text-html): New function. - (mm-text-html-renderer-alist): New variable. - (mm-inline-text-vcard): New function. - (mm-inline-text): Split. - (mm-links-remove-leading-blank): New function. - (mm-inline-render-with-file): New function. - (mm-inline-render-with-stdin): New function. - (mm-inline-render-with-function): New function. - (mm-text-html-washer-alist): New variable. - (mm-inline-wash-with-file): New function. - (mm-inline-wash-with-stdin): New function. - -2002-02-17 ShengHuo ZHU - - * message-utils.el: Fix installation doc. - From: Reiner Steib <4uce.02.r.steib@gmx.net> - -2002-02-16 ShengHuo ZHU - - * gnus-msg.el (gnus-discouraged-post-methods): New variable. - (gnus-post-method): Use it. - (gnus-summary-cancel-article): Find the correct post-method. - - * gnus-soup.el (gnus-soup-send-packet): Via ... using ... - * message.el (message-send-news): Ditto. - Suggested by Lloyd Zusman and IPmonger - - - * gnus.el (gnus-select-method): Fix doc. - (gnus-server-string): Use 'using nntp'. - - * gnus-agent.el (gnus-slave-unplugged): New command. - From: Felix Natter - -2002-02-15 ShengHuo ZHU - - * gnus-art.el (gnus-article-edit-done): Kill-all-local-variables. - Call edit-done-function first, then change the window - configuration. - (gnus-article-edit-mode-map): Add message key bindings. Add menu. - (gnus-article-edit-mode): mml-mode. - - * gnus-util.el (gnus-byte-compile): Work around a bug in XEmacs - 21.4. Suggested by Russ Allbery . - - * message-utils.el: Adopt the file. - - * message-utils.el: New file. - From Holger Schauer - -2002-02-14 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-move-article): Select-article only - when gnus-move-split-methods is non-nil. And we don't render or - mark the article. - - * gnus-fun.el (gnus-shell-command-to-string): New function. - (gnus-shell-command-on-region): New function. - (gnus-random-x-face): Use them. - (gnus-x-face-from-file): Ditto. - (gnus-convert-image-to-gray-x-face): Ditto. - (gnus-convert-gray-x-face-to-xpm): Ditto. - (gnus-convert-image-to-x-face-command): Don't use 2>/dev/null. - -2002-02-14 Katsumi Yamaoka - - * gnus-art.el (gnus-treat-display-xface): Don't use - `shell-command-to-string' when compiling. - (gnus-treat-display-grey-xface): Ditto. - -2002-02-13 Paul Jarc - - * nnmaildir.el (nnmaildir--article-count): If the group is - completely empty, report minimum article number as 1 instead of 0. - -2002-02-13 ShengHuo ZHU - - * gnus-agent.el (gnus-get-predicate): Use nconc. - - * gnus-sum.el (gnus-summary-display-make-predicate): Use - gnus-summary-display-cache as cache. - - * nndoc.el (nndoc-type-alist): Add mail-in-mail type. - (nndoc-mail-in-mail-type-p): New function. - (nndoc-mail-in-mail-article-begin): New function. - -2002-02-12 ShengHuo ZHU - - * mailcap.el (mailcap-mime-data): Use enriched-decode. - - * gnus-cite.el (gnus-article-fill-cited-article): Bind - use-hard-newlines to nil. - - * gnus-xmas.el (gnus-xmas-image-type-available-p): Assume that - image is not available if window-system is not available. - - * gnus-sum.el (gnus-summary-display-make-predicate): Add unread. - -2002-02-11 ShengHuo ZHU - - * gnus.el (gnus-article-unpropagated-mark-lists): Don't propagate - bookmark, because update-mark doesn't handle it correctly. - -2002-02-09 ShengHuo ZHU - - * gnus-soup.el (gnus-soup-send-packet): Send news and mail - directly instead of calling message-send-mail. - - * gnus-start.el (gnus-read-descriptions-file): Use - gnus-default-charset. - - * mm-util.el (mm-guess-mime-charset): New function. - - * gnus.el (gnus-default-charset): Use it. - (gnus-group-charset-alist): Remove .*, Let gnus-default-charset be - the default. - -2002-02-08 ShengHuo ZHU - - * gnus-art.el (gnus-treat-display-grey-xface): New variable. - (article-display-x-face): Use it. Disable grey xface, if - uncompface is not found. - - * message.el (message-mode): Don't enable multibyte on an indirect - buffer. - - * nnrss.el (nnrss-content-function): New variable. - (nnrss-request-article): Use it. - -2002-02-08 ShengHuo ZHU - - * gnus.el: Add article-unsplit-urls. - * gnus-sum.el: Ditto. - * gnus-art.el (gnus-treat-strip-cr): New variable. - (gnus-treatment-function-alist): Use it. - (article-unsplit-urls): New function. - (gnus-article-make-menu-bar): Use it. - From: Michael Cook - -2002-02-08 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-braid-nov): Find the first article to - copy. - -2002-02-07 Paul Jarc - - * gnus-util.el (gnus-split-references): Allow (broken) Message-IDs - with internal whitespace. - (gnus-parent-id): Ditto. - -2002-02-07 ShengHuo ZHU - - * gnus-art.el (gnus-article-treat-body-boundary): Add - 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. - - * rfc2047.el (rfc2047-unfold-region): Ditto. - (rfc2047-decode-region): Don't unfold. Let - gnus-article-treat-unfold-headers do it. - - * gnus-sum.el (gnus-dependencies-add-header): Fix typo. - From: Jesper Harder - -2002-02-06 Lars Magne Ingebrigtsen - - * gnus-msg.el (gnus-posting-styles): Add x-face-file. - (gnus-configure-posting-styles): Use it. - (gnus-configure-posting-styles): Remove trailing newspaces. - -2002-02-06 ShengHuo ZHU - - * gnus-sum.el (gnus-articles-to-read): Fetch all if the predicate - is non-nil. - - * mm-util.el (mm-use-find-coding-systems-region): Add doc. - - * gnus.el (gnus-server-to-method): Switch position with - gnus-server-get-method. - (gnus-agent): Add doc. - - * gnus-sum.el (gnus-article-no-strict-mime): New variable. - (gnus-summary-save-parts): Use it. - - * gnus-art.el (gnus-display-mime): Use it. - * mm-partial.el (mm-partial-find-parts): Use it. - - * 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 - - * message.el (message-gen-unsubscribed-mft): New function. - From Sriram Karra . - - * gnus.el (gnus-article-unpropagated-mark-lists): Backslash the - open parenthesis. - - * mm-view.el (mm-w3-prepare-buffer): Bind url-gateway-unplugged. - (mm-inline-text-html-render-with-w3): Ditto. - * gnus-art.el (gnus-article-wash-html-with-w3): Ditto. - Suggested by Dave Love . - - * mm-url.el (mm-url-load-url): Require w3-vars for old versions. - - * nntp.el (nntp-send-command-and-decode): Check PROCESS. - * nntp.el (nntp-send-command): Ditto. - * nntp.el (nntp-send-command-nodelete): Ditto. - -2002-02-04 ShengHuo ZHU - - * mm-url.el (mm-url-load-url): New function. - (mm-url-insert-file-contents): Use it. - - * gnus-msg.el (gnus-summary-mail-forward): Use gnus-article-charset. - - * message.el (message-forward-make-body): Correctly copy - forward-buffer. - - * rfc2047.el (rfc2047-decode-region): Don't decode us-ascii characters. - -2002-02-04 Simon Josefsson - - * gnus-art.el (gnus-article-followup-with-original): Mark with - force, prevent errors when following up from article buffer. - (gnus-article-reply-with-original): Ditto. - - * binhex.el (binhex-decoder-switches): Fix doc. From - Pavel@Janik.cz (Pavel Jan,Am(Bk). - -2002-02-04 ShengHuo ZHU - - * gnus-art.el (gnus-treatment-function-alist): Move hide-citation, - highlight-citation after emphasize. - -2002-02-04 Simon Josefsson - - * nnfolder.el (nnfolder-open-marks): - - * nnml.el (nnml-open-marks): Message when done. From David - Edmondson . - -2002-02-03 ShengHuo ZHU - - * imap.el (imap-anonymous-auth): Fix typo. - From: Steinar Bang - - * gnus-cache.el (gnus-cache-braid-nov): Use set-buffer instead of - save-excursion. - (gnus-cache-braid-heads): Ditto. - - * gnus-agent.el (gnus-agent-copy-nov-line): Move to the correct - line, because there are extra articles in the overview buffer. - - * nntp.el (nntp-retrieve-groups): Check whether BUF is live. - - * message.el (message-forward-rmail-make-body): Directly use - rmail-msg-restore-non-pruned-header to avoid calling - vertical-motion. - -2002-02-02 ShengHuo ZHU - - * gnus-cache.el (gnus-summary-insert-cached-articles): - (gnus-summary-limit-include-cached): gnus-newsgroup-cached is sorted. - - * gnus-group.el (gnus-group-mark-article-read): Nreverse - gnus-newsgroups-unselected. - - * gnus-agent.el (gnus-summary-set-agent-mark): Use - gnus-add-to-sorted-list. - - * gnus-sum.el (gnus-summary-update-info): gnus-newsgroup-unreads - gnus-newsgroup-unselected are sorted. Use gnus-sorted-union. - (gnus-build-all-threads): Use gnus-add-to-sorted-list. - (gnus-update-read-articles): UNREAD is sorted. - (gnus-newsgroup-unreads, gnus-newsgroup-unselected) - (gnus-newsgroup-marked, gnus-newsgroup-cached) - (gnus-newsgroup-expirable, gnus-newsgroup-downloadable) - (gnus-newsgroup-dormant): Require sorted. - - * gnus-dired.el (gnus-dired-find-file-mailcap): Correctly handle - directories. - (gnus-dired-print): New function. - - * gnus-art.el (gnus-mime-print-part): Add argument filename. Call - ps-despool. - -2002-02-02 Simon Josefsson - - * gnus-dired.el (turn-on-gnus-dired-mode): Autoload. Make defun. - -2002-02-02 ShengHuo ZHU - - * gnus-start.el (gnus-1): Call gnus-agentize if gnus-agent is - t. This makes gnus-agent customizable without putting - gnus-agentize into .gnus. - - * 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-01 Simon Josefsson - - * gnus-int.el (gnus-request-accept-article): Use gnus-get-function. - -2002-02-01 Katsumi Yamaoka - - * mm-view.el (mm-w3m-mode-dont-bind-keys): New variable. - (mm-setup-w3m): Don't bind keys listed in the above. - -2002-02-01 Katsumi Yamaoka - - * mm-view.el (mm-inline-text-html-render-with-w3m): Bind - `w3m-safe-url-regexp' with nil if `mm-inline-text-html-with-images' - is non-nil; bind `w3m-force-redisplay' with nil. - - * gnus-art.el (gnus-article-wash-html-with-w3m): Ditto. - - * mm-decode.el (mm-inline-text-html-with-images): Supplement docs. - -2002-01-31 ShengHuo ZHU - - * nnfolder.el (nnfolder-request-replace-article): Unfold. Don't - use mail-header-unfold-field. - - * gnus-cache.el (gnus-summary-insert-cached-articles): Use - gnus-summary-limit. - - * gnus-range.el (gnus-add-to-sorted-list): New function. - * gnus-sum.el (gnus-mark-article-as-read): Use it. - (gnus-mark-article-as-unread): Ditto. - (gnus-summary-mark-article-as-unread): Ditto. - (gnus-build-get-header): Ditto. - (gnus-summary-prepare-threads): Ditto. - (gnus-summary-insert-pseudos): Ditto. - (gnus-articles-to-read): Use gnus-sorted-union and gnus-sorted-nunion. - (gnus-summary-insert-new-articles): Use gnus-sorted-nunion. - (gnus-summary-insert-old-articles): Ditto. - - * gnus-msg.el (gnus-posting-styles): Add new format of header. - (gnus-configure-posting-styles): Support the new format. - - * mail-source.el (mail-source-bind, mail-source-bind-common): Set - edebug-form-spec to (sexp body). - Suggested by Joe Wells . - - * message.el (message-reply-headers): Add doc. - -2002-01-30 ShengHuo ZHU - - * gnus-group.el (gnus-group-delete-group): Nix the entry in - gnus-cache-active-hashtb. - - * gnus-agent.el (gnus-agent-mark-unread-afer-downloaded): New variable. - (gnus-agent-summary-fetch-group): Use it. - - * gnus-msg.el (gnus-debug-files): New variable. - (gnus-debug-exclude-variables): New variable. - (gnus-debug): Use them. - - * gnus-range.el (gnus-range-length): Don't use gnus-uncompress-range. - -2002-01-30 ShengHuo ZHU - - * message.el (message-cite-prefix-regexp): Use text-mode-syntax-table. - (message-mode-syntax-table): Move back the previous position. - - * nnagent.el (nnagent-retrieve-headers): Use gnus-sorted-difference. - - * gnus-agent.el (gnus-agent-retrieve-headers): Use - gnus-sorted-difference. - - * nnsoup.el (nnsoup-request-expire-articles): Use - gnus-sorted-difference. - - * nnheader.el: Autoload gnus-sorted-difference. - - * nnfolder.el (nnfolder-request-expire-articles): Use - gnus-sorted-difference. - - * gnus-cache.el (gnus-cache-retrieve-headers): Use - gnus-sorted-difference. - - * gnus-range.el: Autoload cookies. - (gnus-sorted-difference): New function. - (gnus-sorted-ndifference): New function. - (gnus-sorted-nintersection): Rename from - gnus-set-sorted-intersection. - (gnus-sorted-nunion): Rename from gnus-set-sorted-union. - (gnus-list-range-difference): Rename from - gnus-inverse-list-range-intersection. - (gnus-inverse-list-range-intersection): Use defalias. - - * gnus-sum.el (gnus-select-newsgroup): Use gnus-sorted-difference, - gnus-sorted-ndifference, and gnus-sorted-nintersection. - (gnus-articles-to-read): Use gnus-sorted-difference. - (gnus-summary-limit-mark-excluded-as-read): Use - gnus-sorted-intersection and gnus-sorted-ndifference. - (gnus-list-of-read-articles): Use gnus-list-range-difference. - (gnus-summary-insert-articles): Use gnus-sorted-difference. - - * gnus-sum.el (gnus-summary-update-info): Use gnus-sorted-union. - -2002-01-30 Katsumi Yamaoka - - * gnus-art.el (gnus-article-wash-html-with-w3m): Add keymap - property to the buffer for using emacs-w3m command keys. - - * mm-decode.el (mm-inline-text-html-with-w3m-keymap): New user - option. - - * mm-view.el (mm-w3m-mode-map): New variable. - (mm-w3m-mode-command-alist): New variable. - (mm-w3m-minor-mode): Removed. - (mm-setup-w3m): Setup `mm-w3m-mode-map'; don't add minor mode. - (mm-inline-text-html-render-with-w3m): Add keymap property to the - buffer for using emacs-w3m command keys. - -2002-01-29 ShengHuo ZHU - - * message.el (message-mode-syntax-table): Move forward. - (message-cite-prefix-regexp): Auto detect non word constituents. - (message-cite-prefix-regexp): Don't use with-syntax-table. - - * gnus-sum.el (gnus-summary-update-info): Use - gnus-list-range-intersection. - - * gnus-agent.el (gnus-agent-fetch-headers): Use - gnus-list-range-intersection. - - * gnus-range.el (gnus-range-normalize): Use correct predicate. - (gnus-list-range-intersection): Use it. - (gnus-inverse-list-range-intersection): Ditto. - (gnus-sorted-intersection): Add doc. - (gnus-set-sorted-intersection): Add doc. - (gnus-sorted-union): New function. - (gnus-set-sorted-union): New function. - - * gnus-range.el (gnus-list-range-intersection): Correct the logic. - (gnus-inverse-list-range-intersection): Ditto. - -2002-01-29 Karl Kleinpaste - - * mm-uu.el (mm-uu-type-alist): Add optional leading `0'. - - * gnus-uu.el (gnus-uu-shar-name-marker): Add optional leading `0' - and permit `:' and `\' in order to handle full Windows pathnames. - (gnus-uu-begin-string): Add optional leading `0'. Leading `0' is - technically not correct per standard, but seems to have common use. - -2002-01-29 ShengHuo ZHU - - * gnus-uu.el (gnus-uu-expand-numbers): Ignore errors when - replacing numbers. - -2002-01-28 ShengHuo ZHU - - * gnus-art.el (gnus-article-followup-with-original): Use (mark). - - * gnus-score.el (gnus-score-insert-help): Move to (point-min). - Don't split when the window is small, e.g. when a small *BBDB* - window is the lowest one. - - * gnus-agent.el (gnus-agent-retrieve-headers): Use - nnheader-find-nov-line to speed up. Use nreverse, because it is - sorted. Use nnheader-insert-nov-file. - -2002-01-28 Katsumi Yamaoka - - * mm-decode.el (mm-inline-text-html-with-images): New user option. - - * mm-view.el (mm-inline-text-html-render-with-w3m): Bind the value - of `w3m-display-inline-images' with the value of - `mm-inline-text-html-with-images'. - From: TSUCHIYA Masatoshi . - - * gnus-art.el (gnus-article-wash-html-with-w3m): Ditto. - -2002-01-27 Richard M. Stallman - - * time-date.el: Add autoload cookies. Many doc fixes. - (time-add): New function. - (time-subtract): Renamed from subtract-time. - (subtract-time): New alias for time-subtract. - -2002-01-28 Katsumi Yamaoka - - * gnus-art.el (gnus-article-wash-html-with-w3m): Replace w3m to - emacs-w3m in doc-string. - - * lpath.el: Bind `w3m-cid-retrieve-function-alist' and - `w3m-current-buffer'. - -2002-01-27 TSUCHIYA Masatoshi - - * gnus-art.el (gnus-article-wash-html-with-w3m): Handle cid: URLs. - - * mm-view.el (mm-setup-w3m): Add `mm-w3m-cid-retrieve' to - `w3m-cid-retrieve-function-alist' for `gnus-article-mode'. - (mm-w3m-cid-retrieve): New function. - (mm-inline-text-html-render-with-w3m): Handle cid: URLs. - -2002-01-27 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-fetch-articles): Don't save empty articles. - -2002-01-27 Lars Magne Ingebrigtsen - - * gnus-util.el (gnus-cache-file-contents): Don't use equalp. - -2002-01-26 Lars Magne Ingebrigtsen - - * nnheader.el (nnheader-insert-nov-file): Increased cutoff to - 32K. - - * gnus-sum.el (gnus-summary-expire-articles): Clean up. - - * nnmail.el (nnmail-article-group): Decode headers before running - split rules over them. - (nnmail-mail-splitting-charset): New variable. - - * smiley.el: Replaced with smiley-ems.el. - -2002-01-26 ShengHuo ZHU - - * mm-url.el (mm-url-predefined-programs): Add w3m. - (mm-url-program): Ditto. - -2002-01-26 Lars Magne Ingebrigtsen - - * nnml.el (nnml-use-compressed-files): New variable. - (nnml-filenames-are-evil): Removed. - (nnml-current-group-article-to-file-alist): Don't use. - (nnml-update-file-alist): Inhibit. - (nnml-article-to-file): Use new var. - -2002-01-26 ShengHuo ZHU - - * gnus-util.el (gnus-parse-without-error): Add edebug-form-spec. - - * nnagent.el (nnagent-retrieve-headers): loop until eobp. - -2002-01-26 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-agent-load-alist): Use new caching - function. - - * gnus-util.el (gnus-cache-file-contents): New function. - - * gnus-agent.el (gnus-agent-file-loading-cache): New variable. - (gnus-agent-load-alist): Use it. - - * nnagent.el (nnagent-retrieve-headers): Use optimized function. - - * nnheader.el (nnheader-insert-nov-file): New function. - - * gnus-util.el (gnus-parse-without-error): Correct the loop. - - * gnus-sum.el (gnus-dependencies-add-header): Use in-reply-to if - there are no references. - (gnus-extract-message-id-from-in-reply-to): New function. - (gnus-nov-parse-line): Use in-reply-to if there are no - references. - -2002-01-25 Lars Magne Ingebrigtsen - - * nnagent.el (nnagent-retrieve-headers): Use new macro. - - * gnus-util.el (gnus-parse-without-error): New macro. - -2002-01-25 ShengHuo ZHU - - * gnus-art.el (gnus-article-wash-html-with-w3m): Call w3m-region. - (gnus-article-wash-function): use locate-library to decide which - to use. - -2002-01-25 Simon Josefsson - - * pop3.el (pop3-munge-message-separator): Work if no date. - Trivial patch from Marius Vollmer . - -2002-01-25 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-agent-save-alist): Fix. - - * nnagent.el (nnagent-retrieve-headers): Must have cut too much by - mistake. Reinstated lost code. - -2002-01-25 Josh Huber - - * mml2015.el (mml2015-mailcrypt-decrypt): Display a signature if - one exists in the case of an encrypted message with an internal - signature. - -2002-01-25 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-agent-save-alist): Optimized. - -2002-01-25 Katsumi Yamaoka - - * dgnushack.el: Commented out the experimental code. - -2002-01-25 Lars Magne Ingebrigtsen - - * gnus-range.el (gnus-inverse-list-range-intersection): Off-by-one - error. - - * gnus.el (gnus-server-to-method): Made into subst. - (gnus-server-method-cache): New variable. - (gnus-server-to-method): Use it. - (gnus-group-method-cache): New variable. - (gnus-find-method-for-group-1): Renamed. - (gnus-find-method-for-group): New function. - (gnus-group-method-cache): Removed. - - * gnus-sum.el (gnus-compute-unseen-list): Use new optimized - function. - - * gnus-range.el (gnus-members-of-range): New function. - (gnus-list-range-intersection): Renamed. - (gnus-inverse-list-range-intersection): New function. - - * gnus-sum.el (gnus-compute-unseen-list): Made into own function. - - * nnagent.el (nnagent-retrieve-headers): New implementation. - - * gnus-agent.el (gnus-agent-get-undownloaded-list): New, faster - implementation. - -2002-01-25 Katsumi Yamaoka - - * lpath.el: Fbind `w3m-charset-to-coding-system'; bind - `w3m-meta-content-type-charset-regexp'. - - * mm-view.el (mm-inline-text-html-render-with-w3m): Decode - charset-encoded html contents. - -2002-01-24 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-request-article): Make sure it is not - an empty file. - - * nnweb.el (url): Ignore errors when request url. - - * nnrss.el: Clean up the comments. - -2002-01-24 Katsumi Yamaoka - - * lpath.el: Fbind `w3m-region'; bind `w3m-mode-map'. - - * mm-decode.el (mm-inline-text-html-renderer): New user option. - (mm-inline-media-tests): Test whether the value of - `mm-inline-text-html-renderer' is a function for text/html. - - * mm-view.el (mm-inline-text-html-render-with-w3): New function - separated from `mm-inline-text'. - (mm-w3m-minor-mode): New variable. - (mm-w3m-setup): New variable. - (mm-setup-w3m): New function. - (mm-inline-text-html-render-with-w3m): New function. - (mm-inline-text): Funcall `mm-inline-text-html-renderer' for - text/html. - -2002-01-23 Paul Jarc - - * lpath.el: fbind make-symbolic-link and unix-sync for nnmaildir. - -2002-01-23 Katsumi Yamaoka - - * gnus-xmas.el (gnus-xmas-redefine): Quote `gnus-completing-read' - and `gnus-xmas-completing-read'. - -2002-01-19 TSUCHIYA Masatoshi - - * nneething.el (nneething-message-id-number): Abolished. - (nneething-encode-file-name): Not encode numerical characters. - (nneething-make-head): `nneething-message-id-number' is not - used to generate message IDs. - -2002-01-23 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-emphasis-alist): Include !? as sentence-ending - characters. - -2002-01-22 Lars Magne Ingebrigtsen - - * gnus-xmas.el (gnus-xmas-completing-read): New function. - (gnus-xmas-redefine): Redefine conditionally. - -2002-01-22 Josh Huber - - * mml.el (mml-parse-1): Fixed usage of recipients in the secure - tag. - -2002-01-22 Josh Huber - - * message.el (message-font-lock-keywords): Added the secure tag. - * mml-sec.el: Added functions to generate/modify/remove the secure - tag while in message mode. - * mml-sec.el (mml-secure-message): New. - * mml-sec.el (mml-unsecure-message): New. - * mml-sec.el (mml-secure-message-sign-smime): New. - * mml-sec.el (mml-secure-message-sign-pgp): New. - * mml-sec.el (mml-secure-message-sign-pgpmime): New. - * mml-sec.el (mml-secure-message-encrypt-smime): New. - * mml-sec.el (mml-secure-message-encrypt-pgp): New. - * mml-sec.el (mml-secure-message-encrypt-pgpmime): New. - * mml.el (mml-parse-1): Added code to recognise the secure tag and - convert it to either a part or multipart depending on if there are - other parts in the message. - * mml.el (mml-mode-map): Changed default sign/encrypt keybindings - to use the secure tag, rather than the part tag. - * mml.el (mml-preview): Added a save-excursion to keep cursor - position after doing an MML preview. - -2002-01-22 Lars Magne Ingebrigtsen - - * nnheader.el (nnheader-parse-overview-file): New function. - (nnheader-write-overview-file): New function. - -2002-01-21 Lars Magne Ingebrigtsen - - * gnus.el (gnus-group-fast-parameter): Check better if expansion - in wanted. - - * nnweb.el (nnweb-type-definition): Clean up. - -2002-01-21 Alastair Burt - Trivial patch. - - * gnus-art.el (gnus-mm-display-part): Make sure that the summary - buffer exists before jumping to it. - -2002-01-21 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-article-wash-html-with-w3): Made into own - function. - (article-wash-html): Use it. - (gnus-article-wash-function): New variable. - (gnus-article-wash-html-with-w3m): New function. - -2002-01-20 Bj,Av(Brn Torkelsson - - * dgnushack.el (dgnushack-compile): Compile smiley-ems for - XEmacs. - -2002-01-20 John H. Palmieri - - * gnus-fun.el (gnus-convert-image-to-gray-x-face): More standard - command line. - -2002-01-21 Simon Josefsson - - * canlock.el (base64-encode-string): Autoload it from base64. - (canlock-make-cancel-key): Base64 encode unibyte string. - -2002-01-20 Lars Magne Ingebrigtsen - - * nnfolder.el (nnfolder-request-accept-article): Unfold - x-from-line. - (nnfolder-request-replace-article): Ditto. - -2002-01-20 Nevin Kapur - - * gnus-group.el (gnus-group-best-unread-group): Use the right - positioning function. - -2002-01-20 Lars Magne Ingebrigtsen - - * smiley-ems.el (smiley-region): Use new function. - (smiley-update-cache): Use general image functions. - (smiley-region): Use general functions. - - * gnus-util.el (gnus-graphic-display-p): New function. - - * nnmail.el (nnmail-article-group): Allow outputting traces of - non-strings. - - * nndoc.el (nndoc-type-alist): Rules for exim bounces. - (nndoc-exim-bounce-type-p): New function. - - * message.el (message-dont-send): Doc fix. - - * gnus-util.el (gnus-completing-read): Remove - inherit-input-method. - - * gnus-art.el (gnus-treat-smiley): Doc fix. - - * gnus-agent.el (gnus-agent-fetch-headers): Ignore seen and recent - articles. - -2002-01-19 Simon Josefsson - - * imap.el (imap-gssapi-open): Don't wait for logout to complete. - (imap-kerberos4-open): Ditto. - (imap-open): Set port correctly, don't set auth. - -2002-01-20 Lars Magne Ingebrigtsen - - * gnus.el (gnus-version-number): Bump version number. - -2002-01-20 05:33:30 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.05 is released. - -2002-01-20 Lars Magne Ingebrigtsen - - * nnkiboze.el (nnkiboze-generate-group): Make sure the directory - exists. - - * gnus-spec.el (gnus-string-width-function): New function. - (gnus-tilde-cut-form): Use it. - (gnus-tilde-max-form): Ditto. - (gnus-use-correct-string-widths): Default to (featurep 'xemacs). - (gnus-substring-function): Use it. - (gnus-tilde-cut-form): Ditto. - (gnus-substring-function): New function. - - * message.el (message-check-news-header-syntax): New message. - - * gnus.el (gnus-slave-no-server): Doc fix. - - * gnus-spec.el (gnus-use-correct-string-widths): Default to t. - -2002-01-15 Katsumi Yamaoka - - * gnus-sum.el (gnus-adjust-marked-articles): Fix the record for - `seen' if it looks like (seen NUM1 . NUM2). It should be - (seen (NUM1 . NUM2)). - -2002-01-20 Lars Magne Ingebrigtsen - - * gnus-topic.el (gnus-topic-catchup-articles): Update article - number in closed topics. - -2002-01-19 Daniel Pittman - - * gnus-sum.el (gnus-summary-first-unseen-or-unread-subject): New - functions. - -2002-01-19 Lars Magne Ingebrigtsen - - * gnus.el (gnus-group-find-parameter): Clean up. - - * gnus-sum.el (gnus-summary-goto-subject): Error on non-numerical - articles. - - * gnus-util.el (gnus-completing-read-with-default): Renamed. - - * nnmail.el (nnmail-article-group): Clean up. - -2002-01-19 Paul Stodghill - - * gnus-agent.el (gnus-category-name): Intern the category name. - -2002-01-19 Lars Magne Ingebrigtsen - - * gnus-topic.el (gnus-topic-move-group): Use gnus-topic-history. - - * gnus-util.el (gnus-completing-read): New function. - -2002-01-19 ShengHuo ZHU - - * gnus-art.el (gnus-add-wash-type): Use add-to-list. - - * smiley-ems.el (smiley-region): Register smiley. - (smiley-toggle-buffer): Rewrite the function. - (smiley-active): Removed. - -2002-01-19 Simon Josefsson - - * gnus-util.el (gnus-parent-id): Optimize null n case. From - Jesper Harder . - -2002-01-18 TSUCHIYA Masatoshi - - * gnus-art.el (gnus-request-article-this-buffer): Call - `nneething-get-file-name' to extract the file name from the - message id. - - * nneething.el (nneething-encode-file-name): New function. - (nneething-decode-file-name): Ditto. - (nneething-get-file-name): Ditto. - (nneething-make-head): Encode the file name and encapsulate it - into the field of the message id. - -2002-01-18 Simon Josefsson - - * nnml.el (nnml-request-update-info): Don't erase flags that isn't - stored in .marks. - - * nnfolder.el (nnfolder-request-update-info): Ditto. - -2002-01-18 ShengHuo ZHU - - * gnus-art.el (gnus-url-parse-query-string): Allow new line in value. - -2002-01-18 Simon Josefsson - - * imap.el (imap-starttls-p): Don't check for binary. - (imap-gssapi-auth-p): Ditto. - (imap-kerberos4-auth-p): Ditto. - (imap-open): Change logic. Iterate through all possible streams, - instead of bailing out after first failure. Move authenticator - decision to `imap-authenticate'. - (imap-authenticate): Change logic, now finds the authenticator to - use, was previously in `imap-open'. - (imap-open): Return nil on failure. - (imap-open): Setup temp buffer correctly. - (imap-open): Return buffer only on success. - (imap-interactive-login, imap-interactive-login): Tell the user - which stream/authenticator is used for the queried - username/password. - (imap-open, imap-authenticate): Set variables. - (imap-gssapi-auth-p, imap-kerberos4-auth-p): Fix typo. - (imap-open): Don't assume how `with-temp-buffer' is implemented. - -2002-01-17 Lars Magne Ingebrigtsen - - * gnus-fun.el (gnus-grab-cam-x-face): New function. - -2002-01-16 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-emphasis-alist): Allow matching "*this*.)". - -2002-01-17 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-toggle-group-plugged): New function. - (gnus-agent-group-mode-map): Bind it to "Jo". - (gnus-agent-group-make-menu-bar): Add it into menu bar. - -2002-01-17 Karl Kleinpaste - - * gnus-xmas.el (gnus-group-toolbar): Add .newsrc save button. - (gnus-summary-mail-toolbar): Add mail article deletion button. - - * smiley.el (smiley-deformed-regexp-alist): Eliminate noseless - false positives for lines of "^^^^". - - * gnus-picon.el (gnus-picon-find-face): faces database is all - lowercase. - -2002-01-17 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-retrieve-headers): Use correct buffer. - (gnus-agent-braid-nov): Switch back to nntp-server-buffer. Remove - duplications. - (gnus-agent-batch): Bind gnus-agent-confirmation-function. - -2002-01-16 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-initial-limit): Inline - gnus-summary-limit-children. - (gnus-summary-initial-limit): Don't limit if - gnus-newsgroup-display is nil. - (gnus-summary-initial-limit): No, don't. - - * gnus-util.el - (gnus-put-text-property-excluding-characters-with-faces): Inline - gnus-put-text-property. - - * gnus-spec.el (gnus-default-format-specs): New variable. - - * gnus-start.el (gnus-read-newsrc-file): Don't clear - gnus-format-specs. - (gnus-read-newsrc-el-file): Default to gnus-default-format-specs. - - * gnus-spec.el (gnus-update-format-specifications): Really check - the Gnus version of the .newsrc.eld file. - (gnus-format-specs): Save the new default summary format. - - * gnus-util.el (gnus-parent-id): Check whether references is empty - before splitting. - - * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Inline some - functions. - (gnus-gather-threads-by-references): Inline - `gnus-split-references'. - - * gnus-spec.el (gnus-summary-line-format-spec): New, optimized - default value of gnus-summary-line-format-spec. - -2002-01-15 ShengHuo ZHU - - * nnslashdot.el (nnslashdot-retrieve-headers-1): A better error - message. - (nnslashdot-request-list): Ditto. - (nnslashdot-sid-strip): Removed. - -2002-01-15 Simon Josefsson - - * nnimap.el (nnimap-close-asynchronous): Enable. - (nnimap-close-group): Expunge. - -2002-01-15 ShengHuo ZHU - - * gnus-util.el (gnus-user-date-format-alist): Typo. - From: Frank Schmitt - -2002-01-15 TSUCHIYA Masatoshi - - * nneething.el (nneething-request-article): Set - `nnmail-file-coding-system' to `binary' locally, in order to read - files without any conversion. - -2002-01-15 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-retrieve-headers): Use - nnheader-file-coding-system and nnmail-active-file-coding-system. - (gnus-agent-regenerate-group): Ditto. - (gnus-agent-regenerate): Ditto. - (gnus-agent-write-active): Ditto. - Suggested by Katsumi Yamaoka - -2002-01-14 ShengHuo ZHU - - * gnus-art.el (gnus-button-alist): Don't highlight - -2002-01-14 ShengHuo ZHU - - * gnus.el: We don't need gnus-article-show-all-headers. - - * gnus-art.el (article-show-all, gnus-article-show-all-header): - Ditto. - - * gnus-sum.el (gnus-summary-select-article): Don't call - show-all-headers, because hidden headers are not hidden text any - more. - -2002-01-13 Simon Josefsson - - * message.el (message-newline-and-reformat): Use `newline' instead - of inserting \n, so that the newline is marked as hard. - - * gnus-spec.el (gnus-pad-form): Don't evaluate EL multiple times. - From Jesper Harder . - -2002-01-12 ShengHuo ZHU - - * imap.el (imap-close): Keep going if quit. - - * gnus-agent.el (gnus-agent-retrieve-headers): Erase - nntp-server-buffer. - -2002-01-12 Lars Magne Ingebrigtsen - - * mm-view.el (mm-display-inline-fontify): Require font-lock to - avoid unbinding shadowed variables. - - * gnus-art.el (gnus-picon-databases): Moved here. - (gnus-picons-installed-p): Moved here. - (gnus-article-reply-with-original): Use `mark'. - - * gnus.el (gnus-picon): Moved here and renamed. - - * gnus-art.el (gnus-treat-from-picon): Only be on if picons are - installed. - (gnus-treat-mail-picon): Ditto. - (gnus-treat-newsgroups-picon): Ditto. - - * gnus-picon.el (gnus-picons-installed-p): New function. - -2002-01-12 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-go-online): Fix doc. - -2002-01-12 Simon Josefsson - - * nnimap.el (nnimap-need-unselect-to-notice-new-mail) - (nnimap-before-find-minmax-bugworkaround): Use it. - (nnimap-find-minmax-uid): Don't reselect current mailbox. - (nnimap-dont-close): New variable. - (nnimap-close-group): Use it. - -2002-01-12 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-article-reply-with-original): Use - `mark-active'. - - * gnus-msg.el (gnus-summary-reply): Don't bug out on regions. - - * gnus-logic.el (gnus-advanced-score-rule): Thinko fix. - (gnus-score-advanced): Clean up. - (gnus-score-advanced): Accept a multiple of the score. - -2002-01-12 Simon Josefsson - - * flow-fill.el (fill-flowed-display-column) - (fill-flowed-encode-columnq): New variables. Suggested by - Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Gro,b_(Bjohann). - (fill-flowed-encode, fill-flowed): Use them. - - * message.el (message-send-news, message-send-mail): Use - m-b-s-n-p-e-h-n. - - * mml.el (autoload): Autoload fill-flowed-encode. - (mml-buffer-substring-no-properties-except-hard-newlines): New - function. - (mml-read-part): Use it. - (mml-generate-mime-1): Encode format=flowed if appropriate. - (mml-insert-mime-headers): Insert format=flowed. - - * flow-fill.el (fill-flowed-encode): New function. - (fill-flowed): Bind fill-column to window width. - -2002-01-12 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-buffer-name): Return the dead name if - it exists. - (gnus-summary-setup-buffer): Wake up dead summary buffers. - (gnus-summary-buffer-name): Don't return the dead name after all. - (gnus-summary-setup-buffer): Kill the dead buffer. - - * gnus-art.el (gnus-article-followup-with-original): Store the - value of the mark before deactivating it. - -2002-01-11 ShengHuo ZHU - - * gnus-fun.el (gnus-display-x-face-in-from): Fake it. - From: Karl Kleinpaste - - * gnus-art.el (article-display-x-face): Ditto. - (gnus-article-reply-with-original): Use gnus-region-active-p. - (gnus-article-followup-with-original): Ditto. - - * gnus-sum.el (gnus-summary-read-group-1): Don't select - downloadable article either. - -2002-01-11 ShengHuo ZHU - - * gnus-art.el (article-display-x-face): Insert From:. - - * gnus-sum.el (gnus-summary-move-article): Don't draw the - article. Bind gnus-display-mime-function and - gnus-article-prepare-hook. - - * gnus-agent.el (gnus-agent-retrieve-headers): Load agentview. - (gnus-agent-toggle-plugged): Use gnus-agent-go-online. Move - gnus-agent-possibly-synchronize-flags to the last. - (gnus-agent-go-online): New function. New variable. - -2002-01-11 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-regenerate-group): Add clean option. - (gnus-agent-regenerate): Ditto. - -2002-01-11 ShengHuo ZHU - - * message.el (message-ignored-news-headers) - (message-ignored-mail-headers): Add X-Gnus-Agent-Meta-Information:. - Suggested by ARISAWA Akihiro - - * gnus.el (gnus-gethash-safe): New macro. - - * gnus-agent.el (gnus-agent-regenerate-history): New function. - (gnus-agent-regenerate): Show messages. - -2002-01-11 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-regenerate-group): New function. - (gnus-agent-regenerate): New function. - (gnus-agent-save-alist): Sort. - (gnus-agent-copy-nov-line): Test eobp. - (gnus-agent-retrieve-headers): Erase buffer. - -2002-01-10 ShengHuo ZHU - - * mm-util.el (mm-charset-to-coding-system): Change charset to cs. - From: Torsten Hilbrich - - * gnus.el (gnus-agent-covered-methods): Move here. - (gnus-online): New function. - (gnus-agent-method-p): Move here. - - * nnagent.el (nnagent-retrieve-headers): Check whether arts is - nil. Remove articles-alist. - - * gnus-start.el (gnus-get-unread-articles): Check online. - (gnus-groups-to-gnus-format): Ditto. - (gnus-active-to-gnus-format): Ditto. - - * gnus-agent.el (gnus-agent-get-function): Use it. - (gnus-agent-get-undownloaded-list): Ditto. - (gnus-agent-fetch-session): Only fetch online methods. - - * gnus-srvr.el (gnus-server-make-menu-bar): Add offline. - (gnus-server-mode-map): Ditto. - (gnus-server-offline-face): New face. - (gnus-server-offline-face): New variable. - (gnus-server-font-lock-keywords): Add offline. - (gnus-server-insert-server-line): Ditto. - (gnus-server-offline-server): New function. - - * gnus-int.el (gnus-open-server): Turn to offline. - (gnus-server-unopen-status): New variable. - -2002-01-10 ShengHuo ZHU - - * nnkiboze.el (nnkiboze-request-article): Use - gnus-agent-request-article. - - * nnagent.el (nnagent-retrieve-headers): Don't use nnml - function. Insert undownloaded NOV. - - * gnus-agent.el (gnus-agent-retrieve-headers): New function. - (gnus-agent-request-article): New function. - - * gnus.el (gnus-agent-cache): New variable. - - * gnus-int.el (gnus-retrieve-headers): Use - gnus-agent-retrieve-headers. - (gnus-request-head): Use gnus-agent-request-article. - (gnus-request-body): Ditto. - - * gnus-art.el (gnus-request-article-this-buffer): Use - gnus-agent-request-article. - - * gnus-sum.el (gnus-summary-read-group-1): Don't show the first - article if it is undownloaded. - -2002-01-10 Katsumi Yamaoka - - * gnus-spec.el (gnus-spec-tab): Deal with wide characters. - -2002-01-09 Katsumi Yamaoka - - * canlock.el (canlock-string-as-unibyte): New macro. - (canlock-sha1-with-openssl): Return a unibyte string. - (canlock-make-cancel-key): Treat Message-ID as a unibyte string. - -2002-01-09 ShengHuo ZHU - - * gnus.el (gnus-expand-group-parameters): Match \N or \& only. - -2002-01-08 ShengHuo ZHU - - * mm-encode.el (mm-content-transfer-encoding-defaults): Add - application/x-emacs-lisp. - - * gnus-msg.el (gnus-bug): Use application/emacs-lisp. - - * nntp.el (nntp-request-article): Add group parameter. - (nntp-request-head): Ditto. - (nntp-find-group-and-number): Add parameter group. Figure out - number if the status line doesn't give (e.g. quimby.gnus.org). - -2002-01-08 Simon Josefsson - - * mml.el (mml-generate-mime-1): Set recipient correctly. - -2002-01-08 ShengHuo ZHU - - * message.el (message-read-from-minibuffer): Add parameter - initial-contents. - * gnus-msg.el (gnus-summary-resend-message): Use it. - - * gnus-group.el (gnus-group-read-ephemeral-group): Restore the old - behavior of quit-config. - - * message.el (message-make-from): Don't quote fullname. - From: Bj,Ax(Brn Mork - - * gnus-group.el (gnus-group-suspend): Don't kill message buffers. - From: - -2002-01-07 ShengHuo ZHU - - * gnus-group.el (gnus-group-mark-article-read): Typo. Increase n. - - * gnus-art.el (gnus-header-button-alist): Handle mailto. - - * mml.el (mml-preview): Bind gnus-original-article-buffer because - article-decode-group-name uses it. Bind gnus-article-prepare-hook - because bbdb may use it. - -2002-01-07 TSUCHIYA Masatoshi - - * nneething.el (nneething-request-article): When a non-text file - is converted to an article, its data is encoded in base64. Call - `nneething-make-head' with options to specify MIME types. - (nneething-make-head): Add optional arguments to specify MIME - types. - -2002-01-06 ShengHuo ZHU - - * gnus-fun.el (gnus-display-x-face-in-from): Fake a "From: " - header if there is not. - - * gnus-xmas.el (gnus-xmas-put-image): Insert " " if bobp. - - * gnus-msg.el (gnus-gcc-mark-as-read): New variable. - (gnus-inews-mark-gcc-as-read): Obsolete variable. - (gnus-inews-do-gcc): Use them. - - * gnus-group.el (gnus-group-mark-article-read): Put holes into - gnus-newsgroup-unselected. - -2002-01-06 Simon Josefsson - - * imap.el (imap-ssl-open, imap-ssl-open, imap-parse-fetch): Use - condition-case, not ignore-errors. - -2002-01-06 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-insert-old-articles): Bind - gnus-fetch-old-headers. - - * gnus-art.el (article-display-x-face): Use the current buffer - unless `W f'. Otherwise, X-Face may be shown in the header of a - forwarded part. - (gnus-treatment-function-alist): Treat xface before hiding - headers. - -2002-01-06 Lars Magne Ingebrigtsen - - * gnus-group.el (gnus-group-read-ephemeral-group): Fix - parameters. - -2002-01-06 ShengHuo ZHU - - * mm-util.el (mm-multibyte-p): Define conditionally when load. - (mm-guess-charset): New function. - (mm-charset-after): Use it. - (mm-detect-coding-region): New function. - (mm-detect-mime-charset-region): New function. - - * gnus-sum.el (gnus-summary-show-article): Use - mm-detect-coding-region. - -2002-01-06 Lars Magne Ingebrigtsen - - * message.el (message-make-fqdn): Be less violent. - - * gnus.el (gnus-logo-color-style): Compute custom form - automatically. - - * gnus-sum.el (gnus-summary-enter-digest-group): Feed the adaptive - score file of the parent to the document group. - - * gnus-group.el (gnus-group-read-ephemeral-group): Add an optional - parameters parameter. - - * gnus-score.el (gnus-score-load-file): Clean up. - -2002-01-06 ShengHuo ZHU - - * gnus-sum.el (gnus-thread-sort-by-most-recent-number): Fix typo. - From: Damien Wyart - - * gnus-util.el (gnus-local-map-property): In Emacs 21, use keymap. - -2002-01-05 ShengHuo ZHU - - * gnus-sum.el (gnus-select-group-hook): Typo. - - * rfc2047.el (rfc2047-decode-string): Return immediately if there - is no quoted-printable-encoded STRING. - From: Jesper Harder - - (rfc2047-decode-string): Decode it. - -2002-01-05 Lars Magne Ingebrigtsen - - * gnus.el (gnus-logo-color-alist): Added more colors from Luis. - -2002-01-05 Keiichi Suzuki - Trivial patch. - - * nntp.el (nntp-possibly-change-group): Erase contents of nntp - buffer to get rid of junk line. - -2002-01-05 Simon Josefsson - - * message.el (message-mode-map): Bind message-goto-from to C-c C-f - C-o. - (message-mode-map): Bind message-insert-or-toggle-importance to - C-c C-u. - (message-mode-map): Bind message-disposition-notification-to to - C-c M-n. - (message-mode-menu): Add m-d-n-t. - (message-mode-field-menu): Add m-goto-from. - (message-mode): Doc fix. - (message-goto-from): New function. - (message-insert-disposition-notification-to): New function. - (message-tool-bar-map): Add receipt button. - -2002-01-05 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-thread-latest-date): New function. - (gnus-thread-sort-by-most-recent-number): Renamed. - (gnus-thread-sort-functions): Doc fix. - (gnus-select-group-hook): Don't use setq on a hook. - (gnus-thread-latest-date): Use date, not number - - * gnus-agent.el (gnus-agent-expire-days): Doc fix. - (gnus-agent-expire): Allow regexp of expire-days. - - * gnus-art.el (gnus-article-reply-with-original): Deactivate - region. - (gnus-article-followup-with-original): Ditto. - - * gnus-sum.el (gnus-thread-highest-number): Doc fix. - - * gnus-art.el (gnus-mime-display-alternative): Use - gnus-local-map-property. - (gnus-mime-display-alternative): Ditto. - (gnus-insert-mime-security-button): Ditto. - (gnus-insert-next-page-button): Ditto. - (gnus-button-prev-page): Take optional args. - (gnus-insert-prev-page-button): widget-convert. - - * gnus-util.el (gnus-local-map-property): New function. - - * gnus-art.el (gnus-prev-page-map): Use parent map. - (gnus-next-page-map): Ditto. - - * gnus-spec.el (gnus-parse-format): Clean up. - (gnus-parse-format): Do complex formatting for %=. - - * gnus-fun.el (gnus-display-x-face-in-from): Add the string - "X-Face: " to the data in the built-in scenario. - - * gnus-spec.el (gnus-parse-simple-format): Use gnus-pad-form. - (gnus-correct-pad-form): Renamed. - (gnus-tilde-max-form): Clean up. - (gnus-pad-form): Use gnus-use-correct-string-widths. - - * gnus-fun.el (gnus-display-x-face-in-from): Use native xface - support if that is available. - - * gnus-sum.el (gnus-thread-highest-number): New function. - (gnus-thread-sort-by-most-recent-thread): New function. - (gnus-thread-sort-functions): Doc fix. - -2002-01-04 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-select-article): Disable multibyte in - all cases. - (gnus-summary-mode): Enable it in all cases. - (gnus-summary-display-article): Ditto. - (gnus-summary-edit-article): Ditto. - - * gnus-ems.el (gnus-put-image): Really return glyph. - - * gnus-art.el (gnus-article-x-face-command): Fix :type. - (gnus-treat-smiley): Don't take "P" in the interactive form. - -2002-01-04 Lars Magne Ingebrigtsen - - * compface.el (uncompface): XEmacs and Emacs have differing - capabilities. - - * gnus-fun.el (gnus-display-x-face-in-from): Use face. - - * gnus-ems.el (gnus-article-xface-ring-internal): Removed. - (gnus-article-xface-ring-size): Removed. - (gnus-article-display-xface): Removed. - (gnus-remove-image): Cleaned up. - - * gnus-xmas.el (gnus-xmas-create-image): Convert pbm to xbm. - (gnus-xmas-create-image): Take pbm files. - (gnus-x-face): Removed. - (gnus-xmas-article-display-xface): Removed. - - * gnus-fun.el (gnus-display-x-face-in-from): Bind - default-enable-multibyte-characters. - - * compface.el (uncompface): Doc fix. - - * gnus-art.el (gnus-article-x-face-command): Use - gnus-display-x-face-in-from. - - * gnus-xmas.el (gnus-xmas-put-image): Return the image. - - * gnus-ems.el (gnus-put-image): Return the image. - - * gnus-fun.el (gnus-display-x-face-in-from): New function. - (gnus-x-face): Moved here. - -2002-01-04 ShengHuo ZHU - - * gnus-xmas.el (gnus-xmas-put-image): Don't insert SPC or make - invisible if string is nil. - (gnus-xmas-article-display-xface): Use it. - - * gnus-ems.el (gnus-put-image): Explicitly use SPC, and add text - property when string is nil. - (gnus-article-display-xface): Use it. - -2002-01-04 Lars Magne Ingebrigtsen - - * gnus-art.el (article-display-x-face): Check whether valid grey - face was returned. - (article-display-x-face): Place image in the right spot. - - * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Get rid of - stderr. - (gnus-convert-gray-x-face-to-xpm): Check whether output is valid. - -2002-01-03 Lars Magne Ingebrigtsen - - * gnus-xmas.el (gnus-xmas-create-image): Take optional - parameters. - (gnus-xmas-put-image): Allow non-strings to be passed. - - * gnus-art.el (article-display-x-face): Use optional parameters. - - * gnus-ems.el (gnus-create-image): Take optional parameters. - - * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Use uncompface. - - * compface.el (compface-xbm-p): Removed. - - * gnus-ems.el (gnus-article-compface-xbm): Removed. - (gnus-article-display-xface): Use compface. - - * compface.el: New file. - - * gnus-fun.el (gnus-convert-pbm-to-x-face-command): Remove quotes. - (gnus-convert-image-to-x-face-command): Ditto. - (gnus-random-x-face): Quote argument. - (gnus-x-face-from-file): Ditto. - -2002-01-03 Paul Jarc - - * nnmaildir.el (nnmaildir-request-expire-articles): evaluate - the expire-group parameter once per article rather than once - per group; bind `nnmaildir-article-file-name' and `article' - for convenience. Leave article alone when expire-group - specifies the current group. - (nnmaildir--update-nov): be more concurrency-friendly with - temp file names. - -2002-01-03 Lars Magne Ingebrigtsen - - * gnus-start.el (gnus-read-init-file): Cleaned up. - -2002-01-03 Dave Love - - * gnus-start.el (gnus-startup-file-coding-system): Removed. - (gnus-read-init-file): Don't use it. - -2002-01-03 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-agent-fetch-session): Run hook. - -2002-01-03 Kai Gro,b_(Bjohann - - * gnus-start.el (gnus-read-init-file): Don't force coding system - for ~/.gnus. From Dave Love . - -2002-01-03 ShengHuo ZHU - - * nntp.el (nntp-send-buffer): Use mm-with-unibyte-current-buffer. - * nnspool.el (nnspool-request-post): Ditto. - - * mm-util.el (mm-use-find-coding-systems-region): New variable. - (mm-find-mime-charset-region): Use it. - -2002-01-03 Per Abrahamsen - - * gnus.el (gnus-summary-line-format): Added :link. - * gnus-topic.el (gnus-topic-line-format): Ditto. - * gnus-sum.el (gnus-summary-dummy-line-format): Ditto. - * gnus-srvr.el (gnus-server-line-format): Ditto. - * gnus-group.el (gnus-group-line-format): Ditto. - - * gnus-sum.el (gnus-summary-make-menu-bar): Use correct syntax for - :keys, it works on both Emacsen. - -2002-01-03 ShengHuo ZHU - - * mm-util.el (mm-charset-to-coding-system): Don't setq charset. - -2002-01-03 Lars Magne Ingebrigtsen - - * gnus-msg.el (gnus-summary-send-map): Fix binding for very-wide. - -2002-01-03 Reiner Steib - - * gnus-sum.el (gnus-summary-make-menu-bar): Menu bar entries for - very wide reply. - -2002-01-03 Lars Magne Ingebrigtsen - - * gnus-picon.el (gnus-picon-transform-address): Cache stuff. - (gnus-picon-cache): New variable. - (gnus-picon-transform-newsgroups): Cache stuff. - - * gnus-art.el (gnus-article-reply-with-original): New command. - (gnus-article-followup-with-original): New command. - - * gnus-msg.el (gnus-copy-article-buffer): Take optional BEG and - END parameters. - (gnus-summary-followup): Take a list of list of articles. - (gnus-inews-yank-articles): Allow lists of article/regions. - - * gnus-art.el (gnus-article-read-summary-keys): `R' and `F' are no - longer the usual commands. - - * gnus-fun.el (gnus-convert-image-to-gray-x-face): Use pnmnoraw. - (gnus-convert-gray-x-face-to-xpm): Don't use six parameters to - shell-command-on-region. - -2002-01-02 ShengHuo ZHU - - * gnus-picon.el (gnus-picon-transform-newsgroups): Fix for the case - "Newsgroups: rec.music.beatles.moderated, rec.music.beatles". - -2002-01-03 Steve Youngs - - * gnus-sum.el (gnus-summary-make-menu-bar): XEmacs doesn't - understand ':keys', wrap it in an featurep 'xemacs. - -2002-01-02 ShengHuo ZHU - - * gnus-ems.el (gnus-article-display-xface): Show xface in the - order of headers (Actually, it is called in a reversed order). Add - 'gnus-image-text-deletable property. - (gnus-remove-image): Remove text with such a property. - - * gnus-xmas.el (gnus-xmas-article-display-xface): Don't use - gnus-put-image. - - * gnus-art.el (gnus-article-treat-fold-newsgroups): Replace ", *" - with ", " - -2002-01-02 Lars Magne Ingebrigtsen - - * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Renamed. - - * gnus-art.el (gnus-ignored-headers): Hide all X-Faces. - (article-display-x-face): Display grey X-Faces. - - * gnus-fun.el (gnus-convert-gray-x-face-region): New function. - (gnus-convert-gray-x-face-to-ppm): Ditto. - (gnus-convert-image-to-gray-x-face): Ditto. - - * gnus-sum.el (gnus-summary-make-menu-bar): Add a :keys to - gnus-summary-show-raw-article. - -2002-01-02 ShengHuo ZHU - - Display picons in XEmacs without showing text. - - * gnus-xmas.el (gnus-xmas-create-image): Don't use - mm-create-image-xemacs to create xbm glyph, because it deletes - temporary files. - (gnus-xmas-put-image): Use end-glyph. Make text invisible. - (gnus-xmas-remove-image): Make text visible, remove glyph. - - * gnus-picon.el (gnus-picon-transform-newsgroups) - (gnus-picon-transform-address): Insert spec backward, due to the - incompatibility of gnus-xmas-put-image. - -2002-01-02 Pavel Jan,Am(Bk - - * gnus-fun.el (gnus-convert-pbm-to-x-face-command): Doc fix. - -2002-01-02 Lars Magne Ingebrigtsen - - * gnus.el: Doc fix. - - * gnus-art.el: Doc fix. - - * gnus-agent.el: Doc fix. - -2002-01-01 ShengHuo ZHU - - * gnus-diary.el, gnus-delay.el: Fix copyright lines. - -2002-01-01 Paul Jarc - - * nnmaildir.el (nnmaildir--update-nov): automatically parse - NOV data out of the message again if nnmail-extra-headers has - changed. - -2002-01-02 Lars Magne Ingebrigtsen - - * gnus-fun.el: New file. - (gnus-convert-image-to-x-face-command): New variable. - (gnus-insert-x-face): New function. - (gnus-random-x-face): Renamed. - (gnus-x-face-from-file): Renamed. - - * gnus-art.el (gnus-body-boundary-delimiter): Changed default to - "_". - (gnus-body-boundary-delimiter): Typo fix. - -2002-01-02 Simon Josefsson - - * gnus-art.el (gnus-article-treat-body-boundary): Handle nil. - (gnus-body-boundary-delimiter): Fix type. - -2002-01-01 Simon Josefsson - - * gnus-art.el (gnus-treat-buttonize, gnus-treat-buttonize-head) - (gnus-treat-emphasize, gnus-treat-strip-cr) - (gnus-treat-leading-whitespace, gnus-treat-hide-headers) - (gnus-treat-hide-boring-headers, gnus-treat-hide-signature) - (gnus-treat-fill-article, gnus-treat-hide-citation) - (gnus-treat-hide-citation-maybe) - (gnus-treat-strip-list-identifiers, gnus-treat-strip-pgp) - (gnus-treat-strip-pem, gnus-treat-strip-banner) - (gnus-treat-highlight-headers, gnus-treat-highlight-citation) - (gnus-treat-date-ut, gnus-treat-date-local) - (gnus-treat-date-english, gnus-treat-date-lapsed) - (gnus-treat-date-original, gnus-treat-date-iso8601) - (gnus-treat-date-user-defined, gnus-treat-strip-headers-in-body) - (gnus-treat-strip-trailing-blank-lines) - (gnus-treat-strip-leading-blank-lines) - (gnus-treat-strip-multiple-blank-lines) - (gnus-treat-unfold-headers, gnus-treat-fold-headers) - (gnus-treat-fold-newsgroups, gnus-treat-overstrike) - (gnus-treat-display-xface, gnus-treat-display-smileys) - (gnus-treat-from-picon, gnus-treat-mail-picon) - (gnus-treat-newsgroups-picon, gnus-treat-body-boundary) - (gnus-treat-capitalize-sentences, gnus-treat-fill-long-lines) - (gnus-treat-play-sounds, gnus-treat-translate) - (gnus-treat-x-pgp-sig): Doc fix, add link to manual. - - * gnus-art.el (gnus-body-boundary-delimiter): New variable. - (gnus-article-treat-body-boundary): Use it. - - * message.el (message-mode): Fix doc. - (message-mode-menu): Fix names. - -2002-01-01 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-first-subject): Really go to unseen - articles. - - * gnus-picon.el (gnus-picon-find-face): Search MISC for all types. - (gnus-picon-transform-address): Search for unknown faces as well. - (gnus-picon-find-face): Don't search "news" for MISC. - (gnus-picon-user-directories): Changed default back to exclude - "unknown". - - * gnus-sum.el (gnus-summary-hide-all-threads): Reversed logic. - - * gnus-picon.el (gnus-picon-find-face): Search through all - databases. - (gnus-picon-find-face): New implementation. - - * gnus-topic.el (gnus-topic-goto-previous-topic): New command and - keystroke. - (gnus-topic-goto-next-topic): Ditto. - - * gnus.el (gnus-summary-line-format): Changed default. - - * nnmail.el (nnmail-extra-headers): Change default. - - * gnus-sum.el (gnus-extra-headers): Change default. - - * message.el (message-news-other-window): Changed "news" to - "posting". - (message-news-other-frame): Ditto. - (message-do-send-housekeeping): Ditto. - - * gnus-sum.el (gnus-summary-maybe-hide-threads): Use predicate - function. - (gnus-article-unread-p): New function. - (gnus-article-unseen-p): New function. - (gnus-dead-summary-mode-map): Typo. - - * gnus-util.el (gnus-make-predicate): New function. - (gnus-make-predicate-1): New function. - - * gnus-sum.el: New function. - (gnus-map-articles): New function. - - * gnus-art.el (gnus-treat-fold-headers): New variable. - (gnus-article-treat-fold-headers): New command and keystroke. - - * gnus-sum.el (gnus-dead-summary-mode-map): Clean up. - (gnus-dead-summary-mode-map): Bind q to bury-buffer. - -2002-01-01 ShengHuo ZHU - - * message.el (message-fcc-externalize-attachments): New variable. - (message-do-fcc): Use it. - - * gnus-msg.el (gnus-gcc-externalize-attachments): New variable. - (gnus-inews-do-gcc): Use it. - - * mml.el (mml-tweak-sexp-alist): New variable. - (mml-externalize-attachments): New variable. - (mml-tweak-part): Use mml-tweak-sexp-alist. - (mml-tweak-externalize-attachments): New function. - -2002-01-01 Steve Youngs - - * gnus-xmas.el (gnus-xmas-article-display-xface): Uncomment - 'set-glyph-face' so x-face back/foreground can be set. - -2001-12-31 ShengHuo ZHU - - * message.el (message-fix-before-sending): Fix a typo. - -2002-01-01 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-treat-smiley): Renamed command. - (gnus-article-remove-images): New command and keystroke. - - * gnus-sum.el (gnus-summary-toggle-smiley): Removed. - - * smiley-ems.el (gnus-smiley-display): Removed. - - * gnus.el (gnus-version-number): Update version. - - * message.el (message-text-with-property): Renamed and moved - here. - (message-fix-before-sending): Highlight invisible text and place - point there. - -2002-01-01 02:32:53 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.04 is released. - -2002-01-01 Lars Magne Ingebrigtsen - - * gnus-delay.el (gnus-delay-send-queue): Renamed. - - * gnus-art.el (gnus-ignored-headers): More headers, - - * ietf-drums.el (ietf-drums-parse-addresses): Use `error' instead - of `scan-error', since XEmacs doesn't seem to support that. - -2001-12-31 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-best-unread-article): Take a prefix - arg. - (gnus-summary-best-unread-subject): Ditto. - (gnus-summary-best-unread-subject): No, don't. - (gnus-summary-better-unread-subject): New command. - - * gnus-xmas.el (gnus-xmas-put-image): Insert the string itself. - - * lpath.el ((featurep 'xemacs)): fbind url function. - - * gnus-xmas.el (gnus-xmas-article-display-xface): Use data, not - buffer. - (gnus-xmas-remove-image): Implementation that does something. - (gnus-xmas-article-display-xface): Mark images properly. - - * gnus-art.el (gnus-mime-print-part): Use mm-temp-directory. - -2001-12-31 Florian Weimer - - * gnus.el (gnus): Warn if trying to run Gnus un-byte-compiled. - -2001-12-31 Lars Magne Ingebrigtsen - - * gnus-group.el (gnus-group-line-format): Added %O to the default - value. - - * gnus-util.el (gnus-text-with-property): The smallest point is - point-min. - - * smiley-ems.el (smiley-region): Return images. - (gnus-smiley-display): Allow toggling. - (smiley-region): Use text properties, not overlays. - - * gnus-xmas.el (gnus-xmas-remove-image): New function, not - implemented yet. - - * smiley-ems.el (smiley-update-cache): Check for valid types. - - * gnus-art.el (gnus-with-article-buffer): New macro. - - * gnus-picon.el (gnus-picon-transform-newsgroups): Keep the - strings as well as the glyphs. - (gnus-picon-transform-address): Ditto. - (gnus-picon-insert-glyph): Ditto. - (gnus-picon-transform-newsgroups): Toggle. - (gnus-picon-transform-address): Toggle. - - * gnus-ems.el (gnus-remove-image): New function. - (gnus-put-image): Take an optional string. - - * gnus-util.el (gnus-text-with-property): New function. - - * gnus-art.el (gnus-delete-images): New function. - - * gnus-ems.el (gnus-article-display-xface): Mark and store image. - - * gnus-art.el (gnus-article-wash-status-entry): Renamed. - (gnus-article-wash-status): Use it. - (gnus-signature-toggle): Clean up. - (gnus-add-wash-status): New function. - (gnus-delete-wash-status): New function. - (gnus-article-hide-text-type): Use them throughout. - (gnus-add-image): New function. - - * gnus-ems.el (gnus-article-display-xface): Use new interface. - - * gnus-xmas.el (gnus-xmas-article-display-xface): Use new - interface. - - * gnus-art.el (article-display-x-face): Cleaned up. - - * rfc2047.el (rfc2047-field-value): New function. - - * mail-parse.el (mail-header-field-value): New alias. - - * gnus-art.el (gnus-mime-print-part): Fix typos. - - * smiley-ems.el (gnus-smiley-file-types): New variable. - (smiley-update-cache): Use it. - (smiley-regexp-alist): Suffix-less smiley names. - (smiley-regexp-alist): Added more smileys. - - * gnus-sum.el (gnus-print-buffer): Made into own function. - (gnus-summary-print-article): Use it. - - * mailcap.el (mailcap-mime-info): Actually return the bit that we - looked for when REQUEST is a string. - - * gnus-art.el (gnus-mime-button-commands): Add printing - keystroke. - (gnus-mime-copy-part): Doc fix. - (gnus-mime-print-part): New command. - -2001-12-31 Simon Josefsson - - * imap.el (imap-parse-fetch): Notice empty flags responses. From - Nic Ferrier . - -2001-12-30 ShengHuo ZHU - - * gnus-picon.el (gnus-treat-from-picon): Autoload. - (picon): Fix doc. - - * gnus-win.el (gnus-window-to-buffer): gnus-picon-buffer-name no - longer exists. Remove those codes. - * gnus.el (gnus-use-picons): Ditto. - -2001-12-30 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-article-treat-fold-newsgroups): Don't - infloop. - - * gnus-sum.el (t): New `W D' map. - - * gnus-art.el (gnus-treat-fold-newsgroups): New variable. - (gnus-article-treat-body-boundary): Clean up. - (gnus-body-boundary-face): Removed. - (gnus-article-goto-header): Moved here. - (gnus-article-goto-header): Allow better regexps. - (gnus-article-treat-fold-newsgroups): New command. - - * gnus-sum.el (gnus-summary-move-article): We have to select an - article to give `gnus-read-move-group-name' an opportunity to - suggest an appropriate default. - - * rfc2047.el (rfc2047-fold-line): New function. - (rfc2047-unfold-line): Ditto. - (rfc2047-fold-region): Don't fold just after the header name. - - * mail-parse.el (mail-header-fold-line): New alias. - (mail-header-unfold-line): Ditto. - - * gnus-art.el (gnus-body-boundary-face): Renamed. - (gnus-article-treat-body-boundary): Use it. - (gnus-article-treat-body-boundary): Use an invisible header and a - line of underline characters. - -2001-12-30 ShengHuo ZHU - - * ietf-drums.el (ietf-drums-parse-addresses): Recover from errors. - - * gnus-picon.el (gnus-picon-transform-address): Skip bad addresses. - (gnus-picon-split-address): New function. - (gnus-picon-find-face): Use it. - (gnus-picon-transform-address): Use it. Set first to t for each - address. - - * gnus-art.el (gnus-with-article-headers): Move to here. Define - the macro then use it. - (gnus-treatment-function-alist): Treat picons earlier. - -2001-12-30 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-body-separator-face): New variable. - (gnus-article-treat-body-boundary): Use a blank, colored line. - - * gnus-picon.el (gnus-picon-find-face): Look into misc/MISC as - well. - - * gnus-art.el (gnus-treat-body-boundary): New variable. - (gnus-article-treat-unfold-headers): Use helper macro. - (gnus-article-treat-body-boundary): New command. - - * gnus.el (gnus-logo-color-style): Change the default color. - (gnus-splash-face): Gray, gray. - - * gnus-xmas.el (gnus-xmas-group-startup-message): Use general - colors. - - * gnus.el (gnus-logo-color-alist): Moved here and renamed. - (gnus-logo-color-style): Ditto. - (gnus-logo-colors): Ditto. - - * gnus-picon.el (gnus-picon-create-glyph): Cache glyphs. - - * gnus-art.el (gnus-treat-newsgroups-picon): New variable. - - * gnus-picon.el (gnus-treat-newsgroups-picon): New function. - (gnus-picon-transform-newsgroups): New function. - - * ietf-drums.el (ietf-drums-parse-addresses): Accept a nil - string. - - * gnus-picon.el (gnus-treat-mail-picon): Renamed. - - * gnus-art.el (gnus-treat-cc-picon): New variable. - (gnus-treat-mail-picon): Renamed. - - * gnus-picon.el: New implementation. - (gnus-picon-find-face): Renamed. - (gnus-treat-from-picon): Use it. - (gnus-picon-transform-address): Renamed. - (gnus-treat-from-picon): Use it. - (gnus-picon-create-glyph): Renamed. - (gnus-picon-transform-address): Use it. - (gnus-treat-cc-picon): New command. - - * mm-decode.el (mm-create-image-xemacs): Separated out into - function. - (mm-get-image): Use it. - - * gnus-art.el (gnus-treat-display-picons): Simplify. - (gnus-treat-from-picon): Renamed. - - * gnus-ems.el (gnus-create-image): New function. - (gnus-put-image): New function. - - * gnus-art.el (gnus-article-treat-unfold-headers): Doc fix. - (gnus-with-article-headers): New macro. - (gnus-article-goto-header): New function. - - * gnus-xmas.el (gnus-image-type-available-p): New function. - - * gnus-ems.el (gnus-image-type-available-p): New function. - -2001-12-30 ShengHuo ZHU - - * nnrss.el (nnrss-check-group): Find the correct tag, because - xml.el is changed. - -2001-12-30 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-article-treat-unfold-headers): Only fold when - lines are shorter than the window width. - (gnus-ignored-headers): More headers. - -2001-12-29 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-treat-unfold-lines): New variable. - (gnus-treat-unfold-headers): Renamed. - (gnus-article-treat-unfold-headers): New command and keystroke. - - * rfc2047.el (rfc2047-encode-message-header): Clean up. - - * gnus-int.el (gnus-open-server): Mark quit-ed server as denied. - -2001-12-29 ShengHuo ZHU - - * sha1-el.el (sha1-use-external): New variable. - (sha1-region): Use it. - (sha1-string): Ditto. - - * dgnushack.el (dgnushack-compile): Compile gnus-picon for Emacs. - * gnus-picon.el: Less warnings when compile. - -2001-12-29 Lars Magne Ingebrigtsen - - * gnus-picon.el (gnus-picons-news-directories): Removed obsolete - alias. - (gnus-picons-database): Default to list. - (gnus-picons-lookup-internal): Use it. - - * nnmail.el (nnmail-article-group): Default nnmail-split-methods - to "bogus". - - * gnus-win.el (gnus-configure-windows-hook): New hook. - -2001-12-29 Sascha L,A|(Bdecke - - * gnus-win.el (gnus-configure-windows): Minimize tree buffer. - -2001-12-29 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-update-marks): Don't uncompress the seen - lists. - (gnus-select-newsgroup): Don't append; push. - (gnus-adjust-marked-articles): Remove obsolete ranges from - `seen'. - (gnus-update-marks): Clean up. - (gnus-select-newsgroup): Don't stomp gnus-newsgroup-seen. - -2001-12-29 Frank Schmitt - - * gnus-sum.el (gnus-summary-limit-to-age): Allow negative days. - -2001-12-29 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-auto-select-subject): New variable. - (gnus-summary-best-unread-subject): New function. - (gnus-summary-best-unread-article): Use it. - (gnus-summary-first-unseen-subject): New function and command. - - * gnus-art.el (gnus-treatment-function-alist): Emphasize after - other treatments. - - * gnus-util.el (gnus-put-overlay-excluding-newlines): New - function. - - * gnus-art.el (gnus-article-show-hidden-text): Remove the type - from the list of hidden types. - - * mm-view.el (mm-inline-text): Ditto. - (mm-inline-text): Ditto. - (mm-w3-prepare-buffer): Ditto. - - * gnus-art.el (article-wash-html): Inhibit more remote fetching. - -2001-12-29 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-ignored-headers): Added more headers. - -2001-12-29 Jesper Harder - - * gnus-srvr.el (gnus-browse-foreign-server): Compute the prefix - once. - -2001-12-29 Lars Magne Ingebrigtsen - - * gnus-srvr.el (gnus-server-browse-in-group-buffer): Doc fix. - -2001-12-28 Simon Josefsson - - * gnus-srvr.el (gnus-browse-foreign-server): Fix typo. From - Jesper Harder . - -2001-12-27 Simon Josefsson - - * gnus-sum.el (gnus-select-newsgroup): Make - `gnus-newsgroup-unseen' sorted. Make `gnus-newsgroup-unseen' - contain all articles (instead of none) when no seen marks have - been set for the group. - (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 - - * mm-util.el (mm-iso-8859-x-to-15-region): Use - insert-before-markers. - From Jesper Harder - -2001-12-26 Paul Jarc - - * nnmaildir.el (nnmaildir-save-mail): create the destination - groups if they do not exist. - -2001-12-26 Katsumi Yamaoka - - * canlock.el (canlock-sha1-with-openssl): Remove unused variable. - -2001-12-22 22:00:00 ShengHuo ZHU - - * gnus-group.el (gnus-group-read-ephemeral-group): Call - gnus-group-real-name. - - * gnus-sum.el (gnus-decode-encoded-word-methods): Backslash paren. - (gnus-newsgroup-variables): Ditto. - - * gnus.el (gnus-group-prefixed-name): If group name is prefixed, - return it. - -2001-12-21 Paul Jarc - - * gnus.el (gnus-valid-select-methods): Include nnmaildir. - * nnmaildir.el (top-level): Add commentary. - (nnmaildir-version): Indicate that nnmaildir is now a standard - part of Gnus, not separately released. - -2001-12-21 08:00:00 ShengHuo ZHU - - * 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 - - * nnmaildir.el: Copyright changes. Require cl only at compile time. - -2001-12-20 Simon Josefsson - - * nnimap.el (top-level): Don't require cl. Suggested by ShengHuo - ZHU . - (nnimap-close-group): Don't quote KEYLIST items. Suggested by - Brian P Templeton . - -2001-12-19 17:00:00 ShengHuo ZHU - - * nnmaildir.el: New file. - From Paul Jarc . - -2001-12-19 16:00:00 ShengHuo ZHU - - * nndoc.el (nndoc-type-alist): Move forward to the end. - -2001-12-19 Katsumi Yamaoka - - * gnus.el (gnus-find-subscribed-addresses): Replace `mapc' with - `dolist'. - -2001-12-19 01:00:00 ShengHuo ZHU - - * gnus-win.el (gnus-frames-on-display-list): New function. - (gnus-get-buffer-window): Use it. - -2001-12-19 00:00:00 ShengHuo ZHU - - * nnwarchive.el (nnwarchive-mail-archive-xover): Fix the regexp. - -2001-12-18 11:00:00 ShengHuo ZHU - - * gnus-win.el (gnus-get-buffer-window): Use gnus-delete-if. - -2001-12-18 11:00:00 ShengHuo ZHU - From Harald Meland - - * gnus-win.el (gnus-get-buffer-window): New function. - (gnus-all-windows-visible-p): Use it. - - * gnus-util.el (gnus-horizontal-recenter) - (gnus-horizontal-recenter, gnus-horizontal-recenter) - (gnus-horizontal-recenter, gnus-set-window-start): Use it. - - * gnus-score.el (gnus-score-insert-help): Use it. - - * gnus-salt.el (gnus-tree-recenter, gnus-generate-tree) - (gnus-generate-tree, gnus-highlight-selected-tree) - (gnus-highlight-selected-tree, gnus-tree-highlight-article): Use - it. - - * gnus-art.el (gnus-article-set-window-start) - (gnus-mm-display-part, gnus-request-article-this-buffer) - (gnus-button-next-page, gnus-button-prev-page) - (gnus-article-button-next-page, gnus-article-button-prev-page): - Use it. - -2001-12-18 Josh Huber - - * ChangeLog, ChangeLog.1, nnwfm.el, smiley.el: - * gnus-cite.el, gnus-delay.el, gnus-spec.el, message.el: - * mml1991.el, nnultimate.el: Removed buffer-file-coding-system tag. - -2001-12-18 01:00:00 ShengHuo ZHU - - * ChangeLog, ChangeLog.1, nnwfm.el, gnus-smiley.el: - * gnus-cite.el, gnus-delay.el, gnus-spec.el, message.el: - * mml1991.el, nnultimate.el: Add `coding'. - -2001-12-17 Josh Huber - - * ChangeLog: changed coding to buffer-file-coding-system - * ChangeLog.1: same - * nnwfm.el: same - * gnus-smiley.el: same - * gnus-cite.el: moved -*- magic cookie -*- to Local Variables - * gnus-delay.el: same - * gnus-spec.el: same - * message.el: same - * mml1991.el: same - * nnultimate.el: same - -2001-12-16 Simon Josefsson - Inspired by code by Dirk Meyer . - - * gnus-sum.el (gnus-summary-muttprint-program): New variable. - (gnus-summary-save-map): Add muttprint. - (gnus-summary-make-menu-bar): Ditto. - (gnus-summary-muttprint): New function. - - * gnus-art.el (gnus-summary-pipe-to-muttprint): New function. - -2001-12-14 11:00:00 ShengHuo ZHU - - * uudecode.el (uudecode-decode-region-internal): Speedup by using - temporary list instead of buffer. - - * mm-url.el (executable-find): autoload. - -2001-12-12 Pavel Jan,Am(Bk - - * gnus-mlspl.el (gnus-group-split-fancy): Doc fix (add reference - to variable, follow doc-string conventions). - -2001-12-13 Josh Huber - - * gnus-cus.el (gnus-extra-topic-parameters): added topic parameter - subscribe-level - * gnus-topic.el (gnus-subscribe-topics): use it. - -2001-12-13 22:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-summary-mail-forward): Forward all marked - messages. (A small patch with indentation) - From Sean Neakums . - - * gnus-uu.el (gnus-uu-grab-articles): Set gnus-current-article to - nil after shooting down the gnus-original-article-buffer. - -2001-12-13 20:00:00 ShengHuo ZHU - - * uudecode.el (uudecode-use-external): New variable. - (uudecode-decode-region): Automatically detect external program. - - * binhex.el (binhex-use-external): New variable. - (binhex-decode-region-internal): New function. - (binhex-decode-region): Automatically detect external program. - - * mm-uu.el (mm-uu-decode-function,mm-uu-binhex-decode-function): - Use them. - -2001-12-12 Simon Josefsson - - * nnvirtual.el (nnvirtual-always-rescan) - (nnvirtual-component-regexp): Fix doc. - - * nnoo.el (defvoo): Add doc to defvoo variables. - - * nnml.el (nnml-directory, nnml-active-file) - (nnml-newsgroups-file, nnml-get-new-mail, nnml-nov-is-evil) - (nnml-marks-is-evil, nnml-filenames-are-evil) - (nnml-prepare-save-mail-hook, nnml-inhibit-expiry): Fix doc. - - * nnmh.el (nnmh-directory, nnmh-get-new-mail) - (nnmh-prepare-save-mail-hook, nnmh-be-safe): Fix doc. - (nnmh-possibly-change-directory): Use `nnheader-report' instead of - `error'. - - * nnmbox.el (nnmbox-mbox-file, nnmbox-active-file) - (nnmbox-get-new-mail, nnmbox-prepare-save-mail-hook): - - * nnfolder.el (nnfolder-directory, nnfolder-active-file) - (nnfolder-newsgroups-file, nnfolder-get-new-mail) - (nnfolder-save-buffer-hook, nnfolder-inhibit-expiry) - (nnfolder-nov-is-evil, nnfolder-marks-is-evil): Fix doc. - - * nnbabyl.el (nnbabyl-mbox-file, nnbabyl-active-file) - (nnbabyl-get-new-mail, nnbabyl-prepare-save-mail-hook): Fix doc. - - * imap.el, nnimap.el: Fix indentation. - - * gnus-sieve.el (gnus-sieve-article-add-rule): Autoload it. - -2001-12-12 Didier Verna - - * gnus-msg.el (gnus-group-news): New function. - * gnus-group.el (gnus-group-mode-map): bind it to `i'. - * gnus-group.el (gnus-group-make-menu-bar): add a menu item for it. - * gnus-salt.el (gnus-carpal-group-buffer-buttons): add a button - for it. - * gnus-msg.el (gnus-summary-news-other-window): New function. - * gnus-msg.el ((gnus-summary-send-map "S" gnus-summary-mode-map)): - bind it to `i'. - * gnus-sum.el (gnus-summary-mode-map): bind it to `i'. - * gnus-sum.el (gnus-summary-make-menu-bar): add a menu item for it. - * gnus-salt.el (gnus-carpal-summary-buffer-buttons): add a button - for it (called with a prefix). - * gnus-msg.el (gnus-configure-posting-styles): add an optional - group-name argument. - * gnus-msg.el (gnus-setup-message): use it. - -2001-12-12 00:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-show-article): Fix doc. - -2001-12-10 17:00:00 ShengHuo ZHU - - * mml.el (mime-to-mml): Remove Content-Disposition too. - -2001-12-09 08:00:00 ShengHuo ZHU - - * 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 - - * nnmail.el (nnmail-fancy-expiry-targets): New variable. - (nnmail-fancy-expiry-target): Use it. - Suggestions from Simon Josefsson . - -2001-12-07 14:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-show-article): Recount lines if not exist. - -2001-12-07 10:00:00 ShengHuo ZHU - - * nnwfm.el (nnwfm-create-mapping): Use gnus-url-unhex-string. - - * gnus-util.el (gnus-url-unhex-string): Move here. - -2001-12-07 09:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-decode-entities-unibyte-string): Use - mm-url-decode-entities-nbsp. - - * nnlistserv.el, nnultimate.el, nnwarchive.el, nnweb.el: - * webmail.el, nnwfm.el: Use mm-url. - - * mm-url.el (mm-url-fetch-form): Move from nnweb. - (mm-url-remove-markup): Move from nnweb. - (mm-url-fetch-simple): Move from webmail. - - * nnslashdot.el (nnslashdot-request-post): Use mm-url-fetch-form. - -2001-12-07 01:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-print-truncate-and-quote): New function. - (gnus-summary-print-article): Use it. - - * gnus-util.el (gnus-replace-in-string): Typo. - -2001-12-06 10:00:00 ShengHuo ZHU - - * nnweb.el (nnweb-replace-in-string): Removed. - - * gnus-util.el (gnus-replace-in-string): New function. - (gnus-mode-string-quote): Use it. - - * nnrss.el (nnrss-format-string): Use gnus-replace-in-string. - * nnwfm.el (nnwfm-create-mapping): Ditto. - -2001-12-06 01:00:00 ShengHuo ZHU - - * dgnushack.el (dgnushack-compile): nnrss.el and - nnslashdot.el don't depend on nnweb, url, w3. - - * nnrss.el: Use mm-url. - -2001-12-06 00:00:00 ShengHuo ZHU - - * mm-url.el (mm-url-insert-file-contents): Support file:. - -2001-12-05 14:00:00 ShengHuo ZHU - - * mm-view.el: Lower case for the description line. Sync from the - Emacs CVS. - -2001-12-05 12:00:00 ShengHuo ZHU - - * gnus-group.el (gnus-group-find-new-groups): Fix doc. - From: Stefan Monnier - -2001-12-05 Katsumi Yamaoka - - * mm-view.wl (mm-inline-text): Decode a charset-encoded rich text. - -2001-12-04 08:00:00 ShengHuo ZHU - - * mm-url.el: Require executable. - Suggested by Katsumi Yamaoka . - -2001-12-03 11:00:00 ShengHuo ZHU - - * pop3.el (pop3-munge-message-separator): Only use valid date. - Trivial patch from Michael Welsh Duggan . - - * Makefile.in: gnus-load.elc may not be generated. - -2001-12-03 09:00:00 ShengHuo ZHU - - * mm-url.el: New file. - * nnslashdot.el: Use it. - * mm-extern.el (mm-extern-url): Use it. - -2001-12-01 15:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-save-article): Nix - gnus-display-mime-function and gnus-article-prepare-hook. - - * gnus-spec.el (gnus-parse-complex-format): Properly handle %C at - the beginning of lines. - (gnus-complex-form-to-spec): Ditto. - -2001-12-01 08:00:00 ShengHuo ZHU - - * message.el (message-make-mft): Fix the m-s-a-file regexp. - From Paul Jarc . - -2001-11-30 21:00:00 ShengHuo ZHU - - * message.el: New variable message-subscribed-address-file; - use it in message-make-mft. From Paul Jarc . - -2001-11-30 12:00:00 ShengHuo ZHU - - * message.el (message-tab-body-function): Set to nil. - (message-tab): Use text-mode-map or global-map. - Suggested by Kai Gro,b_(Bjohann . - -2001-11-30 Simon Josefsson - - * gnus-agent.el (gnus-agent-fetch-headers): Use gnus-range-add - instead of gnus-union, for speed. Suggested by Christoph Conrad - . - (gnus-agent-fetch-group-1): Add verbose message. - -2001-11-29 12:00:00 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-write-active): Make sure sym is a cons - of integers. - -2001-11-29 Kai Gro,b_(Bjohann - - * message.el (message-newgroups-header-regexp) - (message-completion-alist, message-tab-body-function): Use - defcustom rather than defvar. - (message-tab): Mention `message-tab-body-function' in doc. - Suggested by Karl Eichwalder. - -2001-11-28 16:00:00 ShengHuo ZHU - - * gnus-uu.el (gnus-uu-save-article): Use #part instead of #mml. - -2001-11-28 12:00:00 ShengHuo ZHU - - * nnheader.el (nnheader-find-nov-line): Don't use macro - gnus-delete-line. - - * gnus-group.el (gnus-group-name-decode): Defun instead of defsubst. - (gnus-group-name-charset): Ditto. - - * gnus-util.el (gnus-buffer-live-p): Ditto. - -2001-11-28 11:00:00 ShengHuo ZHU - - * sieve-manage.el (sieve-manage-stream-alist): Backslash before - open parenthesis in doc. - (sieve-manage-authenticator-alist): Typo in doc. - * imap.el (imap-authenticator-alist): Typo in doc. - (imap-stream-alist): Backslash. - - * gnus-sum.el (gnus-summary-limit-to-author): Missing arguments. - Thanks to david.goldberg6@verizon.net (David S. Goldberg) - -2001-11-27 14:00:00 ShengHuo ZHU - - * gnus-topic.el (gnus-topic-mode): Add LOCAL for add-hook. - - * message.el (message-mode): make-local-hook is harmless in Emacs 21. - - * gnus-msg.el (gnus-configure-posting-styles): use - make-local-hook. Add LOCAL for add-hook. - -2001-11-27 Per Abrahamsen - - * message.el (message-mode): Use `make-local-hook' unless - obsolete. - Patch by Katsumi Yamaoka . - -2001-11-26 Katsumi Yamaoka - - * canlock.el: Remove sha1.el and base64.el stuff. - -2001-11-26 Didier Verna - - * nnmbox.el (nnmbox-create-mbox): create the mbox file directory - if needed. - -2001-11-21 Katsumi Yamaoka - - * message.el (message-tamago-not-in-use-p): New function. - (message-strip-forbidden-properties): Use it. - -2001-11-26 Didier Verna - - * gnus-start.el (gnus-check-first-time-used): only check for - existence of .el[d] files. - -2001-11-25 15:00:00 ShengHuo ZHU - - * mm-util.el (mm-coding-system-priorities): Add backslash in the doc. - - * message.el (message-setup-1): Clean up mc-*. - -2001-11-25 09:00:00 ShengHuo ZHU - - * gnus-util.el (gnus-directory-sep-char-regexp): New variable. - * gnus-score.el (gnus-score-find-bnews): Use it. - - * gnus-sum.el (gnus-summary-limit-to-subject): An exclusion version. - (gnus-summary-limit-to-author): Ditto. - (gnus-summary-limit-to-extra): Ditto. - (gnus-summary-find-matching): Support not-matching argument. - -2001-11-25 Kai Gro,b_(Bjohann - - * message.el (message-wash-subject): Use `insert' rather than - `insert-string', which is deprecated. - -2001-11-24 Simon Josefsson - - * mm-encode.el (mm-encode-content-transfer-encoding): Fix error - message. (Gnus does not "default" to using 8bit for the message, - it default to use 8bit encoding and the user-supplied CTE - value. Calling this behaviour "treating it as 8bit" is perhaps - better.) - - * mm-bodies.el (mm-body-encoding): Intern encoding if needed - (compare mm-charset-to-coding-system). - -2001-11-23 02:00:00 ShengHuo ZHU - - * canlock.el (canlock-sha1-with-openssl): Use unibyte - buffer. Correctly decode hex. - -2001-11-21 01:00:00 ShengHuo ZHU - - * gnus-agent.el (gnus-category-insert-line): Convert category - names to strings. - -2001-11-20 21:00:00 ShengHuo ZHU - - * message.el (sha1): eval-and-compile. - -2001-11-20 Simon Josefsson - - * 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). - -2001-11-20 09:00:00 ShengHuo ZHU - - * mm-util.el (mm-coding-system-priorities): New variable. - (mm-sort-coding-systems-predicate): New function. - (mm-find-mime-charset-region): Resort coding systems if needed. - Suggested by Katsumi Yamaoka . - -2001-11-20 Didier Verna - - * gnus-group.el (gnus-group-make-help-group): new optional - argument to control the error behavior. - * gnus-start.el (gnus-check-first-time-used): use it to avoid - erroring. - -2001-11-19 Simon Josefsson - - * message.el (message-mode-map): Use C-c C-f C-i for Importance: - instead of C-c C-u. Suggested by Per Abrahamsen - . - -2001-11-18 08:00:00 ShengHuo ZHU - - * nnfolder.el (nnfolder-read-folder): Use group instead of - nnfolder-current-group. - Suggested by Lorentey Karoly . - -2001-11-17 Simon Josefsson - - * message.el (message-send): Ask user if Fcc/Gcc should be - performed when no other sender was specified. - Suggested by prj@po.cwru.edu (Paul Jarc). - -2001-11-17 Simon Josefsson - - * message.el (message-mode, message-mode-map): Use C-c C-u for - Importance: instead of C-c C-p (used by SC). - -2001-11-16 Simon Josefsson - - * message.el (message-insert-importance-high) - (message-insert-importance-low): Save point. - - * mail-source.el (mail-source-fetch-imap): Fix BODY.PEEK return - value. - -2001-11-16 Per Abrahamsen - - * message.el (message-strip-special-text-properties): New option. - (message-strip-forbidden-properties): Obey it. - -2001-11-14 Sam Steingold - - * gnus-score.el: Fixed some doc strings to properly quote symbols. - -2001-11-15 Simon Josefsson - - Support "Importance:" header in Message. - - * message.el (message-mode-map): Bind C-c C-p to - `message-insert-or-toggle-importance' - (message-mode-menu): Add message-insert-importance-{high,low}. - (message-insert-importance-high, message-insert-importance-low) - (message-insert-or-toggle-importance): New functions. - (message-tool-bar-map): Add {un,}important. - (message-mode): Doc fix. - -2001-11-15 Simon Josefsson - - * message.el (message-tool-bar-map): Fix attach toolbar tooltip. - - * mml.el (mml-menu): Fix toolbar tooltip. - -2001-11-15 14:00:00 ShengHuo ZHU - - * nnfolder.el (nnfolder-save-marks): gnus-prin1 takes one argument. - * nnml.el (nnml-save-marks): Ditto. - - * gnus-sum.el (gnus-newsgroup-variables): Fix doc. - -2001-11-15 Simon Josefsson - - * nnml.el (nnml-save-marks): - * nnfolder.el (nnfolder-save-marks): Use `gnus-prin1'. - Suggested by Istvan Marko . - -2001-11-15 Per Abrahamsen - - * gnus-art.el (gnus-article-wash-status-strings): Use - `copy-sequence', not `copy-seq'. - -2001-11-15 Per Abrahamsen - - * gnus-art.el (gnus-article-wash-status-strings): New constant. - (gnus-gnus-article-wash-status-entry): New function. - (gnus-article-wash-status): Use it. - -2001-11-13 10:00:00 ShengHuo ZHU - - * mml1991.el: Add coding header. - -2001-11-12 Simon Josefsson - - * mml1991.el (mml1991-use, mml1991-function-alist): New variables. - (mml1991-gpg-sign, mml1991-gpg-encrypt): Renamed, from - `mml1991-sign' and `mml1991-encrypt'. - (mml1991-encrypt, mml1991-sign): New glue functions. - (mml1991-mailcrypt-sign, mml1991-mailcrypt-encrypt): New functions. - - * mml.el (mml-mode-map): `C-c RET o' map for PGP. - (mml-menu): Add PGP to menu. - - * mml-sec.el (top-level): Require mml1991. Don't require smime. - (mml-sign-alist, mml-encrypt-alist): Add "pgp". - (mml-pgp-sign-buffer, mml-pgp-encrypt-buffer) - (mml-secure-sign-pgp, mml-secure-encrypt-pgp): New glue functions. - - * mml2015.el: Mention RFC 3156. - - * mml1991.el: New file. From Sascha L,A|(Bdecke . - -2001-11-12 13:00:00 ShengHuo ZHU - - * gnus-start.el (gnus-auto-subscribed-groups): Use ^nnml. - - * gnus-sum.el (gnus-summary-move-article): Use number-to-string. - From - -2001-11-11 Simon Josefsson - - * message.el (top-level): Autoload sha1. - (message-canlock-generate): Use sha1 instead of md5 (sha1 used by - canlock, no need to require two different hash algs). Suggested - by Ferenc Wagner . - -2001-11-09 Simon Josefsson - - * gnus.el (gnus-local-domain): Fix doc. From Pavel Jan,Am(Bk - . - -2001-11-09 Kai Gro,b_(Bjohann - - * message.el (message-point-in-header-p): New function. - (message-do-auto-fill): Use it. - (message-beginning-of-line): New function. Goes to beginning of - header value (i.e., end of header name), or to beginning of line - if already at beginning of value. Behaves like - `beginning-of-line' when in message body. - (message-mode-map): Bind it. - -2001-11-08 Simon Josefsson - - * gnus-msg.el (gnus-posting-styles): Add doc. - -2001-11-07 Simon Josefsson - - * gnus-sieve.el (gnus-sieve-generate): Don't invoke sieve-mode. - - * sieve-mode.el (sieve-control-commands-face) - (sieve-control-commands-face, sieve-action-commands-face) - (sieve-test-commands-face, sieve-tagged-arguments-face): New - faces. - (sieve-font-lock-keywords): Use them. - (sieve-mode): Only set font-lock-defaults in emacs. - - * gnus-art.el (gnus-default-article-saver): Add - gnus-summary-save-body-in-file. - (gnus-summary-write-to-file): Fix doc. - -2001-11-07 Simon Josefsson - - * gnus-art.el (gnus-treat-highlight-signature): Add cross - reference to the correct chapter in the manual. - - * mml.el (mml-mode): Add cross reference to Emacs MIME manual. - Suggested by "Golubev I. N." . - -2001-11-07 06:00:00 ShengHuo ZHU - - * mml.el (mml-preview): Bind mail-header-separator. - -2001-11-07 Katsumi Yamaoka - - * message.el: Always require canlock. - (message-ignored-supersedes-headers): Include Cancel-Lock and - Cancel-Key. - (message-insert-canlock): Don't require canlock. - (message-cancel-news): Don't check whether canlock is available. - (message-supersede): Support cancel-locks. - - * gnus-art.el: Don't autoload canlock. - -2001-11-06 18:00:00 ShengHuo ZHU - - * mail-source.el (mail-source-fetch-imap): ASYNC param. - From: - -2001-11-06 10:00:00 ShengHuo ZHU - - * many files: Fix copyright lines. - -2001-11-05 07:00:00 ShengHuo ZHU - - * mml.el (mml-generate-mime-1): Use mm-with-unibyte-current-buffer. - Suggested by Dave Love . - -2001-11-04 10:00:00 ShengHuo ZHU - - * message.el (message-kill-buffer): Remove auto-save file after - confirm. - - * message.el (message-send-mail): Call message-generate-headers - once. Suggested by Matt Armstrong . - - * gnus-topic.el (gnus-topic-rename): Initial-input. - Suggested by Katsuhiro Hermit Endo . - -2001-11-03 Per Abrahamsen - - * message.el (message-forbidden-properties): New constant. - (message-strip-forbidden-properties): New function. - (message-mode): Activate it. - -2001-11-02 17:00:00 ShengHuo ZHU - - * mm-util.el (mm-iso-8859-15-compatible): Fix doc. - (mm-hack-charsets): Fix doc. - -2001-11-02 Simon Josefsson - - * gnus-int.el (gnus-check-server): Message "...done" when done. - - * imap.el (imap-close): Don't message (imap-send-command-wait - returns if the connection is dropped). - (imap-wait-for-tag): Nix out message only when necessary. - - * gnus-sieve.el (gnus-sieve-script): Use "stop" instead of "elsif" - for non-crossposting. - (gnus-sieve-crosspost): Default to t to be consistent with other - parts of Gnus. - -2001-11-01 18:00:00 ShengHuo ZHU - - * mm-util.el (mm-iso-8859-15-compatible): Add inconvertible chars. - (mm-iso-8859-x-to-15-table): Ditto. - (mm-iso-8859-x-to-15-region): Ditto. - (mm-find-mime-charset-region): Ditto. - -2001-11-01 Simon Josefsson - - * nnimap.el (nnimap-close-asynchronous): New variable. - (nnimap-close-group): Use it. - (nnimap-expunge): Don't use it. - - * imap.el (imap-callbacks): New variable. - (imap-remassoc): Copied from `gnus-remassoc'. - (imap-add-callback): New function. - (imap-mailbox-expunge, imap-mailbox-close): Support asynchronous - behaviour. - (imap-parse-response): Call the callback. - - * message.el (message-insert-canlock): New variable. - (message-canlock-generate, message-canlock-password) - (message-insert-canlock): New functions. - (message-send-news): Call `message-insert-canlock'. - (top-level): Require canlock when compiling. - (message-insert-canlock): Require canlock before we need it. - -2001-11-01 13:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-copy-article-buffer): Copy sequence. - -2001-11-01 12:00:00 ShengHuo ZHU - - * dgnushack.el (dgnushack-make-load): A workaround for - custom-add-loads bug in some versions of XEmacs. - -2001-11-01 10:00:00 ShengHuo ZHU - - * mm-util.el (mm-charset-synonym-alist): Revert (some). - -2001-11-01 09:00:00 ShengHuo ZHU - - * mm-util.el (mm-iso-8859-x-to-15-region): New function. - (mm-hack-charsets): New variable. - (mm-iso-8859-15-compatible): New variable. - (mm-iso-8859-x-to-15-table): New variable. - (mm-find-mime-charset-region): Add parameter hack-charsets. - - * mm-bodies.el (mm-encode-body): Use it. - * mml.el (mml-parse-1): Ditto. - -2001-11-01 Simon Josefsson - - * gnus-group.el (gnus-group-make-menu-bar): Add Sieve. - -2001-11-01 08:00:00 ShengHuo ZHU - - * mm-util.el (mm-charset-to-coding-system): Return nil, if charset - is nil. - -2001-11-01 07:00:00 ShengHuo ZHU - - * smiley-ems.el (smiley-update-cache): Auto detect file type. - - * message.el (message-forward-rmail-make-body): Use - save-window-excursion. - (message-encode-message-body): Search with noerror. - (message-setup-1): Convert compose-mail send-actions to - message-send-actions. - -2001-11-01 Simon Josefsson - - * sieve.el: Don't require easy-mmode. Suggested by Katsumi Yamaoka - . - -2001-10-31 20:00:00 ShengHuo ZHU - - * sieve-manage.el (sieve-string-bytes): No complain. - -2001-11-01 Simon Josefsson - - * gnus-group.el (gnus-group-mode-map): Bind "D u" to - `gnus-sieve-update' and "D g" to `gnus-sieve-generate'. (Functions - has autoload cookies, so no `require' should be necessary.) - - * sieve.el, sieve-mode.el, sieve-manage.el, gnus-sieve.el: New - files. - -2001-10-31 Simon Josefsson - - * gnus-cus.el (gnus-group-parameters): Support integer `display' - parameter. - - * gnus-sum.el (gnus-select-newsgroup): If group parameter - `display' is a number (and C-u wasn't used to enter group), only - fetch that number of articles. - -2001-10-31 Matt Armstrong - - * gnus.el (gnus-find-subscribed-addresses): Doc fix: - not-subscribed -> subscribed. - -2001-10-31 08:00:00 ShengHuo ZHU - From: Josh Huber - - * message.el (message-subscribed-address-functions): New variable. - (message-subscribed-addresses): New variable. - (message-subscribed-regexps): New variable. - (message-goto-mail-followup-to): New function. - (message-send-mail): Add Mail-Followup-To. - (message-make-mft): New function. - - * gnus.el (gnus-find-subscribed-addresses): New function. - -2001-10-31 07:00:00 ShengHuo ZHU - - * mail-source.el (mail-source-fetch): If debug, don't regain signals. - (mail-source-fetch-pop): Ditto. - (mail-source-check-pop): Ditto. - - * gnus-start.el (gnus-read-init-file): Ditto. - (gnus-activate-group): Ditto. - (gnus-read-newsrc-el-file): Ditto. - -2001-10-30 23:00:00 ShengHuo ZHU - - * message.el (message-get-reply-headers): Make sure there is ", ". - - * mm-util.el (mm-mime-mule-charset-alist): Move down and call - mm-coding-system-p. Don't correct it only in XEmacs. - (mm-charset-to-coding-system): Use mm-coding-system-p and - mm-get-coding-system-list. - (mm-emacs-mule, mm-mule4-p): New variables. - (mm-enable-multibyte, mm-disable-multibyte, - mm-enable-multibyte-mule4, mm-disable-multibyte-mule4, - mm-with-unibyte-current-buffer, - mm-with-unibyte-current-buffer-mule4): Use them. - (mm-find-mime-charset-region): Treat iso-2022-jp. - - From Dave Love : - - * mm-util.el (mm-mime-mule-charset-alist): Make it correct by - construction. - (mm-charset-synonym-alist): Remove windows-125[02]. Make other - entries conditional on not having a coding system defined for - them. - (mm-mule-charset-to-mime-charset): Use - find-coding-systems-for-charsets if defined. - (mm-charset-to-coding-system): Don't use - mm-get-coding-system-list. Look in mm-charset-synonym-alist - later. Add last resort search of coding systems. - (mm-enable-multibyte-mule4, mm-disable-multibyte-mule4) - (mm-with-unibyte-current-buffer-mule4): Just treat Mule 5 like - Mule 4. - (mm-find-mime-charset-region): Re-write. - (mm-with-unibyte-current-buffer): Restore buffer as well as - multibyteness. - -2001-10-30 21:00:00 ShengHuo ZHU - - * canlock.el, sha1-el.el, hex-util.el: Move from contrib - directory. Thanks to Katsumi Yamaoka and Shuhei - KOBAYASHI . - -2001-10-30 20:00:00 ShengHuo ZHU - - * gnus-art.el (article-display-x-face): Nix buffer-read-only - again. - - * mml2015.el (mml2015-gpg-verify): Convert to . - -2001-10-30 13:00:00 ShengHuo ZHU - - * gnus-spec.el (gnus-parse-simple-format): Use - buffer-substring-no-properties. - -2001-10-30 Katsumi Yamaoka - - * gnus-art.el (article-verify-cancel-lock): New function. - - * nnheader.el (nntp-process-response): New variable. - (nnheader-init-server-buffer): Make `nntp-process-response' - buffer-local in `nntp-server-buffer'. - - * nntp.el (nntp-prepare-post-hook): New hook. - (nntp-wait-for): Save a server's ID in `nntp-process-response'. - (nntp-async-trigger): Ditto. - (nntp-request-post): Insert a server's ID if there's no Message-ID - header; run `nntp-prepare-post-hook'. - -2001-10-30 04:00:00 ShengHuo ZHU - - * gnus-art.el (article-decode-group-name): Use nnmail-fetch-field - instead. - - * message.el (message-forward-subject-author-subject): Don't use - message-news-p, which widens the buffer. - (message-forward-make-body): New function. - (message-forward): Use it. - (message-insinuate-rmail): New function. - (message-forward-rmail-make-body): New function. - -2001-10-30 02:00:00 ShengHuo ZHU - - * mm-extern.el (mm-extern): Provide it. - - * mm-partial.el (mm-partial): Provide it. - -2001-10-28 16:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-setup-message): Call post-command-hook. - -2001-10-29 Simon Josefsson - - * mml.el (mml-preview): Bind message-this-is-news if it is - news. From Jesper Harder . - -2001-10-28 Simon Josefsson - - * gnus-sum.el (gnus-group-make-articles-read): Inline group. - -2001-10-29 Per Abrahamsen - - * smiley-ems.el (smiley-regexp-alist): Add support for sad and - ironic smilies. - -2001-10-27 Simon Josefsson - - * 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-26 14:00:00 ShengHuo ZHU - - * nnweb.el (nnweb-possibly-change-server): Create nnweb-hashtb if - not available. - (nnweb-request-scan): Nix nnweb-hashtb if ephemeral. - (nnweb-type-definition): Add google as alias of dejanews. - (nnweb-google-parse-1): Forward 1 line. - -2001-10-26 Kai Gro,b_(Bjohann - - * gnus-msg.el (gnus-summary-mail-forward): Doc fix: add pointer to - variable `message-forward-ignored-headers'. - -2001-10-24 Per Abrahamsen - - * gnus.el (gnus-expand-group-parameter): New function. - (gnus-expand-group-parameters): Call it. - (gnus-group-fast-parameter): New function. - (gnus-group-find-parameter): Call it. - -2001-10-23 Per Abrahamsen - - * gnus.el (gnus-news-group-p): Rewrote. Now accepts a header - vector (it didn't before because of a bug). - * gnus-msg.el (gnus-post-news): Use header vector directly, if - available. Before it converted it to an article number. - - This makes followup to news articles with negative numbers in - nnvirtual groups use news instead of mail. - -2001-10-23 Per Abrahamsen - - * gnus.el (post-method): Use `native' instead of `nil'. - - * gnus-msg.el (gnus-post-method): Ditto. - -2001-10-23 Per Abrahamsen - - * gnus.el (gnus-define-group-parameter): Grammar fix. - -2001-10-22 Simon Josefsson - - * gnus-msg.el (gnus-extended-version): Include - system-configuration. - Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Gro,b_(Bjohann). - -2001-10-22 Per Abrahamsen - - * gnus.el (post-method): Customization fix: `native' is not a - valid value. - * gnus-msg.el (gnus-post-method): Doc and customization fix: - `native' is not a valid value. - -2001-10-21 Simon Josefsson - - * nnimap.el (nnimap): Defgroup - (nnimap-strict-function, nnimap-strict-function-match): New - widget, from Per Abrahamsen . - (nnimap-split-crosspost, nnimap-split-inbox) - (nnimap-split-rule, nnimap-split-predicate) - (nnimap-split-predicate): Defcustom. - (nnimap-split-inbox, nnimap-expunge-search-string) - (nnimap-importantize-dormant): Remove "*" from doc. - -2001-10-20 Kai Gro,b_(Bjohann - - * gnus-sum.el (gnus-summary-limit-to-score): Prompt for score if - not supplied via prefix arg. From Lisp, make arg mandatory. - Suggested by Frank Schmitt. - -2001-10-20 Per Abrahamsen - - * message.el (message-do-auto-fill): Avoid calling - 'rfc822-goto-eoh'. - -2001-10-20 Kai Gro,b_(Bjohann - From Paul Jarc . - - * message.el (message-get-reply-headers): Restructure the logic - and add comments. From Paul Jarc . - -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-19 Per Abrahamsen - - * mm-decode.el (mm-default-directory): Fix customize type. - - * message.el (message-setup-fill-variables): Kludge to use - normal-auto-fill-function even if auto fill is already activated. - -2001-10-19 Per Abrahamsen - - * message.el (message-do-auto-fill): New version that does not - rely on text properties, by Simon Josefsson . - (message-setup-1): Removed the `message-field' property. - - * gnus-draft.el (gnus-draft-edit-message): Removed the - `message-field' property. - -2001-10-19 Per Abrahamsen - - * gnus-draft.el (gnus-draft-edit-message): Change `field' to - `message-field'. The `field' property has a special significance in - Emacs 21. - - * message.el (message-send, message-setup-1): Ditto. - -2001-10-18 Simon Josefsson - - * gnus-sum.el (gnus-group-make-articles-read): Call g-r-set-mark - when undoing. - -2001-10-18 Simon Josefsson - From Frank Schmitt - - * gnus-sum.el (gnus-summary-limit-to-display-predicate): Fix typo. - (gnus-summary-make-menu-bar): Ditto. - -2001-10-17 Simon Josefsson - - * 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 - - * 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 - - * message.el (message-check-news-header-syntax): Special case - nnvirtual groups. - - * gnus-sum.el (gnus-summary-respool-default-method): Changed - customize type to `symbol'. - -2001-10-17 12:00:00 ShengHuo ZHU - - * gnus-spec.el (gnus-parse-simple-format): Support extended spec - %&foo;. - (gnus-parse-simple-format): Support user extended spec too. - %u&foo; invokes gnus-user-format-function-foo. - -2001-10-17 11:00:00 ShengHuo ZHU - - * nnml.el (nnml-request-expire-articles): Make sure it is back to - the server. - * nnmbox.el (nnmbox-request-expire-articles): Ditto. - * nnfolder.el (nnfolder-request-expire-articles): Ditto. - * nnbabyl.el (nnbabyl-request-expire-articles): Ditto. - * nndiary.el (nndiary-request-expire-articles): Ditto. - (nndiary-schedule): Defsubst it before use it. - (nndiary-error): eval-and-compile. - -2001-10-17 Per Abrahamsen - - * 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 . - - * message.el (message-setup-fill-variables): Use - `normal-auto-fill-function' instead of `auto-fill-function'. - -2001-10-16 Simon Josefsson - - * mml2015.el (mml2015-fix-micalg): Fix for Mutt-bug. - (mml2015-gpg-decrypt-1): Decanonicalize decrypted MIME - body. (Mailcrypt seem to do this, but gpg.el doesn't.) - -2001-10-16 Kai Gro,b_(Bjohann - Patch by Oliver Scholz . - - * gnus-draft.el (gnus-draft-edit-message): Add text property - `field' with value `header' to message headers. - * message.el (message-setup-1): Really add text property to all of - the header, not just part of it. - -2001-09-04 Lars Magne Ingebrigtsen - - * gnus-group.el (gnus-group-sort-by-server): Use it. - - * gnus.el (gnus-method-to-full-server-name): New, bogus function. - - * gnus-topic.el (gnus-topic-sort-groups-by-server): New command - and keystroke. - -2001-10-14 Simon Josefsson - - * dig.el: Doc fix. - - * smime.el: Doc fix. - - * gnus-msg.el (gnus-inews-do-gcc): Port header encoded-word - charset magic from message.el. - -2001-10-12 Simon Josefsson - Suggested by david.goldberg6@verizon.net (David S. Goldberg) - - * gnus-cite.el (gnus-article-toggle-cited-text): Don't remove - 'cite from g-a-wash-types. - (gnus-cite-toggle): Ditto. Add 'cite. Set modeline. - (gnus-article-hide-citation): Fix. - - * gnus-cite.el (gnus-article-hide-citation): Add `c' mode line - character. - (gnus-article-toggle-cited-text): Toggle `c' mode line character. - - * gnus-art.el (gnus-treat-hide-citation-maybe): Remove duplicate - definition. - (gnus-signature-toggle): Toggle `s' mode line character. - - * gnus-art.el (article-emphasize): Set `g-a-wash-types' after - doing stuff that clears it. - -2001-10-12 Simon Josefsson - - * gnus-cache.el (gnus-summary-limit-include-cached): Rewrite. - From Eric Marsden . - -2001-10-12 10:00:00 ShengHuo ZHU - - * message.el (message-do-auto-fill): Use gnus-point-at-bol. - (autoload): Add some autoloads. - -2001-10-12 Kai Gro,b_(Bjohann - Suggested by Oliver Scholz . - - * message.el (message-do-auto-fill): New function. Like - `do-auto-fill' but don't fill when in the message header. - (message-setup-1): Put a text property on the message header. - (message-setup-fill-variables): Use `message-do-auto-fill'. - -2001-10-10 12:00:00 ShengHuo ZHU - - * message.el (message-send-mail-partially): Insert an empty line - first, because of the change of message-make-lines. - -2001-10-10 Florian Weimer - - * mm-util.el (mm-charset-synonym-alist): If Emacs doesn't support - iso-8859-15, make it an alias for iso-8859-1. - -2001-10-10 Katsumi Yamaoka - - * message.el (message-send-news): Don't modify the value of - `message-syntax-checks' if it is not a list (possibly it is - `dont-check-for-anything-just-trust-me'). - -2001-10-10 Katsumi Yamaoka - - * gnus-group.el (gnus-group-name-charset-group-alist): Use - `find-coding-system' for XEmacs to check whether the coding-system - `utf-8' is available. - -2001-10-09 13:00:00 ShengHuo ZHU - - * dgnushack.el (dgnushack-compile): Detect mh-e and xml. - -2001-10-09 Per Abrahamsen - - * message.el (message-send-news): Oops, missed case with no - "Followup-To" header... - -2001-10-09 Per Abrahamsen - - * message.el (message-send-news): Allow - `gnus-group-name-charset-group-alist' to affect encoding of the - "Newsgroups" and "Followup-To" headers. - -2001-10-07 15:00:00 ShengHuo ZHU - - * Makefile.in (install-el): Depend on gnus-load.el. - -2001-10-07 13:00:00 ShengHuo ZHU - - * Makefile.in (install-el): Use -f. - From: Amos Gouaux - -2001-10-07 Per Abrahamsen - - * message.el (message-send-news): Don't encode Followups-To when - `gnus-group-name-charset-group-alist is' ".*". [Yuck] - - * gnus-util.el (gnus-decode-newsgroups): No space in newsgroup - header. - - * gnus-art.el (article-decode-group-name): Also decode - "Followup-To". - - * rfc2047.el (rfc2047-encode-message-header): Encode without - asking for null methods. - - * gnus-group.el (gnus-group-name-charset-group-alist): Make utf-8 - default charset for newsgroup names in accordance with USEFOR. - - * gnus-group.el (gnus-group-name-charset-method-alist, - gnus-group-name-charset-group-alist): Removed "*" from doc - strings, "*" should not be used for complex variables. - -2001-10-06 Simon Josefsson - - Support UTF-8 group names better. - - * message.el (message-check-news-header-syntax): Encode group - names before comparison. - - * gnus-msg.el (gnus-copy-article-buffer): Run all - `gnus-article-decode-hook's except `article-decode-charset' - instead of hardcoding call to one of them. - - * gnus-art.el (gnus-article-decode-hook): Add - `article-decode-group-name'. - (article-decode-group-name): New function, use `g-d-n'. - - * gnus-group.el (gnus-group-insert-group-line): Decode - gnus-tmp-group using `g-d-n'. - - * gnus-util.el (gnus-decode-newsgroups): New function. - -2001-10-06 Per Abrahamsen - - * gnus-srvr.el (gnus-browse-foreign-server): Fixed bug non-nil - `gnus-group-name-charset-group-alist'. - -2001-10-06 08:00:00 ShengHuo ZHU - - * Makefile.in: Install el in install. Add uninstall. - -2001-10-05 Simon Josefsson - - * nnheader.el (gnus-verbose-backends, gnus-nov-is-evil): Custom. - - * gnus-sum.el (gnus-summary-move-article): Also activate new groups. - - * nnfolder.el (nnfolder-normalize-buffer): Don't insert \n\n in - empty folders. - - * gnus-sum.el (gnus-select-newsgroup): Don't enable `display' - limiting if read-all (C-u RET) was used. - -2001-10-04 Simon Josefsson - - * mail-source.el (mail-source-movemail-program): New variable. - (mail-source-movemail): Use it. Suggested by Taylor Hutt - . - -2001-10-03 Simon Josefsson - - * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): New param. - (gnus-summary-line-format-alist): Fix param. - -2001-10-02 Simon Josefsson - - * nnimap.el (nnimap-request-move-article): Use imap.el directly, - don't go through `nnimap-request-expire-articles' to delete the - article. Thanks to prj@po.cwru.edu (Paul Jarc). - -2001-10-02 10:00:00 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-write-active): The min in the - agent/active may be larger than that in the server/active. - -2001-10-01 Simon Josefsson - - * mail-source.el (mail-source-fetch-imap): Use BODY.PEEK if server - is IMAP4rev1. - - * nnml.el (gnus-article-unpropagatable-p): Autoload gnus-sum. - - * nnfolder.el: Ditto. - -2001-09-30 Dan Christensen - - * gnus-sum.el (gnus-summary-extract-address-component): New function. - (gnus-summary-from-or-to-or-newsgroups): Optimize. - -2001-09-29 Kai Gro,b_(Bjohann - - * message.el (message-mode-map): Keybinding for `gnus-delay-article'. - (message-mode-menu): Menu item for same. - - * gnus-group.el (gnus-group-make-menu-bar): Menu item for sending - delayed articles. - - * gnus-delay.el (gnus-delay-send-drafts): Do nothing if - nndraft:delayed does not exist. - (gnus-delay-initialize): Don't set up keymap, that's done from - message.el now. - (gnus-delay, gnus-delay-group, gnus-delay-header) - (gnus-delay-default-delay, gnus-delay-default-hour): Customize. - -2001-09-29 Simon Josefsson - - * mm-util.el (mm-mime-mule-charset-alist): Encode mule-utf-8 as - utf-8, not eight-bit-control. - - * imap.el (imap-shell-host, imap-default-user, imap-use-utf7) - (imap-log, imap-debug): Custom. - (imap-log-buffer, imap-debug-buffer): New constants. - (imap-kerberos4-open, imap-gssapi-open, imap-ssl-open) - (imap-network-open, imap-shell-open, imap-starttls-open) - (imap-send-command-1, imap-send-command, imap-arrival-filter) - (imap-debug): Use imap-*-buffer. - - * nndoc.el (nndoc-article-type): Add mailman. - (nndoc-type-alist): Ditto. - (nndoc-mailman-type-p): New function. - -2001-09-28 07:00:00 ShengHuo ZHU - - * gnus-xmas.el (gnus-article-x-face-command): Merge it into - gnus-art.el. - -2001-09-27 Simon Josefsson - - * gnus-topic.el (gnus-topic-mode-map): Add catchup. - (gnus-topic-catchup-articles): New function. Suggested by Robin - S. Socha . - -2001-09-27 11:00:00 ShengHuo ZHU - From 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 - - * 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 - - * gnus-group.el (gnus-group-delete-group): Typo. - -2001-09-26 Simon Josefsson - - * nnmail.el (nnmail-expiry-target-group): Add doc warning. - - * nnimap.el (nnimap-expiry-target): Use temp buffer. - -2001-09-26 07:00:00 ShengHuo ZHU - - * gnus-cus.el (gnus-group-parameters): Display as sexp. - -2001-09-22 Simon Josefsson - - * nnml.el (nnml-open-marks): Remove unpropagatable marks. - - * nnfolder.el (nnfolder-open-marks): Ditto. - - * gnus-sum.el (gnus-article-unpropagatable-p): New function. - (gnus-update-marks): Use it. - (gnus-update-marks): Use `gnus-article-mark-to-type' instead of - hardcoded list. - - * gnus.el (gnus-article-special-mark-lists): Add killed. - (gnus-article-unpropagated-mark-lists): New constant. - -2001-09-22 Simon Josefsson - - * gnus-sum.el (gnus-summary-mode-hook): Add gnus-pick-mode as - custom option. - -2001-09-23 Simon Josefsson - - * gnus-draft.el (gnus-draft-setup): Add mark in backend as well. - -2001-09-23 02:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-button-mailto): Hack save-selected-window-window. - -2001-09-22 Per Abrahamsen - - * gnus-group.el (gnus-group-sort-function): Fix customize type to - accept lists of functions. - -2001-09-20 Simon Josefsson - - * gnus-group.el (gnus-group-catchup): Update expire marks in - backend. Also, if ALL also set expire marks on tick/dormant. - -2001-09-20 Kai Gro,b_(Bjohann - - * message.el (message-tab-body-function): New variable. - * message.el (message-tab): Use it. - -2001-09-19 Sam Steingold - - * gnus-win.el (gnus-buffer-configuration): Respect - `gnus-bug-create-help-buffer'. - -2001-09-18 Simon Josefsson - - * gnus-spec.el (gnus-correct-pad-form): Re-revert. - (gnus-parse-simple-format): Re-revert. - -2001-09-16 Katsuhiro Hermit Endo - Trivial patch. - - * gnus-spec.el (gnus-parse-complex-format): Don't fold search - case. (Thanks to Daiki Ueno .) - -2001-09-18 Simon Josefsson - - * gnus-spec.el (gnus-correct-pad-form): Remove until papers are - signed. - (gnus-parse-simple-format): Don't use it. - -2001-09-17 Miles Bader - - * 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 - - * gnus-srvr.el (gnus-server-mode): Fix bogus fontification. - From Gerd M,Av(Bllmann . - -2001-09-17 Didier Verna - - * nndiary.el: version 0.2-b14. - * gnus-diary.el (gnus-diary-check-message): fix `read-string' - compatibility problem with XEmacs 21.1. - -2001-09-15 Simon Josefsson - - * gnus-group.el (gnus-group-line-format): Document %c. - - * nnml.el (nnml-parse-head): Handle CRLF files. - (nnml-generate-nov-file): Ditto. - (nnml-retrieve-headers): Ditto. - -2001-09-15 Michael Welsh Duggan - - * gnus-spec.el (gnus-parse-format): Don't treat %c as %C. - -2001-09-13 Martin Kretzschmar - - * gnus-spec.el (gnus-correct-substring): Still stopped one - character before we wanted (never included last character). - (gnus-tilde-max-form, gnus-tilde-cut-form) Made readable again, - add missing "," (once per function) - -2001-09-14 Simon Josefsson - - * gnus-start.el (gnus-group-mode-hook): Moved from gnus-group - (otherwise e.g. gnus-agentize in .gnus overrides the customized - default before gnus-group is loaded and the variable set.) - - * nnimap.el (nnimap-request-set-mark): Do not store bookmark, - killed or unsent marks. - - * gnus-draft.el (gnus-draft-setup): Don't set mark when there - isn't an article to set it on (e.g. when you `a' in a group). - -2001-09-12 Pavel Jan,Am(Bk - - * mm-util.el (mm-charset-synonym-alist): add windows-1250 so we - can read e-mails from Microsoft Outlook users not using ISO - 8859-2 character set. - -2001-09-12 18:00:00 ShengHuo ZHU - - * gnus-diary.el: Minor modifications to avoid warnings. - (gnus-summary-misc-menu): defvar. - (gnus-diary-check-message): Use gnus-point-at-eol. - (gnus-diary-kill-entire-line): eval-and-compile. - -2001-09-12 Didier Verna - - * nndiary.el: new version (0.2-b13). - * nndiary.el (nndiary-mail-sources): doc update. - * nndiary.el (nndiary-split-methods): ditto. - * nndiary.el (nndiary-request-accept-article-hooks): New. - * nndiary.el (nndiary-request-accept-article): use it, check - message validity. - * nndiary.el (nndiary-get-new-mail): changed default to nil. - * nndiary.el (nndiary-schedule): fix bug (misplaced - condition-case): it didn't return nil on error. - * gnus-diary.el: new version. - * gnus-diary.el (gnus-diary-summary-line-format): removed %I. - * gnus-diary.el (gnus-diary-header-value-history): New. - * gnus-diary.el (gnus-diary-narrow-to-headers): New. - * gnus-diary.el (gnus-diary-add-header): New. - * gnus-diary.el (gnus-diary-check-message): New. - * 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 - - * gnus-sum.el (gnus-select-newsgroup): Make - `gnus-current-select-method' buffer-local. - - * 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 - - * gnus-spec.el (gnus-correct-pad-form): Fix. - -2001-09-09 Simon Josefsson - - * mm-decode.el (mm-inline-media-tests): Add - application/x-emacs-lisp. - (mm-attachment-override-types): Add - application/{x-,}pkcs7-signature. - - * gnus-srvr.el (gnus-server-mode-hook, gnus-server-exit-hook) - (gnus-server-line-format, gnus-server-mode-line-format) - (gnus-server-browse-in-group-buffer): Customize. - -2001-09-08 16:00:00 ShengHuo ZHU - - * nnml.el (nnml-marks-changed-p): Typo. - (nnml-save-marks, nnml-open-marks): Use gnus-sethash. - (nnml-marks-changed-p): Use gnus-gethash. - (nnml-marks-modtime): Use gnus-make-hashtable. - - * nnfolder.el (nnfolder-marks-changed-p): Typo. - (nnfolder-request-expire-articles, nnfolder-save-marks) - (nnfolder-open-marks): Typo. - (nnfolder-save-marks, nnfolder-open-marks): Use gnus-sethash. - (nnfolder-marks-changed-p): Use gnus-gethash. - (nnfolder-marks-modtime): Use gnus-make-hashtable. - -2001-09-08 Simon Josefsson - - * nnfolder.el (nnfolder-marks-modtime): New variable. - (nnfolder-marks-changed-p): New function. - (nnfolder-save-marks, nnfolder-open-marks): Save modtime. - (nnfolder-request-update-info): Don't update if marks didn't change. - - * nnml.el (nnml-marks-modtime): New variable. - (nnml-marks-changed-p): New function. - (nnml-save-marks, nnml-open-marks): Save modtime. - (nnml-request-update-info): Don't update if marks didn't change. - - * gnus-agent.el (gnus-agent-any-covered-gcc) - (gnus-agent-add-server, gnus-agent-remove-server): Use - gnus-agent-method-p. - - * gnus-art.el (gnus-buttonized-mime-types): New variable. - (gnus-unbuttonized-mime-type-p): Use it. - - * gnus-agent.el (gnus-agent-fetch-group): If online, actually - fetch group. - -2001-09-08 Simon Josefsson - From Daniel Pittman - - * gnus-spec.el (gnus-correct-pad-form): New function. - (gnus-parse-simple-format): Use it. - -2001-09-07 Simon Josefsson - - * gnus-group.el (gnus-group-sort-groups): Unmark all groups. - (gnus-group-sort-selected-groups): Ditto. Suggested by Harry - Putnam . - (gnus-group-sort-selected-groups): Touch dribble file. - -2001-09-07 Raja R Harinath - - * nnml.el (nnml-filenames-are-evil): New variable. - (nnml-article-to-file-alist): Rename to ... - (nnml-current-group-article-to-file-alist): ... this. - Respect `nnml-filenames-are-evil'. - (nnml-active-number): Update. - (nnml-update-file-alist): Update. - (nnml-request-article): Use nnheader-article-to-file-alist. - (nnml-request-rename-group): Likewise. - -2001-09-06 Katsumi Yamaoka - - * gnus-sum.el (gnus-summary-insert-line): Fix. - -2001-09-06 Bj,Av(Brn Torkelsson - - * gnus-sum.el: Bind g-s-t-s to "W g". - * gnus-sum.el (gnus-summary-make-menu-bar): Add g-s-t-s. - * gnus-sum.el (gnus-summary-toggle-smiley): New function. Toggles - display of graphical smilies. - -2001-09-07 02:00:00 ShengHuo ZHU - - * gnus-start.el (gnus-setup-news): A typo. - From Bill White . - -2001-09-06 Simon Josefsson - - * gnus-sum.el (gnus-summary-insert-line): Insert forwarded, recent - and unseen marks. - -2001-09-05 Kai Gro,b_(Bjohann - - * nnmail.el (nnmail-split-fancy): Document `junk'. - -2001-09-04 Simon Josefsson - - * imap.el (imap-search): Don't error if server is broken. - -2001-09-02 Benjamin Rutt - - * nnmbox.el (nnmbox-find-article): Fix infinite loop when - searching for an article that isn't in the mbox. - -2001-09-02 23:12:48 Lars Magne Ingebrigtsen - - * nnslashdot.el (nnslashdot-retrieve-headers-1): Get references - right, and get all the comments. - -2001-09-02 Simon Josefsson - Suggested by Dan Christensen - - * nnfolder.el (nnfolder-request-update-info): Fix message. - - * nnml.el (nnml-request-update-info): Ditto. - -2001-09-01 Simon Josefsson - - * nnml.el (nnml-request-expire-articles): Also bind - `nnml-current-group' and `nnml-article-file-alist' when using - expiry-target. (Otherwise nnml will be in a inconsistent internal - state causing all kind of problems.) - (nnml-request-expire-articles): If `nnml-article-to-file' or - `file-attributes' failes, return article as un-expirable instead - of treating it as expired. - -2001-08-31 Sam Steingold - - * imap.el (imap-mailbox-examine, imap-mailbox-examine-1): Fix a - typo: `exmine' --> `examine'. - -2001-08-30 13:00:00 ShengHuo ZHU - - * nndoc.el (nndoc-forward-type-p): It is not a digest. - -2001-08-30 11:00:00 ShengHuo ZHU - - * nnml.el (nnml-check-directory-twice): Remove. - (nnml-retrieve-headers): Ditto. - (nnml-article-to-file): Use nnheader-directory-files-is-safe. - -2001-08-30 Andrew Innes - - * nnheader.el (nnheader-directory-files-is-safe): No need to read - directory twice on Windows, or on GNU Emacs-21. - -2001-08-30 Andrew Innes - - * nnml.el (nnml-request-article): Use nnml-article-to-file-alist. - (nnml-request-rename-group): Ditto. - (nnml-active-number): Ditto. - (nnml-request-create-group): Use nnml-directory-articles. - (nnml-request-expire-articles): Use nnml-directory-articles, which - gets list from nov database if available. - (nnml-get-nov-buffer): New function. - (nnml-open-nov): Use it. - (nnml-update-file-alist): Use nnml-article-to-file-alist, which - gets alist from nov database if available. - (nnml-directory-articles): New function. - (nnml-article-to-file-alist): New function. - -2001-08-30 Andrew Innes - - * mm-decode.el (mm-display-external): Use `name' as filename, if - `filename' attribute is not present. - -2001-08-30 Andrew Innes - - * mail-source.el (mail-source-flash): New defcustom. - (mail-source-new-mail-p): Ring visible bell if appropriate. - (mail-source-start-idle-timer): Use unwind-protect to ensure idle - timer is cleared even if mail check signals an error. - -2001-08-29 10:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-move-article): Only update marks of - type 'list. - -2001-08-29 00:00:00 ShengHuo ZHU - - * flow-fill.el (fill-flowed): eol might be point-max. - -2001-08-27 Simon Josefsson - - * nnml.el (nnml-request-update-info): Fix message. - (nnml-open-marks): Ditto. - - * nnfolder.el (nnfolder-request-update-info): - (nnfolder-open-marks): Fix message. - -2001-08-25 Simon Josefsson - - * nnfolder.el (nnfolder-save-marks): Don't create directory named - after group in ~/. - -2001-08-25 Simon Josefsson - From Andreas Jaeger - - * nnfolder.el (nnfolder-open-marks): Fix typo. - * nnml.el (nnml-open-marks): Likewise. - -2001-08-25 Simon Josefsson - - Make nnfolder groups self-contained as far as marks are concerned. - - * nnfolder.el (nnfolder-marks-directory, nnfolder-marks-is-evil) - (nnfolder-marks, nnfolder-marks-file-suffix): New variables. - (nnfolder-open-server): Make marks directory. - (nnfolder-request-delete-group): Delete marks file. - (nnfolder-request-delete-group): Check of nov/marks file exist - before deleting. - (nnfolder-request-rename-group): Rename marks file. - (nnfolder-request-rename-group): Only rename nov/mark if they exists. - (nnfolder-request-set-mark, nnfolder-request-update-info) - (nnfolder-group-marks-pathname, nnfolder-save-marks) - (nnfolder-open-marks): New functions. - (top-level): Require gnus. - -2001-08-25 09:00:00 ShengHuo ZHU - - * nnweb.el (nnweb-type-definition): Use google raw file. - (nnweb-google-parse-1): Ditto. - (nnweb-google-identity): Ditto. - (nnweb-reference-wash-article): Move nnweb-decode-entities here. - (nnweb-altavista-wash-article): Ditto. - (nnweb-request-article): Remove nnweb-decode-entities. - - * nnml.el: Require 'gnus. - -2001-08-25 Simon Josefsson - - * nnml.el (nnml-marks-is-evil): Add doc. - -2001-08-25 Simon Josefsson - - * nnml.el (nnml-save-marks): Wrap saving marks in a - condition-case, to allow user to start Gnus if saving marks failed - for some reason. - -2001-08-24 16:05:38 Lars Magne Ingebrigtsen - - * gnus-spec.el (gnus-compile): Don't compile gnus-version. - - * gnus-group.el (gnus-update-group-mark-positions): Bind - gnus-group-update-hook to nil. - -2001-08-24 13:00:00 ShengHuo ZHU - - * mml.el (mml-generate-mime-1): Force as multibyte string. - -2001-08-24 12:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-insert-line) - (gnus-summary-prepare-threads): gnus-tmp-lines should be a string. - From Martin Kretzschmar - - * gnus-spec.el (gnus-correct-substring): Take optional END. - - * nnrss.el (nnrss-request-article): Remove \n. - (nnrss-retrieve-headers): Lines number is -1. - -2001-08-24 Simon Josefsson - - * gnus-group.el (gnus-info-clear-data): Call - nnfoo-request-set-mark to propagate marks. Fix bug: - `gnus-group-update-line' doesn't update read range unless we call - `gnus-get-unread-articles-in-group' first. - - * nnimap.el (nnimap-request-set-mark): Don't propagate seen flags - to server. - -2001-08-23 21:00:00 ShengHuo ZHU - - * gnus-util.el (gnus-create-info-command): Return an interactive - function. - -2001-08-23 19:00:00 ShengHuo ZHU - From Katsumi Yamaoka - - * gnus-spec.el (gnus-parse-complex-format): Use equal. - -2001-08-23 18:43:05 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-select-newsgroup): Use it. - - * gnus-util.el (gnus-not-ignore): New function. - - * lpath.el (featurep): Don't fbind char-int. - - * gnus-util.el (gnus-create-info-command): New function. - - * gnus-group.el (gnus-group-edit-group): Make C-c C-i go to the - right node. - - * gnus-sum.el (gnus-select-newsgroup): Clean up. - (gnus-summary-limit-children): Use 'identity instead of `all'. - (gnus-summary-limit-to-display-predicate): New command and - keystroke. - -2001-08-23 10:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-group-alist): Use fm-releases.rdf. - - * gnus-spec.el (gnus-format-specs): Miss a right parenthesis. - -2001-08-23 18:43:05 Lars Magne Ingebrigtsen - - * gnus-spec.el: Add the Gnus version. - (gnus-update-format-specifications): If the Gnus version changes, - nix out the format spec cache. - - * gnus.el (gnus-continuum-version): Made into a command and - optionalize the VERSION. - - * gnus-spec.el (gnus-parse-complex-format): Remove %C specs from - the start of the lines. - -2001-08-22 00:06:52 Lars Magne Ingebrigtsen - - * gnus.el (gnus-visual-p): Define function before use of - function. - -2001-08-21 23:28:02 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-adjust-marked-articles): Use new variable. - (gnus-article-mark-to-type): New function. - (gnus-update-missing-marks): Only update marks of type 'list. - - * gnus.el (gnus-article-special-mark-lists): New variable. - -2001-08-21 12:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-limit-children): Check 'all. - (gnus-select-newsgroup): Still use 'all. - (gnus-summary-initial-limit): Comparing with 'all. - -2001-08-20 16:00:00 ShengHuo ZHU - - * gnus-start.el (gnus-activate-group): If dont-check, don't update - active. - -2001-08-20 15:00:00 ShengHuo ZHU - - * nnslashdot.el (nnslashdot-retrieve-headers-1): Replace - nnslashdot-*-retrieve-headers. - (nnslashdot-request-article): Fix for slashcode 2.2. - (nnslashdot-make-tuple): New function. - (nnslashdot-read-groups): Use it. - -2001-08-20 01:34:03 Lars Magne Ingebrigtsen - - * gnus.el (gnus-expand-group-parameters): Don't alter the variable - list. - - * gnus-sum.el (gnus-summary-move-article): Don't select article. - -2001-08-20 Simon Josefsson - - * gnus-msg.el (gnus-inews-do-gcc): If archive server can't be - opened, error instead of continuing (and exploding later). - -2001-08-20 01:34:03 Lars Magne Ingebrigtsen - - * gnus.el (gnus-expand-group-parameters): Return the parameter - list. - - * gnus-sum.el (gnus-summary-show-article): Doc fix. - (gnus-summary-show-article): Guess at charset if required. - - * gnus-spec.el (gnus-correct-substring): Stopped one character - before we wanted. - -2001-08-19 Pavel Jan,Am(Bk - - * earcon.el (earcon-auto-play): Remove unused option. - -2001-08-19 16:14:41 Lars Magne Ingebrigtsen - - * gnus-score.el (gnus-score-headers): Move the "Scoring..." - message down in levels, since it happens very fast. - - * smiley-ems.el (smiley-update-cache): Respect the symbol version - of smiley-regexp-alist. - - * mm-view.el (mm-inline-text): Ignore vcard errors. - - * gnus-art.el (gnus-ignored-headers): Added more junk headers. - - * gnus-score.el (gnus-all-score-files): Use append instead of - nconc. - - * gnus.el (gnus-splash-face): Doc fix. - - * mm-decode.el (mm-mailcap-command): Use - mm-path-name-rewrite-functions. - (mm-path-name-rewrite-functions): New variable. - - * gnus-spec.el (gnus-parse-complex-format): React to ?=. - (gnus-complex-form-to-spec): Insert tab. - (gnus-spec-tab): New function. - - * gnus-sum.el (gnus-select-newsgroup): Set the marks before - entering the group. - - * gnus-spec.el (gnus-complex-form-to-spec): Insert Lisp to match - the positional spec. - (gnus-parse-complex-format): React to %C. - - * gnus-ems.el (gnus-char-width): Moved here. - - * gnus-sum.el (gnus-select-newsgroup): Set - gnus-newsgroup-articles. - (gnus-unseen-mark): New variable. - (gnus-newsgroup-unseen): Ditto. - (gnus-newsgroup-seen): Ditto. - (gnus-adjust-marked-articles): Use them. - (gnus-update-marks): Use them. - (gnus-summary-update-secondary-mark): Display. - (gnus-summary-prepare-threads): Display. - - * gnus-msg.el (gnus-inews-group-method): Use and return the - method, not the server. - -2001-08-19 Simon Josefsson - - * gnus-srvr.el (gnus-server-agent-face): New. - (gnus-server-agent-face): New. - (gnus-server-mode): Turn on font-lock-mode. - - * gnus.el (gnus-server-visual): Add defgroup. - -2001-08-19 Simon Josefsson - From Joe Casadonte - - * gnus-srvr.el (gnus-server-opened-face, gnus-server-closed-face, - gnus-server-denied-face): New. - (gnus-server-opened-face, gnus-server-closed-face, - gnus-server-denied-face): New. - (gnus-server-font-lock-keywords): Add. - -2001-08-19 Simon Josefsson - - * nnml.el (nnml-request-set-mark): Return nil. - (nnml-save-marks): Use nnml-possibly-create-directory. - (nnml-open-marks): Only work in temp buffer when inserting/reading - .marks file. - -2001-08-18 19:00:00 ShengHuo ZHU - - * gnus.el (gnus-expand-group-parameters): Fix. - - * gnus-spec.el (gnus-char-width): New function. - (gnus-correct-substring, gnus-correct-length): Use it. - - * message.el (message-required-mail-headers): Fix doc. - -2001-08-18 18:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-group-make-articles-read): gnus-request-set-mark. - - * mm-decode.el (mm-save-part-to-file): Insert the handle. - -2001-08-18 13:00:00 ShengHuo ZHU - - * nnslashdot.el (nnslashdot-threaded-retrieve-headers): - slashdot 2.2 (not fully fixed yet). - (nnslashdot-request-article): Ditto. - -2001-08-18 Simon Josefsson - - * gnus-util.el (gnus-remassoc, gnus-update-alist-soft): Moved from - nnimap. - - * nnimap.el (nnimap-remassoc, nnimap-update-alist-soft): Moved to - gnus-util. - (nnimap-request-update-info-internal): Use new functions. - - * nnml.el (nnml-request-set-mark, nnml-request-update-info): Use - new functions. - -2001-08-18 Simon Josefsson - - Make nnml groups self-contained as far as marks are concerned. - - * nnml.el (nnml-request-delete-group): Delete marks file. - (nnml-request-rename-group): Move marks file. - (nnml-marks-file-name, nnml-marks-is-evil, nnml-marks): New server - variables. - (nnml-request-set-mark, nnml-request-update-info): New server - functions. - (nnml-save-marks, nnml-open-marks): New functions. - -2001-08-18 Simon Josefsson - - * gnus-sum.el (gnus-summary-move-article): Use `add' instead of - `set' when setting marks. - -2001-08-17 22:00:00 ShengHuo ZHU - - * gnus.el (gnus-info-find-node): Take an argument. - - * gnus-art.el (gnus-button-handle-info): New function. - (gnus-url-unhex-string): Replace "+" with " ". - -2001-08-17 21:00:00 ShengHuo ZHU - - * message.el (message-check-news-header-syntax): Check bad From. - -2001-08-18 00:14:45 Lars Magne Ingebrigtsen - - * gnus-spec.el (gnus-correct-length): New function. - (gnus-correct-substring): New function. - (gnus-tilde-max-form): Use it. - -2001-08-17 Nevin Kapur - - * nnmh.el: Docstring changes as below. - - * nnml.el: Docstring changes as below. - - * nnbabyl.el: Docstring changes as below. - - * nnmbox.el: Docstring changes as below. - - * nnfolder.el: Added docstrings identifying each virtual server - parameter. - -2001-08-18 Simon Josefsson - - * mml.el (mml-menu): Collapse Attach, Insert and Security submenu. - -2001-08-17 Bj,Av(Brn Torkelsson - - * message.el: rename "Abort Message" to "Postpone Message". - Remove "Attach file as MIME" from Message menu, it's already in - the MIME menu. - -2001-08-17 14:00:00 ShengHuo ZHU - - * smime.el (smime-point-at-eol): eval-and-compile. - (smime-make-temp-file): New function. - (smime-sign-region, smime-encrypt-region, smime-decrypt-region): - Use it. - -2001-08-17 10:41:14 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-agent-fetch-group): Go online if offline. - (gnus-agent-summary-fetch-group): New command and keystroke. - - * gnus-art.el (gnus-insert-mime-button): Tiny clean-up. - (gnus-mime-display-security): Make it respect - gnus-unbuttonized-mime-type-p. - - * gnus-sum.el (gnus-articles-to-read): Comments. - (gnus-article-marked-p): New function. - (gnus-summary-display-make-predicate): New function. - (gnus-select-newsgroup): Use them. - - * mm-decode.el (mm-save-part-to-file): Made it not error. - -2001-08-17 Simon Josefsson - - * imap.el (imap-wait-for-tag): If process-status isn't open or - run, return nil instead of sit-for looping. - -2001-08-17 10:41:14 Lars Magne Ingebrigtsen - - * lpath.el (featurep): fbind xml-parse-region. - - * gnus.el (gnus-message-archive-method): Default to "archive". - (gnus-message-archive-method): Doc fix. - (gnus-parameters-get-parameter): Cleaned up. - (gnus-expand-group-parameter): New function. - - * gnus-start.el (gnus-setup-news): Push the archive server only - the server list. - - * mml.el (mml-menu): Changed name to "Attachments". - - * mm-decode.el (mm-destroy-postponed-undisplay-list): Only message - when there is something to detroy. - -2001-05-21 17:11:46 Lars Magne Ingebrigtsen - - * gnus-srvr.el (gnus-server-browse-in-group-buffer): Default to - nil. - -2001-08-15 Kai Gro,b_(Bjohann - - * 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) - - * gnus-agent.el (gnus-agent-make-mode-line-string) - (gnus-agent-toggle-plugged): Use new API. - -2001-08-14 Kai Gro,b_(Bjohann - - * gnus-delay.el (gnus-delay-send-drafts): Fix check whether - deadline has expired. - -2001-08-12 Simon Josefsson - Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE - - Support `recent' mark indicating newly arrived messages (to - separate from old but unread messages). - - * nnimap.el (nnimap-retrieve-groups): Push dummy article into - `nnmail-split-history' if recent is > 0. - (nnimap-request-update-info-internal): Update `recent' marks. - (nnimap-request-set-mark): Never set `recent' marks. - (nnimap-mark-to-predicate-alist, nnimap-mark-to-flag-alist): Add - recent. - - * gnus-sum.el (gnus-recent-mark): New mark. - (gnus-newsgroup-recent): New variable. - (gnus-summary-local-variables): Add gnus-newsgroup-recent. - (gnus-summary-prepare-threads): Mark recent articles. - (gnus-summary-add-mark): Support recent. - (gnus-summary-update-secondary-mark): Support recent. - - * gnus.el (gnus-article-mark-lists): Add recent. - -2001-08-12 Simon Josefsson - - * mm-bodies.el (mm-decode-content-transfer-encoding): Returns - whether successful decoding took place. Add doc. - -2001-08-12 Simon Josefsson - Suggested by Per Abrahamsen - - * gnus.el (gnus-summary-line-format, gnus-parameters): - * gnus-gl.el (gnus-summary-grouplens-line-format): - * gnus-salt.el (gnus-summary-pick-line-format): - * 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. - -2001-08-10 23:00:00 ShengHuo ZHU - - * nnmbox.el (nnmbox-read-mbox): No warning. - -2001-08-10 21:00:00 ShengHuo ZHU - - * nndoc.el (nndoc-article-type): Fix doc. - (nndoc-generate-article-function): New variable. - (nndoc-dissection-function): New variable. - (nndoc-type-alist): Add oe-dbx. - (nndoc-oe-dbx-type-p): New function. - (nndoc-oe-dbx-dissection): New function. - (nndoc-oe-dbx-generate-article): New function. - -2001-08-11 Kai Gro,b_(Bjohann - - * gnus-delay.el (gnus-delay-send-drafts): Cleaner way to check - whether deadline has been reached. Patch from Dan Nicolaescu - . - -2001-08-10 02:00:00 ShengHuo ZHU - - * gnus-ml.el (turn-on-gnus-mailing-list-mode): Use - gnus-group-find-parameter. Suggested by Janne Rinta-Manty - . - - * mail-source.el (mail-source-movemail): The error buffer is - modified, but nothing in it. - -2001-08-10 01:00:00 ShengHuo ZHU - - * message.el (message-bogus-system-names): New variable. - (message-make-fqdn): Use it. - -2001-08-09 15:00:00 ShengHuo ZHU - - * nndraft.el (nndraft-request-group): Use - nndraft-auto-save-file-name. - -2001-08-09 Simon Josefsson - - * mm-view.el (mm-view-pkcs7-decrypt): Operate in current buffer. - Don't ask whether to decrypt. Just leave result in buffer (don't - call mm). - - * mm-decode.el (mm-dissect-buffer): Possibly verify/decrypt single - parts as well. - (mm-inline-media-tests): Ignore application/{x-,}pkcs7-mime. - (mm-possibly-verify-or-decrypt): Support application/{x-,}pkcs7-mime. - -2001-08-09 Simon Josefsson - - * mm-decode.el (mm-insert-part): Return decoding success status. - (mm-save-part-to-file): Error if decoding failed. - -2001-08-09 10:00:00 ShengHuo ZHU - - * message.el (message-tab): Use indent-relative. - (message-mode): Don't bind indent-line-function to indent-relative. - -2001-08-09 Simon Josefsson - - * message.el (message-get-reply-headers): Fix string. Suggested by - Christoph Conrad . - -2001-08-08 15:00:00 ShengHuo ZHU - - * message.el (message-tab): Use the current value of - indent-line-function. - (message-mode): Bind indent-line-function to indent-relative. - -2001-08-08 Simon Josefsson - - * 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 - - * 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 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. - (gnus-output-to-mail): Ditto. - - * nnmail.el (nnmail-pathname-coding-system): Set default to nil. - -2001-08-06 Florian Weimer - - * message.el (message-indent-citation): Use - `message-yank-cited-prefix' for empty lines. - -2001-08-05 Florian Weimer - - * message.el (message-indent-citation): Quote only lines starting - with ">" using `message-yank-cited-prefix'. - -2001-08-05 Nuutti Kotivuori - Trivial patch. - - * gnus-cache.el (gnus-cache-possibly-enter-article): Use - gnus-cache-fully-p. - -2001-08-04 Simon Josefsson - - * gnus-cache.el (gnus-cache-possibly-update-active): Create active - file if it doesn't exist (by calling gnus-cache-read-active). - -2001-08-04 Simon Josefsson - - * gnus-cache.el (gnus-cache-possibly-enter-article): Revert. - (gnus-cache-passively-or-fully-p): Removed. - (gnus-cache-fully-p): Fix it. - - * mm-view.el (mm-pkcs7-signed-magic): Support more ASN.1 lengths. - -2001-08-04 Simon Josefsson - - * gnus-cache.el (gnus-cache-fully-p) - (gnus-cache-passively-or-fully-p): New functions. - (gnus-cache-possibly-enter-article): Cosmetic change, use - `g-c-p-o-f-p'. - (gnus-cache-possibly-enter-article): Use `g-c-p-u-a'; last change - was bogus (`g-c-p-a-a' does not change active info, just change - the functions parameters). - (gnus-cache-possibly-remove-articles-1): Make sure articles are - not removed in groups that match `gnus-uncacheable-groups'. - - Reported and modifications based on discussions with Nuutti - Kotivuori . - -2001-08-04 Simon Josefsson - Trivial patch from Nuutti Kotivuori - - * gnus-cache.el (gnus-cache-possibly-update-active): New function; - calls `gnus-cache-update-active' if bounds has been extended. - -2001-08-04 10:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-mime-security-verify-or-decrypt): Insert - before remove. - (gnus-mime-security-show-details): Ditto. - -2001-08-04 Kai Gro,b_(Bjohann - - * nnmail.el (nnmail-split-fancy-with-parent): Correct `mapconcat' - syntax. Protect string-match against nil string and regexp. - -2001-08-03 19:00:00 ShengHuo ZHU - - * mm-util.el (mm-find-charset-region): Remove control-1. - -2001-08-03 17:00:00 ShengHuo ZHU - - * mm-decode.el (mm-readable-p): Emacs 20 takes one argument. - -2001-08-04 Simon Josefsson - - * smime.el (smime-sign-region, smime-encrypt-region): Fix details - buffer. Delete MIME-Version header. - -2001-08-03 Simon Josefsson - - * gnus-cache.el (gnus-cache-possibly-enter-article): The article - that is entered does not necessarily have the highest article - number in the group, so use `gnus-cache-possibly-alter-active' - instead of `gnus-cache-update-active'. - -2001-08-03 10:00:00 ShengHuo ZHU - - * mml2015.el (mml2015-gpg-extract-signature-details): Don't barf. - -2001-08-03 Simon Josefsson - - * mml.el (mml-menu): Rename from MML to Mime. Collapse Security - menu. - -2001-08-02 Katsumi Yamaoka - - * gnus.el (post-method): New group parameter. It also provides - the user option `gnus-post-method-alist' and the internal function - `gnus-parameter-post-method'. - - * gnus-msg.el (gnus-post-method): Bind the value of - `gnus-post-method' to the group parameter if it is defined. - -2001-08-02 Simon Josefsson - - * smime.el (smime-extra-arguments): Removed. - (smime-call-openssl-region): Don't use it. - -2001-08-02 Simon Josefsson - - * smime.el (smime-sign-region): Handle stderr. - (smime-encrypt-region): Ditto. - - * mm-view.el (mm-pkcs7-signed-magic): Make it a regexp. Don't - match the ASN.1 length bytes. - (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 - - * mml2015.el (mml2015-trust-boundaries-alist): Typo. - -2001-08-01 10:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-header-button-alist): References regexp. - -2001-08-01 Gerd Moellmann - - * mm-view.el (autoload): Don't autoload `diff-mode' if it's - already fboundp. Add INTERACTIVE arg to autoload form. - -2001-08-01 09:00:00 ShengHuo ZHU - - * nnslashdot.el (nnslashdot-init): Add as gnus buffer. - - * nnmail.el (nnmail-cache-open): Ditto. - -2001-07-31 21:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-button-fetch-group): Fix the regexp. - -2001-07-31 Katsumi Yamaoka - - * gnus-msg.el (gnus-post-method): Refer to `gnus-parameters'. - -2001-07-31 17:00:00 ShengHuo ZHU - Originally from Pavel Jan,Am(Bk - - * gnus-agent.el (gnus-agent-make-mode-line-string): New function. - (gnus-agent-toggle-plugged): Use it. - -2001-07-31 ShengHuo ZHU - - * gnus-start.el (gnus-startup-file-coding-system): Revert to binary. - (gnus-ding-file-coding-system): New variable. - (gnus-read-newsrc-el-file, gnus-save-newsrc-file) - (gnus-slave-save-newsrc): Use it. - -2001-07-31 Kai Gro,b_(Bjohann - - * gnus-delay.el (gnus-delay-initialize): Use standard define-key - syntax. - -2001-07-30 15:00:00 ShengHuo ZHU - Originally from Andreas Fuchs - - * mml2015.el (mml2015-trust-boundaries-alist): New variable. - (mml2015-gpg-pretty-print-fpr): New function. - (mml2015-gpg-extract-signature-details): More details, rename from - `m-g-e-from'. - (mml2015-gpg-verify): Use them. - (mml2015-gpg-clear-verify): Use them. - -2001-07-31 Simon Josefsson - - * mml-smime.el (mml-smime-sign, mml-smime-encrypt): Goto end of - buffer when done. - -2001-07-30 Simon Josefsson - - * smime.el (smime-call-openssl-region): Revert previous change, - just pass on buf to `call-process-region'. - (smime-verify-region): Doc fix. Don't message stuff. Use - `smime-new-details-buffer'. Inserts error messages into buffer. - (smime-noverify-region): Ditto. - (smime-decrypt-region): Ditto. Handles stderr separately. - (smime-verify-buffer, smime-noverify-buffer) - (smime-decrypt-buffer): Doc fix. - (smime-new-details-buffer): New function. - (smime-pkcs7-region, smime-pkcs7-certificates-region) - (smime-pkcs7-email-region): Use `smime-new-details-buffer'. - (smime-sign-region, smime-encrypt-region): Don't use - `insert-buffer'. - - * mml-smime.el (mml-smime-verify): Fix security button strings. - -2001-07-30 12:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-mime-save-part-and-strip): Save - gnus-article-mime-handles. - -2001-07-29 Simon Josefsson - - * mail-source.el (top-level): Require message for message-directory. - (mail-source-directory): Change default to message-directory. - - * smime.el (smime-keys, smime-CA-directory, smime-CA-file) - (smime-certificate-directory, smime-openssl-program) - (smime-encrypt-cipher, smime-dns-server): Fix doc (leading "*"). - (smime-extra-arguments): New variable. - (smime-dns-server): Fix customize group. - (smime-call-openssl-region): Use `smime-extra-arguments'. - -2001-07-29 Simon Josefsson - From Vladimir Volovich - - * smime.el (smime-call-openssl-region): Ignore stderr. - -2001-07-29 Simon Josefsson - From Christoph Conrad - - * gnus-agent.el (gnus-agent-save-group-info): Don't destroy active - file. - -2001-07-29 Simon Josefsson - - * mm-view.el (mm-view-pkcs7-decrypt): Adhere to `mm-decrypt-option'. - - Support S/MIME decryption. - - * mm-decode.el (mm-inline-media-tests): - (mm-inlined-types): - (mm-automatic-display): - (mm-attachment-override-types): Add application/{x-,}pkcs7-mime. - - * mm-view.el (mm-pkcs7-signed-magic): - (mm-pkcs7-enveloped-magic): New variables. - (mm-view-pkcs7-get-type): New function; identify PKCS#7 type. - (mm-view-pkcs7): New function; mm viewer for PKCS#7 blobs. - (mm-view-pkcs7-decrypt): New function; mm viewer for encrypted - PKCS#7 blobs. - - * smime.el (smime-decrypt-region): Expand keyfile. - -2001-07-29 Simon Josefsson - - * nntp.el (nntp-open-ssl-stream): Don't mess with internal - `ssl.el' variables. - - * gnus-agent.el (gnus-agent-save-group-info): Delete everything - but line instead of narrowing to it, because `nnmail-parse-active' - calls widen. Thanks to Christoph Conrad - . - -2001-07-29 Kai Gro,b_(Bjohann - - * gnus.el (gnus-summary-line-format): Mention `gnus-sum-thread-*' - for %B spec. - - * gnus-sum.el (gnus-summary-prepare-threads): If - gnus-sum-thread-tree-root is nil, use subject instead. - (gnus-sum-thread-tree-root, gnus-sum-thread-tree-single-indent) - (gnus-sum-thread-tree-vertical, gnus-sum-thread-tree-indent) - (gnus-sum-thread-tree-leaf-with-other) - (gnus-sum-thread-tree-single-leaf): Documentation. - (gnus-sum-thread-tree-single-indent): Allow nil. - -2001-07-28 09:00:00 ShengHuo ZHU - - * message.el (message-fill-paragraph): Do nothing if the user - wants filladapt-mode. - -2001-07-27 23:00:00 ShengHuo ZHU - - * mm-decode.el (mm-image-type-from-buffer): New function. - (mm-get-image): Use it. - -2001-07-27 18:00:00 ShengHuo ZHU - - * gnus.el (gnus-large-newsgroup): Add doc, "If it is nil, ..." - - * gnus-art.el (gnus-mime-view-all-parts): buffer-read-only covers - mm-display-parts too. - -2001-07-27 12:00:00 ShengHuo ZHU - - * nnfolder.el (nnfolder-request-accept-article): Bind - nntp-server-buffer. - - * nnmail.el (nnmail-parse-active): Read from buffer instead of - nntp-server-buffer. - -2001-07-27 11:00:00 ShengHuo ZHU - - * message.el (message-check-news-header-syntax): Use - message-post-method. - (message-send-news): Bind message-post-method. - -2001-07-27 07:00:00 ShengHuo ZHU - - * mml.el (mml-tweak-type-alist): New variable. - (mml-tweak-function-alist): New variable. - (mml-tweak-part): New function. - (mml-generate-mime-1): Use it. - -2001-07-26 22:00:00 ShengHuo ZHU - - * nnfolder.el (nnfolder-request-accept-article): Replace - nnfolder-request-list. - -2001-07-27 Simon Josefsson - - * nnimap.el (nnimap-open-server): Set nnimap-server-buffer if - nnoo-change-server failed to do it. - -2001-07-26 16:00:00 ShengHuo ZHU - - * gnus.el (gnus-parameters): Make it customizable. - -2001-07-26 15:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-mm-display-part): Narrow to point if eobp. - - * message.el (message-set-auto-save-file-name): More - poor-system-types. - - * mailcap.el (mailcap-parse-mimetypes): poor-system-types. - - * gnus-ems.el (nnheader-file-name-translation-alist): M$Windows-NT - supports +. - -2001-07-26 14:00:00 ShengHuo ZHU - - * mm-decode.el (mm-readable-p): New function. - (mm-inline-media-tests): Fix the default testers. - -2001-07-26 Simon Josefsson - - * nnimap.el (nnimap-version): Bump version number. - -2001-07-26 10:00:00 ShengHuo ZHU - From Steven E. Harris - - * nnheader.el (nnheader-translate-file-chars): cygwin32 is running - in M$Windows too. - -2001-07-26 Kai Gro,b_(Bjohann - - * gnus-delay.el (gnus-delay-send-drafts): Don't `error'. - -2001-07-25 21:00:00 ShengHuo ZHU - - * gnus-bcklg.el (gnus-backlog-shutdown): Make interactive. - - * mm-decode.el (mm-get-image): Guess then use the type. - - * gnus-art.el (gnus-mime-view-part-as-type): Don't copy cache. - -2001-07-25 12:54:00 Danny Siu - - * 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 - - * gnus-msg.el: Customization patch. - -2001-07-25 22:22:22 Raymond Scholz - - * nnmail.el (nnmail-split-fancy-with-parent-ignore-groups): New - variable. - (nnmail-split-fancy-with-parent): Ignore certain groups. - -2001-07-25 11:00:00 ShengHuo ZHU - - * gnus-util.el (gnus-byte-compile): New function. - (gnus-use-byte-compile): New variable. - (gnus-make-sort-function): Use it. - - * nnmail.el (nnmail-get-new-mail): Use it. - - * gnus-agent.el (gnus-category-make-function): Simple function or - compiled function. - (gnus-agent-fetch-group-1): Don't use (caaddr predicate). - - * gnus-gl.el (bbb-build-rate-command): Remove quote before lambda. - * gnus-topic.el (gnus-topic-sort-topics-1): Ditto. - (gnus-topic-sort-topics-1): Use gnus-byte-compile. - - * message.el (message-check-news-header-syntax): Remove quote. - -2001-07-24 19:00:00 ShengHuo ZHU - - * message.el (message-use-mail-followup-to): `t' is not a - documented value. - -2001-07-24 13:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-display-arrow): Test fboundp. - -2001-07-24 12:00:00 ShengHuo ZHU - - * mm-encode.el (mm-encode-buffer): Don't use 7bit encoding if - there are long lines. - -2001-07-24 Katsumi Yamaoka - - * dgnushack.el (copy-list): New compiler macro. - -2001-07-24 09:00:00 ShengHuo ZHU - - * message.el (message-bounce): If no Return-Path, the whole - content is considered as the original message. - - * nnml.el (nnml-check-directory-twice): New variable. - (nnml-article-to-file): Use it. - (nnml-retrieve-headers): Hack it. - -2001-07-24 02:00:00 ShengHuo ZHU - - * gnus-win.el (gnus-buffer-configuration): New configure. - - * gnus-art.el (gnus-mm-display-part): Don't select-window if it is - not alive. - - * mm-decode.el (mm-remove-part): Don't murder the current window (nil). - (mm-display-external): Use display-term configure. - -2001-07-24 Kai Gro,b_(Bjohann - - * 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 - - * gnus-sum.el (gnus-summary-line-format-alist): Add %B. - (gnus-summary-prepare-threads): Ditto. - - * gnus.el (gnus-summary-line-format): Add %B. - -2001-07-23 19:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-articles-to-read): Use gnus-group-decoded-name. - - * mm-util.el (mm-string-as-multibyte): New function. - - * nnmh.el (nnmh-request-list-1): Encode, not decode! - -2001-07-23 18:00:00 ShengHuo ZHU - - * mm-util.el (mm-universal-coding-system): New variable. - - * gnus-start.el (gnus-startup-file-coding-system): Use it. - - * score-mode.el (score-mode-coding-system): Use it. - -2001-07-23 Katsumi Yamaoka - - * gnus-start.el (gnus-setup-news): Call - `gnus-check-bogus-newsgroups' just after the native server is - opened. - -2001-07-23 Kai Gro,b_(Bjohann - - * nnmail.el (nnmail-do-request-post): Util function to be used by - `nnchoke-request-post' for all nnmail-derived backends. - - * nnml.el (nnml-request-post): Use it. - - * gnus.el (gnus-valid-select-methods): nnml is a post-mail - backend, for it groks nnml-request-post. - - * gnus-group.el (gnus-group-highlight, gnus-group-highlight-line): - Treat `mail-post' backends like `mail' backends, not like `news' - backends. - -2001-07-22 09:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-setup-message): make-local-hook. - -2001-07-22 Kai Gro,b_(Bjohann - - * gnus-delay.el (gnus-delay-article): Fix `read-string' for - XEmacs. Allow more units. Submitted by Karl Kleinpaste - , slightly changed by Kai. - - * message.el (message-check-news-header-syntax): When checking - whether the groups exist, check the right server based on - `gnus-post-method'. - -2001-07-21 Kai Gro,b_(Bjohann - - * gnus-delay.el: New file. - -2001-07-21 13:00:00 ShengHuo ZHU - - * mm-util.el (mm-read-coding-system): Take two arguments. - - * gnus-sum.el (gnus-summary-show-article): Use - mm-read-coding-system. - - * gnus-art.el (article-de-quoted-unreadable): - (article-de-base64-unreadable, article-wash-html): - (gnus-mime-inline-part, gnus-mime-view-part-as-charset): Ditto. - -2001-07-21 Kai Gro,b_(Bjohann - - * nnml.el (nnml-request-post): New function. Can be used for - annotations in nnml groups. - -2001-07-19 Katsumi Yamaoka - - * nntp.el (nntp-request-newgroups): Use UTC date for NEWGROUPS - command. - - * gnus-start.el (gnus-find-new-newsgroups): Use - `message-make-date' instead of `current-time-string'. - (gnus-ask-server-for-new-groups): Ditto. - (gnus-check-first-time-used): Ditto. - -2001-07-20 11:00:00 ShengHuo ZHU - - * gnus-score.el (gnus-home-score-file): nnheader-translate-file-chars. - -2001-07-18 Per Abrahamsen - - * message.el (message-shorten-references): Change `maxcount' and - `cut' to obey USEFOR draft 5. - -2001-07-12 Colin Walters - - * gnus-sum.el (gnus-summary-display-arrow): New variable. - (gnus-summary-set-article-display-arrow): New function. - (gnus-summary-goto-subject): Use it. - -2001-07-18 12:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-import-article): Insert date if - doesn't exist. - -2001-07-18 11:00:00 ShengHuo ZHU - - * mml.el (mml-content-type-parameters): New variable. - (mml-content-disposition-parameters): New variable. - (mml-insert-mime-headers): Use them. - (mml-parse-1): Accept charset. - -2001-07-17 22:00:00 ShengHuo ZHU - - * gnus-group.el (gnus-group-select-group): Doc fix. - - * gnus-eform.el (gnus-edit-form-done): Return nil if end-of-file. - -2001-07-17 Katsumi Yamaoka - - * dgnushack.el (dgnushack-make-auto-load): Advise `make-autoload' - to handle `define-derived-mode'. - -2001-07-16 12:00:00 ShengHuo ZHU - From: Stefan Monnier - - * message.el (message-mode): Use define-derived-mode. - (message-tab): message-completion-alist. - - * imap.el (imap-interactive-login): Use make-local-variable. - (imap-open): Ditto. - (imap-authenticate): Ditto. - - * gnus-msg.el (gnus-setup-message): Change-major-mode-hook. - - * gnus-art.el (gnus-article-edit-mode): Use define-derived-mode. - -2001-07-16 Kai Gro,b_(Bjohann - - * message.el (message-citation-line-function): Refer to - gnus-cite-attribution-suffix. - -2001-07-15 Pavel Jan,Am(Bk - - * gnus-art.el,...: Error convention changes. - -2001-07-13 20:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-rebuild-thread): Count hidden lines too. - -2001-07-13 20:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-read-group-data): Nuke emacs-lisp-mode-hook. - (nnrss-read-server-data): Ditto. - -2001-07-13 12:00:00 ShengHuo ZHU - - * 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 - - * gnus.el (gnus-summary-line-format): Add %o. - - * gnus-sum.el (gnus-summary-pipe-output): Don't configure as pipe - unless shell outputs something. - -2001-07-13 07:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-boring-article-headers): Better doc. - (article-hide-headers): Better regexp. - Suggested by Matt Swift . - - * nnheader.el (nnheader-max-head-length): Better doc. - (nnheader-header-value): Skip spaces. - (nnheader-parse-head): Remove space. - Suggested by Matt Swift . - - * gnus-sum.el (gnus-summary-show-raw-article): New function. - (gnus-get-newsgroup-headers): Remove space. - -2001-07-12 23:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-msg-treat-broken-reply-to): Add force. - (gnus-summary-reply): Use it. - (gnus-summary-reply-broken-reply-to): New function. - (gnus-msg-force-broken-reply-to): New function. - - * mm-view.el (mm-inline-text): Showing as text/plain when error. - -2001-07-12 21:00:00 ShengHuo ZHU - - * gnus-draft.el (gnus-draft-setup): Restore gnus-newsgroup-name. - -2001-07-12 15:00:00 ShengHuo ZHU - - * mm-decode.el (mm-external-terminal-program): New variable. - (mm-display-external): Use it. Use term to display when no - window-system. - -2001-07-12 Bj,Av(Brn Torkelsson - - * gnus-srvr.el (gnus-browse-make-menu-bar): Changed one of the - Browse->Next entries to Browse->Prev - -2001-07-11 22:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-inews-do-gcc): Don't test gnus-alive-p. - -2001-07-11 18:00:00 ShengHuo ZHU - - * mm-encode.el (mm-content-transfer-encoding-defaults): Use base64 - for the default encoding. - - * nnrss.el (nnrss-url-field): New field. - (nnrss-request-article): Add newsgroups. - - * nnfolder.el (nnfolder-read-folder): Force to use a multibyte buffer. - -2001-07-11 04:00:00 ShengHuo ZHU - - * nndraft.el (nndraft-request-restore-buffer): Don't remove Date. - - * gnus-draft.el (gnus-draft-edit-message): Remove Date here. - (gnus-draft-setup): Remove backlog. - -2001-07-10 Pavel Jan,Am(Bk - - * gnus-logic.el, gnus-srvr.el, gnus-vm.el, nnheaderxm.el, nnoo.el: - Cleanup. - -2001-07-09 23:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-bug): Erase buffer. - - * nnfolder.el (nnfolder-possibly-change-group): Don't create group. - -2001-07-09 19:00:00 ShengHuo ZHU - - * mm-decode.el (mm-attachment-override-p): Fix typo. - -2001-03-19 05:28:00 Katsumi Yamaoka - - * gnus-kill.el (gnus-execute): Work with the extra headers. - * gnus-sum.el (gnus-summary-execute-command): Ditto. - -2001-07-09 17:00:00 ShengHuo ZHU - - * mm-view.el (mm-inline-text): w3-coding-system-for-mime-charset - may not defined. From: Raja R Harinath . - - * message.el (message-send-mail-real-function): New variable. - (message-send-mail-partially, message-send-mail): - - * nngateway.el (nngateway-request-post): Use it. - - * gnus-agent.el (gnus-agentize): Use it. - - * nnsoup.el (nnsoup-old-functions, nnsoup-set-variables) - (nnsoup-revert-variables): Use it. - -2001-07-09 Colin Walters - - * mm-decode.el (mm-inline-media-tests): Default to displaying as - text/plain if the type doesn't match any other media types. - (mm-inlined-types): Doc fix. - (mm-display-inline): Revert previous change (now handled by a - default type in `mm-inline-media-tests'. - (mm-inlinable-p): Revive. - (mm-display-part): Call `mm-inlinable-p'. - (mm-attachment-override-p): Ditto. - (mm-inlined-p): Doc fix. - - * gnus-art.el (gnus-mime-display-single): Call `mm-inlinable-p' as - well as `mm-inlined-p'. - -2001-07-09 13:00:00 ShengHuo ZHU - - * 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 - - * message.el (message-use-mail-followup-to): New variable. - (message-get-reply-headers): Use it. - -2001-07-04 Gerd Moellmann - - * nnheader.el (nnheader-init-server-buffer): Make sure the - *nntpd* buffer is made multibyte instead of a random buffer. - -2001-07-09 12:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-get-newsgroup-headers-xover): Get headers only - when it returns headers. - -2001-07-07 Simon Josefsson - - * rfc2047.el (rfc2047-encode-message-header): Skip header when - trying to fold. Thanks to Colin Walters - - -2001-07-06 Simon Josefsson - - * imap.el (imap-parse-address-list, imap-parse-flag-list) - (imap-parse-body-extension, imap-parse-body-ext, imap-parse-body): - Add information in `assert's. - - * nnimap.el (nnimap-possibly-change-group): Ignore uidvalidity - changes. (From nnimaps' point of view, `nnimap-verify-uidvalidity' - and `nnimap-group-overview-filename', should handle all - change-of-uidvalidity related issues. But there may be other - problems.) - -2001-07-05 Colin Walters - - * rfc2047.el (rfc2047-encode-message-header): Don't include the - header name when folding. - -2001-07-05 Colin Walters - - * mm-decode.el (mm-inlined-types): Document relationship with - `mm-inline-media-tests'. - (mm-display-inline): Default to displaying as plain text if no - inlining handler is available. - (mm-inlinable-p): Remove. - (mm-inlined-p): Don't call `mm-inlinable-p'. - (mm-automatic-display-p): Ditto. - (mm-attachment-override-p): Ditto. - -2001-07-04 Simon Josefsson - - * nnimap.el (nnimap-importantize-dormant): New variable. - (nnimap-request-update-info-internal): Use it. - (nnimap-request-set-mark): Ditto. - -2001-07-04 Didier Verna - - * nntp.el (nntp-send-command): don't pass a buffer argument to - `point'. Only XEmacs accepts this. - * nntp.el (nntp-send-command-nodelete): ditto. - * nntp.el (nntp-send-command-and-decode): ditto. - -2001-07-04 Didier Verna - - * nntp.el (nntp-open-connection-function): doc update. - * nntp.el (nntp-pre-command): New. - * nntp.el (nntp-via-rlogin-command): New. - * nntp.el (nntp-via-telnet-command): New. - * nntp.el (nntp-via-telnet-switches): New. - * nntp.el (nntp-via-user-name): New. - * nntp.el (nntp-via-user-password): New. - * nntp.el (nntp-via-address): New. - * nntp.el (nntp-via-envuser): New. - * nntp.el (nntp-via-shell-prompt): New. - * nntp.el (nntp-open-telnet-stream): New. - * nntp.el (nntp-open-via-rlogin-and-telnet): New. - * nntp.el (nntp-open-via-telnet-and-telnet): New. - * nntp.el (nntp-wait-for): check for possibly echo'ed commands. - * nntp.el (nntp-send-command): ditto. - * nntp.el (nntp-send-command-nodelete): ditto. - * nntp.el (nntp-send-command-and-decode): ditto. - -2001-06-30 YAGI Tatsuya - Trivial patch. - - * gnus-start.el (gnus-check-first-time-used): Use `if' instead of - `when'. - -2001-07-03 Simon Josefsson - From Nuutti Kotivuori - - * flow-fill.el (fill-flowed): Use (1+ (point-at-eol)) instead. - -2001-07-03 Simon Josefsson - - * flow-fill.el (fill-flowed): If `fill-region' inserts empty line, - remove it (workaround XEmacs `fill-region' bug). - -2001-07-01 Simon Josefsson - - * nnimap.el (nnimap-date-days-ago): Defeat locale. - -2001-06-28 11:00:00 ShengHuo ZHU - - * mml2015.el (mml2015-format-error): New function. - (mml2015-mailcrypt-decrypt, mml2015-mailcrypt-clear-decrypt) - (mml2015-mailcrypt-verify, mml2015-gpg-clear-verify) - (mml2015-mailcrypt-clear-verify, mml2015-gpg-verify): Use it. - -2001-06-26 22:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-retrieve-headers): The description may not exist. - Suggested by Christoph Conrad . - - * gnus-sum.el (gnus-summary-set-local-parameters): Don't override - group variables. - -2001-06-25 10:00:00 ShengHuo ZHU - - * nnslashdot.el (nnslashdot-write-groups): Use gnus-prin1. - - * nnrss.el (nnrss-save-server-data): Bind print-level and print-length. - (nnrss-save-group-data): Ditto. - - * gnus-agent.el (gnus-agent-save-alist): Ditto. - -2001-06-25 Katsumi Yamaoka - - * message.el (message-do-send-housekeeping): Narrow to headers. - -2001-06-24 Simon Josefsson - - * rfc2047.el (rfc2047-fold-region): The check to skip WSP - insertion when breaking lines looked for " \t" instead of "[ \t]". - (rfc2047-encode-message-header): Fold lines even if - no QP encoding is done. - -2001-06-23 Simon Josefsson - From Samuel Tardieu - - * smime.el (smime-keys): Support additional certificates. - (smime-make-certfiles): New function. - (smime-sign-region): Use previous variables. - (smime-get-certfiles): New function. - (smime-sign-buffer): Use it. - (smime-verify-region): Support both CAfile and CApath. - -2001-06-23 Simon Josefsson - - * smime.el (smime-decrypt-region): Perhaps work. - -2001-06-22 10:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-copy-article-buffer): Typo. - -2001-04-06 Ralph Schleicher - - * mm-decode.el (mm-save-part): Rewrite file name. - (mm-file-name-rewrite-functions): New variable. - (mm-file-name-delete-whitespace): New function. - (mm-file-name-trim-whitespace): New function. - (mm-file-name-collapse-whitespace): New function. - (mm-file-name-replace-whitespace): New variable and function. - -2001-06-22 Simon Josefsson - - * message.el (message-make-date): Workaround locale for weekdays. - -2001-06-21 17:00:00 ShengHuo ZHU - - * message.el (message-goto-body): Return nil if not found. (revert!) - -2001-06-21 10:00:00 ShengHuo ZHU - From Fremlin - - * message.el (message-goto-body): Some messages have no header. - - * gnus-msg.el (gnus-copy-article-buffer): Use it. - -2001-06-21 Ralph Schleicher - - * nnultimate.el (nnultimate-retrieve-headers): Date fix. - -2001-06-21 10:00:00 ShengHuo ZHU - - * message.el (message-make-date): Add week day. - Suggested by Jason R. Mastaler . - -2001-06-19 Simon Josefsson - - * message.el (message-yank-prefix): Doc fix. - (message-yank-cited-prefix): Ditto. - (message-delete-not-region): Keep citation prefix on first line, - if possible and appropriate. - -2001-06-19 Simon Josefsson - - * imap.el (imap-process-connection-type): New variable. - (imap-kerberos4-open, imap-gssapi-open): Use it. This makes - recent `imtest's work completely (no line length issues), while - making making old `imtest's unusable. Thanks to NAGY Andras - for his work. - -2000-12-30 NAGY Andras - - * imap.el (imap-ssl-program): Add -quiet to shut up - OpenSSL/SSLeay's internal debug talk. - -2001-06-19 Matt Armstrong - - * imap.el (imap-parse-flag-list): Workaround bug in Courier IMAP - server. - -2001-06-19 10:00:00 ShengHuo ZHU - - * nnmail.el (nnmail-article-buffer): New variable. - (nnmail-split-incoming): Use it. - -2001-06-15 Eli Zaretskii - - * qp.el (quoted-printable-decode-region): If called interactively, - use coding-system-for-read. - -2001-06-16 09:00:00 ShengHuo ZHU - - * message.el (message-check-news-header-syntax): Check Reply-To. - -2001-06-16 08:00:00 ShengHuo ZHU - - * mml.el (mml-parse-1): Use message options. - - * message.el (message-do-fcc): Don't do anything if there is no - FCC. - -2001-06-16 Simon Josefsson - - * nnimap.el (nnimap-split-articles): Support 'junk to-groups. - (nnimap-expunge-search-string): New variable. - (nnimap-request-expire-articles): Use it. - -2001-06-15 19:00:00 ShengHuo ZHU - - * message.el (message-send-mail-with-qmail): wrong exit status is - 100 not 1. Reported by Paul Jarc . - -2001-06-15 09:00:00 ShengHuo ZHU - - * gnus-art.el (article-strip-multiple-blank-lines): Use - delete-region instead of replace-match. - -2001-06-14 16:00:00 ShengHuo ZHU - - * nnweb.el (nnweb-google-parse-1): Fix Google content regexp. - (nnweb-google-wash-article): Ditto. - -2001-06-14 Ferenc Wagner - - * nnweb.el (nnweb-google-parse-1): Fix Google url regexp. - -2001-06-13 Katsumi Yamaoka - - * gnus.el (gnus-define-group-parameter): Don't quote the defcustom - specs. - -2001-06-13 15:00:00 ShengHuo ZHU - - * gnus.el (gnus-email-address): Move it here. - - * gnus-art.el (article-de-quoted-unreadable): Read charset if - requested. - (article-de-base64-unreadable): Ditto. - (article-wash-html): Ditto. - -2001-06-12 14:00:00 ShengHuo ZHU - - * message.el (message-options-set-recipient): Don't add ", " - unless necessary. Suggested by Josh Huber . - -2001-06-12 12:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-group-alist): Use |fr| instead of [fr]. - -2001-06-12 11:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-plain-save-name): Use file-relative-name. - From Marc Lefranc . - - * nnrss.el (nnrss-node-text): Node might be nil. - -2001-06-11 10:00:00 ShengHuo ZHU - - * gnus-uu.el (gnus-uu-save-article): Use mml tag instead of - part. From Katsumi Yamaoka . - - * nnrss.el (nnrss-group-alist): More items. - -2001-06-09 23:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-node-text): Use cddr instead xml-node-children. - -2001-06-03 ShengHuo ZHU - Trivial patch from Dale Hagglund - - * gnus-mlspl.el (gnus-group-split-fancy): Fix generation of split - restrict clauses. - -2001-06-07 16:00:00 ShengHuo ZHU - - From Benjamin Rutt - - * message.el (message-wide-reply-confirm-recipients): New variable. - -2001-06-06 ShengHuo ZHU - Trivial patch from Mark Thomas - - * nnmail.el (nnmail-fix-eudora-headers): Change the In-Reply-To - fix so it works with XEmacs. - -2001-06-07 16:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-retrieve-headers): Support description as extra - headers. - -2001-06-07 15:00:00 ShengHuo ZHU - - * nnrss.el: Fix a few bugs. - -2001-06-05 Simon Josefsson - - * mm-decode.el (mm-handle-set-external-undisplayer): Don't - generate compiler warnings. From Alex Schroeder . - -2001-06-04 Hrvoje Niksic - - * mm-decode.el (mm-pipe-part): Bind coding-system-for-write to - binary so that we don't transmit ISO 2022 garbage to the process. - This is needed under XEmacs. - -2001-06-03 Simon Josefsson - - * imap.el (imap-ssl-open): Require ssl. (Otherwise ssl.el is - autoloaded incorrectly below because ssl-program-* is bound.) - Thanks to Amos Gouaux for report. - -2001-06-02 Simon Josefsson - - * imap.el (imap-kerberos4-open): - (imap-gssapi-open): - (imap-ssl-open): - (imap-network-open): - (imap-shell-open): - (imap-starttls-open): Set buffer to workaround spurious - `accept-process-output' buffer changes. Thanks to Mats Lidell - for report and partial patch and Jake - Colman for report. - -2001-05-31 13:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-catchup): New argument. - (gnus-summary-catchup-from-here): New function. - -2001-05-30 Kai Gro,b_(Bjohann - - * mm-view.el (mm-inline-image-xemacs): Insert newline, then move - back, then insert glyph. (Before, the glyph was inserted first, - then the newline.) This works around a behavior in XEmacs where - 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). - - * 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 - - * 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 - - * message.el (message-yank-cited-prefix): New variable. - (message-indent-citation): Use it. - - * mml2015.el (mml2015-mailcrypt-verify): Store gpg stderr output - as details. - (mml2015-mailcrypt-clear-verify): Ditto. - -2001-05-24 Kai Gro,b_(Bjohann - From Nevin Kapur . - - * gnus-sum.el (gnus-summary-default-high-score, - gnus-summary-default-low-score): New variables. - (gnus-summary-highlight): Use them. - -2001-05-16 Didier Verna - - * message.el (message-mail): pass the 'send-actions argument to - `message-setup'. - -2001-05-16 Simon Josefsson - From Raymond Scholz - - * gnus-art.el (gnus-mime-view-part-as-charset): - (gnus-mime-internalize-part): Doc fixes. - -2001-05-11 Simon Josefsson - - * gnus-start.el (gnus-ignored-newsgroups): Also ignore NNTP type - status lines without any text ("^215$"). - -2001-05-06 21:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-check-group): Reverse. - -2001-05-07 Simon Josefsson - - * message.el (message-get-reply-headers): - (message-followup): Fix typo, suggested by David Green - - -2001-05-05 15:00:00 ShengHuo ZHU - - * nnslashdot.el (nnslashdot-request-expire-articles): Fix. - - * nnrss.el (nnrss-open-server): Read server data when it is called. - (nnrss-request-expire-articles): Fix. - -2001-05-05 09:00:00 ShengHuo ZHU - - * message.el (message-do-send-housekeeping): mail-abbrevs may - rename buffer behind Gnus. - -2001-05-04 14:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-check-group): Use nnheader-translate-file-chars. - (nnrss-group-alist): Add more resources. - (nnrss-check-group): Ignore errors. - -2001-05-04 00:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-request-expire-articles): Correct the return value. - - * nnslashdot.el (nnslashdot-request-list): Add time. - (nnslashdot-request-expire-articles): New function. - - * gnus-start.el (gnus-check-bogus-newsgroups): Remove bogus - secondary methods too. - -2001-05-03 23:00:00 ShengHuo ZHU - - * message.el (message-use-followup-to): Set default value to t. - -2001-05-03 Florian Weimer - - * message.el (message-dont-reply-to-names): Fix documentation. - (message-get-reply-headers): Use Mail-Followup-To only for wide - replies. - -2001-05-03 12:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-request-expire-articles): Calculate # of days - correctly. - (nnrss-check-group): Use time. - -2001-05-01 19:21:19 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.03 is released. - -2001-05-01 19:06:21 Lars Magne Ingebrigtsen - - * nnultimate.el (nnultimate-topic-article-to-article): Use the - group. - -2001-04-24 19:50:14 Lars Magne Ingebrigtsen - - * gnus-srvr.el (gnus-server-insert-server-line): Add a space. - -2001-04-15 14:55:03 Lars Magne Ingebrigtsen - - * nnultimate.el (nnultimate-retrieve-headers): Return all - available headers. - - * gnus-sum.el (gnus-read-all-available-headers): New variable. - (gnus-get-newsgroup-headers-xover): Use it. - -2001-04-14 15:47:26 Lars Magne Ingebrigtsen - - * nnultimate.el (nnultimate-retrieve-headers): Clean up. - -2001-04-30 17:00:00 ShengHuo ZHU - - * nntp.el (nntp-retrieve-groups): Use throw instead of error. - -2001-04-29 09:00:00 ShengHuo ZHU - - * nnrss.el (nnrss-insert-w3): Use cache before I figure out how to - disable it. - - * gnus.el (gnus-info-nodes): Remove a few The's. - -2001-04-29 08:00:00 ShengHuo ZHU - - * mail-source.el (mail-source-movemail): Call-process may return a - signal description string. - - * gnus-start.el (gnus-read-newsrc-el-file): - gnus-newsrc-file-version may be nil. - - * nnmail.el (nnmail-get-new-mail): Use the exact file only. - Suggested by Michael Sperber [Mr. Preprocessor] - . - -2001-04-25 Per Abrahamsen - - * mm-uu.el (mm-uu-configure-list): Fixed customize type. - -2001-04-24 Hrvoje Niksic - - * mm-view.el (mm-display-inline-fontify): Allow XEmacs to fully - fontify HANDLE. - -2001-04-18 Simon Josefsson - - * smime.el (smime-ask-passphrase): Rework to return value. - (smime-sign-region): Rework to bind value and use it. - (smime-decrypt-region): Ditto. - -2001-04-18 Simon Josefsson - Trivial patch from Mathias Herberts - - * smime.el (smime-ask-passphrase): New function. - (smime-sign-region): Use it. - (smime-encrypt-cipher): New variable. - (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 - - * gnus.el: Oort Gnus v0.02 is released. - -2001-04-14 00:48:42 Lars Magne Ingebrigtsen - - * gnus.el: Oort Gnus v0.01 is released. - -2001-04-13 22:01:46 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-highlight): Highlight read - undownloaded articles as read articles. - - * gnus-agent.el (gnus-agent-get-undownloaded-list): Clean up. - (gnus-agent-get-undownloaded-list): Mark all undownloaded - articles, even read ones, as such. - - * gnus-sum.el (gnus-summary-find-matching): Clean up. - (gnus-find-matching-articles): New function. - (gnus-summary-limit-include-matching-articles): New command. - (gnus-summary-limit-include-thread): Include articles that have - matching subjects. - (gnus-offer-save-summaries): Clean up. - -2001-04-13 Kai Gro,b_(Bjohann - - * nnmail.el (nnmail-split-fancy-with-parent): Add docstring. - -2001-04-12 19:00:00 ShengHuo ZHU - From 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. - -2001-04-12 19:00:00 ShengHuo ZHU - - * message.el (message-cite-prefix-regexp): Use POSIX regexp if - 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. - -2001-04-10 Simon Josefsson - - * message.el (message-options-set-recipient): Look at Cc and Bcc too. - -2001-04-10 Colin Marquardt - - * message.el (message-send-mail): Improve the interaction with the - user. - -2001-04-10 Simon Josefsson - - * imap.el (imap-message-copy): Work around buggy servers that - doesn't send TRYCREATE tags. - -2001-04-09 01:15:54 Katsumi Yamaoka - - * gnus-start.el (gnus-read-newsrc-el-file): Work with Semi-gnusae. - -2001-04-05 21:43:25 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-update-summary-mark-positions): Use a valid - date. - -2001-04-04 16:13:17 Lars Magne Ingebrigtsen - - * gnus-group.el (gnus-group-quit): Check that the dribble buffer - lives. - -2001-04-02 00:40:12 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-parse-news-url): New function. - (gnus-button-handle-news): New function. - (gnus-button-alist): Point to new functions. - - * gnus-group.el (gnus-group-quit): Only mark buffer in non-empty. - - * gnus-start.el (gnus-read-newsrc-el-file): Nix out - gnus-format-specs. - - * message.el (message-check-news-header-syntax): Question even - when Gnus doesn't know the group names. - (message-send-news): Clean up. - - * gnus-start.el (gnus-dribble-read-file): Say whether Gnus was - exited on purpose without saving. - - * gnus-group.el (gnus-group-quit): Mark the dribble file as `Q'. - -2001-04-01 00:37:14 Lars Magne Ingebrigtsen - - * gnus-score.el (gnus-score-orphans): Clean up. - - * gnus-win.el (gnus-remove-some-windows): Leave one Gnus window. - - * gnus-sum.el (gnus-summary-exit): Kill the summary buffer a bit - later. - - * gnus-start.el (gnus-close-all-servers): Find the right items to - close. - - * qp.el (quoted-printable-decode-region): Just message - malformation; don't quit. - -2001-03-31 21:00:00 ShengHuo ZHU - From 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 - definition. Documentation changed to match the one in - `assq-delete-all'. - -2001-04-01 00:37:14 Lars Magne Ingebrigtsen - - * gnus-start.el (gnus-close-all-servers): New function. - - * gnus-srvr.el (gnus-server-close-all-servers): Clean up. - (gnus-server-remove-denials): Clean up. - - * gnus-sum.el (gnus-summary-sort-by-original): New command and - keystroke. - -2001-03-31 02:56:55 Lars Magne Ingebrigtsen - - * message.el (message-send-news): Message where we are sending. - (message-send-mail): Ditto. - - * gnus.el (gnus-server-string): New function. - - * gnus-sum.el (gnus-summary-up-thread): Doc fix. - - * mm-decode.el (mm-default-directory): Customized. - (mm-tmp-directory): Ditto. - - * gnus-sum.el (gnus-summary-catchup-and-exit): Doc fix. - (gnus-get-newsgroup-headers): Return -1 for articles without Lines - or Chars. - (gnus-summary-line-format-alist): ?l is now a string. - (gnus-summary-prepare-threads): Output ? for unknown lines. - (gnus-summary-insert-line): Ditto. - (gnus-summary-print-article): Unbalanced parentheses. - - * gnus-msg.el (gnus-inews-do-gcc): Check group to allow it to find - out whether new stuff has arrived. - -2001-03-31 02:14:38 Alan Shutko - - * gnus-sum.el: Let printing work on ttys on Emacs. - -2001-03-31 01:11:14 Lars Magne Ingebrigtsen - - * gnus-msg.el (gnus-post-news): Add an empty Newsgroups header - when forcing news. - - * gnus-sum.el (gnus-summary-mark-article-as-replied): Make into a - command. - -2001-03-31 01:04:54 Francis Litterio - - * message.el (message-set-auto-save-file-name): Don't use - asterisks under nt. - -2001-03-31 00:03:42 Lars Magne Ingebrigtsen - - * gnus-msg.el (gnus-inews-insert-draft-meta-information): Allow - lists of articles. - - * gnus-uu.el (gnus-uu-digest-mail-forward): Mark as forwarded. - - * gnus-msg.el (gnus-put-message): Clean up. - (gnus-summary-reply): Mark all replied-to articles as replied to. - (gnus-inews-add-send-actions): Also mark as forwarded. - (gnus-summary-mail-forward): Mark as forwarded. - - * gnus-sum.el (gnus-summary-mark-article-as-replied): Take a list - of articles. - (gnus-summary-mark-article-as-forwarded): Ditto. - - * gnus-msg.el (gnus-summary-resend-message): Mark article as - forwarded. - (gnus-summary-mail-forward): Clean up. - - * gnus.el (gnus-article-mark-lists): Added forward. - - * gnus-sum.el (gnus-forwarded-mark): New variable. - (gnus-summary-prepare-threads): Use it. - (gnus-summary-update-secondary-mark): Ditto. - (gnus-newsgroup-forwarded): New variable. - -2001-03-30 23:13:37 Lars Magne Ingebrigtsen - - * gnus-msg.el (gnus-summary-reply): Allow very wide replies. - (gnus-summary-very-wide-reply): New command and keystroke. - (gnus-summary-very-wide-reply-with-original): Ditto. - - * gnus-score.el (gnus-adaptive-word-length-limit): New variable. - (gnus-score-adaptive): Use it. - - * gnus-start.el (gnus-get-unread-articles): Clean up. - -2001-03-21 20:00:43 Lars Magne Ingebrigtsen - - * nnultimate.el (nnultimate-retrieve-headers): Work for other - boards. - -2001-03-21 Didier Verna - - * gnus-start.el (gnus-subscribe-newsgroup-hooks): New. - * gnus-start.el (gnus-subscribe-newsgroup): use it. - -2001-03-15 09:47:23 Lars Magne Ingebrigtsen - - * nnultimate.el (nnultimate-retrieve-headers): Understand - long-form month names. - -2001-03-18 23:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-show-all-headers): - gnus-article-show-all-headers is broken. Use - gnus-summary-toggle-header instead. - - * mml2015.el (mml2015-gpg-extract-from): No error. - -2001-03-18 23:00:00 ShengHuo ZHU - From Bj,Ax(Brn Mork . - - * mml2015.el (mml2015-gpg-extract-from): New function. - (mml2015-gpg-verify): Use it. - (mml2015-gpg-clear-verify): Use it. - -2001-03-17 10:00:00 ShengHuo ZHU - - * message.el (message-setup-fill-variables): Use - fill-paragraph-function. - (message-fill-paragraph): Take an argument. - (message-newline-and-reformat): Take another argument. - -2001-03-16 20:00:00 ShengHuo ZHU - - * message.el (rmail-output): It is in rmailout.el not rmail.el. - -2001-03-16 16:00:00 ShengHuo ZHU - - * message.el (message-forward): local-variable-p takes an extra - argument in XEmacs. - -2001-03-16 Simon Josefsson - - * nnimap.el (nnimap-dont-use-nov-p): Renamed from - `nnimap-use-nov-p' (it really tested the negative). - (nnimap-retrieve-headers): Use it. - -2001-03-11 Kai Gro,b_(Bjohann - - * message.el (message-generate-headers-first): Update doc. - -2001-03-10 Matthias Wiehl - Trivial patch. - - * gnus.el (gnus-summary-line-format): Typo. - -2001-03-11 Simon Josefsson - - * 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 - - * gnus-score.el (gnus-summary-lower-thread): Typo. - -2001-03-14 19:00:00 ShengHuo ZHU - - * message.el (message-forward-decoded-p): New variable. - (message-forward-subject-author-subject): Use it. - (message-make-forward-subject): Use it. - (message-forward): Use it. - - * gnus-uu.el (gnus-uu-digest-mail-forward): Use it. - - * mm-util.el, message.el, rfc2047.el, gnus-sum.el, gnus-score.el: - Sync with Emacs 21 (tag EMACS_PRETEST_21_0_100). - -;;Has been fixed -- zsh. -;;2001-03-05 Dave Love -;; -;; * mm-util.el (mm-mime-mule-charset-alist): Fix utf-8 case. -;; Move it after definition of mm-coding-system-p. -;; -2001-03-01 Dave Love - - * mm-util.el (mm-inhibit-file-name-handlers): Add - image-file-handler. - -2001-02-11 Dave Love - - * message.el (message-signature-file): Fix doc, :type. - -2001-02-08 Dave Love - - * rfc2047.el (rfc2047-fold-region): Don't forward-char at EOB. - (message-posting-charset): Defvar when compiling again. - (rfc2047-encodable-p): Require message. - - * gnus-sum.el (gnus-alter-articles-to-read-function): - * gnus-score.el (gnus-score-after-write-file-function): Fix :type. - -2001-03-08 20:00:00 ShengHuo ZHU - - * 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'. - -2001-03-07 13:00:00 ShengHuo ZHU - - * nndraft.el (nndraft-request-group): Restore auto save files if - the original files do not exist. - -2001-03-07 11:00:00 ShengHuo ZHU - - * gnus-score.el (gnus-score-find-bnews): Print messages on illegal - SCORE paths. - - * mm-decode.el (mm-dissect-buffer): Call - mail-extract-address-components only if necessary. - -2001-03-06 13:00:00 ShengHuo ZHU - - * gnus-score.el (gnus-score-find-bnews): Maybe there is no - directory part. - (gnus-score-search-global-directories): Use file-directory-p. - - * gnus-score.el (gnus-score-score-files-1): Use - gnus-kill-files-directory. - From Adrian Aichner . - -2001-03-05 08:00:00 ShengHuo ZHU - - * gnus.el (charset): Move here from gnus-sum.el. - -2001-03-04 11:00:00 ShengHuo ZHU - - * mml.el (mml-preview): Disable local map. - - * gnus-sum.el (gnus-summary-make-menu-bar): Make - gnus-article-post-menu here. - - * gnus-art.el (gnus-article-make-menu-bar): Make summary-menu bar - if it has not been made. - -2001-03-02 02:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-article-describe-key): Map key to event. - (gnus-article-describe-key-briefly): Ditto - -2001-03-01 23:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-limit-include-expunged): Fix. - -2001-03-01 22:00:00 ShengHuo ZHU - From Katsumi Yamaoka . - - * dgnushack.el (coerce, merge, subseq): defmacro. - -2001-03-01 22:00:00 ShengHuo ZHU - - * lpath.el (nndraft-request-group): Move it here from nndraft.el. - A fake defalias in nndraft.el results a not-activated bug in - uncompiled versions. - -2001-02-26 11:27:27 Paul Jarc - Committed by ShengHuo ZHU - - * gnus-util.el (gnus-split-references): Handle malformed References:. - -2001-02-26 08:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-article-mime-part-status): 1 part. - -2001-02-25 10:00:00 ShengHuo ZHU - From NAGY Andras . - - * gnus.el (gnus-parameters): Typo. - -2001-02-24 00:00:00 ShengHuo ZHU - - * gnus.el (gnus-read-method): Remove redundancy. - -2001-02-23 23:00:00 ShengHuo ZHU - - * nnslashdot.el (nnslashdot-backslash-url): New variable. - (nnslashdot-request-list): Use it. - -2001-02-23 22:00:00 ShengHuo ZHU - - * nnml.el (nnml-generate-active-info): Fix the case when there is - no file. - - * gnus-sum.el (gnus-summary-import-article): Display it. Enable edit. - (gnus-summary-create-article): New function. - - * gnus-group.el (gnus-group-mark-article-read): New function. - - * gnus-msg.el (gnus-inews-do-gcc): Use it. - - * gnus-art.el (gnus-article-edit-article): Set modified-p nil. - -2001-02-23 17:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-article-edit-done): Don't use - gnus-article-edit-exit. - (gnus-article-edit-exit): Confirm and insert original-article-buffer. - - * gnus.el (gnus-parameters): New variable. - Suggested by NAGY Andras . - (gnus-parameters-get-parameter): New function. - (gnus-group-find-parameter): Use it. - -2001-02-23 Simon Josefsson - - * gnus-msg.el (gnus-post-method): Fix documentation to reflect - change of default value to `current'. - -2001-02-23 08:00:00 ShengHuo ZHU - - * nneething.el (nneething-get-head): Insert unreadable file too. - -2001-02-22 23:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-insert-articles): Remove fetched headers. - - * webmail.el (webmail-type-definition): Deja is bought by google. - -2001-02-22 22:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-fetch-headers): New function. - (gnus-select-newsgroup): Use it. - (gnus-summary-insert-articles): New function. - (gnus-summary-insert-old-articles): New function. - (gnus-summary-insert-new-articles): New function. - - * gnus-group.el (gnus-group-prepare-flat-list-dead): Use decoded-name. - (gnus-group-list-active): Ditto. - * gnus-sum.el (gnus-set-mode-line): Ditto. - (gnus-summary-read-group-1): Ditto. - -2001-02-21 15:00:00 ShengHuo ZHU - - * gnus-topic.el (gnus-topic-get-new-news-this-topic): Redraw the - current topic. - -2001-02-21 01:00:00 ShengHuo ZHU - - * smiley.el (gnus-smiley-display): Don't do widening. - - * smiley-ems.el (gnus-smiley-display): Don't do widening. Smiley - within body. - - * gnus-msg.el (gnus-inews-do-gcc): Activate group anyway. - - * gnus-art.el (gnus-mime-display-multipart-alternative-as-mixed): - New variable. - (gnus-mime-display-multipart-related-as-mixed): New variable. - (gnus-mime-display-part): Use them. - -2001-02-20 16:00:00 ShengHuo ZHU - - * gnus-start.el (gnus-setup-news): Allow gnus-group-line-format to be - something special. - -2001-02-20 00:00:00 ShengHuo ZHU - - * nnweb.el (nnweb-request-group): Set nnweb-group anyway. - (nnweb-request-article): Call reference if exists. - (nnweb-type-definition): Dejanews is bought by google.com. - Beta! - -2001-02-19 19:00:00 ShengHuo ZHU - - * gnus-draft.el (gnus-draft-reminder): "Confirm to exit?" - -2001-02-19 Kai Gro,b_(Bjohann - - * gnus-sum.el (gnus-thread-sort-functions): Doc fix. Refer to - gnus-article-sort-functions. - (gnus-article-sort-functions): Doc fix. Refer to - gnus-thread-sort-functions. - -2001-02-18 20:00:00 ShengHuo ZHU - From 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. - -2001-02-17 13:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-configure-posting-styles): Match header in - gnus-article-copy. - -2001-02-16 22:00:00 ShengHuo ZHU - - * message.el (message-do-send-housekeeping): Rename to a better - name. - -2001-02-16 18:00:00 ShengHuo ZHU - - * message.el (message-cancel-news): Check article first, then ask - yes or no. - -2001-02-16 14:00:00 ShengHuo ZHU - - * mm-uu.el (mm-uu-type-alist): Add emacs-sources. - -2001-02-16 11:00:00 ShengHuo ZHU - - * gnus-range.el (gnus-range-normalize): New function. - -2001-02-15 NAGY Andras - - * imap.el (imap-gssapi-open): Set imap-c-l-s-first. - -2001-02-14 21:00:00 ShengHuo ZHU - - * gnus-srvr.el (gnus-server-regenerate-server): Use gnus-get-function. - - * nnagent.el (nnagent-request-regenerate): New function. - - * nnfolder.el (nnfolder-request-regenerate): New deffoo. - - * nnml.el (nnml-generate-nov-databases): Accept argument - server. Don't open server if it is opened. - (nnml-request-regenerate): Use it. Change to deffoo. - -2001-02-14 Katsumi Yamaoka - Committed by ShengHuo ZHU - - * gnus.el (gnus-define-group-parameter): Fix. - -2001-02-14 15:00:00 ShengHuo ZHU - - * gnus.el (gnus-define-group-parameter): Improved. - - * gnus-sum.el (charset): Define parameter. - (ignored-charsets): Ditto. - (gnus-summary-setup-default-charset): Use them. - - * gnus-start.el (gnus-read-descriptions-file): Use them. - - * gnus-cus.el (gnus-group-parameters): Remove them. - -2001-02-14 00:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-print-article): Redo highlight. - -2001-02-13 21:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-read-group-1): Remove - gnus-summary-set-local-parameters. - (gnus-summary-setup-buffer): Put it here. - -2001-02-13 20:00:00 ShengHuo ZHU - - * gnus.el (to-address): Define parameter. - (to-list): Ditto. - * gnus-art.el (article-hide-boring-headers): Use them. - * gnus-msg.el (gnus-post-news): Ditto. - * gnus-cus.el (gnus-group-parameters): Remove them. - -2001-02-13 19:00:00 ShengHuo ZHU - - * gnus-draft.el (gnus-draft-reminder): New function. - - * gnus-art.el (gnus-sender-save-name): New function. - -2001-02-13 18:00:00 ShengHuo ZHU - - * mm-util.el (mm-mime-charset): Error message. - -2001-02-13 11:00:00 ShengHuo ZHU - - * message.el (message-check-news-body-syntax): Don't check mml lines. - -2001-02-12 11:00:00 ShengHuo ZHU - - * gnus-topic.el (gnus-subscribe-topics): Return nil if not - subscribe. - - * gnus-start.el (gnus-call-subscribe-functions): New function. - (gnus-find-new-newsgroups): Use it. - (gnus-ask-server-for-new-groups): Use it. - (gnus-check-first-time-used): Use it. - (gnus-subscribe-newsgroup-method): Grok a list of functions. - (gnus-subscribe-options-newsgroup-method): Ditto. - (gnus-subscribe-hierarchically): Return gnus-subscribe-newsgroup's - return . - -2001-02-12 Kai Gro,b_(Bjohann - - * gnus-cus.el (gnus-score-customize): Doc fix. - -2001-02-11 Jesper Harder - - * dgnushack.el (my-getenv): Typo. - -2001-02-11 11:00:00 ShengHuo ZHU - - * dgnushack.el (dgnushack-make-load): Don't autoload smiley functions. - -2001-02-11 09:00:00 ShengHuo ZHU - - * gnus-group.el (gnus-group-suspend): Offer save summaries. - - * gnus-art.el (gnus-treat-leading-whitespace): New variable. - (gnus-treatment-function-alist): Use it. - (article-remove-leading-whitespace): New function. - (gnus-article-make-menu-bar): Use it. - - * gnus-sum.el (gnus-summary-wash-empty-map): Add - remove-leading-whitespace. - (gnus-summary-wash-map): Bind strip-headers-in-body to `W a', - because of conflict. - -2001-02-09 23:00:00 ShengHuo ZHU - - * Makefile.in: Hack generating gnus-load.el. - * dgnushack.el: Ditto. - * gnus-load.el: Remove it. - -2001-02-09 20:00:00 ShengHuo ZHU - - * dgnushack.el : Add URLDIR. - - * Makefile.in (EMACS_COMP): Ditto. - -2001-02-09 19:00:00 ShengHuo ZHU - - * gnus-cus.el (gnus-score-customize): Error on no score file. - -2001-02-09 08:00:00 ShengHuo ZHU - - * mm-decode.el (mm-merge-handles): New function. - - * mm-view.el (mm-inline-message): Use it. - (mm-view-message): Ditto. - - * mm-partial.el (mm-inline-partial): Ditto. - - * mm-extern.el (mm-inline-external-body): Ditto. - - * gnus-art.el (gnus-mime-view-part): Ditto. - (gnus-mime-view-part-as-type): Ditto. - (gnus-mime-save-part-and-strip): Prevent users to strip in some - cases. - -2001-02-08 20:00:00 ShengHuo ZHU - - * message.el (message-cancel-news): Allow to shoot foot. - (message-supersede): Ditto. - -2001-02-08 Tommi Vainikainen - Trivial patch. - - * gnus-sum.el (gnus-simplify-subject-re): Use - message-subject-re-regexp. - -2001-02-08 18:00:00 ShengHuo ZHU - - * nnmail.el (nnmail-expiry-target-group): Bind - nnmail-cache-accepted-message-ids to nil. - - * gnus-xmas.el (gnus-xmas-article-display-xface): Use binary - coding system. - -2001-02-07 23:00:00 ShengHuo ZHU - - * qp.el (quoted-printable-encode-region): Make sure characters are - between 00 and FF. Don't check charset. - - * mm-encode.el (mm-encode-content-transfer-encoding): Use unibyte - in Emacs 20. - * rfc2047.el (rfc2047-q-encode-region): Ditto. - -2001-02-07 11:00:00 ShengHuo ZHU - - * message.el (message-make-forward-subject): Argument decoded. - (message-forward): Use it when digest. - - * gnus-uu.el (gnus-uu-grab-articles): Shoot down original article - buffer. - -2001-02-07 Kai Gro,b_(Bjohann - - * message.el (message-generate-headers-first): Doc fix. - -2001-02-07 10:00:00 ShengHuo ZHU - - * gnus-art.el (article-make-date-line): Error proof. - -2001-02-06 21:00:00 ShengHuo ZHU - - * gnus-group.el (gnus-group-listing-limit): New variable. - (gnus-group-prepare-flat-list-dead): Use old trick to speed up. - - * gnus-topic.el (gnus-group-prepare-topics): Use gnus-killed-hashtb. - -2001-02-06 18:00:00 ShengHuo ZHU - - * message.el (message-newline-and-reformat): Special case for - breaking at BOL. - -2001-02-06 Per Abrahamsen - - * gnus-uu.el (gnus-uu-save-article): Make the topics summary a - message/rfc822. - -2001-02-06 09:00:00 ShengHuo ZHU - - * message.el (message-encode-message-body): Don't insert - Content-Type if it is inside a mail. - -2001-02-06 02:00:00 ShengHuo ZHU - - * gnus-xmas.el (gnus-xmas-article-menu-add): Add - gnus-article-commands-menu. - - * gnus-sum.el (gnus-summary-make-menu-bar): Don't share menu bar - in Emacs. - - * gnus-start.el (gnus-read-descriptions-file): Use - gnus-group-name-charset and gnus-group-charset-alist. - -2001-02-04 23:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-mark-as-processable): Understand - active region. - - * gnus-start.el (gnus-group-change-level): Remove from both - gnus-zombie-list and gnus-killed-list. - -2001-02-04 11:00:00 ShengHuo ZHU - - * gnus-start.el (gnus-subscribe-options-newsgroup-method): Add - gnus-subscribe-topics. - - * gnus-cus.el (gnus-extra-topic-parameters): Fix doc. - -2001-02-04 11:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-article-make-menu-bar): Make - gnus-article-post-menu. - - * gnus-xmas.el (gnus-xmas-article-menu-add): Add post menu. - - * gnus-sum.el (gnus-summary-make-menu-bar): Use t if XEmacs. - - * gnus-group.el (gnus-group-make-menu-bar): Ditto. - - * message.el (message-mode-menu): Ditto. - - * gnus-art.el (defvar): eval-when-compile. - -2001-02-02 17:00:00 ShengHuo ZHU - - * gnus-agent.el (gnus-agentize): Fix doc. - -2001-02-02 Karl Kleinpaste - - * mml.el (mml-preview): Bind `q'. - -2001-02-02 12:00:00 ShengHuo ZHU - - * mm-util.el (mm-mime-mule-charset-alist): non-Mule case. - -2001-01-31 Dave Love - - * mm-util.el (mm-mime-mule-charset-alist) - (mm-find-mime-charset-region): Consider mule-utf-8. - -2001-01-31 Dave Love - - * gnus-art.el (gnus-article-x-face-command) - (gnus-treat-display-xface, gnus-treat-display-smileys): Add - :version. - -2001-01-26 Dave Love - - * mm-util.el (mm-multibyte-string-p): New. - -;; * qp.el: Remove un-logged bogus changes from 2000-12-20. -;; (quoted-printable-encode-region): Doc fix. Don't call -;; string-as-multibyte on class. Clarify line-folding. - (quoted-printable-encode-string): Make temp buffer inherit - string's multibyteness. - -2001-01-23 Gerd Moellmann - - * nnheader.el (toplevel): Don't require `gnus-util' at - compile-time; this creates a circular dependency, and prevents - a bootstrap. - -2001-01-22 Andreas Schwab - - * nnheader.el (gnus-delete-line): Autoload it as a macro. - -2001-01-31 18:00:00 ShengHuo ZHU - - * nnmail.el (nnmail-remove-list-identifiers): Use consp. - - * gnus-art.el (article-hide-list-identifiers): Ditto. - - * gnus-sum.el (gnus-summary-remove-list-identifiers): Ditto. - -2001-01-31 15:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-remove-list-identifiers): Similar. - - * gnus-art.el (article-hide-list-identifiers): Similar. - -2001-01-31 Karl Kleinpaste - - * nnmail.el (nnmail-remove-list-identifiers): Improved. - -2001-01-31 09:00:00 ShengHuo ZHU - - * gnus-score.el (gnus-summary-score-entry): match may be an integer. - -2001-01-30 10:00:00 ShengHuo ZHU - - * gnus-util.el (gnus-string-equal): New function. - - * gnus-art.el (article-hide-boring-headers): Use it. - -2001-01-27 Karl Kleinpaste - - * gnus-art.el (gnus-article-banner-alist): eGroups new banner. - -2001-01-27 00:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-msg-mail): Support switch-action. - -2001-01-26 08:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-summary-save-in-pipe): Prompt for saving - command if there is not last-saver. - -2001-01-24 19:00:00 ShengHuo ZHU - - * nntp.el (nntp-open-connection): 201 is possible. - -2001-01-24 18:00:00 ShengHuo ZHU - - * rfc2047.el (rfc2047-encode): MIME charset is not coding system. - (rfc2047-charset-encoding-alist): Add big5. - -2001-01-24 17:00:00 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-add-server): Redraw the line. - (gnus-agent-remove-server): Ditto. - (autoload): gnus-server-update-server. - - * gnus-srvr.el (gnus-server-line-format): Add %a. - (gnus-server-line-format-alist): Add gnus-tmp-agent. - (gnus-server-insert-server-line): Use it. - -2001-01-24 09:00:00 ShengHuo ZHU - - * mm-util.el (mm-mime-mule-charset-alist): Preferred MIME names - GB2312 and Big5. - -2001-01-24 Simon Josefsson - - * mail-source.el (mail-sources): Add :program specifier to IMAP - mail source. - (mail-source-fetch-imap): Map :program to `imap-shell-program'. - -2001-01-24 08:00:00 ShengHuo ZHU - - * gnus-score.el (gnus-score-lower-thread): Fix a doc typo. - -2001-01-24 12:22:47 Lars Magne Ingebrigtsen - - * nntp.el (nntp-wait-for): Return the success code. - (nntp-open-connection): Use it. - -2001-01-11 11:49:02 Lars Magne Ingebrigtsen - - * gnus-int.el (gnus-check-server): Allow breaking the opening. - -2001-01-23 11:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-print-article): Remove process mark. - -2001-01-22 17:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-print-article): Take one prefix - argument. Allow to print several articles in one file. - -2001-01-21 12:00:00 ShengHuo ZHU - - * webmail.el (webmail-type-definition): netaddress changes. - -2001-01-21 00:00:00 ShengHuo ZHU - - * gnus.el: Fix copyright. Remove trailing spaces. - - * message.el (message-forward): Use mule4. - -2001-01-20 09:00:00 ShengHuo ZHU - - * mm-util.el (mm-string-as-unibyte): New function. - - * message.el (message-forward): Use it. - -2001-01-19 23:00:00 ShengHuo ZHU - - * message.el (message-cite-original-without-signature): Don't peel - off the blank line. - (message-get-reply-headers): Add Cc if it is not in follow-to. - -2001-01-20 Simon Josefsson - - * mm-decode.el (mm-handle-multipart-from): Add. - (mm-dissect-buffer): Save From: header value. - (mm-security-from): Remove. - (mm-possibly-verify-or-decrypt): Don't set mm-security-from. - - * mml-smime.el (mml-smime-verify): Use `mm-handle-multipart-from' - instead of `mml-security-from'. Protect null from value. - -2001-01-20 Simon Josefsson - - * mailcap.el (mailcap-mime-data): Run `gnumeric' on - application/vnd.ms-excel attachments. - -2001-01-19 Simon Josefsson - - * gnus-art.el (gnus-button-alist): Add `?=' to mailto URL regexp. - -2001-01-19 13:00:00 ShengHuo ZHU - - * message.el (message-ignored-mail-headers): Ditto. - -2001-01-19 Simon Josefsson - - * message.el (message-ignored-news-headers): Only search beginning - of line. - -2001-01-19 ShengHuo Zhu - Trivial patch from Alberto Lusiani - - * message.el (message-send-mail): Content-Type may not be there. - -2001-01-18 23:00:00 ShengHuo ZHU - - * gnus-ems.el (gnus-article-display-xface): Add BUFFER. - * gnus-xmas.el (gnus-xmas-article-display-xface): Ditto. - - * gnus-art.el (article-display-x-face): Insert X-Face if there is - not. - -2001-01-18 19:00:00 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-read-group-1): Don't test dead - non-native groups. - -2001-01-18 18:00:00 ShengHuo ZHU - - * message.el (message-yank-original): Understand - universal-argument. - -2001-01-18 16:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-boring-article-headers): Add to-address. - (article-hide-boring-headers): Ditto. - - * mm-view.el (mm-inline-message): Insert a newline unless bolp. - -2001-01-18 08:00:00 ShengHuo ZHU - - * rfc2047.el (rfc2047-fold-region): Don't insert LWSP if there is - one. - -2001-01-16 Simon Josefsson - - * message.el (message-make-in-reply-to): Add comment to message-id - (old syntax, see 2000-08-02 change). - -2001-01-16 13:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-url-mailto): Use gnus-msg-mail. - (gnus-button-mailto): Setup message. Moved to gnus-msg.el. - (gnus-button-reply): Ditto. - -2001-01-16 Katsumi Yamaoka - - * gnus-art.el (article-display-x-face): Fix. - -2001-01-15 16:00:00 ShengHuo ZHU - - * gnus-art.el (article-display-x-face): Use - gnus-original-article-buffer. - -2001-01-15 Jack Twilley - - * message.el (message-add-header): Move to point-max. - -2001-01-15 Simon Josefsson - - * smime.el (smime-CA-directory, smime-CA-file): Change default to - nil, improve documentation. - (smime-certificate-directory): Comment out false hints (until it - is implemented). - - * mml-smime.el (mml-smime-sign): Place user in customize buffer if - there aren't any keys. - (mml-smime-verify): If smime-CA-{file,directory} set, also try to - verify certificate. Default is changed to only check integrity. - Improved security status texts. If a certificate doesn't contain - a email address, don't fail. - - * smime.el (smime-noverify-region): - (smime-noverify-buffer): New functions. Verifies integrity only. - -2001-01-12 22:00:00 ShengHuo ZHU - - * gnus-group.el (gnus-group-sort-by-score): Reverse order. - -2001-01-12 17:00:00 ShengHuo ZHU - - * gnus-win.el (gnus-configure-windows): switch-to-buffer in XEmacs. - (gnus-remove-some-windows): Ditto. - -2001-01-12 14:00:00 ShengHuo ZHU - - * gnus-art.el (article-make-date-line): 11th. - -2001-01-11 23:00:00 ShengHuo ZHU - - * mml2015.el (mml2015-gpg-encrypt): Remove CR. - (mml2015-gpg-sign): Ditto. - -2001-01-10 14:00:00 ShengHuo ZHU - - * gnus.el: Sync with EMACS_PRETEST_21_0_95. - * gnus.el (gnus-default-posting-charset): Bogus. Removed. - -2001-01-08 Dave Love - - * mm-encode.el (mm-qp-or-base64): Don't base64 for the sake of a - single character. - - * mm-util.el (mm-mime-mule-charset-alist): Add Latin-{8,9}. - - * message.el: Doc and message fixes. - (message-send-rename-function) - (message-make-forward-subject-function) - (message-send-mail-function, message-reply-to-function) - (message-wide-reply-to-function, message-followup-to-function) - (message-distribution-function, message-auto-save-directory): Fix - :type. - - * gnus/mml.el (mml-parse-1): Frob mml-confirmation-set when - proceeding after warnings. Amend multipart warning message. - -2001-01-04 Dave Love - - * gnus-util.el (nnmail-pathname-coding-system): Defvar when - compiling. - (gnus-make-directory): Require nnmail. - - * mm-decode.el (mm-inline-media-tests): Add - image/x-portable-bitmap. - (mm-get-image): Grok pbm. - -2001-01-10 Paul Stevenson - - * nnvirtual.el (nnvirtual-request-expire-articles): delq nil. - -2001-01-09 Didier Verna - - * dgnushack.el (dgnushack-compile): give a dummy value to - `gnus-xmas-glyph-directory' for the time of compilation. - * gnus-agent.el: moved some XEmacs specific hook add-ons from - `gnus-xmas-[re]define' to avoid loosing user custom settings. - * gnus-art.el: ditto. - * gnus-group.el: ditto. - * gnus-salt.el: ditto. - * gnus-sum.el: ditto. - * gnus-topic.el: ditto. - * gnus-xmas.el (gnus-xmas-define): see above. - * gnus-xmas.el (gnus-xmas-redefine): see above. - * gnus-xmas.el (gnus-xmas-glyph-directory): generate a - non-continuable error when the directory can't be found. - -2001-01-09 01:00:00 ShengHuo ZHU - - * mm-decode.el (mm-interactively-view-part): Don't copy-sequence - handle. - * gnus-art.el (gnus-mime-view-part): Copy it. - (gnus-mime-view-part-as-type): Add into gnus-article-mime-handles. - -2001-01-09 Michael Downes - - * gnus-sum.el (gnus-summary-read-group-1): More useful message. - -2001-01-08 23:00:00 ShengHuo ZHU - - * nnmail.el (nnmail-get-new-mail): Find group only if file is not - orig-file. Use ',source. - -2001-01-08 22:00:00 ShengHuo ZHU - - * gnus-xmas.el (gnus-xmas-modeline-glyph): - (gnus-xmas-group-startup-message): - Detect gnus-xmas-glyph-directory when it is nil. - -2001-01-08 09:00:00 ShengHuo ZHU - - * pop3.el (pop3-get-message-count): Andrew Innes - 's patch of 1999-12-01 was not fully committed. - -2001-01-05 06:49:37 Lars Magne Ingebrigtsen - - * gnus-agent.el (gnus-agent-fetch-session): Say what we quit. - - * time-date.el (time-to-number-of-days): New function. - -2001-01-04 11:06:14 Gregory Chernov - Trivial patch. - - * nnslashdot.el (nnslashdot-request-list): Always get the right - sid. - -2001-01-05 00:00:00 ShengHuo ZHU - - * message.el (message-minibuffer-local-map): New keymap. - (message-read-from-minibuffer): Use it. - * gnus-msg.el (gnus-summary-resend-message): Use it - -2001-01-04 22:00:00 ShengHuo ZHU - - * gnus-start.el (gnus-display-time-event-handler): New function. - (gnus-after-getting-new-news-hook): Use it. - -2001-01-03 07:26:58 Lars Magne Ingebrigtsen - - * message.el (message-ignored-mail-headers): Add draft header. - -2001-01-02 06:28:28 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-expire-articles): Don't save - excursion. - - * nnslashdot.el (nnslashdot-request-list): Get the right year. - -2001-01-01 00:52:44 Ed L. Cashin - A revoked patch. - - * gnus-sum.el (gnus-summary-expire-articles): Save excursion. - -2000-12-31 11:00:00 ShengHuo ZHU - - * qp.el (quoted-printable-decode-region): Don't backward-char. - -2000-12-31 03:57:31 Lars Magne Ingebrigtsen - - * gnus-draft.el: Mark articles as replied. - - * gnus-sum.el (gnus-summary-add-mark): New function. - - * gnus-group.el (gnus-add-mark): New function. - - * gnus-sum.el (gnus-summary-buffer-name): New function. - (gnus-summary-setup-buffer): Use it. - - * gnus-draft.el: Set things up with the right post method and - stuff. - - * message.el (message-ignored-news-headers): Remove X-Draft-From. - - * gnus-msg.el (gnus-inews-insert-draft-meta-information): New function. - - * gnus.el (gnus-draft-meta-information-header): New variable. - -2000-12-30 00:17:38 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-treatment-function-alist): Move the date - functions before the header sorting functions. - - * mm-uu.el (mm-uu-pgp-signed-extract-1): Unquote "- " quotes. - - * dgnushack.el (dgnushack-compile): Message whether there is w3. - Don't (push "/usr/share/emacs/site-lisp" load-path). - - * gnus-cite.el (gnus-article-fill-cited-article): Don't add space - to empty fill prefixes. - -2000-12-30 10:00:00 ShengHuo ZHU - - * nntp.el (nntp-open-connection): Kill pbuffer if process is nil. - Suggested by Christoph Conrad . - -2000-12-30 09:00:00 ShengHuo ZHU - - * nnheader.el (autoload): Autoload gnus-sorted-intersection. - - * nnml.el (autoload): Move to nnheader.el. - - * nnfolder.el (nnfolder-existing-articles): Reversed, i.e. sorted. - (nnfolder-request-expire-articles): Use gnus-sorted-intersection. - (nnfolder-retrieve-headers): Use intersection. Suggested by Jonas - Kvarnstr,Av(Bm . - -2000-12-30 00:17:38 Lars Magne Ingebrigtsen - - * gnus-art.el (article-make-date-line): Get the hours right. - (gnus-ignored-headers): More hiding. - - * nnmail.el (nnmail-expiry-wait): Not an integer. - - * message.el (message-goto-body): Only expand abbrev when called - interactively. - (message-make-lines): Use it. - -2000-12-29 20:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-inews-yank-articles): Reparse headers. - -2000-12-30 00:17:38 Lars Magne Ingebrigtsen - - * gnus-sum.el (gnus-summary-limit-include-expunged): Really - include the expunged articles. - - * gnus-group.el (gnus-group-sort-by-server): New function. - - * gnus.el (gnus-method-to-server-name): New function. - (gnus-group-prefixed-name): Use it. - - * gnus-group.el (gnus-group-sort-function): Doc fix. - (gnus-group-sort-groups-by-server): New command. - -2000-12-29 13:25:10 Lars Magne Ingebrigtsen - - * gnus-art.el (gnus-treat-date-english): New variable. - (article-date-english): New command. - (gnus-english-month-names): New variable. - (article-make-date-line): Do 'english. - - * gnus-cite.el (gnus-article-fill-cited-article): Add a space - after the fill prefix. - - * gnus-sum.el (gnus-summary-make-menu-bar): Removed "Enter - score...". - - * gnus-art.el (gnus-ignored-headers): Hide more headers. - - * message.el (message-mode-map): Bind comment-region. - - * gnus-art.el (gnus-mime-display-part): Let w3 display - multipart/related. - - * mm-bodies.el (mm-long-lines-p): New function. - (mm-body-encoding): Use it. - (mm-body-encoding): Encode articles with lines longer than 1000 - characters. - -2000-12-29 01:00:00 ShengHuo ZHU - - * mm-util.el (mm-enable-multibyte): Use - default-enable-multibyte-characters. - (mm-enable-multibyte-mule4): Ditto. - (mm-disable-multibyte): Test XEmacs. - (mm-disable-multibyte-mule4): Ditto. - (mm-with-unibyte-current-buffer): Simplified. - (mm-with-unibyte-current-buffer-mule4): Ditto. - -2000-12-28 19:44:56 Lars Magne Ingebrigtsen - - * nnheaderxm.el (nnheader-string-as-multibyte): New alias. - - * nnheader.el (nnheader-string-as-multibyte): New alias. - - * mm-view.el (mm-inline-text): Warn when bugging out in w3. - - * gnus-uu.el (gnus-message-process-mark): New function. - (gnus-uu-mark-by-regexp): Use it. - (gnus-new-processable): New function. - -2000-12-28 19:21:57 Inge Frick - Trivial patch. - - * gnus-sum.el (gnus-no-mark): New variable. - -2000-11-01 01:12:29 Lars Magne Ingebrigtsen - - * nnwfm.el (nnwfm-create-mapping): Remove quote marks and - backslashes. - -2000-12-26 Katsumi Yamaoka - - * gnus-art.el (gnus-article-banner-alist): Remove duplicate - definition. - -2000-12-25 00:00:00 ShengHuo ZHU - - * dgnushack.el (dgnushack-compile): elc is in the current directory. - - * qp.el (quoted-printable-encode-region): Don't check multibyte in - XEmacs. - -2000-12-25 Lloyd Zusman - Trivial patch. - - * mml.el (mml-read-tag): Save tag location. - -2000-12-25 Simon Josefsson - - * starttls.el: Sync with Emacs 21. - -2000-12-24 11:00:00 ShengHuo ZHU - - * message.el (message-mail): Support yank-action. - - * message.el (message-setup): Revoke the last change. - -2000-12-24 01:00:00 ShengHuo ZHU - - * message.el (message-setup): Use cons. Suggested by Johan Vromans - . - -2000-12-24 Simon Josefsson - - * mm-bodies.el (mm-decode-content-transfer-encoding): Preserve - mailing list junk at end of part. - -2000-12-23 Simon Josefsson - - * nnimap.el (nnimap-expiry-target): New function. - (nnimap-request-expire-articles): Use it. - -2000-12-22 21:00:00 ShengHuo ZHU - - * gnus.el (gnus-group-parameters-more): New variable. - * gnus-cus.el (gnus-group-customize): Use it. - - * gnus.el (gnus-define-group-parameter): New macro. - (auto-expire): Use it - (total-expire): Use it. - * gnus-art.el (banner): Use it. - - * mml.el (mml-parse): save-excursion. Suggested by Lloyd Zusman - . - -2000-12-22 12:00:00 ShengHuo ZHU - - * gnus-topic.el (gnus-topic-create-topic): Use list. - - * gnus-vm.el (gnus-summary-save-article-vm): Require gnus-art - before binding gnus-default-article-saver. - - * gnus-sum.el (gnus-summary-save-article): - (gnus-summary-pipe-output): - (gnus-summary-save-article-mail): - (gnus-summary-save-article-rmail): - (gnus-summary-save-article-file): - (gnus-summary-write-article-file): - (gnus-summary-save-article-body-file): Ditto. - - * gnus-mh.el (gnus-summary-save-article-folder): Ditto. - -2000-12-22 10:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-mime-security-button-map): - (gnus-mime-button-map): Add parent. - -2000-12-22 09:00:00 ShengHuo ZHU - - * messagexmas.el (message-xmas-redefine): New function. - - * message.el: Use it. - - * gnus-art.el (gnus-article-check-hidden-text): Return t. - - * gnus-util.el (gnus-remove-text-properties-when): Return t. - -2000-12-22 03:00:00 ShengHuo ZHU - - * mm-decode.el (mm-dissect-multipart): Avoid errors owing to - malformatted messages. - -2000-12-22 02:00:00 ShengHuo ZHU - - * mm-util.el (mm-image-load-path): New function. - - * gnus-group.el (gnus-group-make-tool-bar): Use it. - - * gnus-sum.el (gnus-summary-make-tool-bar): Use it. - - * message.el (message-tool-bar-map): Use it. - - * Makefile.in (install-el): New rule. - -2000-12-21 Katsumi Yamaoka - - * gnus-art.el (article-treat-dumbquotes): Quote \. - -2000-12-21 22:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-treat-emphasize): Don't treat emphasis if - Emacs 20 runs on a terminal. - -2000-12-21 14:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-bug): Revert to save-excursion. - - * mml.el (gnus-add-minor-mode): Autoload. - - * message.el (message-forward): Save-restriction. - -2000-12-21 Kai Gro,b_(Bjohann - - * gnus-art.el (article-treat-dumbquotes): More doc, provided by - Paul Stevenson - -2000-12-21 10:00:00 ShengHuo ZHU - - * gnus-ml.el (gnus-mailing-list-mode-map): Use C-c C-n prefix. - - * mml.el (gnus-ems): Don't require. - - * gnus.el (gnus-decode-rfc1522): Removed. - (gnus-set-text-properties): Define. - -2000-12-21 09:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-mime-*): handle may be nil. - - * gnus-sum.el (gnus-summary-mode): Turn on gnus-mailing-list-mode. - - * gnus.el (gnus-group-remove-excess-properties): Not defined - in gnus-xmas. - -2000-12-20 21:00:00 ShengHuo ZHU - - * message.el (message-mail-user-agent): Add :version. - -2000-12-21 Miles Bader - - * message.el (message-mode): Set `comment-start' to the yank prefix. - -2000-12-20 17:00:00 ShengHuo ZHU - - * message.el (message-mail-user-agent): New variable. - (message-setup): Renamed to message-setup-1. Support - mail-user-agent. - (message-mail-user-agent): New function. - (message-mail): Use it. - (message-reply): Use it. - (message-resend): Use it. - (message-mail-other-window): Use it. - (message-mail-other-frame): Use it. - - * gnus-msg.el (gnus-bug): Support mail-user-agent. - -2000-12-20 15:00:00 ShengHuo ZHU - - * message.el (message-tool-bar-map): Simplify. - (message-narrow-to-head-1): New function. - (message-narrow-to-head): Use it. - (message-reply): Ditto. - (message-cancel-news): Ditto. - (message-supersede): Ditto. - (message-make-forward-subject): Ditto. - (message-bounce): Ditto. - -2000-12-20 11:00:00 ShengHuo ZHU - - * uudecode.el (uudecode-decode-region-external): make-temp-file - may not be defined. - - * binhex.el (defalias): eval-and-compile. - - * message.el (message-tool-bar-map): New function. - (message-mode): Use it. - -2000-12-20 09:00:00 ShengHuo ZHU - - * nntp.el (nntp-find-connection): Remove the entry. - (nntp-retrieve-groups): (gnus-buffer-live-p buf). - -2000-12-20 05:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-summary-mail-forward): Use original buffer. - - * message.el (message-forward): Copy buffer in unibyte mode. - -2000-12-20 04:00:00 ShengHuo ZHU - - * message.el (message-make-forward-subject): Don't widen. Decode. - (message-forward): Don't decode subject. - -2000-12-20 Christoph Conrad - - * qp.el (quoted-printable-encode-region): Upcase QP. - -2000-12-20 03:00:00 ShengHuo ZHU - - * mm-decode.el (mm-possibly-verify-or-decrypt): Use - mail-extract-a-c instead. Don't depend on Gnus. - - * mml.el (gnus-ems): Require it. - - * gnus-msg.el (gnus-summary-mail-forward): - - * message.el (message-forward): Move mime-to-mml here. - -2000-12-20 02:00:00 ShengHuo ZHU - - * gnus-group.el, gnus-sum.el, message.el: Add :help unless Emacs. - * gnus-art.el (gnus-insert-mime-button): Simplify. - (gnus-mime-display-alternative): Ditto. - (gnus-insert-mime-security-button): Ditto. - -2000-12-20 01:00:00 ShengHuo ZHU - - * gnus-util.el (gnus-add-text-properties-when): In XEmacs, - text-property-not-all doesn't return nil when start=mark(end). - (gnus-remove-text-properties-when): Ditto. - -2000-12-20 00:00:00 ShengHuo ZHU - - * gnus-start.el (gnus-group-change-level): Remove group from - gnus-active-hashtb if real killed. - -2000-12-19 22:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-insert-mime-button): Emacs20 needs local-map. - (gnus-mime-display-alternative): Ditto. - (gnus-insert-mime-security-button): Ditto. - -2000-12-19 21:00:00 ShengHuo ZHU - - * gnus-start.el (gnus-group-change-level): Don't add it into - killed-list if it was killed. - -2000-12-19 19:00:00 ShengHuo ZHU - - * nnmbox.el (nnmbox-file-coding-system): Use binary. - (nnmbox-active-file-coding-system): Ditto. - - * gnus-cus.el (gnus-group-parameters): Add posting-style. - -2000-12-19 18:00:00 ShengHuo ZHU - - * gnus.el (gnus-version): - (gnus-version-number): Set to Oort Gnus 0.01. - - * gnus-art.el (gnus-mime-security-button-map): - (gnus-insert-mime-security-button): Fix for Emacs21. - -2000-12-19 17:00:00 ShengHuo ZHU - - * gnus-group.el, gnus-sum.el, message.el: Comment out :help in - easymenu, because XEmacs doesn't understand :help. - - * mm-uu.el: Require binhex. - -2000-12-19 16:00:00 ShengHuo ZHU - - * gnus.el: Merged. Emacs21 CVS tag is zsh-merge-ognus-1. - -2000-12-19 ShengHuo ZHU - - * mm-util.el (mm-charset-synonym-alist): Fix a typo. - -2000-12-18 Gerd Moellmann - - * *.xpm, *.pbm: Convert icons icons to size 24x24. - -2000-12-18 Dave Love - - * gnus-msg.el (news-setup, news-reply-mode): Don't autoload - (unused). - -2000-12-13 Miles Bader - - * smiley-ems.el (smiley-region): Bind `inhibit-point-motion-hooks' - to t, so that we don't get stuck while trying to smilefy - intangible text. - -2000-12-12 Gerd Moellmann - - * smiley-ems.el (smiley-regexp-alist): Make regexps match - at the end of the buffer. - (smiley-region): In the loop, move to the end of the submatch - matching the smiley instead of using the end of the match - of the whole regexp. - -2000-12-12 Eli Zaretskii - - * message.el (message-mode): Doc fix. - -2000-12-12 Gerd Moellmann - - * smiley-ems.el (smiley-region): Doc fix. - -2000-12-11 Miles Bader - - * gnus-sum.el (gnus-summary-recenter): When trying to keep the - bottom line visible, check to see if it's partially obscured, and - if so, either scroll one more line to make it fully visible, or - revert to showing the second line from the top. - -2000-12-07 Dave Love - - * mailcap.el (mailcap-download-directory) - * gnus-audio.el (gnus-audio-directory) - * smiley-ems.el (smiley-data-directory): Fix :type. - -2000-11-30 Dave Love - - * message.el (message-auto-save-directory): Use - file-name-as-directory. - (message-set-auto-save-file-name): Create - message-auto-save-directory if necessary. - (message-replace-chars-in-string): Removed -- unused. - (message-mail-alias-type): Customize. - (message-headers): Remove duplicate defgroup. - -2000-11-29 Dave Love - - * qp.el (quoted-printable-decode-region): Use error, not message - to report malformed text (like base64). Amend message. - -2000-11-29 Miles Bader - - * message.el (message-header-lines): Fontify tag. - -2000-11-27 Dave Love - - * nnlistserv.el: Ignore errors when requiring nnweb and avoid a - compiler warning. - -;2000-11-26 Dave Love -; -; * mm-uu.el (mm-uu-configure-list): Fix typo in :type. -; -2000-11-23 Dave Love - - * uu-post.pbm, uu-decode.pbm: new files from XPMs. - - * mm-uu.el (uudecode): Require. - (uudecode-decode-region, uudecode-decode-region-external): Don't - autoload. - (mm-uu-copy-to-buffer): Doc fix. - (mm-uu-decode-function, mm-uu-binhex-decode-function): Doc, custom - type fix. - - * mailcap.el: Doc fixes. - (mailcap-mime-data): Various adjustments. - (mailcap): New group. - (mailcap-download-directory): Customize. - (mailcap-generate-unique-filename, mailcap-binary-suffixes) - (mailcap-temporary-directory): Deleted (unused). - (mailcap-unescape-mime-test): Simplify slightly. - (mailcap-viewer-passes-test): Use functionp. - (mailcap-command-p): Aliased to executable-find. - - * rfc2047.el (rfc2047-encode-message-header): Don't encode if - default-enable-multibyte-characters is nil. - -2000-11-22 Gerd Moellmann - - * gnus-group.el (gnus-group-make-tool-bar): Fix a paren typo. - -2000-11-21 Dave Love - - * gnus-art.el (gnus-mime-button-map): Don't inherit from - gnus-article-mode-map. -; (gnus-mime-button-menu): Use mouse-set-point. - (gnus-insert-mime-button, gnus-mime-display-alternative) - (gnus-mime-display-alternative): Don't use local-map property. - -2000-11-17 Dave Love - - * uudecode.el (uudecode-insert-char): Fix bogus feature test. - (uudecode-decode-region-external): Doc fix. Use with-temp-buffer - and make-temp-file. - (uudecode-decode-region): Doc fix. - -2000-11-14 Dave Love - - * cu-exit.pbm, exit-summ.pbm, followup.pbm, fuwo.pbm: - * mail-reply.pbm, next-ur.pbm, post.pbm, prev-ur.pbm: - * reply-wo.pbm, reply.pbm, rot13.pbm, save-aif.pbm, save-art.pbm: - New files, derived from the XPMs. - -2000-11-10 Dave Love - - * gnus-agent.el (gnus-agent-confirmation-function): Add :version. - (gnus-agent-lib-file, gnus-agent-load-alist) - (gnus-agent-save-alist, gnus-agent-article-name): Use - expand-file-name. - - * gnus-group.el (gnus-group-name-charset-method-alist): Add - :version. - (nnkiboze-score-file): Defvar when compiling. - - * gnus-start.el (gnus-read-newsrc-file): Add :version. - - * gnus-art.el (gnus-article-banner-alist) - (gnus-emphasize-whitespace-regexp, gnus-ignored-mime-types) - (gnus-article-date-lapsed-new-header) - (gnus-article-mime-match-handle-function, gnus-mime-action-alist) - (gnus-treat-strip-list-identifiers, gnus-treat-date-iso8601) - (gnus-treat-strip-headers-in-body) - (gnus-treat-capitalize-sentences, gnus-treat-play-sounds) - (gnus-treat-translate): Add :version. - (gnus-article-mime-part-function): Fix defcustom. - - * nnmail.el (nnmail-expiry-target) - (nnmail-scan-directory-mail-source-once, nnmail-extra-headers) - (nnmail-split-header-length-limit): Add :version. - - * gnus-sum.el (gnus-auto-expirable-marks) - (gnus-inhibit-user-auto-expire, gnus-list-identifiers) - (gnus-extra-headers, gnus-ignored-from-addresses) - (gnus-newsgroup-ignored-charsets) - (gnus-group-highlight-words-alist) - (gnus-summary-show-article-charset-alist): Add :version. - - * catchup.pbm, describe-group.pbm, exit-gnus.pbm, get-news.pbm: - gnntg.pbm, kill-group.pbm, subscribe.pbm, unsubscribe.pbm: New - files, converted from the XPMs. - - * gnus-cache.el (gnus-cache-active-file): Don't use - file-name-as-directory on directory. - (gnus-cache-file-name): Use expand-file-name, not concat. Don't - use file-name-as-directory on directory. - - * time-date.el (timezone-make-date-arpa-standard): Autoload. - (date-to-time): Use it. - -; * message.el (message-mode) : -; : Use [:alnum:] in regexp range. -; (message-newline-and-reformat): Likewise. - (message-forward-as-mime, message-forward-ignored-headers) - (message-buffer-naming-style, message-default-charset) - (message-dont-reply-to-names, message-send-mail-partially-limit): - Add :version. - - * mm-util.el: Doc fixes. - (mm-mime-charset): Don't use the raw result of - mm-preferred-coding-system. - (mm-with-unibyte-buffer, mm-with-unibyte-current-buffer) - (mm-with-unibyte): Simplify. - - * gnus-int.el (gnus-start-news-server): Use expand-file-name, not - concat. - - * pop3.el (pop3-version): Deleted. - (pop3-make-date): New function, avoiding message-make-date. - (pop3-munge-message-separator): Use it. - -2000-11-09 Dave Love - - * gnus-group.el (gnus-group-make-directory-group) - (gnus-group-fetch-faq): Use expand-file-name. - (gnus-group-fetch-faq): Simplify completing-read form. - - * mm-bodies.el (mm-encode-body): Use mm-multibyte-p, don't just - test for Mule. - - * message.el (tool-bar-map): Defvar when compiling. - - * gnus-setup.el (running-xemacs, gnus-use-installed-tm) - (gnus-tm-lisp-directory): Deleted. - (gnus-use-installed-mailcrypt, gnus-emacs-lisp-directory): Use - (featurep 'xemacs). - (gnus-gnus-lisp-directory, gnus-mailcrypt-lisp-directory) - (gnus-mailcrypt-lisp-directory, gnus-bbdb-lisp-directory): Remove - version numbers from file names. - -2000-11-08 Dave Love - - * mm-view.el: Use featurep for XEmacs test. - (mm-inline-message): Test for `remove-specifier'; don't use - condition-case. - - * mm-bodies.el (mm-encode-body): Use mm-multibyte-p. - - * gnus-score.el (gnus-score-load-file): Use expand-file-name. - (gnus-score-find-bnews): Don't concat "". - - * cu-exit.xpm, prev-ur.xpm, next-ur.xpm, post.xpm, fuwo.xpm: - * followup.xpm, uu-post.xpm, uu-decode.xpm, mail-reply.xpm: - * reply.xpm, reply-wo.xpm, rot13.xpm, save-aif.xpm, save-art.xpm: - * exit-summ.xpm: New files, renamed from icons by Luis Fernandes. - - * gnus-sum.el: Put some defvars in eval-when-compile. - (gnus-summary-mode-hook): Add :options. - (gnus-summary-make-menu-bar): Add some :help, used by tool bar. - (gnus-summary-tool-bar-map): New variable. - (gnus-summary-make-tool-bar): New function. - (gnus-summary-mode): Put kill-all-local-variables first. - - * gnus-group.el (gnus-group-toolbar-map): New variable. - (gnus-group-make-tool-bar): Rewritten. - (gnus-group-mode): Put kill-all-local-variables first. - - * rfc2047.el: Require gnus-util. - - * nnml.el (gnus-sorted-intersection): Autoload. - - * nnheader.el: Wrap subst-char-in-string def in eval-and-compile. - Put some defvars in eval-when-compile. - (gnus-intersection, gnus-sorted-complement): Autoload. - - * imap.el (imap-point-at-eol): New, replacing gnus-point-at-eol. - - * mm-encode.el (mm-body-7-or-8): Autoload. - - * mm-decode.el (mm-insert-inline): Autoload. - - * mml.el: - * message.el: Put some defvars in eval-when-compile. - - * gnus-msg.el: Put some defvars in eval-when-compile. - (gnus-msg-mail): Move after gnus-setup-message. - - * smiley-ems.el (smiley-data-directory, smiley-regexp-alist): Doc fix. - -2000-11-07 Dave Love - - * gnus-util.el (nnheader): Don't require message (recursive - autoload). - - * uudecode.el: Avoid compiler warnings. - - * rfc2047.el: (rfc2047-fold-region): Use gnus-point-at-bol. - (rfc2047-charset-encoding-alist): Add iso-8859-1[45]. - -2000-11-06 Dave Love - - * gnus-salt.el (gnus-binary-mode): Fix call to gnus-add-minor-mode. - - * uudecode.el: Use (featurep 'xemacs). Require cl when compiling. - (uudecode-char-int): New alias, replacing char-int. - (uudecode-decode-region): Don't call buffer-disable-undo. - -; * mm-uu.el (mm-uu-configure): Unquote lambda. -; (mm-uu-configure-list): Doc fix. -; -; * earcon.el (running-xemacs): Don't define. -; -;2000-11-03 Stefan Monnier -; -; * message.el (message-font-lock-keywords): Match a final newline -; to help font-lock's multiline support. -; -2000-11-03 Dave Love - - * gnus-nocem.el (gnus-nocem-check-article-limit): Default to 500. - - * mm-partial.el (mm-inline-partial): Space-prefix temp buffer - name. - - * gnus-cus.el (gnus-group-parameters) : Fix custom type. - : Fix custom type, doc. - - * mm-decode.el (mm-display-external): Space-prefix temp buffer - name. Don't disable undo explicitly. - -;2000-11-02 Dave Love -; -; * message.el (message-font-lock-keywords): Use [:alpha:] for -; cite-prefix. - -2000-11-01 Dave Love - - * rfc2047.el (base64): Require unconditionally. - (message-posting-charset): Defvar when compiling. - (rfc2047-encode-message-header, rfc2047-encodable-p): Require - message. - - * gnus-sum.el (nnoo): Require. - (mm-uu-dissect): Autoload. - - * mml.el (mml-parse-1): Clarify message. - (mml-minibuffer-read-type): Use mailcap-mime-types. - -2000-11-01 Stefan Monnier - - * mml.el: Fix a typo in the requiring of CL. - -2000-11-01 Dave Love - - * utf7.el: Require cl when compiling. - - * binhex.el: Use (featurep 'xemacs). - (binhex-char-int): New alias, replacing char-int. Change callers. - (binhex-decode-region): Simplify work buffer code. - (binhex-decode-region-external): Use expand-file-name, not concat. - -2000-10-30 Dave Love - - * gnus-art.el: Fix 2000-10-27 change properly. - -2000-10-28 Miles Bader - - * gnus-art.el (gnus-read-save-file-name): Remove extraneous paren. - -2000-10-27 Dave Love - - * gnus-group.el (gnus-group-make-menu-bar): Add some :help - strings. - (gnus-group-make-tool-bar): New function. - (gnus-group-mode): Use it. - - * message.el (message-mode-menu): Add some :help strings. - (message-mode) [message-tool-bar-map]: Define tool-bar-map. - (featurep): Use (featurep 'xemacs). Install tool bar for Emacs. - - * catchup.xpm, exit-gnus.xpm, gnntg.xpm, subscribe.xpm: - * describe-group.xpm, get-news.xpm, kill-group.xpm: - * unsubscribe.xpm: New files. Renamed icons from Luis Fernandes. - - * mm-decode.el (mm-valid-and-fit-image-p): Don't test - display-graphic-p here. - -2000-10-27 Miles Bader - - * gnus-ems.el (gnus-ems-redefine): Use (featurep 'xemacs) instead - of the `gnus-xemacs' variable, as the latter has been removed. - * gnus-start.el (gnus-1, gnus-read-descriptions-file): Likewise. - * gnus-art.el (gnus-treat-display-xface) - (gnus-treat-display-smileys, gnus-treat-display-picons) - (gnus-article-read-summary-keys): Likewise. - -2000-10-26 Dave Love - - (defvar): Use rmail-spool-directory unconditionally. - -2000-10-18 Dave Love - - * mm-bodies.el (mm-uu-decode-function) - (mm-uu-binhex-decode-function): Defvar when compiling. - - * gnus-nocem.el (gnus-nocem-issuers): Update. - (gnus-nocem-check-from): New option. - (gnus-nocem-scan-groups): Use it. - (gnus-nocem-check-article): Bind gnus-newsgroup-name. - (gnus-nocem-check-article-limit): Add :version. - -2000-10-16 Stefan Monnier - - * ietf-drums.el (mm-util): Require CL when compiling. - -2000-10-15 Dave Love - - * qp.el: Require mm-util. - -2000-10-13 Dave Love - - * qp.el (quoted-printable-decode-region): Avoid invalid - coding-systems. - -2000-10-12 Gerd Moellmann - - * mm-bodies.el: Don't require `mm-uu' at compile-time; it leads - to a recursive load. - -2000-10-12 Dave Love - - * mm-util.el (mm-charset-synonym-alist): Add windows-1252. - - * gnus.el (gnus-group-startup-message): Check for PBM image. - -2000-10-09 Dave Love - - * mail-source.el (mail-source-fetch-imap): Bind - default-enable-multibyte-characters rather than using - mm-disable-multibyte. - -2000-10-05 Dave Love - - * qp.el (mm-decode-coding-region, mm-encode-coding-region): - Autoload. - (quoted-printable-decode-region): Rename arg which confused - charset with coding-system. Don't use nonascii-insert-offset. - Coding-system encode the region initially. Don't recognize `==' - as valid QP. Coding-system decode the region finally. - (quoted-printable-decode-string): Rename arg which confused - charset with coding-system. - - * mm-bodies.el: Require mm-uu, Don't require qp, uudecode. - (mm-encode-body): Apply mm-charset-to-coding-system to arg of - mm-encode-coding-region. - (mm-decode-body, mm-decode-string): Rename variables which - confused charset with coding-system. - (binhex-decode-region): Don't autoload. - (mm-body-encoding): Require message. - (mm-decode-content-transfer-encoding): Require mm-uu in relevant - cond branches. - - * gnus-art.el (article-de-quoted-unreadable) - (article-de-base64-unreadable): Fold search case - rather than downcasing string. Apply mm-charset-to-coding-system - to arg of quoted-printable-decode-region. - -2000-10-04 Dave Love - - * gnus-ems.el: Don't turn off compiler warnings in local vars. - Require ring when compiling. - (gnus-article-compface-xbm): New variable. - -2000-10-04 Dave Love - - * smiley-ems.el (smiley-regexp-alist, smiley-update-cache): Use - pbm images. - - * frown.pbm, smile.pbm, wry.pbm: New files. - - * frown.xbm, smile.xbm, wry.xbm: Deleted. - -2000-10-03 Dave Love - - * mail-source.el (mail-sources): Revert to nil. - - * nnmail.el (nnmail-spool-file): Revert to `((file))'. - - * qp.el: Don't require mm-util. - (quoted-printable-decode-region): Rewritten. - (quoted-printable-decode-string, quoted-printable-encode-region): - Doc fix. - (quoted-printable-encode-region): Barf on multibyte characters. - Maybe make the class multibyte. Upcase chars, not formatted - strings. Allow mm-use-ultra-safe-encoding to be unbound. - (quoted-printable-encode-string): Don't use - mm-with-unibyte-buffer. - -2000-09-29 Gerd Moellmann - - * smiley-ems.el (smiley-update-cache): Use `:ascent center'. - -2000-09-21 Dave Love - - * smiley-ems.el (smiley-region): Test if display-graphic-p bound - (for Emacs 20). Tidy somewhat. - -2000-09-21 Dave Love - - * gnus-ems.el (gnus-article-display-xface): Use unibyte for the - image processing. Rationalize logic somewhat. - -2000-09-20 Dave Love - - * gnus-start.el (gnus-1) : Don't test for X - specifically. - - * gnus.el (gnus-version-number): Avoid some redundant - autoloads. - -2000-09-20 Gerd Moellmann - - * gnus-ems.el (gnus-article-display-xface): Don't convert PBM - to XBM; we always have PBM support. - -2000-09-14 Dave Love - - * gnus.el (gnus-charset): - * mm-decode.el (mime-display): - * imap.el (imap) : Add :version. - -2000-09-13 Gerd Moellmann - - * parse-time.el: Fix author's mail address. - - * earcon.el, flow-fill.el, gnus-cite.el, gnus-gl.el, gnus-ml.el: - * gnus-mlspl.el, gnus-nocem.el, gnus-range.el, gnus-salt.el: - * gnus-setup.el, gnus-soup.el, gnus-undo.el, gnus-vm.el: - * messcompat.el, nnbabyl.el, nndir.el, nneething.el: - * nngateway.el, nnheaderxm.el, nnkiboze.el, nnlistserv.el: - * nnmbox.el, nnmh.el, nnoo.el, nnsoup.el, nnspool.el, rfc2045.el: - * rfc2231.el, uudecode.el: Fix copyright notice. - - * nnweb.el (toplevel): To make the file bootstrap in Emacs, - require `w3' at load-time only if not running in batch mode. - -2000-12-19 16:00:00 ShengHuo ZHU - - * gnus.el: Before merge with Emacs21. - -2000-12-19 Raymond Scholz - - * gnus-art.el (gnus-article-dumbquotes-map): Add EUR symbol. - -2000-12-19 Per Abrahamsen - - * mml.el (mml-mode-map): Change mml prefix from `M-m' to `C-c C-m' - to avoid conflict with the standard `back-to-indentation' - binding. - -2000-12-17 10:00:00 ShengHuo ZHU - - * mm-extern.el (mm-inline-external-body): g-a-m-h may be a handle. - - * mm-util.el (mm-enable-multibyte-mule4): Test charsetp. - (mm-disable-multibyte-mule4): Ditto. - (mm-with-unibyte-current-buffer-mule4): Ditto. - -2000-12-15 10:00:00 ShengHuo ZHU - - * pop3.el (pop3-movemail): Use binary. - (pop3-movemail-file-coding-system): Removed. - -2000-12-14 13:00:00 ShengHuo ZHU - - * mm-util.el (mm-charset-synonym-alist): Add cn-gb. - -2000-12-13 21:00:00 ShengHuo ZHU - - * nnspool.el (nnspool-lib-dir): Check whether /usr/lib/news/active - exists. - -2000-12-13 13:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-post-method): Use backend name when the - address is "". - -2000-12-08 10:00:00 ShengHuo ZHU - - * gnus-art.el (article-verify-x-pgp-sig): Don't test - mm-verify-option. - (gnus-treat-x-pgp-sig): Default value. - (gnus-ignored-headers): Redundant. - -2000-12-04 22:00:00 ShengHuo ZHU - - * gnus-win.el (gnus-configure-frame): Save selected window. - -2000-02-15 Andrew Innes - - * nnmbox.el: Require gnus-range. - (nnmbox-group-building-active-articles): New variable. - (nnmbox-group-active-articles): New variable; this is a cache of - all active articles by group and number. - (nnmbox-in-header-p): New function. - (nnmbox-find-article): New function. - (nnmbox-record-active-article): New function. - (nnmbox-record-deleted-article): New function. - (nnmbox-is-article-active-p): New function. - (nnmbox-retrieve-headers): Use nnmbox-find-article. - (nnmbox-request-article): Ditto. Also supply extra arg to - nnmbox-article-group-number. - (nnmbox-request-expire-articles): Ditto. - (nnmbox-request-move-article): Ditto. - (nnmbox-request-replace-article): Ditto. - (nnmbox-request-rename-group): Rename group entry in active - article cache. - (nnmbox-delete-mail): Update active article cache, unless article - is being replaced. - (nnmbox-possibly-change-newsgroup): Call nnmbox-read-mbox, rather - than partially duplicating it. - (nnmbox-article-group-number): Add extra `this-line' arg, to - handle articles belonging to multiple groups. - (nnmbox-save-mail): Update active article cache. - (nnmbox-read-mbox): Build active article cache when loading mbox. - Also do some repair work, if we find articles that are missing the - appropriate X-Gnus-Newsgroup lines in the header. We can usually - reconstruct these from Xref info. - -2000-12-04 18:00:00 ShengHuo ZHU - - * mail-source.el (mail-source-report-new-mail): Use - nnheader-run-at-time. - -2000-02-15 Andrew Innes - - * mail-source.el (mail-source-fetch-pop): Clear pop password when - an error is thrown, and then rethrow the error. - (mail-source-check-pop): Ditto. - (mail-source-start-idle-timer): Prevent multiple pop checks - running if the check takes a long time. - -2000-12-04 14:00:00 ShengHuo ZHU - - * gnus-msg.el (gnus-msg-mail): COMPOSEFUNC should return t if - succeed. - -2000-12-04 13:00:00 ShengHuo ZHU - - * gnus-win.el (gnus-configure-windows): Make sure - nntp-server-buffer is live. - (gnus-remove-some-windows): switch-to-buffer -> set-buffer. - -2000-11-21 Stefan Monnier - - * gnus-win.el (gnus-configure-windows): switch-to-buffer -> set-buffer. - -2000-12-04 Andreas Jaeger - - * gnus-msg.el (gnus-summary-mail-forward): Fix typos in description. - -2000-12-03 12:00:00 ShengHuo ZHU - - * mml2015.el (mml2015-fix-micalg): Alg might be nil. - -2000-12-01 ShengHuo ZHU - Trivial patch from Christopher Splinter - - * gnus-sum.el (gnus-summary-limit-to-age): Fix typo. - -2000-12-01 Simon Josefsson - - * mml-smime.el (mml-smime-verify): Fix address parsing. - -2000-12-01 Simon Josefsson - - * mml-smime.el (mml-smime-verify): Don't modify MM buffer. Handle - more than one certificate inside PKCS#7 blob. Better security - information (clamed / actual sender, openssl output, certificates - inside message). - - * smime.el (smime-verify-region): Output to /dev/null. - (smime-buffer-as-string-region): Don't parse empty lines. - -2000-11-30 23:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-mime-security-button-line-format-alist): Add - ?d and ?D. - (gnus-mime-security-show-details-inline): New variable. - (gnus-mime-security-show-details): Use them. - (gnus-insert-mime-security-button): Ditto. - - * mml2015.el (mml2015-gpg-verify): Set details when succeed. - Suggest by Michael Duggan (md5i@cs.cmu.edu). - (mml2015-gpg-clear-verify): Ditto. - (mml2015-gpg-decrypt-1): Ditto. - (mml2015-use): Prefer 'gpg. - -2000-11-30 19:00:00 ShengHuo ZHU - - * gnus-util.el (gnus-add-text-properties-when): New function. - (gnus-remove-text-properties-when): Ditto. - - * gnus-cite.el (gnus-article-hide-citation): Use them. - (gnus-article-toggle-cited-text): Use them. - - * gnus-art.el (gnus-signature-toggle): Use them. - (gnus-article-show-hidden-text): Ditto. - (gnus-article-hide-text): Ditto. - -2000-11-30 14:00:00 ShengHuo ZHU - - * mm-util.el (mm-find-charset-region): Remove eight-bit-*. - -2000-11-30 Simon Josefsson - - * smime.el (smime-point-at-eol): New alias. - (smime-buffer-as-string-region): Use it. - -2000-11-29 21:00:00 ShengHuo ZHU - - * nndraft.el (nndraft-request-restore-buffer): Remove Date field. - -2000-11-29 20:00:00 ShengHuo ZHU - - * nnfolder.el (nnfolder-request-expire-articles): expiry-target. - - * nnbabyl.el (nnbabyl-request-expire-articles): Ditto. - - * nnmbox.el (nnmbox-request-expire-articles): Ditto. - -2000-11-22 Jan Nieuwenhuizen - - * nnmh.el (nnmh-request-expire-articles): Implemented - expiry-target for nnmh backend. - -2000-11-30 Simon Josefsson - - * mm-decode.el (mm-security-from): New variable. - (mm-possibly-verify-or-decrypt): Use it rather than `from'. - - * mml-smime.el (mml-smime-verify): Use `mm-security-from' rather - than `from'. - -2000-11-30 Simon Josefsson - - * mml-smime.el (mml-smime-verify): Verify that certificate mail - address match sender address. - - * mm-decode.el (mm-possibly-verify-or-decrypt): Bind sender address. - - * smime.el (smime-verify-region): Don't copy buffer. - (smime-decrypt-buffer): Use expand-file-name on keyfile. - (smime-pkcs7-region): New function. - (smime-pkcs7-certificates-region): Ditto. - (smime-pkcs7-email-region): Ditto. - (smime-buffer-as-string-region): Ditto. - - * gnus-art.el (gnus-mime-security-show-details): Goto beginning of - buffer. - -2000-11-23 Jens Krinke - - * smime.el (smime-decrypt-region): Fix keyfile argument. - -2000-11-29 00:00:00 ShengHuo ZHU - - * nnmail.el (nnmail-cache-accepted-message-ids): Add doc. - -2000-11-28 17:00:00 ShengHuo ZHU - - * message.el (message-shoot-gnksa-feet): New variable. - (message-gnksa-enable-p): New function. - (message-send): Use it. - (message-check-news-body-syntax): Ditto. - -2000-11-28 Katsumi Yamaoka - - * message.el (message-make-message-id): Remove the redundancy. - -2000-11-22 17:00:00 ShengHuo ZHU - - * message.el (message-setup): Discourage using mc-install-*-mode. - - * gnus-setup.el (gnus-use-mailcrypt): Don't hook mail-crypt. - -2000-11-22 16:00:00 ShengHuo ZHU - - * gnus-cite.el (gnus-cite-parse): Guess citation length. - -2000-11-22 14:00:00 ShengHuo ZHU - - * gnus-ml.el (gnus-mailing-list-insinuate): New function. - -2000-11-22 13:00:00 ShengHuo ZHU - - * gnus-ml.el (gnus-mailing-list-archive): Find the real url. - -2000-11-22 11:00:00 ShengHuo ZHU - - * gnus-xmas.el (gnus-xmas-article-display-xface): Use - insert-buffer-substring. - - * message.el (message-send-mail): Use buffer-substring-no-properties. - (message-send-news): Ditto. - -2000-11-22 David Edmondson - - * imap.el (imap-wait-for-tag): Message read info. - -2000-11-21 20:00:00 ShengHuo ZHU - - * mml2015.el (mml2015-mailcrypt-encrypt): Ensure the part is encrypted. - (mml2015-mailcrypt-encrypt): Use unibyte-buffer. - (mml2015-gpg-encrypt): Ditto. - -2000-11-21 09:00:00 ShengHuo ZHU - - * mm-decode.el (mm-verify-option): Default value. - - * mml-sec.el (mml-secure-part): Error message. - -2000-11-20 18:00:00 ShengHuo ZHU - - * gnus-ml.el (gnus-mailing-list-archive): Use browse-url. - -2000-11-20 17:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-article-make-menu-bar): Use easy-menu-add. - -2000-11-20 16:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-article-describe-key): Use prompt. - (gnus-article-describe-key-briefly): Ditto. - -2000-11-20 15:00:00 ShengHuo ZHU - - * gnus-agent.el (gnus-agent-expire): Ignore corrupted history. - -2000-11-20 10:00:00 ShengHuo ZHU - - * gnus-art.el (gnus-article-describe-key): New function. - (gnus-article-describe-key-briefly): New function. - -2000-11-19 23:00:00 ShengHuo ZHU - - * mm-decode.el (mm-decrypt-option): Doc typo. - - * gnus-art.el (gnus-article-read-summary-keys): lookup-key may - return a number. - -2000-11-19 21:00:00 ShengHuo ZHU - - * message.el (message-newline-and-reformat): Typo. - -2000-11-19 12:00:00 ShengHuo ZHU - - * gnus-art.el (article-verify-x-pgp-sig): Check whether - original-article-buffer exists. - - * rfc2047.el (rfc2047-q-encoding-alist): Match Resent-. - (rfc2047-header-encoding-alist): Addresses are different from text. - (rfc2047-encode-message-header): Ditto. - (rfc2047-dissect-region): Extra parameter. - (rfc2047-encode-region): Ditto. - (rfc2047-encode-string): Ditto. - -2000-11-19 00:00:00 ShengHuo ZHU - - * mm-uu.el (mm-uu-pgp-encrypted-extract-1): New function. - (mm-uu-pgp-encrypted-extract): Use it. - (mm-uu-pgp-signed-extract-1): New function. - (mm-uu-pgp-signed-extract): Use it. - - * gnus-art.el (gnus-mime-display-security): New function. - (gnus-mime-display-part): Use it. - (gnus-mime-security-verify-or-decrypt): New function. - (gnus-mime-security-press-button): New function. - (gnus-insert-mime-security-button): Use it. - - * mm-decode.el (mm-possibly-verify-or-decrypt): Use mm-h-m-c-p. - (mm-find-raw-part-by-type): Ditto. - (mm-verify-function-alist): Add x-gnus-pgp-signature handle. - (mm-decrypt-function-alist): Add x-gnus-pgp-encrypted handle. - (mm-destroy-parts): Kill nested multibyte buffer. - - * mml2015.el (mml2015-mailcrypt-verify): Use mm-h-m-c-p. - (mml2015-gpg-verify): Ditto. - -2000-11-18 Simon Josefsson - - * mml2015.el (mml2015-mailcrypt-clear-verify): New function. - (mml2015-function-alist): Use it. - - * mml-sec.el (mml-sign-alist): Update names. - (mml-encrypt-alist): Ditto. - (mml-secure-part-smime-sign): Moved to mml-smime.el - as `mml-smime-sign-query'. - (mml-secure-part-smime-encrypt-by-file): Moved to mml-smime.el as - `mml-smime-get-file-cert'. - (mml-secure-part-smime-encrypt-by-dns): Moved to mml-smime.el as - `mml-smime-get-dns-cert'. - (mml-secure-part-smime-encrypt): Moved to mml-smime.el as - `mml-smime-encrypt-query'. - (mml-smime-sign-buffer): Use mml-smime-sign. - (mml-smime-encrypt-buffer): Use mml-smime-encrypt. - - * mml-smime.el (mml-smime-sign): New function. - (mml-smime-encrypt): - (mml-smime-sign-query): - (mml-smime-get-file-cert): - (mml-smime-get-dns-cert): - (mml-smime-encrypt-query): Moved from mml-sec.el. - -2000-11-16 Simon Josefsson - - * mml2015.el (mml2015-gpg-clear-verify): New function. - (mml2015-function-alist): Add it. - -2000-11-17 14:21 ShengHuo ZHU - - * message.el (message-setup-fill-variables): Use - message-cite-prefix-regexp. - (message-newline-and-reformat): Check the end of citation, leading - WSP, break in the cite prefix. - (message-fill-paragraph): New function. - -2000-11-17 13:44 ShengHuo ZHU - - * lpath.el: Shut up. - -2000-11-17 Per Abrahamsen - - * gnus-msg.el (gnus-group-posting-charset-alist): No longer allow - raw 8-bit in headers in dk.* newsgroups. - -2000-11-17 08:02 ShengHuo ZHU - - * message.el (message-newline-and-reformat): Match extra WSPs. - -2000-11-16 23:31 ShengHuo ZHU - - * mml.el (mml-generate-mime-1): Ignore ascii. - -2000-11-16 Justin Sheehy - - * gnus-sum.el (gnus-summary-make-menu-bar): Fix menu items. - -2000-11-16 17:00 ShengHuo ZHU - - * message.el (message-cite-prefix-regexp): Prefix should not end - at space. - -2000-11-15 18:09 ShengHuo ZHU - - * message.el (message-mode-syntax-table): Add - as a word - constituent as in articles. - (message-setup-fill-variables): Add -_. as supercite-style prefix. - * gnus-art.el (gnus-article-mode-syntax-table): Remove ?-. - * gnus-cite.el (gnus-cite-parse): Match from the beginning of line. - -2000-11-15 13:21 ShengHuo ZHU - - * gnus-msg.el (gnus-inews-do-gcc): Expire the article. - -2000-11-12 David Edmondson - - * message.el (message-font-lock-keywords): use - message-cite-prefix-regexp. - -2000-11-15 Kai Gro,b_(Bjohann - - * gnus-group.el (gnus-group-jump-to-group-prompt): New variable by - Stein Arild Str,Ax(Bmme. - (gnus-group-jump-to-group): Use it. - (gnus-group-jump-to-group-prompt): Customize. - -2000-11-14 10:32:42 ShengHuo ZHU - - * mailcap.el (mailcap-possible-viewers): Match the entire string. - -2000-11-14 10:20:56 ShengHuo ZHU - - * mml2015.el (mml2015-mailcrypt-verify): replace-match is - incompatible. - (mml2015-mailcrypt-sign): Ditto. - -2000-11-14 10:12:05 ShengHuo ZHU - - * gnus-msg.el (gnus-inews-do-gcc): Update summary data when the - group is open. - -2000-11-14 00:48:52 ShengHuo ZHU - - * gnus-bcklg.el (gnus-backlog-enter-article): Don't enter - nnvirtual articles. - (gnus-backlog-request-article): Don't request nnvirtual articles. - -2000-11-13 22:08:09 ShengHuo ZHU - - * mml2015.el (mml2015-mailcrypt-sign): Remove "-" escape. - * mml.el (mml-generate-mime-1): Save cont. skip multipart attributes. - -2000-11-13 20:43:37 ShengHuo ZHU - - * mm-decode.el (mm-get-part): Don't call mm-insert-part. - * mml.el (mml-generate-mime-1): Use charset attribute. - * mm-bodies.el (mm-encode-body): Add parameter charset. - * mm-util.el (mm-mime-charset): Show error when find 8-bit characters. - -2000-11-13 16:09:09 ShengHuo ZHU - - * mml2015.el (mml2015-mailcrypt-decrypt): Handle quit. - (mml2015-mailcrypt-clear-decrypt): Ditto. - (mml2015-mailcrypt-verify): Ditto. - (mml2015-mailcrypt-clear-verify): Ditto. - (mml2015-gpg-verify): Ditto. - -2000-11-13 15:29:58 ShengHuo ZHU - - * smime.el (smime-openssl-program): Test the existence of openssl. - * mml-smime.el: Require mm-decode. - (mml-smime-verify-test): New function. - * mm-decode.el (mm-verify-function-alist): Use it. - -2000-11-13 09:50:29 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-repair-multipart): Fix Mime-Version - anyway. - -2000-11-13 Simon Josefsson - - * mm-uu.el (mm-uu-pgp-signed-extract): Explain why clear - verification doesn't work. - -2000-11-12 23:36:45 ShengHuo ZHU - - * gnus-msg.el (gnus-inews-mark-gcc-as-read): New variable. - (gnus-inews-do-gcc): Use it. - -2000-11-12 21:35:04 ShengHuo ZHU - - * rfc2231.el (rfc2231-encode-string): Insert semi-colon and - leading space. - * mm-extern.el (mm-inline-external-body): Report error when no - access-type. - -2000-11-12 19:48:30 ShengHuo ZHU - - * gnus-sum.el (gnus-select-newsgroup): Change the error message. - -2000-11-12 11:53:18 ShengHuo ZHU - - * gnus-art.el (gnus-mime-button-menu): Use select-window. - -2000-11-12 09:47:54 ShengHuo ZHU - - * gnus-art.el (gnus-mime-display-part): Display multipart/related - as multipart/mixed. - -2000-11-12 David Edmondson - - * message.el (message-cite-prefix-regexp): moved from gnus-cite.el - and replace `.' with `\w' to allow for different syntax tables - (from Vladimir Volovich). - * message.el (message-newline-and-reformat): use - `message-cite-prefix-regexp'. - * gnus-cite.el (gnus-supercite-regexp): use - `message-cite-prefix-regexp'. - * gnus-cite.el (gnus-cite-parse): use - `message-cite-prefix-regexp'. - -2000-11-12 08:52:46 ShengHuo ZHU - - * mml2015.el (mml2015-mailcrypt-verify): Replace armors with - PGP SIGNATURE. Escape leading "-"'s. - (mml2015-mailcrypt-sign): Replace armors with PGP MESSAGE. - -2000-11-11 15:55:35 ShengHuo ZHU - - * mm-uu.el (mm-uu-type-alist): Stricter shar regexp. - -2000-11-11 Simon Josefsson - - * mml2015.el (mml2015-gpg-verify): Set "OK" security status. - - * smime.el (smime-details-buffer): New variable. - (smime-sign-region): - (smime-encrypt-region): - (smime-verify-region): - (smime-decrypt-region): Copy OpenSSL output to the buffer. - - * mml-smime.el (mml-smime-verify): Support security info. - -2000-11-10 17:11:22 ShengHuo ZHU - - * mm-decode.el (mm-verify-option): Set default to nil. - (mm-decrypt-option): Ditto. - * gnus-art.el (article-verify-x-pgp-sig): New function. - -2000-11-10 09:01:25 ShengHuo ZHU - - * gnus-art.el (gnus-mime-display-alternative): Show button if no - preferred part. - -2000-11-07 Kai Gro,b_(Bjohann - - * gnus-sum.el (gnus-move-split-methods): Say that - `gnus-split-methods' uses file names, whereas this uses group - names. (Report from Nevin Kapur) - -2000-11-10 01:23:20 ShengHuo ZHU - - * mm-partial.el (mm-inline-partial): Insert MIME-Version. - -2000-11-09 17:02:50 ShengHuo ZHU - - * nnheader.el (nnheader-directory-files-is-safe): New variable. - (nnheader-directory-articles): Use it. - (nnheader-article-to-file-alist): Ditto. - -2000-11-09 16:20:37 ShengHuo ZHU - - * rfc2047.el (rfc2047-pad-base64): New function. - (rfc2047-decode): Use it. - -2000-11-09 08:53:04 ShengHuo ZHU - - * gnus-srvr.el (gnus-browse-foreign-server): Bind the original - select method. - -2000-11-08 19:58:58 ShengHuo ZHU - - * mml2015.el (mml2015-gpg-decrypt-1): - (mml2015-gpg-verify): buffer-string has no argument in Emacs. - -2000-11-08 16:37:02 ShengHuo ZHU - - * gnus-cache.el (gnus-cache-generate-nov-databases): Reopen cache. - -2000-11-08 08:38:30 ShengHuo ZHU - - * pop3.el (pop3-munge-message-separator): A message may have an - empty body. - -2000-11-07 18:02:26 ShengHuo ZHU - - * mm-uu.el (mm-uu-type-alist): Don't test pgp stuff. - (mm-uu-pgp-encrypted-extract): Clean mml2015 buffer. - (mm-uu-pgp-signed-extract): Use coding-system. - -2000-11-07 14:33:19 ShengHuo ZHU - - * gnus-art.el (gnus-mime-display-part): Show MIME security button. - (gnus-insert-mime-security-button): New function. - * mm-decode.el (mm-possibly-verify-or-decrypt): Add security info. - * mml2015.el: Add security info when verify or decrypt. - * mm-uu.el (mm-uu-pgp-signed-extract): Use multipart. - (mm-uu-pgp-encrypted-extract): Ditto. - -2000-11-07 08:49:36 ShengHuo ZHU - - * mm-decode.el (mm-display-parts): New function. - * gnus-art.el (gnus-mime-view-all-parts): Use it. Remove parts first. - -2000-02-02 Alexandre Oliva - - * gnus-mlspl.el: Documentation tweaks. - -2000-11-06 22:06:44 ShengHuo ZHU - - * mm-decode.el (mm-possibly-verify-or-decrypt): Fix. - * gnus-art.el (gnus-article-encrypt-body): Rename and support prefix - argument. - -2000-11-06 19:10:14 ShengHuo ZHU - - * rfc2231.el (rfc2231-encode-string): Use us-ascii if charset is nil. - -2000-11-06 18:17:53 ShengHuo ZHU - - * gnus-art.el (gnus-article-encrypt): New function. - (gnus-article-encrypt-protocol-alist): New variable. - (gnus-article-encrypt-protocol): New variable. - * mml2015.el (mml2015-self-encrypt): New function. - (mml2015-mailcrypt-encrypt): Set mc-pgp-always-sign. - -2000-11-06 16:02:52 ShengHuo ZHU - - * mm-uu.el (mm-uu-gpg-key-skip-to-last): New function. - (mm-uu-pgp-key-extract): Use application/pgp-keys, don't snarf, - let mailcap do it. - * mml2015.el: Remove snarf code. - * mm-decode.el: Remove snarf code. - -2000-11-06 14:03:10 ShengHuo ZHU - - * mml.el (mml-insert-mml-markup): Ignore internal stuff. - (mml-insert-mime): Understand gnus-decoded. - (mime-to-mml): New parameter handles. - * gnus-art.el (gnus-mime-save-part-and-strip): Use it. - * gnus-sum.el (gnus-summary-edit-article): Add argument `3'. - -2000-11-06 13:51:37 ShengHuo ZHU - - * mm-decode.el (mime-security): New group. - (mm-verify-function-alist): Add test function. - (mm-decrypt-function-alist): Ditto. - (mm-snarf-option): Set default value as nil. - (mm-find-part-by-type): Recursive parameter. - (mm-possibly-verify-or-decrypt): Support draft-ietf-openpgp-multsig. - * mml2015.el: Support draft-ietf-openpgp-multsig. - -2000-11-06 13:01:27 ShengHuo ZHU - - * gnus-art.el (gnus-mime-view-part-as-charset): New function. - (gnus-article-view-part-as-charset): New function. - -2000-11-05 22:34:07 ShengHuo ZHU - - * mm-decode.el (mm-verify-option): Default value. - (mm-possibly-verify-or-decrypt): Dealing with broken messages. - -2000-11-05 15:06:05 ShengHuo ZHU - - * nnvirtual.el (nnvirtual-request-expire-articles): Uncompress range. - -2000-11-05 Simon Josefsson - - * mml-smime.el (mml-smime-verify): Work in original multipart - buffert. - - * mm-decode.el (mm-handle-multipart-original-buffer): New macro. - (mm-handle-multipart-ctl-parameter): Ditto. - (mm-alist-to-plist): New function. - (mm-dissect-buffer): Store CTL parameters and copy original buffer - for multiparts. - (mm-destroy-parts): Destroy multipart buffert. - (mm-remove-part): Ditto. - - * mml-smime.el (mml-smime-sign): Not used. - (mml-smime-encrypt): Ditto. - - * mm-decode.el (mml-smime-verify): Autoload mml-smime. - - Verify S/MIME signature support. - - * mm-decode.el (mm-inline-media-tests): Add - application/{x-,}pkcs7-signature. - (mm-inlined-types): Ditto. - (mm-automatic-display): Ditto. - (mm-verify-function-alist): Ditto. Add name of method. - (mm-decrypt-function-alist): Add name of method. - (mm-find-part-by-type): Add documentation. - (mm-possibly-verify-or-decrypt): Use new format of - mm-{verify,decrypt}-function-alist. Use method names. - - * mml-smime.el (mml-smime-verify): New function. - -2000-11-04 20:38:50 ShengHuo ZHU - - * mm-view.el (mm-inline-text): Move point to the end of inserted text. - -2000-11-04 19:07:08 ShengHuo ZHU - - * mml2015.el (mml2015-function-alist): Clear verify and decrypt. - * mm-uu.el: Reorganized. Add gnatsweb, pgp-signed, pgp-encrypted. - * mm-decode.el (mm-snarf-option): New variable. - -2000-11-04 13:08:02 ShengHuo ZHU - - * mm-util.el (mm-subst-char-in-string): New function. - (mm-replace-chars-in-string): Use it. - * message.el (message-replace-chars-in-string): Use it. - * nnheader.el (nnheader-replace-chars-in-string): Use it. - * gnus-mh.el (mh-lib-progs): Shut up. - -2000-11-04 ShengHuo Zhu - - * base64.el, md5.el: Moved to contrib directory. - -2000-11-04 11:13:56 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-search-article-forward): Don't move - the last article when search. - -2000-11-04 10:34:29 ShengHuo ZHU - - * nnheader.el (nnheader-pathname-coding-system): Default iso-8859-1. - * nnmail.el (nnmail-pathname-coding-system): Ditto. - -2000-09-29 David Edmondson - - * message.el (message-newline-and-reformat): Typo. - -2000-11-04 10:11:05 ShengHuo ZHU - - * rfc2231.el (rfc2231-decode-encoded-string): Test mm-multibyte-p. - -2000-11-04 09:53:42 ShengHuo ZHU - - * nntp.el (nntp-decode-text): Delete bogus status lines. - -2000-11-03 Stefan Monnier - - * message.el (message-font-lock-keywords): Match a final newline - to help font-lock's multiline support. - -2000-11-04 09:11:44 ShengHuo ZHU - - * nnoo.el (nnoo-set): New function. - -2000-11-04 ShengHuo Zhu - - * gpg.el, gpg-ring.el: Moved to contrib directory. - -2000-11-04 Simon Josefsson - - * nnimap.el (nnimap-split-inbox): Typo. - -2000-11-03 10:46:44 ShengHuo ZHU - - * gnus-msg.el (gnus-msg-mail): Move it backwards. - -2000-11-03 Simon Josefsson - - * rfc2231.el (rfc2231-parse-qp-string): New function. - (require): rfc2047. - - * mail-parse.el (mail-header-parse-content-type): - (mail-header-parse-content-disposition): Support invalid QP - encoded strings, by using `rfc2231-parse-qp-string'. - -2000-11-03 08:58:08 ShengHuo ZHU - - * rfc2231.el (rfc2231-parse-string): Decode when there is no number. - (rfc2231-decode-encoded-string): Typo "> X 1". - (rfc2231-encode-string): Insert the name of charset. - * mail-parse.el (mail-header-encode-parameter): Use RFC2231. - -2000-11-02 23:35:50 ShengHuo ZHU - - * mm-decode.el (mm-save-part): Return the filename. - * gnus-sum.el (gnus-summary-edit-article): Remove a hack. - * gnus-art.el (gnus-mime-save-part-and-strip): New function. - (gnus-mime-action-alist): Use it. - (gnus-mime-button-commands): Use it. - * mm-extern.el (mm-extern-local-file): Error when the file is gone. - (mm-inline-external-body): unwind-protect. - -2000-11-02 21:08:49 ShengHuo ZHU - - * gnus-art.el (gnus-insert-mime-button): Show url. - -2000-11-02 19:51:19 ShengHuo ZHU - - * mml.el (mml-generate-mime-1): Support external url. - * nnwarchive.el (nnwarchive-mail-archive-article): Use external url. - -2000-11-02 16:53:32 ShengHuo ZHU - - * mm-partial.el (mm-inline-partial): Buffer name with a leading space. - * mm-decode.el (mm-display-external): Ditto. - * mm-extern.el: New file. - * mm-decode.el (mm-inline-media-tests): Hook it up. - (mm-inlined-types): Inline message/external-body. - -2000-11-02 Simon Josefsson - - * gnus-art.el (gnus-visible-headers): Add Mail-Followup-To. - - * message.el (message-get-reply-headers): Better handling when - Mail-Followup-To is very large. - -2000-11-02 13:27:56 ShengHuo ZHU - - * gnus-uu.el (gnus-uu-post-news): Comment out the redundancy. - * gnus-art.el (gnus-article-edit-done): - * gnus-sum.el (gnus-summary-edit-article-done): Move line - counting code here. - * gnus-msg.el (gnus-setup-message): Remove a hack. - -2000-11-02 09:33:01 ShengHuo ZHU - - * gnus-sum.el (gnus-newsgroup-variables): New variable. - (gnus-summary-mode): Make them local variables. - (gnus-set-global-variables): Globalize them. - (gnus-summary-exit): Kill them. - -2000-11-02 Hrvoje Niksic - - * rfc2047.el (rfc2047-encoded-word-regexp): Allow empty encoded - word. - -2000-11-01 10:07:13 ShengHuo ZHU - - * gnus-art.el (gnus-mime-display-part): Add to signed or encrypted. - gnus-article-wash-types. - * gnus-art.el (gnus-article-wash-status): Use them. - -2000-11-01 08:54:11 ShengHuo ZHU - - * mml.el (mml-read-tag): Remove spaces and LF. - -2000-11-01 08:01:03 ShengHuo ZHU - - * mml2015.el (mml2015-mailcrypt-encrypt): Use from and sign parameters. - * mml.el (mml-generate-mime-1): Add sender and recipients attributes. - -2000-11-01 07:39:24 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-force-verify-and-decrypt): New function. - -2000-10-31 22:06:13 ShengHuo ZHU - - * gnus-sum.el (gnus-article-charset): New variable. - (gnus-summary-display-article): Set it. - * gnus-msg.el (gnus-copy-article-buffer): Use it. - * gnus-art.el (gnus-article-mode): Make it local variable. - -2000-11-01 01:12:29 Lars Magne Ingebrigtsen - - * nnultimate.el (nnultimate-create-mapping): Use nreverse. - -2000-10-31 23:45:31 Lars Magne Ingebrigtsen - - * nnwfm.el: New file. - - * nnweb.el (nnweb-replace-in-string): New function. - -2000-10-31 17:32:02 ShengHuo ZHU - - * mml2015.el: Wrap gpg.el. - * gpg.el (gpg-verify): The last argument of apply is a list. - (gpg-encrypt): Add passphrase as a parameter. - -2000-10-31 17:28:45 ShengHuo ZHU - - * gpg.el: New file. - * gpg-ring.el: New file. - -2000-10-31 11:44:29 ShengHuo ZHU - - * gnus-sum.el (gnus-summary-show-article): Fix the summary line. - -2000-10-31 Katsumi Yamaoka - - * gnus-sum.el (gnus-summary-insert-line): Work with quoted - double-quote characters. - (gnus-summary-prepare-threads): Ditto. - -2000-10-31 08:36:03 ShengHuo ZHU - - * gnus-art.el (gnus-mime-display-single): Forward line -1. - * mml.el (mml-read-tag): Don't skip the leading space. - * lpath.el (font-lock-set-defaults): Shut up. - -2000-10-31 00:04:35 ShengHuo ZHU - - * mml2015.el: Fix doc. Remove bogus mml2015-setup. - -2000-10-30 23:37:07 ShengHuo ZHU - - * qp.el (quoted-printable-encode-region): Replace leading - when - ultra safe. - * mml.el (mml-generate-mime-postprocess-function): Removed. - (mml-postprocess-alist): Removed. - (mml-generate-mime-1): Use ultra-safe when sign. - * mml2015.el (mml2015-fix-micalg): Uppercase. - (mml2015-verify): Insert LF. - (mml2015-mailcrypt-sign): Downcase; search backward. - -2000-10-16 11:36:52 Lars Magne Ingebrigtsen - - * nnultimate.el (nnultimate-forum-table-p): Be a bit more - restrictive. - (nnultimate-table-regexp): New variable. - (nnultimate-forum-table-p): Use it. - -2000-10-30 Ed L Cashin - Trivial patch. - - * gnus-sum.el (gnus-summary-expire-articles): Save point. - -2000-10-30 08:52:50 ShengHuo ZHU - - * mml-sec.el (mml-pgpmime-sign-buffer): Use mml2015-sign. - (mml-pgpmime-encrypt-buffer): Use mml2015-encrypt. - -2000-10-30 08:38:12 ShengHuo ZHU - - * mml2015.el: Shut up. - -2000-10-30 08:17:46 ShengHuo ZHU - - * gnus.el (gnus-server-browse-hashtb): Removed. - * gnus-group.el (gnus-group-prepare-flat-list-dead): Use gnus-active. - (gnus-group-insert-group-line-info): Use simplified method. - * gnus-srvr.el (gnus-browse-foreign-server): Use gnus-set-active. - -2000-10-30 01:52:40 ShengHuo ZHU - - * gnus-util.el (gnus-union): Renamed from gnus-agent-union, and - moved here. - * gnus-agent.el (gnus-agent-fetch-headers): Use it. - * gnus-group.el (gnus-group-prepare-flat): Use it. - * gnus-topic.el (gnus-group-prepare-topics): Use it. - -2000-10-30 01:23:49 ShengHuo ZHU - - * mml.el (mml-mode): Show menu in XEmacs. - -2000-10-30 00:49:33 ShengHuo ZHU - - * gnus-srvr.el (gnus-server-browse-in-group-buffer): New variable. - (gnus-server-read-server-in-server-buffer): New function. - (gnus-browse-foreign-server): Browse in group buffer. - * gnus-group.el (gnus-group-prepare-flat): List group not in list. - (gnus-group-prepare-flat-list-dead): Use gnus-group-insert-group-line. - * gnus-topic.el (gnus-group-prepare-topics): Ditto. - * gnus.el (gnus-server-browse-hashtb): New variable. - -2000-10-29 22:31:40 ShengHuo ZHU - - * nnfolder.el (nnfolder-open-nov): Use group. - -2000-10-29 17:23:15 ShengHuo ZHU - - * nnfolder.el: Add NOV. Set version to 2.0. - (nnfolder-nov-is-evil): If non-nil, nnfolder acts like 1.0. - -2000-10-29 10:35:08 ShengHuo ZHU - - * mml2015.el (mml2015-mailcrypt-sign): Use mc-sign-generic. - -2000-10-29 09:42:05 ShengHuo ZHU - - * gnus-srvr.el (gnus-browse-foreign-server): Show level mark. - (gnus-browse-unsubscribe-group): Unsubscribed is not killed. - -2000-10-29 08:28:58 ShengHuo ZHU - - * nnfolder.el (nnfolder-read-folder): Don't goto point-min. - -2000-10-28 19:11:01 ShengHuo ZHU - - * mm-decode.el (mm-verify-function-alist): New variable. - (mm-verify-option): New variable. - (mm-decrypt-function-alist): Ditto. - (mm-decrypt-option): Ditto. - (mm-find-raw-part-by-type): New function. - (mm-possibly-verify-or-decrypt): New function. - (mm-dissect-multipart): Use it. - * mml2015.el (mml2015-fix-micalg): New function. - (mml2015-decrypt): Use new interface. - (mml2015-verify): Use new interface. - (mml2015-setup): Make it bogus. - -2000-10-28 16:54:45 ShengHuo ZHU - - * mml.el (mml-generate-mime-postprocess-function): Set to - mml-postprocess. - (autoload): Autoload mml2015 and mml-smime. - (mml-postprocess-alist): Use mml2015-sign and mml2015-encrypt. - * mml2015.el (mml2015-encrypt): New function. - (mml2015-sign): New function. - (mml2015-encrypt-function): New variable. - (mml2015-sign-function): New variable. - (mml2015-mailcrypt-encrypt): Use message-recipients. - (mml2015-setup): Don't set mml-generate-mime-postprocess-function. - * mml-smime.el (mml-smime-setup): Ditto. - -2000-10-28 Simon Josefsson - - * imap.el (imap-parse-resp-text-code): Workaround bug in Stalker - Communigate Pro 3.3.1 server. - - * mml-sec.el (mml-smime-encrypt-buffer): Support certfiles stored - in buffers. - (mml-secure-dns-server): Removed. - (mml-secure-part-smime-encrypt-by-dns): Use DIG interface. Don't - write certificates to files. - - * smime.el (smime-dns-server): New variable. - (smime-mail-to-domain): - (smime-cert-by-dns): New functions. - - * dig.el: New file. - -2000-10-28 10:09:41 ShengHuo ZHU - - * message.el (message-options): New variable. - (message-options-set-recipient): New function. - (message-send): Use them. - * gnus-int.el (gnus-request-replace-article): Use them. - (gnus-request-accept-article): Ditto. - * mml.el (mml-preview): Use them. - * gnus-sum.el (gnus-summary-edit-article): Use them. - - * message.el (message-options-get): New function. - (message-options-get): New function. - * rfc2047.el (rfc2047-encode-message-header): Use them. - * mm-bodies.el (mm-encode-body): Use them. - -2000-10-28 Simon Josefsson - - * nnimap.el (nnimap-retrieve-which-headers): - (nnimap-request-article-part): Quote message-id. - - * smime.el (smime-CA-directory): Rename from `smime-CAs'. - (smime-CA-file): New variable. - (smime-call-openssl-region): Don't error. - (smime-sign-region): Return result value. - (smime-encrypt-region): Ditto. - (smime-verify-region): New function. - (smime-decrypt-region): Ditto. - (smime-verify-buffer): Ditto. - (smime-decrypt-buffer): Ditto. - - * mml.el: Require mml-sec. - (mml-generate-mime-1): Support "sign" and "encrypt" MML tags. - (mml-mode-map): Add "sign" and "encrypt" maps. - (mml-menu): Add security menu. - (mml-preview): Use generate-new-buffer. - - * mml-sec.el: New file. - -2000-10-28 03:43:03 ShengHuo ZHU - - * mm-decode.el (mm-find-part-by-type): Move it here. - * mml.el (mml-postprocess): Move it here. - (mml-postprocess-alist): Move it here. Merge them. - -2000-10-28 03:38:39 ShengHuo ZHU - - * rfc2047.el (rfc2047-encode-message-header): Make sure no - unencoded stuff in the header. - -2000-10-28 02:40:46 ShengHuo ZHU - - * gnus-group.el (gnus-group-listed-groups): New variable. - (gnus-group-list-option): New variable. - (gnus-group-list-limit-map): New keymap. - (gnus-group-list-flush-map): New keymap. - (gnus-group-list-plus-map): New keymap. - (gnus-group-prepare-logic): New function. - (gnus-group-prepare-flat): Merge with - gnus-group-prepare-flat-predicate. Use gnus-group-listed-groups. - (gnus-group-prepare-flat-list-dead): Ditto. - (gnus-group-list-matching): Use gnus-group-prepare-function. - (gnus-group-list-dormant): Ditto. - (gnus-group-list-cached): Ditto. - (gnus-group-listed-groups): New function. - (gnus-group-list-limit): New function. - (gnus-group-list-flush): New function. - (gnus-group-list-plus): New function. - * gnus-topic.el (gnus-group-prepare-topics): Accept predicate. - (gnus-topic-prepare-topic): Ditto. - -2000-10-27 Paul Jarc - - * message.el (message-insert-to, message-get-reply-headers): - (message-reply, message-followup): Mail-{Followup,Reply}-To. - -2000-10-27 19:45:58 ShengHuo ZHU - - * mml2015.el: New file. - * smime.el: New file. - * mml-smime.el: New file. - -2000-10-27 19:42:12 ShengHuo ZHU - - * ChangeLog: Moved to ChangeLog.1. - 2000-10-27 Jason Rumney * gnus-art.el (gnus-signature-face): Use italic on any frame that @@ -29042,3 +10102,5 @@ Sat Aug 29 19:32:06 1998 Lars Magne Ingebrigtsen ;; Local Variables: ;; coding: iso-2022-7bit ;; End: + +;;; arch-tag: bc9bf70e-b352-4a38-9dec-edce4b023b22 diff --git a/lisp/ChangeLog.2 b/lisp/ChangeLog.2 new file mode 100644 index 0000000..5d7a608 --- /dev/null +++ b/lisp/ChangeLog.2 @@ -0,0 +1,18930 @@ +2004-01-04 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.10.6 is released. + +2004-01-04 Kai Grossjohann + + * gnus-sum.el (gnus-summary-print-article): Doc fix. + +2004-01-04 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + +2004-01-04 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.10.5 is released. + +2004-01-03 Lars Magne Ingebrigtsen + + * gnus-fun.el (gnus-face-from-file): Message 9. + +2004-01-03 Romain FRANCOISE + + * gnus-fun.el (gnus-face-from-file): Use gnus-message. + +2004-01-03 Reiner Steib + + * gnus-art.el (gnus-button-mid-or-mail-heuristic): Treat Gmane + addresses specially. Fix returned value and messages. + + * mm-decode.el (mm-enable-external): New variable. + (mm-display-part): Use it. + (mm-display-external): Fix message in case of nil handle. + + * Update copyright for several files. + + * spam-report.el (spam-report-gmane): Adjust verbosity. + Delete trailing whitespace. Update copyright. + + * spam.el: Fix many (but not all) checkdoc complaints. + Delete trailing whitespace. + + * message.el (message-header-synonyms): Defcustom. + (message-get-reply-headers): Catch `Original-To'. + (message-carefully-insert-headers): Added comment. + + * gnus-sum.el (gnus-summary-make-menu-bar): Improved "Washing" menu. + +2004-01-03 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-select-newsgroup): Use cat. + + * gnus-agent.el (gnus-agent-cat-enable-undownloaded-faces): New + cat. + + * gnus.el (gnus-user-agent): Moved here. + + * gnus-msg.el (gnus-user-agent): Moved from here. + + * gnus.el (gnus-version-number): Bump. + +2004-01-03 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.10.4 is released. + +2004-01-02 Reiner Steib + + * gnus.el (gnus-mode-line-buffer-identification): Show version in + help-echo. + (gnus-read-group): Allow most group names. Changed warning. + +2004-01-02 Lars Magne Ingebrigtsen + + * gnus-dired.el (gnus-dired-mode-map): Change keymaps. + +2004-01-02 Arne J,Ax(Brgensen + + * smime.el (smime-crl-check): Doc fix. + +2004-01-02 Edwin Steiner + + * gnus-nocem.el (gnus-nocem-enter-article): Use the real group + hashtb (tiny patch). + +2004-01-02 Kai Grossjohann + + * nnml.el (nnml-save-mail): Grok compressed articles. From + Michael Albinus . + +2004-01-02 Teodor Zlatanov + + * spam.el (spam-ham-copy-or-move-routine): use spam-list-articles + (spam-list-articles): rewritten to only check a mark once per + invocation + +2004-01-01 Simon Josefsson + + * mml-sec.el (mml-default-encrypt-method) + (mml-default-sign-method): Defcustom. + +2003-12-31 Lars Magne Ingebrigtsen + + * mml.el (mml-generate-mime-1): Remove extra ). + + * gnus-group.el (gnus-group-set-current-level): Signal errors on + topic lines. + (gnus-group-set-current-level): Fix fix. + +2003-12-31 Jeremy Maitin-Shepard + + * mml.el (mml-generate-mime-1): Use mml-compute-boundary (tiny + change). + +2003-12-30 Reiner Steib + + * gnus-group.el: Removed `(when t ...)' around `gnus-define-keys'. + (gnus-group-group-map): Added `gnus-group-read-ephemeral-group' + (already in previous commit inadvertently). + (gnus-group-make-menu-bar): Added `gnus-group-read-ephemeral-group'. + (gnus-group-read-ephemeral-group): Made interactive. + + * gnus-score.el (gnus-score-find-trace): Added comment on sync + with `gnus-score-edit-file-at-point'. + + * gnus-logic.el (gnus-score-advanced): Ditto. + + * gnus-score.el (gnus-score-edit-file-at-point): Fix for + advanced scoring. + +2003-12-30 Simon Josefsson + + * gnus-score.el (gnus-score-edit-file-at-point): Use + gnus-point-at-*, for portability. + +2003-12-30 Reiner Steib + + * gnus-art.el (gnus-treat-body-boundary): Fix doc-string and + custom type. + (gnus-button-mid-or-mail-regexp): Don't be too restrictive. + Suggested by Felix Wiemann . + (gnus-button-alist): Added "M-x ... RET" and "mid:" buttons. + Added comments about relevant RFCs. + + * gnus-sum.el (gnus-summary-mode): Untabify doc-string. + (gnus-summary-goto-article): Allow `%40'. + (gnus-summary-refer-article): Convert `%40' to `@'. + +2003-12-30 Simon Josefsson + + * smime.el (smime-crl-check): New. + (smime-verify-region): Use it. From Arne J,Ax(Brgensen + in <87llpk9v5q.fsf@seamus.arnested.dk> (tiny + change). + +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-util.el (gnus-emacs-version): Added doc-string. + + * mml.el (mml-minibuffer-read-disposition): New function. + (mml-attach-file): Use it. + (mml-preview): Added MIME preview to gnus-buffers. + +2003-12-30 Jesper Harder + + * gnus-sum.el (gnus-summary-make-menu-bar): Add ellipses. + +2003-12-30 Lars Magne Ingebrigtsen + + * gnus-start.el (gnus-get-unread-articles): Inline gnus-server-get-method. + (gnus-get-unread-articles): Cache methods. + (gnus-get-unread-articles-in-group): Indent. + + * gnus.el (gnus-version-number): Bump. + (gnus-secondary-method-p): Extend servers to methods before comparing. + (gnus-secondary-method-p): Revert. + +2003-12-30 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.10.3 is released. + +2003-12-29 Simon Josefsson + + * gnus-agent.el (gnus-agentize): Improve auto-agentizing logic. + Suggested by Steinar Bang . + (gnus-agent-auto-agentize-methods): Customize. + +2003-12-29 Kevin Greiner + * gnus.el (gnus-server-to-method): Fixed bug in 2003-12-22 + check-in. + +2003-12-28 Adrian Lanz + + * mail-source.el (mail-source-fetch-imap): Prevent storing of + identical entries for imap mail sources, when retrieving mail + messages from an imap server within the same Gnus session several + times (tiny change). + +2003-12-28 Jesper Harder + + * mm-view.el (mm-text-html-washer-alist): Use + mm-inline-wash-with-stdin for w3m-standalone. + + * mm-decode.el (mm-text-html-renderer): Add w3m-standalone. + + * mml1991.el (mml1991-pgg-encrypt): Decode according to CTE before + encrypting. + +2003-12-28 Jesper Harder + + * mml1991.el (mml1991-pgg-sign): Use unibyte when re-encoding. + From Ivan Boldyrev (tiny change). + +2003-12-26 Katsumi Yamaoka + + * dgnushack.el: Add an advice to byte-optimize-form-code-walker to + avoid the warning ``...called for effect'' for the pop form when + running Emacs 21.3. + +2003-12-26 Jesper Harder + + * mm-bodies.el (mm-body-encoding): Don't use 7bit if the body + contains "^From " and mm-use-ultra-safe-encoding is true. + +2003-12-25 Jesper Harder + + * mml1991.el (mml1991-pgg-sign): Encode and decode according to + CTE header. Don't insert gpg output as unibyte. + +2003-12-25 Katsumi Yamaoka + + * lpath.el: Remove display-time-event-handler and open-ssl-stream; + add delete-extent for Emacs; rearrange bindings assuming w3 may + not be available and XEmacs without the file-coding feature may be + used. + +2003-12-24 Katsumi Yamaoka + + * dgnushack.el (dgnushack-compile): Increase the value for + max-specpdl-size when compiling Gnus with Emacs 20. + +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 + twice to open each server. + + * gnus-start.el (gnus-get-unread-articles-in-group): Autoload + gnus-agent-possibly-alter-active rather than inline to resolve + compiler warnings. + + * gnus.el (gnus-server-to-method): Added fallback of iterating + over gnus-newsrc-alist to resolve names of foreign servers. + Should fix recent agent bug. + +2003-12-22 Reiner Steib + + * gnus-score.el (gnus-summary-lower-score) + (gnus-summary-increase-score): Mention symbolic prefix in the + doc-string. Suggested by Karl Pfl,Ad(Bsterer . + +2003-12-21 Jesper Harder + + * gnus-agent.el (gnus-agent-read-agentview): Use + car-less-than-car. + +2003-12-20 Artem Chuprina (tiny change) + + * message.el (message-yank-buffer): Bind message-reply-buffer to + a buffer rather than a string. + +2003-12-19 Jesper Harder + + * gnus-msg.el (gnus-summary-followup): Correct documentation. + +2003-12-18 Jesper Harder + + * gnus-msg.el (gnus-inews-add-send-actions): `yanked' can be a + list of lists. Reported by Dmitri Paduchikh . + +2003-12-18 Reiner Steib + + * mm-url.el (mm-url-insert-file-contents-external) + (mm-url-insert-file-contents): Added doc-strings. Autoload. + +2003-12-18 Jesper Harder + + * gnus-cus.el (defvar): defvar + gnus-agent-cat-disable-undownloaded-faces. + +2003-12-17 Katsumi Yamaoka + + * message.el (message-forward-subject-name-subject): Use + gnus-extract-address-components instead of + mail-header-parse-address because it may be called with non-ascii + text. + +2003-12-16 Per Abrahamsen + + * nnmail.el (nnmail-split-fancy): The widget now supports + restrictions. + +2003-12-16 Katsumi Yamaoka + + * nnheader.el (nnheader-find-etc-directory): Find the newest one. + +2003-12-16 Simon Josefsson + + * sha1-el.el (autoload): Don't use ignore-errors. + (sha1-use-external): Use condition-case. Suggested by Katsumi + Yamaoka . + +2003-12-15 Katsumi Yamaoka + + * nnmail.el (nnmail-split-fancy): Make it customizable with Emacs + 20 as well. + +2003-12-15 Simon Josefsson + + * sha1-el.el (autoload): Ignore errors for + executable-find. (XEmacs ecrypto does not require sh-script where + executable.el is located.) + (sha1-use-external): Likewise. + + * sha1-el.el (sha1): Add defgroup. + (sha1-maximum-internal-length, sha1-program, sha1-use-external) + (sha1-program): Use 'sha1sum' from GNU CoreUtils instead of OpenSSL. + (sha1): Autoload. + + * nndraft.el (nndraft-request-move-article): Copy definition of + nnmh-request-move-article instead of calling it, because the nnmh + version uses nnmh-request-article which isn't the same as the + nndraft version. + +2003-12-13 Teodor Zlatanov + + * spam.el: added some gnus-registry autoloads + (spam-split-symbolic-return): makes spam-split return 'spam + instead of the value of spam-split-group when spam is detected + (spam-split-symbolic-return-positive): makes spam-split return + 'ham instead of nil when ham is detected + (spam-autodetect-recheck-messages): tells spam.el whether it + should recheck all messages in a group, or only the unseen ones + (spam-split-last-successful-check): spam-split will set this to + the last successful check; this was seen as a cleaner approach + than returning a cell like '(spam spam-use-bogofilter) + (spam-list-of-checks): documentation appended + (spam-split): accomodate the spam-split-symbolic-return and + spam-split-symbolic-return-positive variables + (spam-find-spam): new function called when the summary is built + (spam-log-registered-p): checks if a ham or spam registration has + already been done for an article + (spam-check-regex-headers, spam-check-blackholes, spam-check-BBDB) + (spam-check-ifile, spam-check-stat, spam-check-whitelist) + (spam-check-blacklist, spam-check-bogofilter-headers) + (spam-check-spamoracle): respect the spam-split-symbolic-return + and spam-split-symbolic-return-positive variables + (spam-initialize): add spam-find-spam to gnus-summary-prepare-hook + (spam-unload-hook): remove spam-find-spam from + gnus-summary-prepare-hook + + * gnus.el (spam-autodetect, spam-autodetect-methods): new + configuration items for spam autodetection + +2003-12-12 Reiner Steib + + * gnus-draft.el (gnus-draft-mode-map): Bind `e' to + `gnus-draft-edit-message'. We still have `B w' for + `gnus-summary-edit-article'. + +2003-12-12 Katsumi Yamaoka + + * nnheaderxm.el (nnheader-xmas-run-at-time): Use a simple function + definition if there is not a bug in start-itimer. + + * pgg.el (pgg-run-at-time): Ditto. + +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 + active range to include articles newly recognized as being + downloaded. + (gnus-agent-regenerate): Removed code that updated the agent's + active file as the new gnus-agent-possibly-alter-active function + obsolesced it. + + * gnus-cus.el (gnus-agent-customize-category): Added missing + agent-disable-undownloaded-faces parameter. + + * gnus-start.el (gnus-activate-group): Backed out my 2003-11-29 + patch as it was too late at adjusting the active range. + (gnus-get-unread-articles-in-group): Added call to new + gnus-agent-possibly-alter-active to adjust the active range. + +2003-12-10 Jesper Harder + + * message.el (message-get-reply-headers): Narrow to headers. + +2003-12-10 Teodor Zlatanov + + * 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) + +2003-12-10 Katsumi Yamaoka + + * nnheaderxm.el (nnheader-xmas-run-at-time): Make it work + correctly for the first argument. + + * pgg.el (pgg-run-at-time): New function. + (pgg-add-passphrase-cache): Use it. + +2003-12-10 Simon Josefsson + + * pgg-parse.el (pgg-decode-packets): Rewrite to handle corrupt + input. + (pgg-decode-armor-region): Don't parse packet if decoding fail. + +2003-12-09 Teodor Zlatanov + + * 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 Per Abrahamsen + + * nnmail.el (nnmail-lazy, nnmail-split-fancy): New widgets. + (nnmail-split-fancy): Use it. + +2003-12-08 Joel Ray Holveck (tiny change) + + * gnus-sum.el (gnus-summary-save-parts-1): Consider the "name" + parameter of Content-Type. + +2003-12-08 Katsumi Yamaoka + + * gnus-util.el: Revert 2003-12-03 change, instead, provide the + compiler macro for rmail-select-summary if rmail is not available, + and bind rmail-summary-displayed and rmail-maybe-display-summary + in order to silence the compiler even if tm is not available. + +2003-12-08 Simon Josefsson + + * flow-fill.el (fill-flowed-encode-tests, fill-flowed-test): Add. + +2003-12-08 Jesper Harder + + * gnus-msg.el (gnus-extended-version): Bind float-output-format to + nil. + +2003-12-08 Simon Josefsson + + * mml-smime.el (mml-smime-sign): Replace CRLF with LF in OpenSSL + output. Reported by Arne J,Ax(Brgensen . + +2003-12-07 Simon Josefsson + + * 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): Update. + +2003-12-07 Jesper Harder + + * spam.el (spam-check-spamoracle, spam-spamoracle-learn): Don't + use = or zerop to test the return value of call-process, because + it can be a string. + + * mail-source.el (mail-source-fetch-with-program): do. + + * mailcap.el (mailcap-viewer-passes-test): do. + + * gnus-uu.el (gnus-uu-treat-archive, gnus-uu-post-encode-mime) + (gnus-uu-post-encode-file): do. + + * gnus-soup.el (gnus-soup-pack, gnus-soup-unpack-packet): do. + + * message.el (message-fix-before-sending): Fix detection of + non-printables. Don't replace unencodable utf-8. + +2003-12-05 Jesper Harder + + * mm-url.el (mm-url-predefined-programs): Add user-agent for wget. + (mm-url-insert-file-contents-external): Signal an error if program + fails. + +2003-12-04 Teodor Zlatanov + + * spam-report.el (spam-report-gmane): iterate over articles + instead of a single one; remove interactive usage + +2003-12-03 Katsumi Yamaoka + + * dns.el: Fix misplaced eval-when-compile. + + * gnus-util.el: Require alist and provide tm-view when compiling + with XEmacs. + +2003-12-03 Steve Youngs + + * 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 + * 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 + + * 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 + +2003-12-01 Simon Josefsson + + * gnus-agent.el (gnus-agent-expire-days): Doc fix. + +2003-11-30 Simon Josefsson + + * gnus-agent.el (gnus-agent-expire-group-1): Bind message-log-max + when messaging "X % completed" to inhibit logging them to the + message buffer. + (gnus-agent-expire-group-1): Mention group name in messages. + (gnus-agent-expire-group-1): Only print a message for an article + when there actually was something done to it. + + * 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. + +2003-11-30 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-covered-methods): Remove nil methods. + +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) + + * nnrss.el (nnrss-check-group): Set xml when nnrss-use-local is t. + +2003-11-29 Jesper Harder + + * gnus-group.el (gnus-group-make-menu-bar): Add + gnus-group-make-rss-group. + +2003-11-28 Reiner Steib + + * message.el: Added custom-manual links to all variables that have + an index entry in the message manual. + (message-generate-headers-first): Fixed doc-string. + +2003-11-27 Katsumi Yamaoka + + * gnus-msg.el (gnus-summary-yank-message): Don't bind + gnus-display-mime-function to nil so that non-ascii text is + decoded and attachments are not shown. + + * message.el (message-cite-original-without-signature): Replace + the value of message-reply-headers with the yanked article since + it may be a different article from the original. + (message-cite-original): Ditto. + +2003-11-25 Teodor Zlatanov + + * spam.el (spam-blacklist-ignored-regexes): new variable, so + blacklisting can ignore certain regular expressions (e.g. the + user's e-mail address) + (spam-bogofilter-spam-strong-switch, + spam-bogofilter-ham-strong-switch): options used when articles are + already registered as the opposite classification + (spam-old-ham-articles, spam-old-spam-articles): lists of ham and + spam articles, generated when a summary buffer is entered, and + consulted when it's exited so we know what articles are changing + state from spam to ham or vice-versa + (spam-xor): everyone needs a little convenience + (spam-list-of-processors): lookup table for old-style spam/ham + exits processors + (spam-group-processor-p): support old-style and new-style spam/ham + exit processors + (spam-group-processor-multiple-p): handle new-style spam/ham exit + processors + (spam-summary-prepare): use spam-old-{ham,spam}-articles; change + logic to iterate over list of processors instead of manual + individual lookup, unregister any articles that change from ham to + spam or vice-versa in the course of the summary buffer usage; use + the new spam-register-routine + (spam-ham-copy-routine, spam-ham-move-routine, + spam-mark-spam-as-expired-and-move-routine): check that the list + of groups is not nil, because apply doesn't like to apply a + function across nil + (spam-registration-functions): variable for looking up spam/ham + registration/unregistration functions based on a spam-use-* symbol + (spam-classification-valid-p, spam-process-type-valid-p) + (spam-registration-check-valid-p) + (spam-unregistration-check-valid-p): convenience functions + (spam-registration-function, spam-unregistration-function): look + up the registration/unregistration function based on a + classification and the check (spam-use-* symbol) + (spam-list-articles): generate list of spam/ham articles from a + given list of articles + (spam-register-routine): do the heavy work of registering and + unregistering articles, using all the articles in the group or + specific ones as needed + (spam-generic-register-routine): removed, no longer used + (spam-log-unregistration-needed-p, spam-log-undo-registration): + handle article registration/unregistration with a given spam/ham + processor and group + (BBDB, ifile, spam-stat, blacklists, whitelists, spam-report, + bogofilter, spamoracle): rewrite registration/unregistration + functions to take a list of articles and the unregister option. + Much hilarity ensues. + (spam-initialize): spam-stat-maybe-{save,load} already respect spam-use-stat + (spam-stat-register-ham-routine, spam-stat-register-spam-routine): + don't load and save unnecessarily + + * spam-stat.el (spam-stat-dirty): new variable, set when the stats + database is modified + (spam-stat-buffer-is-spam, spam-stat-buffer-is-non-spam) + (spam-stat-buffer-change-to-spam, spam-stat-to-hash-table) + (spam-stat-buffer-change-to-non-spam): set spam-stat-dirty when + needed + (spam-stat-save): respect spam-stat-dirty, unless the force + parameter is specified + (spam-stat-load): clear spam-stat-dirty + + * gnus.el (gnus-install-group-spam-parameters): marked the + old-style exit processors as obsolete in the docs, added the + new-style exit processors while the old ones are still allowed + + +2003-11-25 Jesper Harder + + * gnus-art.el (article-hide-boring-headers): Don't hide Reply-To + unless its list of addresses is identical to From. + +2003-11-25 Katsumi Yamaoka + + * dgnushack.el (mapc): Add the compiler macro for Emacs 20. + +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. + Compensating by adding a second text property storing the name + expected by gnus-agent. + (gnus-server-named-server): New function. + * gnus-agent.el (gnus-agent-remove-server, gnus-agent-add-server): + No longer expect an argument as it was ignored anyway. Uses the + new gnus-server-named-server function to get gnus-agent compatible + names from the server buffer. + +2003-11-20 Kevin Greiner + + * gnus.el (gnus-agent-covered-methods): Documented use of + named servers, not methods, to identity agentized groups. + Users may now change their server configurations without having + the server become "unagentized". + (gnus-agent-covered-methods): Removed from gnus-variable-list to + avoid storing two copies of gnus-agent-covered-methods, one in + .newsrc.eld and the other in agent/lib/servers. + (gnus-server-to-method): Do not cache server for the nil method. + (gnus-method-to-server): New function. Associate named server + with all, even foreign, methods. + (gnus-agent-method-p, gnus-agent-method-p-cache): Incorporated + simple last-response cache to offset performance lose of having to + always convert methods to named servers. + * gnus-agent.el (gnus-agent-expire-days): Removed obsolete + documentation. + (gnus-agentize, gnus-agent-add-server, gnus-agent-remove-server): + Modified to support new definition of gnus-agent-covered-method. + (gnus-agent-read-servers): Rewritten to convert old method data + into server names. + (gnus-agent-read-servers-validate) + (gnus-agent-read-servers-validate-native): New functions. + (gnus-agent-write-servers): No longer use gnus-method-simplify as + it failed to simplify foreign methods. + (gnus-agent-close-connections, gnus-agent-synchronize-flags) + (gnus-agent-possibly-synchronize-flags, gnus-agent-fetch-session) + (gnus-agent-regenerate): Uses new gnus-agent-covered-methods + function as gnus-agent-covered-methods variable no longer provides + methods. + (gnus-agent-covered-methods): New function + (gnus-agent-expire-group, gnus-agent-expire): Final message will, + if gnus-verbose is greater than 4, report statistics of NOV + entries and files deleted as well as total bytes recovered. + (gnus-agent-expire-done-message): New function + (gnus-agent-unread-articles): Bug fix. No longer drops last + unread article onto read list. + (gnus-agent-regenerate-group): Changed prompt to use typical + style. + (gnus-agent-group-covered-p): Rewrote to internally use + gnus-agent-method-p. + * gnus-int.el (gnus-start-news-server): Partially convert old + gnus-agent-covered-methods to new format so that gnus-open-server + functions correctly. + * gnus-srvr.el (gnus-server-insert-server-line): Replaced + gnus-agent-covered-methods with gnus-agent-method-p. + * gnus-start.el (gnus-clear-system): Added + gnus-agent-covered-methods to compensate for removing it from + gnus-variable-list. + (gnus-setup-news): Complete conversion of old + gnus-agent-covered-methods to new format so that secondary and + foreign servers can be correctly opened. + +2003-11-20 Teodor Zlatanov + + * spam.el (spam-ham-copy-or-move-routine): add respooling + support, not working well yet + + * gnus.el (ham-process-destination): make 'respool option the + only one, so it can't be chosen together with other groups + +2003-11-19 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-track-extra): make it a set of + choices instead of a boolean + (gnus-registry-track-subject-p, gnus-registry-track-sender-p): + new convenience functions + (gnus-registry-split-fancy-with-parent): use convenience + functions, also don't return extra tracking info if sender or + subject is found in more than one groups + (gnus-registry-add-group): use new convenience functions to + decide if sender and subject should be tracked + + * gnus.el (ham-process-destination): add 'respool option, + unused by spam.el yet + +2003-11-19 Katsumi Yamaoka + + * gnus-score.el (gnus-decay-score): Return a surely smaller value + than the argument in XEmacs. + +2003-11-18 Reiner Steib + + * 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 . + +2003-11-17 Lars Magne Ingebrigtsen + + * html2text.el (html2text-remove-tags): Remove the tag in a + simpler way to avoid inflooping. + +2003-11-17 Simon Josefsson + + * imap.el (imap-gssapi-auth-p): Don't check capability (some + servers remove AUTH=GSSAPI from capability response returned after + successful authentication). + +2003-11-16 Jesper Harder + + * gnus.el (gnus-getenv-nntpserver): Fix regexp and simplify. + Reported by Artem Chuprina . + +2003-11-14 Simon Josefsson + + * mm-util.el (mm-charset-synonym-alist): Map BIG5-HKSCS to BIG5 + when it isn't available. + +2003-11-13 Alex Schroeder + + * nnrss.el (nnrss-check-group): Use dc:contributor if neither + rss:author nor dc:creator is provided. + +2003-11-13 Katsumi Yamaoka + + * mm-decode.el (mm-dissect-buffer): Save start="" value + contained in Content-Type header of multipart/related messages. + + * mm-view.el (mm-w3m-cid-retrieve-1): New function. + (mm-w3m-cid-retrieve): Use it. + + * mml.el (mml-generate-mime-1): Add start="" to Content-Type. + (mml-insert-mime-headers): Insert Content-ID header. + (mml-insert-mml-markup): Insert start="" value. + +2003-11-12 Teodor Zlatanov + + * nnml.el (nnml-request-accept-article): pass sender to + nnmail-cache-insert + + * nnmh.el (nnmh-request-accept-article): pass sender to + nnmail-cache-insert + + * nnmbox.el (nnmbox-request-accept-article): pass sender to + nnmail-cache-insert + + * nnfolder.el (nnfolder-request-accept-article): pass sender to + nnmail-cache-insert + + * nnbabyl.el (nnbabyl-request-accept-article): pass sender to + nnmail-cache-insert + + * nnmail.el (nnmail-cache-insert): accept sender parameter and + pass it to the nnmail-spool-hook + + * gnus-registry.el (gnus-registry-track-extra): clarify doc + (gnus-registry-action): add sender lexical var and pass it to + gnus-registry-add-group + (gnus-registry-spool-action): take a sender parameter, pass to + gnus-registry-add-group + (gnus-registry-split-fancy-with-parent): trace by sender in + addition to subject + (gnus-registry-fetch-sender-fast): new function + (gnus-registry-add-group): accept sender parameter + +2003-11-11 Teodor Zlatanov + + * spam.el (spam-ham-copy-routine, spam-ham-move-routine) + (spam-mark-spam-as-expired-and-move-routine): allow for the + groups to be a list of a single item + + * gnus.el (gnus-install-group-spam-parameters): + ham-process-destination and spam-process-destination allow lists now + +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-insert-wide-reply'. + (message-change-subject): Fixed comment. + +2003-11-10 Simon Josefsson + + * pgg-def.el (pgg-encrypt-for-me): Change default from nil to t. + +2003-11-09 Simon Josefsson + + * pgg-gpg.el (pgg-gpg-encrypt-region): Cache passphrase under hex + key id too (for decryption). + (pgg-gpg-sign-region): Likewise. + +2003-11-09 Simon Josefsson + + * 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 + . + +2003-11-07 Teodor Zlatanov + + * nnmail.el (nnmail-cache-insert): make sure that the + nnmail-spool-hook is called with a valid newsgroup name (though + it may be wrong) + + * gnus.el (gnus-group-real-prefix): return nil if group is not a + string, instead of triggering an error + +2003-11-06 Teodor Zlatanov + + * gnus.el (gnus-group-guess-full-name-from-command-method): new function + + * gnus-registry.el (gnus-registry-fetch-group): use long names if + requested + (gnus-registry-split-fancy-with-parent): when long names are in + use, strip the name if we're in the native server, or else return nothing + (gnus-registry-spool-action, gnus-registry-action): use + gnus-group-guess-full-name-from-command-method instead of + gnus-group-guess-full-name + + * spam.el (spam-mark-spam-as-expired-and-move-routine) + (spam-ham-copy-or-move-routine): prevent article deletions or + moves unless the backend allows it + + * gnus.el (gnus-install-group-spam-parameters): fixed parameters + to list spamoracle as well, suggested by Jean-Marc Lasgouttes + + + * spam.el (spam-spamoracle): doc change, suggested by Jean-Marc + Lasgouttes + +2003-11-04 Katsumi Yamaoka + + * gnus-score.el (gnus-decay-score): Protect against arithmetic + errors. Tiny patch from Norbert Koch . + +2003-10-31 Teodor Zlatanov + + * spam.el + (spam-log-processing-to-registry): improved message and comments + (spam-log-unregistration-needed-p): new function + (spam-ifile-register-spam-routine) + (spam-ifile-register-ham-routine, spam-stat-register-spam-routine) + (spam-stat-register-ham-routine) + (spam-blacklist-register-routine) + (spam-whitelist-register-routine) + (spam-bogofilter-register-spam-routine) + (spam-bogofilter-register-ham-routine) + (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): change + spam-log-processing-to-registry invocations appropriately + +2003-10-31 Simon Josefsson + + * 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 Teodor Zlatanov + + * spam.el (autoload): autoload the gnus-registry functions we'll + need + (spam-log-to-registry): new variable for interfacing with the + gnus-registry + (spam-install-hooks): variable had the wrong customization group + (spam-fetch-field-message-id-fast): convenience function for fetch + a message ID quickly + (spam-log-processing-to-registry): new function + (spam-ifile-register-spam-routine) + (spam-ifile-register-ham-routine, spam-stat-register-spam-routine) + (spam-stat-register-ham-routine) + (spam-blacklist-register-routine) + (spam-whitelist-register-routine) + (spam-bogofilter-register-spam-routine) + (spam-bogofilter-register-ham-routine) + (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): add + spam-log-processing-to-registry invocations + + * gnus-registry.el: fixed docs in the preface to mention + gnus-registry-initialize + (gnus-registry-store-extra): remove cached extra entry + information when new extra entry is stored + +2003-10-29 Simon Josefsson + + * message.el (message-forward-make-body-plain): Fix ARG=1 mode + after separating m-f-m-b. + +2003-10-29 Simon Josefsson + + * message.el (message-forward-make-body-plain): Remove ignored + headers. Tiny patch from Andre Srinivasan . + (message-forward-make-body-plain): Fix ARG=1. + +2003-10-28 Jesper Harder + + * message.el (message-forward-subject-name-subject) + (message-forward-subject-author-subject): Decode non-ASCII + newsgroup names. + (autoload): Autoload gnus-group-decoded-name. + +2003-10-27 Simon Josefsson + + * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): New optional + parameter key, overrides the key id used to store passphrase + under (uses true key id from gpg output if nil). + (pgg-gpg-encrypt-region): Search for passphrase using user suplied + string STR, instead of (pgg-lookup-key STR t). + (pgg-gpg-encrypt-region): Store passphrase under user suplied + string, instead of real key id taken from gpg output. + (pgg-gpg-decrypt-region): Likewise. + (pgg-gpg-sign-region): Likewise. + * pgg.el (pgg-decrypt-region): Don't set pgg-default-user-id. + +2003-10-27 Romain FRANCOISE + + * gnus-art.el (gnus-article-goto-prev-page): Doc fix. + +2003-10-27 Simon Josefsson + + * mm-bodies.el (mm-body-encoding): Don't use QP when message body + only consists of short lines and ASCII, when + mm-use-ultra-safe-encoding. Refer to 'About foo' thread in + gnus-bug, e.g. , for more discussion. + This make it possible to pipe the raw RFC 822 message into 'gpg' + and have the signature work. Potential problem: what if message + contain data that would be dash-escaped by OpenPGP + implementations? Then PGP 2.x might not be able to parse the raw + RFC 822 message correctly. If that problem is worth fixing, it + should be fixed by detecting the situation, instead of applying QP + to everything. Based on discussion with "John A. Martin" + . + +2003-10-27 Teodor Zlatanov + + * spam.el (spam-mark-spam-as-expired-and-move-routine) + (spam-ham-copy-or-move-routine): don't ask when deleting copied + articles, and use move instead of copy when possible + (spam-split): added the option of specifying a string as a + spam-split parameter; such a string will override + spam-split-group temporarily. + + * nnmail.el (nnmail-cache-insert): protect from nil message IDs, + but should we do something else? + + * gnus-registry.el (gnus-registry-spool-action): protect from nil + message IDs + +2003-10-26 Simon Josefsson + + * gnus-art.el (gnus-button-alist): Allow & in mailto URLs. + (gnus-header-button-alist): Likewise. + (gnus-url-mailto): Handle ?to parameters. Replace \r\n with \n. + Reverse parameter list to use same order as in the URL. Reported + by f95-msv@f.kth.se (M,Ae(Brten Svantesson). + +2003-10-25 Teodor Zlatanov + + * spam.el (spam-move-spam-nonspam-groups-only): documentation fix + for the variable + +2003-10-25 Steve Youngs + + * Makefile.in (clean-some): Remove auto-autoloads.* and + custom-load.* as well. + (distclean): Ditto. + + * dgnushack.el (dgnushack-make-load): Add a local vars section to + the dummy gnus-load.el. + +2003-10-24 Teodor Zlatanov + + * spam.el (spam-ham-copy-or-move-routine): do not delete if copy + is t, also don't intepret the list of groups as a list of lists + (spam-mark-spam-as-expired-and-move-routine) + (spam-ham-copy-or-move-routine): delete articles only if 1 or + more groups were specified (and "copy" was not specified for + spam-ham-copy-or-move-routine) (fixed twice) + +2003-10-24 Katsumi Yamaoka + + * nndoc.el (nndoc-guess-type): Reverse the sort order. Suggested + by ARISAWA Akihiro . + (nndoc-dissect-buffer): Don't miss even-numbered articles. + +2003-10-24 Steve Youngs + + * dgnushack.el (dgnushack-gnus-load-file): Set to + "auto-autoloads.el" if building with XEmacs. + (dgnushack-cus-load-file): Set to "custom-load.el" if building + with XEmacs. + (dgnushack-make-cus-load): We don't delete the resulting file if + building with XEmacs so byte-compile it. + (dgnushack-make-load): When building with XEmacs do nothing except + byte-compile the autoload file and create a dummy gnus-load.el + file. + +2003-10-23 Katsumi Yamaoka + + * message.el (message-make-fqdn): Bind case-fold-search. + Suggested by Christopher Richards . + +2003-10-23 Teodor Zlatanov + + * gnus.el (spam-process-destination, ham-process-destination): + allow multiple groups as a choice + + * spam.el (spam-check-blackholes): remove "[IP address]" + requirement, now just "IP address" is enough for detection for + blackhole checking + (spam-check-blackholes): oops, the dots were not escaped + (spam-mark-spam-as-expired-and-move-routine): added multiple group + support (multiple copies, then delete) + (spam-ham-copy-routine): new function + (spam-ham-move-routine): new function + (spam-ham-copy-or-move-routine): new function (used to be + spam-ham-move-routine), handle multiple groups + (spam-summary-prepare-exit): call the new functions + +2003-10-23 Simon Josefsson + + * flow-fill.el (fill-flowed-encode, fill-flowed): Autoload. + +2003-10-22 Katsumi Yamaoka + + * gnus-art.el (gnus-emphasis-strikethru): Use the :strike-through + attribute in Emacs. + +2003-10-21 Katsumi Yamaoka + + * message.el (message-bounce): Don't erase except bounced header. + +2003-10-21 Teodor Zlatanov + + * spam.el (spam-reverse-ip-string): new function to reverse an IP + address in a string + (spam-check-blackholes): use spam-reverse-ip-string + +2003-10-21 Katsumi Yamaoka + + * gnus-art.el (gnus-narrow-to-page): Clear as well as set the + value for gnus-page-broken. + + * gnus-sum.el (gnus-summary-beginning-of-article): Use + gnus-break-pages instead of gnus-page-broken. + (gnus-summary-end-of-article): Use gnus-break-pages instead of + gnus-page-broken; narrow to the end of a page beforehand. + (gnus-summary-toggle-header): Use gnus-break-pages instead of + gnus-page-broken; remove delimiter buttons unless gnus-break-pages + is non-nil. + +2003-10-21 Lars Magne Ingebrigtsen + + * gnus-picon.el (gnus-picon-transform-address): Protect against + errors. + +2003-10-20 Katsumi Yamaoka + + * gnus-msg.el (nnspool-rejected-article-hook): Remove defvar. + (xemacs-codename): Move defvar to gnus-util.el. + + * gnus-util.el (xemacs-codename): Defvar when compiling. + +2003-10-20 Lars Magne Ingebrigtsen + + * spam-report.el (spam-report-url-ping-plain): Include a + User-Agent. + + * gnus-msg.el (gnus-extended-version): Use it. + + * gnus-util.el (gnus-emacs-version): Separated out into own + function. + +2003-10-19 Reiner Steib + + * message.el (message-mode-field-menu): Added + message-generate-unsubscribed-mail-followup-to. + (message-forward-subject-fwd): Avoid double "Fwd: " + (message-change-subject): Added comment. + +2003-10-19 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-nov-parse-line): Remove condition-cases. + + * mml.el (mml-insert-mime): Quote mml. + +2003-10-19 Katsumi Yamaoka + + * gnus-sum.el (gnus-remove-odd-characters): Use + mm-subst-char-in-string instead of subst-char-in-string. + (gnus-summary-refer-article): Use gnus-replace-in-string instead + of replace-regexp-in-string. + +2003-10-19 Jesper Harder + + * gnus-uu.el (gnus-uu-uustrip-article): Really strip directory + from file name. + +2003-10-18 Jesper Harder + + * gnus-sum.el (gnus-summary-save-parts-last-directory): Default + to mm-default-directory. + (gnus-summary-save-parts-1): Use mm-file-name-rewrite-functions. + +2003-10-18 Lars Magne Ingebrigtsen + + * pop3.el (pop3-read-response): Check whether the process is + alive. + + * gnus-sum.el (gnus-summary-refer-article): Strip spaces. + + * rfc2047.el (rfc2047-encode-region): Do error out on invalid + strings. + + * nntp.el (nntp-retrieve-headers-with-xover): Get error messages + right. + + * gnus-agent.el (gnus-agent-read-servers): Remove sit-for. + + * gnus-art.el (article-treat-dumbquotes): Doc fix. + + * message.el (message-field-value): New function. + (message-insert-disposition-notification-to): Use Reply-To, too. + + * imap.el (imap-mailbox-status): Upcase STATUS commands. + + * gnus-sum.el (gnus-remove-odd-characters): New function. + (gnus-nov-parse-line): Use it. + +2003-10-18 Matt Swift + + * mm-decode.el (mm-inline-media-tests): Recognize pjpeg as jpeg. + +2003-10-18 Romain FRANCOISE + + * message.el (message-forward-make-body): does both + m-f-make-body-mml and m-f-make-body-plain, resulting in a strange + message buffer. + +2003-10-18 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-narrow-to-page): Only break page if it's + broken. + + * nnrss.el (nnrss-find-rss-via-syndic8): Return nil if xml-rpc + isn't available. + + * message.el (message-hidden-headers): Doc fix. + +2003-10-18 Jesper Harder + + * gnus-msg.el (gnus-summary-resend-message-edit): Avoid error when + fields aren't found. + +2003-10-18 Simon Josefsson + + * message.el (message-forward-make-body-plain) + (message-forward-make-body-mime, message-forward-make-body-mml) + (message-forward-make-body-digest-plain) + (message-forward-make-body-digest-mime) + (message-forward-make-body-digest): New, derived from + message-forward-make-body. + (message-forward-make-body): Use them. + (message-forward-show-mml): New default 'best. + (message-forward-make-body): Support it. + +2003-10-18 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-mode): Set gnus-page-broken to nil. + (gnus-article-prepare): Don't set to t. + (gnus-narrow-to-page): Set to t if we break. + +2003-06-11 Daniel N,Ai(Bri + + * message.el (message-resend): Generate Resent-Message-ID header. + +2003-10-18 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-next-page): Don't go to the next line + before checking end-of-buffer. + (gnus-mime-delete-part): Don't insert parts twice. + +2003-10-17 Lars Magne Ingebrigtsen + + * gnus-art.el (article-update-date-lapsed): Make sure point + doesn't move around (much). + +2003-07-28 Vasily Korytov + + * mail-source.el (mail-source-keyword-map): List "cur" before + "new" for maildirs. + +2003-10-17 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-enter-digest-group): ogroup, nor + group. + + * gnus-msg.el (gnus-inews-insert-archive-gcc): Use the parent + name for gcc-self. + (gnus-inews-insert-archive-gcc): Paren mistake. + + * gnus-sum.el (gnus-summary-enter-digest-group): Add + parent-group. + + * gnus-art.el (gnus-ignored-headers): Add more headers. + + * rfc2047.el (rfc2047-encode): See which encoding is shorter -- + base64 or QP. + + * nnmail.el (nnmail-article-group): Default to "bogus". + + * mail-source.el (mail-source-delete-incoming): Change to nil. + +2003-10-16 Katsumi Yamaoka + + * mail-source.el (mail-source-fetch-imap): Fix mismatched parens. + +2003-10-16 Lars Magne Ingebrigtsen + + * mail-source.el (defvar): Add post/pre/scripts. + (mail-source-fetch-imap): Use them. + + * nndraft.el (nndraft-request-move-article): Fix infinite + recursion. + + * gnus-group.el (gnus-group-mark-regexp): Jump to groups. + +2003-10-16 Ed L. Cashin + + * imap.el (imap-interactive-login): Set imap-password to nil if + login fails. + +2003-10-16 Lars Magne Ingebrigtsen + + * message.el (message-inserted-headers): New variable. + (message-mode): Make local. + (message-mode): Set all the local action variables to nil. + +2003-10-16 Katsumi Yamaoka + + * mm-decode.el (mm-inline-text-html-with-images): Doc fix. + (mm-w3m-safe-url-regexp): Doc fix. + +2003-10-12 Jesper Harder + + * gnus-sum.el (gnus-summary-respool-query): Don't narrow to head, + it's done by nnmail-article-group. + + * gnus-uu.el (gnus-uu-grab-articles): Fix misplaced parens. + From Mark Hood (tiny change) + +2003-10-10 Jesper Harder + + * mm-decode.el (mm-file-name-delete-gotchas): Avoid infloop in + XEmacs. + +2003-10-10 Teodor Zlatanov + + * spam.el (spam-initialize): new function, does the spam-face + update and all the hooks, replaces spam-install-hooks-function + + * gnus-registry.el (gnus-registry-initialize): new autoloaded + function to explicitly initialize the registry + +2003-10-10 Katsumi Yamaoka + + * mm-decode.el (mm-w3m-safe-url-regexp): Doc fix. + + * mm-view.el (mm-w3m-mode-map): Doc fix. + (mm-inline-text-html-render-with-w3m): Add a comment. + +2003-10-10 Lars Magne Ingebrigtsen + + * gnus-group.el: Remove superfluous eval-when-compiles. + +2003-10-10 Jesper Harder + + * gnus-group.el (gnus-group-suspend): Reset gnus-backlog-articles. + +2003-10-08 Lars Magne Ingebrigtsen + + * dns.el (query-dns): Don't error out on malformed resolv files. + +2003-10-06 Jesper Harder + + * gnus.el (gnus-group-faq-directory): Update .tw entry. From + Albert Chun-Chieh Huang + +2003-10-03 Teodor Zlatanov + + * spam.el (spam-check-blackholes): exit the loop if matches are + found (idea from Adrian Lanz ) + (spam-check-bogofilter-headers, spam-check-blackholes, spam-check-BBDB) + (spam-from-listed-p): use nnmail-fetch-field instead of message-fetch-field + + +2003-10-03 Katsumi Yamaoka + + * mm-decode.el (mm-attachment-file-modes): Change the default + value into 384 from ?\600 which doesn't mean an integer in XEmacs. + +2003-10-03 Jesper Harder + + * mm-decode.el (mm-file-name-delete-control) + (mm-file-name-delete-gotchas): New functions. + (mm-file-name-rewrite-functions): Use them. + (mm-attachment-file-modes): New option. + (mm-save-part-to-file): Use it. + +2003-10-02 Reiner Steib + + * spam.el (spam-install-hooks-function): Added Autoload cookie. + +2003-10-02 Jesper Harder + + * pgg-def.el (pgg-default-keyserver-address): Change to + subkeys.pgp.net. From Michael Shields + +2003-10-01 Simon Josefsson + + * message.el (message-idna-to-ascii-rhs-1): RHS can be terminated + by ',', as in 'foo@example.org, bar@example.org'. + +2003-10-01 Jesper Harder + + * message.el (message-send): Fix reversed logic of supersedes + check. + +2003-09-30 Reiner Steib + + * gnus-art.el (gnus-article-view-part-as-charset): Doc fix, + suggested by Norbert Koch . + +2003-09-29 Katsumi Yamaoka + + * gnus-topic.el (gnus-topic-goto-missing-topic): Revert 2003-02-09 + change in order to correct the position where an invisible topic + (because gnus-topic-display-empty-topics is nil) may be inserted. + +2003-09-22 Katsumi Yamaoka + + * message.el (message-ignored-supersedes-headers): Add X-Payment. + +2003-09-20 Jesper Harder + + * rfc2047.el (rfc2047-encode): Limit line length to 76 characters. + +2003-09-20 Simon Josefsson + + * tls.el (tls-process-connection-type): Doc fix. + + * imap.el (imap-starttls-open): Rewrite, should support both old + starttls.el and new starttls.el that uses GNUTLS. + +2003-09-18 Katsumi Yamaoka + + * gnus-art.el (gnus-treat-display-x-face): Use set-default instead + of custom-set-default which isn't available in old XEmacsen. + +2003-09-17 Jesper Harder + + * gnus-msg.el (gnus-summary-resend-message-edit): Don't convert + to MML. MIME -> MML -> MIME does not work for PGP/MIME. + + * message.el (message-bounce, message-forward-show-mml): do. + +2003-09-13 Jesper Harder + + * rfc2047.el (rfc2047-charset-encoding-alist): Add viscii. + (rfc2047-encode): Add factors for big5, gb2312 and euc-kr. + + * nnweb.el (nnweb-google-parse-1): Fix parsing. + +2003-09-12 Jesper Harder + + * gnus-group.el (gnus-group-fetch-control): ISC changed + compression from .Z to .gz. + + * rfc2047.el (rfc2047-header-encoding-alist): Add "Approved" to + address-mime. + +2003-09-11 Jesper Harder + + * rfc2047.el (rfc2047-encode): Restrict encoded-words to 75 + characters. + +2003-09-10 Jesper Harder + + * gnus.el (gnus-group-charter-alist): Update. + +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) + +2003-09-08 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-delete-id): function to + completely delete an ID, including all the cache hashtables + (gnus-registry-delete-group): use gnus-registry-delete-id + (gnus-registry-simplify-subject): only run if the argument is a + string, return nil otherwise + +2003-09-07 Jesper Harder + + * gnus-msg.el (gnus-summary-resend-bounced-mail): Docstring fix. + +2003-09-05 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-split-fancy-with-parent): yet + another error *sigh* + + * gnus-registry.el (gnus-registry-fetch-extra-entry): don't use + puthash unless gnus-registry-entry-caching is on + (gnus-registry-split-fancy-with-parent): misplaced parenthesis + made everything a part of the 'else' + (gnus-registry-save): used 'entry-caching' instead of 'caching' + +2003-09-05 Jesper Harder + + * gnus-art.el (gnus-button-alist): Improve Info regexp. + +2003-09-04 Teodor Zlatanov + + * gnus-registry.el: added brief explanation of basics + (gnus-registry-track-extra): new variable for tracking of message + subjects + (gnus-registry-entry-caching): caching parameter, used for extra + data + (gnus-registry-minimum-subject-length): minimum subject length + before it's considered when tracing subjects + (gnus-registry-save): accomodate extra data entry caching + (gnus-registry-action): change function name, add the subject and + pass it to gnus-registry-add-group + (gnus-registry-spool-action): change function name, add the + subject and pass it to gnus-registry-add-group + (gnus-registry-split-fancy-with-parent): add subject tracking + (gnus-registry-register-message-ids): pass subject to + gnus-registry-add-group + (gnus-registry-simplify-subject) + (gnus-registry-fetch-simplified-message-subject-fast): new + functions + (gnus-registry-fetch-extra, gnus-registry-fetch-extra-entry): add + extra data entry caching + (gnus-registry-add-group): handle the extra subject parameter + (gnus-registry-install-hooks, gnus-registry-unload-hook): fix the + gnus-register-* function names + + * nnmail.el (nnmail-cache-insert): add subject parameter, pass it + on to the nnmail-spool-hook + + * nnbabyl.el (nnbabyl-request-accept-article): added subject to + nnmail-cache-insert call + + * nndiary.el (nndiary-request-accept-article): added subject to + nnmail-cache-insert call + + * nnfolder.el (nnfolder-request-accept-article): added subject to + nnmail-cache-insert call + + * nnimap.el (nnimap-split-articles): added subject to + nnmail-cache-insert call + (nnimap-request-accept-article): added subject to + nnmail-cache-insert call + + * nnmbox.el (nnmbox-request-accept-article): added subject to + nnmail-cache-insert call + + * nnmh.el (nnmh-request-accept-article): added subject to + nnmail-cache-insert call + + * nnml.el (nnml-request-accept-article): added subject to + nnmail-cache-insert call + +2003-09-04 Jesper Harder + + * gnus-art.el (gnus-button-handle-info-url) + (gnus-button-handle-info-url-gnome) + (gnus-button-handle-info-url-kde, gnus-button-alist): Handle GNOME + and KDE style Info URLs. + + * gnus-util.el (gnus-url-unhex-string): Don't replace "+" with " ". + +2003-09-02 Jesper Harder + + * rfc2047.el (rfc2047-fold-region): Don't fold at the beginning + of the field. + +2003-09-01 Simon Josefsson + + * mml.el (mml-insert-mime-headers-always): New variable. + (mml-insert-mime-headers): Use it. Based on (tiny) patch from + Lars Balker Rasmussen . + +2003-08-30 Simon Josefsson + + * 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). + +2003-08-29 Simon Josefsson + + * gnus-group.el (gnus-group-delete-group): Doc fix. Suggested by + Jochen K,A|(Bpper . + +2003-08-29 Katsumi Yamaoka + + * gnus-art.el (article-display-x-face): Make it possible to set + the gnus-article-x-face-command variable to the lambda form. + +2003-08-27 Simon Josefsson + + * mm-decode.el (mm-remove-part): Try to kill external displayers + cleanly first (if it refuses, C-g aborts loop and kill process + unconditionally). Also make sure process is dead before we remove + the files it may be using. Reported by David Coe + . + +2003-08-27 Jesper Harder + + * gnus-cache.el (gnus-cache-generate-active): Fix bug in + replacement. From Vagn Johansen (tiny + change). + +2003-08-25 Katsumi Yamaoka + + * gnus-art.el: Don't use defvaralias. + (gnus-treat-display-x-face): Warn if the obsolete variable + `gnus-treat-display-xface' exists. + +2003-08-25 Jesper Harder + + * gnus-art.el (gnus-treat-display-face): Fix typo. + (gnus-treat-display-xface): Rename to gnus-treat-display-x-face + (reported by Jochen K,A|(Bpper ) + +2003-08-24 Jesper Harder + + * gnus-art.el (gnus-header-button-alist, gnus-button-alist): Fix + type. + +2003-08-22 Jesper Harder + + * message.el (message-make-forward-subject-function): Fix + customize mismatch. + + * gnus.el (gnus-message-archive-method): do. + +2003-08-20 Reiner Steib + + * gnus.el (gnus-read-group): Offer to continue only if the invalid + char is `/' and add more information for the user. + + * gnus-art.el (gnus-button-alist): Add `+' (gnus-button-handle-man). + (gnus-header-button-alist): Added `In-Reply-To'. + + * nnimap.el (nnimap-open-connection): Allow different user names + on the same server (and in the same authinfo file). + +2003-08-20 Jesper Harder + + * gnus-sieve.el (gnus-sieve-crosspost): Fix type. + + * message.el (message-make-forward-subject-function): Add + message-forward-subject-name-subject to choices. + + * gnus-art.el (gnus-article-edit-done, gnus-article-edit-exit): + Redisplay article after editing. + +2003-08-20 Simon Josefsson + + * 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 + + * gnus-score.el (gnus-summary-score-effect): Fix interactive use. + +2003-08-10 Teodor Zlatanov + + * gnus-draft.el (gnus-draft-send-all-messages): ask if all drafts + should be sent unless gnus-expert-user is on + +2003-08-09 Jesper Harder + + * pgg-gpg.el (pgg-gpg-extra-args): Fix customization type. + +2003-08-07 Jesper Harder + + * pgg-gpg.el (pgg-gpg-process-region): Bind + default-enable-multibyte-characters to nil. + +2003-08-07 Katsumi Yamaoka + + * canlock.el (canlock-password): Fix customization type. + (canlock-password-for-verify): Ditto. + * deuglify.el (gnus-outlook-deuglify-unwrap-min): Ditto. + (gnus-outlook-deuglify-unwrap-max): Ditto. + (gnus-outlook-deuglify-unwrap-stop-chars): Ditto. + * gnus-sum.el (gnus-sum-thread-tree-root): Ditto. + (gnus-sum-thread-tree-false-root): Ditto. + (gnus-sum-thread-tree-single-indent): Ditto. + * message.el (message-archive-note): Ditto. + (message-subscribed-address-file): Ditto. + (message-user-fqdn): Ditto. + * spam-report.el (spam-report-gmane-regex): Ditto. + * spam.el (spam-blackhole-good-server-regex): Ditto. + + * gnus-start.el (gnus-save-killed-list): Fix last change. + * message.el (message-courtesy-message): Ditto. + +2003-08-07 Jesper Harder + + * gnus-art.el (gnus-header-face-alist): Revert previous change. + (gnus-header-newsgroups-face): Explain that it's only used for + crossposts. + +2003-08-07 Katsumi Yamaoka + + * gnus-registry.el (gnus-registry-max-entries): Fix customization + type. + * gnus-score.el (gnus-adaptive-word-length-limit): Ditto. + * gnus.el (gnus-refer-article-method): Ditto. + * message.el (message-courtesy-message): Ditto. + +2003-08-06 Jesper Harder + + * gnus-art.el (gnus-header-face-alist): Fix "Newsgroups" entry. + From Chunyu Wang (tiny patch) + +2003-08-05 Katsumi Yamaoka + + * gnus-start.el (gnus-save-killed-list): Fix customization type. + * gnus-sum.el (gnus-thread-hide-subtree): Ditto. + * gnus.el (gnus-use-long-file-name): Ditto. + +2003-08-04 Jesper Harder + + * gnus-group.el (gnus-group-rename-group): Don't allow renaming to + an existing name. + + * gnus-sum.el (gnus-summary-highlight): Add uncached to docstring. + + * nnmail.el (nnmail-large-newsgroup): Docstring fix. + + * nntp.el (nntp-large-newsgroup): do. + + * nnspool.el (nnspool-large-newsgroup): do. + + * gnus-cus.el (gnus-group-parameters): Typo. + +2003-07-31 Simon Josefsson + + * mml-sec.el (mml-signencrypt-style-alist): Use separate S/MIME + method by default (revert partial 2003-07-10 patch). + +2003-07-28 Dave Love + + * pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el: Require cl when compiling. + +2003-07-26 Teodor Zlatanov + + * 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 + + * flow-fill.el (fill-flowed): Empty lines separate paragraphs + even if the preceding line ends with a soft break. Tiny patch + from Mark Thomas . + +2003-07-25 Teodor Zlatanov + + * spam.el (spam-use-regex-body, spam-regex-body-spam) + (spam-regex-body-ham): new variables, default to nil/empty/empty + (spam-install-hooks): added spam-use-regex-body to list or + pre-install conditions + (spam-list-of-checks): added spam-use-regex-body and + spam-check-regex-body to list of checks + (spam-list-of-statistical-checks): added spam-use-regex-body to + list of statistical checks + (spam-check-regex-body): invokes spam-check-regex-headers with + appropriate variable masking + (spam-check-regex-headers): changes to print "body" or "header" + where appropriate + +2003-07-25 Jesper Harder + + * smime.el (smime-ask-passphrase): Use read-passwd rather than + comint-read-noecho. The former is more secure. + +2003-07-24 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-cache-whitespace): make "adding + whitespace" message level 5 instead of 4 + (gnus-registry-clean-empty-function): new function to remove empty + registry entries + (gnus-registry-clean-empty): new variable to enable cleaning the + registry when saving it by calling gnus-registry-clean-empty-function + + * spam.el (spam-summary-prepare-exit): use spam-process-ham-in-spam-groups + (spam-process-ham-in-spam-groups): new variable + +2003-07-24 Jesper Harder + + * pgg-gpg.el (pgg-gpg-process-region): Add "--yes" to options. + + * pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el, pgg.el: Reapply changes + from 2003-04-03 to fix security problem. See + http://www.debian.org/security/2003/dsa-339 + +2003-07-23 Teodor Zlatanov + + * gnus.el (gnus-install-group-spam-parameters): add the + gnus-ticked-mark to the possible choices of ham marks + + * spam.el (spam-process-ham-in-nonham-groups): new variable + (spam-summary-prepare-exit): use spam-process-ham-in-nonham-groups + +2003-07-23 Jesper Harder + + * rfc2047.el (rfc2047-header-encoding-alist): Add Mail-Followup-To + and Mail-Copies-To to address-mime. + (rfc2047-narrow-to-field): Use rfc2047-point-at-bol. + +2003-07-19 Jesper Harder + + * mm-util.el (mm-coding-system-priorities): Docstring improvement. + +2003-07-17 Jesper Harder + + * gnus-sum.el (gnus-thread-latest-date): Move condition-case to + the right place. + +2003-07-14 Simon Josefsson + + * mail-source.el (mail-source-fetch-imap): Don't assume + imap-error-text returns something. + +2003-07-12 Nevin Kapur + + * nnimap.el (nnimap-request-newgroups): Use the pattern in + nnimap-list-pattern instead of "*". + +2003-07-10 Simon Josefsson + + * mml-sec.el (mml-signencrypt-style-alist): Use "combined" by + default. Improve docstring. + +2003-07-10 Kai Gro,A_(Bjohann + + * imap.el (imap-arrival-filter): Fix test for missing process + buffer. + +2003-07-09 Kai Gro,A_(Bjohann + From Gaute B Strokkenes (tiny patch). + + * imap.el (imap-wait-for-tag): Clarify comment. Use timeout zero + for second, after-process-has-died, accept-process-output. + (imap-arrival-filter): If PROC has no buffer, do nothing. + +2003-07-09 Jesper Harder + + * flow-fill.el: Docstring and message fixes. + + * deuglify.el: do. + + * gnus-int.el: do. + + * gnus-msg.el: do. + + * gnus-util.el: do. + + * gnus-draft.el: do. + + * gnus-start.el: do. + + * gnus.el: do. + + * gnus-group.el: do. + + * gnus-art.el: do. + + * gnus-sum.el: do. + + * mail-source.el (mail-source-movemail): Handle non-numerical + return values. + +2003-07-08 Jesper Harder + + * mailcap.el (mailcap-parse-args-syntax-table) + (mailcap-viewer-passes-test): Docstring fix. + + * mm-bodies.el (mm-long-lines-p): Docstring fix. + + * mm-decode.el (mm-w3m-safe-url-regexp, mm-verify-option) + (mm-decrypt-option, mm-handle-set-external-undisplayer) + (mm-file-name-replace-whitespace): Docstring fix. + + * mm-uu.el (mm-uu-emacs-sources-regexp): Docstring fix. + (mm-uu-pgp-signed-test): Fix message. + + * mml.el (mml-tweak-sexp-alist): Docstring fix. + (mml-parse-1, mml-insert-mime-headers): Fix message. + + * message.el (message-archive-header) + (message-subscribed-address-functions) + (message-subscribed-addresses, message-subscribed-regexps) + (message-canlock-generate) + (message-generate-new-buffer-clone-locals): Docstring fixes. + +2003-07-07 Kai Gro,A_(Bjohann + + * imap.el (imap-wait-for-tag): After the process has died, look + for more output still pending. From Gaute B Strokkenes + (tiny patch). + +2003-07-07 Teodor Zlatanov + + * spam.el (spam-bogofilter-score): redisplay article normally + after spam-bogofilter-score is called + +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. + +2003-07-04 Dave Love + + * rfc2047.el (rfc2047-q-encode-region): Exclude especials from + characters not encoded, and make the list more legible. + +2003-07-04 Jesper Harder + + * message.el (message-make-from): Revert change from 2002-01-08. + +2003-06-29 Lars Magne Ingebrigtsen + + * nnheader.el (nnheader-init-server-buffer): Don't add + nntp-server-buffer to list of Gnus buffers. + +2003-06-25 Teodor Zlatanov + + * spam.el (spam-parse-list): prevent empty ("") strings + +2003-06-24 Teodor Zlatanov + + * spam.el (spam-parse-list): use gnus-extract-address-components + instead of ietf-drums-parse-addresses + (spam-from-listed-p): let* was unnecessary + +2003-06-24 Lars Magne Ingebrigtsen + + * gnus-ems.el (gnus-put-image): Mark the right text segment with + gnus-image-category. + + * gnus-srvr.el (gnus-browse-unsubscribe-group): Strip prefix from + native groups. + + * gnus-topic.el (gnus-group-prepare-topics): Update topic line + format specs. + + * gnus-picon.el: Written by moi, moi, moi. + + * gnus-group.el (gnus-group-kill-group): Clean up. + +2003-06-23 Teodor Zlatanov + + * spam.el (spam-from-listed-p, spam-parse-list): use + ietf-drums-parse-addresses to extract the address portion of the + whitelist/blacklist file if it looks like an address can be found + +2003-06-23 Didier Verna + + * gnus-ems.el (gnus-put-image): New argument CATEGORY. Add it as a + text property. + (gnus-remove-image): New argument CATEGORY. Only remove if + category matches. + * gnus-xmas.el (gnus-xmas-put-image): + (gnus-xmas-remove-image): Ditto, with extents. + * gnus-art.el (gnus-delete-images): Pass CATEGORY argument to + gnus-[xmas-]remove-image. + (article-display-face): Don't always act as a toggle. Call + `gnus-put-image' with CATEGORY argument. + (article-display-x-face): Call `gnus-put-image' with CATEGORY + argument. + * smiley.el (smiley-region): Ditto. + * gnus-fun.el (gnus-display-x-face-in-from): Ditto. + * gnus-picon.el (gnus-picon-insert-glyph): Ditto. + (gnus-treat-mail-picon): Don't always act as a toggle. + * gnus-picon.el (gnus-treat-newsgroups-picon): Ditto. + +2003-06-23 Didier Verna + + * gnus-art.el (article-display-face): Check for existence of the + original article buffer before switching to it. + +2003-06-20 Jesper Harder + + * mm-util.el (mm-append-to-file): Say "Appended to". Suggested by + Dan Jacobson . + + * mm-view.el (mm-inline-message): Bind + gnus-original-article-buffer to the buffer in the mml handle + holding the message. + +2003-06-20 Katsumi Yamaoka + + * message.el (sender, from): No need to bind them. + +2003-06-19 Teodor Zlatanov + + * spam.el (spam-enter-list): search-forward specified wrong + +2003-06-19 Lars Magne Ingebrigtsen + + * gnus-art.el: Comment fix. + +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-19 Teodor Zlatanov + + * spam.el (spam-enter-list): do not enter duplicate addresses into + the whitelist/blacklist + +2003-06-19 Jesper Harder + + * nnheader.el (nnheader-init-server-buffer): Add + nntp-server-buffer to gnus-buffers. + + * gnus-start.el (gnus-clear-system): Now we don't need to kill + nntp-server-buffer separately. + +2003-06-18 Didier Verna + + * gnus-art.el (article-display-face): Correctly toggle between + display and hiding. Handle multiple Face headers. + +2003-06-17 Dave Love + + * nnimap.el: Require cl when compiling. + + * message.el (message-fix-before-sending): Reinstate nullifying + the invisible text property. + (sender, from): Defvar when compiling. + (message-is-yours-p): Remove autoload cookie. + +2003-06-17 Reiner Steib + + * gnus-util.el (gnus-extract-address-components): Added + doc-string. + +2003-06-16 Kai Gro,A_(Bjohann + + * nnml.el (nnml-current-group-article-to-file-alist): Don't read + overview when using compressed files. From Michael Albinus + . + +2003-06-16 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-refer-parent-article): Extract + Message-ID from In-Reply-To header. + +2003-06-16 Katsumi Yamaoka + + * message.el (message-is-yours-p): Narrow to head; extract from + and sender by itself. + (message-cancel-news, message-supersede): Remove useless things. + +2003-06-15 Reiner Steib + + * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Bind + `gnus-article-emulate-mime'. + +2003-06-15 Kai Gro,A_(Bjohann + From Tommi Vainikainen . + + * message.el (message-is-yours-p): New function. Separated common + code from message-cancel-news and message-supersede. Added + matching code which uses message-alternative-emails regexp as last + resort. + (message-cancel-news, message-supersede): Use message-is-yours-p. + +2003-06-13 Kai Gro,A_(Bjohann + + * nnimap.el (nnimap-split-articles): Narrow the right buffer to + the headers. From Niklas Morberg . + +2003-06-12 Dave Love + + * nnheader.el (nnheader-functionp): Deleted. + + * nnmail.el (nnmail-split-fancy-syntax-table): Define all in + defvar. + (nnmail-version): Deleted. + (nnmail-check-duplication, nnmail-expiry-target-group): Don't use + nnheader-functionp. + +2003-06-10 Teodor Zlatanov + + * 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 + + + * spam.el (spam-use-spamoracle): new variable + (spam-install-hooks): add spamoracle to the list of conditions + for activation of spam-install-hooks + (spam-spamoracle): new variable customization group + (spam-spamoracle, spam-spamoracle): new variables + (spam-group-spam-processor-spamoracle-p) + (spam-group-ham-processor-spamoracle-p): new functions + (spam-summary-prepare-exit): added spamoracle ham/spam exit processing + (spam-list-of-checks, spam-list-of-statistical-checks): add + spam-use-spamoracle + (spam-check-spamoracle, spam-spamoracle-learn) + (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): new functions + + * gnus.el (gnus-group-spam-exit-processor-spamoracle) + (gnus-group-ham-exit-processor-spamoracle): new variables for SpamOracle + (spam-process, ham-process): added spamoracle spam/ham processors + +2003-06-08 Jesper Harder + + * message.el (message-beginning-of-line): Docstring improvement. + Suggested by Michael R. Wolf + +2003-06-07 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-make-menu-bar): Removed ["Add buttons" + gnus-summary-display-buttonized t] + +2003-06-07 Kai Gro,A_(Bjohann + + * nnmail.el (nnmail-split-fancy-match-partial-words): Doc string + fix. Reported by Johan Bockg,Ae(Brd . + +2003-06-07 Jesper Harder + + * message.el (message-beginning-of-line): Docstring improvement. + +2003-06-06 Jesper Harder + + * gnus-srvr.el (gnus-browse-foreign-server): Parse garbage NNTP + groups correctly. + +2003-06-06 Kai Gro,A_(Bjohann + From Benjamin Rutt . + + * message.el (message-fetch-field): Augment documentation to state + the narrowed-to-headers restriction. + (message-change-subject, message-reduce-to-to-cc) + (message-generate-unsubscribed-mail-followup-to) + (message-insert-importance-high, message-insert-importance-low) + (message-insert-or-toggle-importance) + (message-insert-disposition-notification-to): Narrow to headers + before calling message-fetch-field or message-remove-header. + +2003-06-06 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-trim): fix for when + gnus-registry-max-entries is nil + +2003-06-05 Lars Magne Ingebrigtsen + + * qp.el (quoted-printable-decode-region): Don't error out on + malformed text. + +2003-06-04 Lars Magne Ingebrigtsen + + * rfc2047.el (rfc2047-encode-region): Don't error out on invalid + strings. + +2003-06-04 Jesper Harder + + * mml1991.el (mml1991-pgg-sign): Insert pgg output as unibyte. + From: Ivan Boldyrev (tiny + change) + +2003-06-03 Dave Love + + * gnus-soup.el (gnus-soup-send-packet): Don't use + message-functionp. + + * gnus.el (gnus-agent-cache): Doc fix. + (gnus-other-frame): Quote lambda used as hook. + + * message.el: Doc fixes. + (message-functionp): Deleted. Callers changed. + (message-fix-before-sending): Highlight with overlays. Clarify + `illegible text' messages. + (rmail-enable-mime-composing, gnus-message-group-art): Defvar when + compiling. + (gnus-find-method-for-group, nnvirtual-find-group-art): Autoload. + +2003-06-03 Kai Gro,A_(Bjohann + + * nnmail.el (nnmail-split-fancy-match-partial-words): New user + option. + (nnmail-split-it): Obey it. Don't let-bind regexp twice. + + * message.el (message-fetch-field): Mention narrow-to-headers + requirement. + +2003-06-03 Jesper Harder + + * gnus-xmas.el (gnus-xmas-create-image): Use + insert-file-contents-literally. From: Eric Eide + + +2003-06-02 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-fetch-group): always return the + short name of the group + +2003-06-02 Jesper Harder + + * gnus-cus.el (defvar): Silence byte-compiler warnings. + + * gnus-sum.el (gnus-get-newsgroup-headers): Unfold headers. + +2003-05-31 Jesper Harder + + * gnus-art.el (article-unsplit-urls): Use gnus-treat-article + rather than gnus-display-mime-function. + +2003-05-30 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-use-long-group-names): new variable + (gnus-registry-add-group): use it + (gnus-registry-trim-articles-without-groups): new variable + (gnus-registry-delete-group): use it + (gnus-registry-unload-hook): uninstall all the hooks + + * spam.el (spam-install-hooks-function, spam-unload-hook): new + functions so users that load spam.el for customization don't get + all the hooks installed + (spam-install-hooks): new variable, set to t by default if user + has one of the spam-use-* variables set + + * spam-stat.el (spam-stat-install-hooks, spam-stat-unload-hook): new + functions so users that load spam-stat.el for customization don't get + all the hooks installed + +2003-05-30 Dave Love + + * rfc2047.el (rfc2047-decode): Don't use + mm-with-unibyte-current-buffer. + + * qp.el (quoted-printable-decode-string): Use + mm-with-unibyte-buffer. + +2003-05-29 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-save): allow forced saving even + when registry is not dirty. Use gnus-registry-trim to shorten the + gnus-registry-alist. + (gnus-registry-max-entries): new variable + (gnus-registry-trim): new function, trim gnus-registry-alist to + size gnus-registry-max-entries, sorting by entry mtime so the + newest entries stick around + + * gnus-start.el (gnus-gnus-to-quick-newsrc-format): instead of + just one specific variable, allow a list of specific variables + +2003-05-28 Dave Love + + * rfc2047.el (rfc2047-encode-region): Skip ASCII at beginning and + end of region. + +2003-05-28 Jesper Harder + + * lpath.el: Add put-char-table and get-char-table. + +2003-05-28 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-dirty): flag for modified registry + (gnus-registry-save, gnus-registry-read) + (gnus-registry-store-extra, gnus-registry-clear): use it (note + that gnus-registry-store-extra is invoked for all modifications to + set the mtime, so gnus-registry-dirty only needs to be set there) + +2003-05-23 Simon Josefsson + + * mml1991.el (mml1991-pgg-sign): Use mml-sender instead of + message-sender. + + * gnus-art.el (gnus-use-idna): Check if idna-program is installed. + + * message.el (message-use-idna): Ditto. + +2003-05-20 Dave Love + + * rfc2047.el (rfc2047-q-encoding-alist): Deleted. + (rfc2047-q-encode-region): Don't use it. + (rfc2047-encode-message-header) <(eq method 'mime)>: Bind + rfc2047-encoding-type to `mime'. + (rfc2047-encode-string, rfc2047-encode): Doc fix. + +2003-05-20 Jesper Harder + + * message.el (message-send-mail): Don't insert a courtesy copy + notice in base64 encoded messages. + +2003-05-16 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-move-article): Don't copy expirable + marks if the destination group is not auto-expirable. + +2003-05-14 Katsumi Yamaoka + + * dgnushack.el (assq-delete-all): Removed the compiler macro. + +2003-05-14 Kevin Greiner + + * gnus-agent.el (gnus-agentize): Updated documentation to match + usage. + (gnus-agent-expire-group-1): Do not skip over a group when the + force argument is set. + * gnus.el (gnus-agent): Updated documentation to reflect that + gnus-agent now defaults to t. + +2003-05-14 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + +2003-05-14 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.10.2 is released. + +2003-05-14 Lars Magne Ingebrigtsen + + * mail-source.el (mail-source-delete-incoming): Changed to t. + + * rfc2047.el (rfc2047-syntax-table): Funcall. + + * lpath.el ((featurep 'xemacs)): Added set-char-table-range. + ((featurep 'xemacs)): No, don't. + + * rfc2047.el (rfc2047-encodable-p): Use the header charset. + + * gnus-sum.el (gnus-summary-reselect-current-group): Supply + leave-hidden. + +2003-05-14 Jonathan Kamens + + * gnus-sum.el (gnus-summary-exit): Added `leave-hidden'. (Tiny + patch.) + +2003-05-13 Lars Magne Ingebrigtsen + + * gnus-registry.el (gnus-registry-store-extra-entry): Use + gnus-assq-delete-all. + + * gnus-xmas.el (gnus-xmas-assq-delete-all): New function. + + * message.el (message-ignored-bounced-headers): Add Delivered-To. + + * gnus-sum.el (gnus-summary-find-next): Indent. + (gnus-summary-find-prev): Ditto. + (gnus-summary-catchup): Doc fix. + (gnus-summary-mark-current-read-and-unread-as-read): New function. + (gnus-summary-catchup): Really mark after point. + + * gnus-util.el (gnus-user-date): Use %d instead of %m. + (gnus-user-date): Use floating point time so that we don't get + overflows. + + * gnus-sum.el (gnus-summary-local-variables): Clean up. + + * gnus-fun.el (gnus-display-x-face-in-from): Don't use centering + since none of the other image things do. + +2003-05-13 Katsumi Yamaoka + + * dgnushack.el (assq-delete-all): New compiler macro for Emacs 20. + +2003-05-12 Katsumi Yamaoka + + * lpath.el: Fbind find-coding-system. + + * dgnushack.el (dgnushack-make-load): Remove redundant format call + in message. Suggested by Yoichi NAKAYAMA . + * pop3.el (pop3-movemail): Ditto. + +2003-05-12 Colin Marquardt (tiny change) + + * gnus.el (gnus-agent): Docstring fix. + +2003-05-12 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-install): new variable + (gnus-registry-fetch-extra, gnus-registry-fetch-extra-entry) + (gnus-registry-store-extra-entry, gnus-registry-delete-group) + (gnus-registry-add-group): add a modification timestamp to each entry + (gnus-registry-install-hooks): new function + +2003-05-12 Kevin Greiner + + * gnus-agent.el (gnus-agent-cat-name): Eval macro while compiling. + (gnus-agent-cat-disable-undownloaded-faces): New function. + Accessor for new agent property + 'agent-disable-undownloaded-faces'. + gnus-cus.el (gnus-agent-parameters): Added + agent-disable-undownloaded-faces and corrected documentation. + (gnus-agent-cat-prepare-category-field, + gnus-agent-customize-category): Changed to avoid creating free + references to each field's symbol. + gnus-sum.el (gnus-summary-use-undownloaded-faces): New local variable. + (gnus-select-newgroup): Initialize it. + (gnus-summary-highlight-line): Use it. + +2003-05-12 Dave Love + + * mm-util.el (mm-read-charset): Deleted. + (mm-coding-system-mime-charset): New. + (mm-read-coding-system, mm-mule-charset-to-mime-charset) + (mm-charset-to-coding-system, mm-mime-charset) + (mm-find-mime-charset-region): Use it. + (mm-default-multibyte-p): Fix non-mule case. + + * rfc2047.el (rfc2047-point-at-bol, rfc2047-point-at-bol): Eval + and compile. + (rfc2047-syntax-table): Fix building table to work in Emacs 22. + (rfc2047-unfold-region): Delete unused var `leading'. + +2003-05-12 Simon Josefsson + + * pgg.el (pgg-temp-buffer-show-function): Reuse existing visible + output window if one is available. Tiny patch from Ville Skytt,Ad(B + . + +2003-05-11 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Added + space. + +2003-05-11 Jesper Harder + + * gnus-sum.el (gnus-summary-enter-digest-group): Don't do article + washing etc. + (gnus-handle-ephemeral-exit): Don't reload article after exiting. + + * nndoc.el (nndoc-type-alist): `mime-digest' should be before + `mime-parts'. + +2003-05-10 Jesper Harder + + * gnus-cite.el (gnus-article-hide-citation-maybe): Make toggling + work. Update mode-line. + +2003-05-10 Lars Magne Ingebrigtsen + + * gnus.el (gnus-logo-color-alist): Added no colours. + +2003-05-09 Dave Love + + * utf7.el (mm-util): Require. + (utf7-direct-encoding-chars, utf7-imap-direct-encoding-chars): + Defconst, not defvar. + (utf7-utf-16-coding-system): New. + (utf7-encode-internal): Hoist concat out of loop. + (utf7-fragment-encode): Use mm-with-unibyte-current-buffer. + (utf7-get-u16char-converter) [utf7-utf-16-coding-system]: New + case. + (utf7-latin1-u16-char-converter): Encode the region. + (utf7-u16-latin1-char-converter): Decode the region. + (utf7-encode, utf7-decode): Fix multibyteness. + + * mm-bodies.el (mm-body-7-or-8): Don't special-case mule. + (mm-encode-body): Use mm-read-coding-system, not mm-read-charset. + (mm-uu-yenc-decode-function): Defvar when compiling. + (mm-encode-body, mm-decode-body): Doc fix. + +2003-05-09 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-unregistered-group-regex): + removed in favor of the group/topic/global variables + (gnus-registry-register-message-ids): fixed test to omit + gnus-registry-unregistered-group-regex + + * gnus.el (gnus-variable-list): removed gnus-registry-alist and + gnus-registry-headers-alist from the list + (gnus-registry-headers-alist): removed + (registry-ignore): new parameter, with accompanying + gnus-registry-ignored-groups global variable + + * gnus-start.el (gnus-clear-system): no need to clear the + registry, we can do it ourselves + (gnus-gnus-to-quick-newsrc-format): extra parameters so it can be + used by gnus-registry.el + + * 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 Jesper Harder + + * gnus-picon.el (gnus-picon-transform-address): Parse the encoded + address. + +2003-05-08 Teodor Zlatanov + + * gnus-start.el (gnus-clear-system): added gnus-registry-alist to + the list of cleared variables + + * gnus-registry.el (gnus-registry-split-fancy-with-parent): + 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 Kai Gro,A_(Bjohann + + * gnus-sum.el (gnus-summary-next-page): Mention + `gnus-article-skip-boring' in docstring. + +2003-05-08 Jesper Harder + + * rfc2231.el (rfc2231-parse-string): "=" should have whitespace + syntax here. + + * ietf-drums.el (ietf-drums-syntax-table): "=" should not have + whitespace syntax class when parsing email addresses. + + * message.el (message-forward-subject-name-subject): Don't use + mail-decode-encoded-word-string before parsing from. + +2003-05-07 ShengHuo ZHU + + * message.el (message-setup-1): Setup alternative email before + generate-headers. + + (message-forward-subject-name-subject): Fix the case when the + field "from" doesn't exist. + +2003-05-07 Dave Love + + * rfc2047.el (rfc2047-encode-region): Skip \n as whitespace. + + * mm-util.el (mm-find-mime-charset-region): Expurgate utf-16 from + possible values. + +2003-05-07 Jesper Harder + + * message.el (message-kill-to-signature): Fix. + +2003-05-06 Jesper Harder + + * gnus-sum.el (gnus-auto-goto-ignores): Docstring fix. + + * gnus-art.el (gnus-mime-display-multipart-as-mixed) + (gnus-mime-display-multipart-related-as-mixed) + (gnus-button-mid-or-mail-heuristic-alist): do. + +2003-05-05 Dave Love + + * mm-util.el (mm-default-multibyte-p): New. + (mm-coding-system-p): Maybe use find-coding-systems. + +2003-05-04 Dave Love + + * rfc2047.el (with-syntax-table): Define if necessary. + (rfc2047-syntax-table): Fix last change for XEmacs. + (rfc2047-parse-and-decode): Revert last change. + +2003-05-03 Jesper Harder + + * gnus.el: Don't test for `mm-guess-mime-charset'. + + * mm-util.el (mm-guess-mime-charset): Remove. Not used any more. + + * gnus.el (gnus-default-charset): Set default value to + `undecided'. + + * gnus-art.el (article-decode-charset): Don't supply 4th arg to + mm-decode-body. + + * 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) + + * gnus-util.el (gnus-multiple-choice): Add ", ?". + +2003-05-03 Dave Love + + * rfc2047.el (rfc2047-syntax-table): Don't call make-char-table + with 2 args. + (rfc2047-decode-string): Don't set the buffer multibyte before + calling buffer-string. + + * mm-encode.el (mm-long-lines-p): Autoload. + (mm-encode-content-transfer-encoding): Doc fix. Don't make buffer + unibyte. Signal error on unknown encoding. + (mm-encode-buffer, mm-qp-or-base64): Doc fix. + + * rfc2047.el (rfc2047-point-at-bol, rfc2047-point-at-eol): New. + Callers of gnus- versions changed to use them. + (rfc2047-header-encoding-alist): Add `address-mime' part. Doc + fixes. + (rfc2047-encoding-type): New. + (rfc2047-encode-message-header): Use mm-charset-to-coding-system. + Don't include header name field in encoding. Add `address-mime' + case and bind rfc2047-encoding-type for `mime' case. + (rfc2047-encodable-p): Deleted. + (rfc2047-syntax-table): New. + (rfc2047-encode-region, rfc2047-encode): Rewritten to take account + of rfc2047 rules with respect to rfc2822 tokens and to do encoding + in place rather than by passing strings. + (rfc2047-encode-string): Doc fix. + (rfc2047-q-encode-region): Don't use + mm-with-unibyte-current-buffer. + (rfc2047-encoded-word-regexp): eval-and-compile. + (rfc2047-decode-region): Avoid concatenation in loop. + (rfc2047-parse-and-decode): Remove useless disjunction. + +2003-05-02 Dave Love + + * rfc2047.el (rfc2047-q-encode-region, rfc2047-decode): Use + mm-with-unibyte-current-buffer. + (ietf-drums, gnus-util): don't require. + + * sieve.el (sieve-manage-mode-menu): Define before use. + + * mml-smime.el (message-narrow-to-headers): Autoload. + + * mm-util.el (mm-coding-system-p): Don't override nil from + coding-system-p. + (mm-mule4-p, mm-disable-multibyte-mule4) + (mm-with-unibyte-current-buffer-mule4): Deleted. + (mm-multibyte-p): Use defun, not defalias. + (mm-make-temp-file): Moved to group at top of file. + (mm-point-at-eol, mm-point-at-bol): New. + + * gnus-cite.el (gnus-art): Require. + + * gnus-ems.el (gnus-get-buffer-create) + (nnheader-find-etc-directory, message-text-with-property): + Autoload. + (gnus-tmp-unread, gnus-tmp-replied, gnus-tmp-score-char) + (gnus-tmp-indentation, gnus-tmp-opening-bracket, gnus-tmp-lines) + (gnus-tmp-name, gnus-tmp-closing-bracket, gnus-tmp-subject-or-nil) + (gnus-check-before-posting): Only defvar when compiling. + + * gnus-int.el (gnus-agent-expire): Autoload, don't defun. + + * gnus-util.el (rmail-default-rmail-file, mm-text-coding-system): + Defvar when compiling. + (gnus-output-to-rmail): Require mm-util. + + * mail-source.el (mail-source-callback): Use mm-make-temp-file. + (mail-source-make-complex-temp-name): Deleted. + + * message.el (message-use-idna): Use mm-coding-system-p. + (message-tokenize-header, message-make-organization) + (message-make-from): Use with-temp-buffer. + (message-set-work-buffer): Deleted. + (message-fill-paragraph): Use `if' not `and' for compiler warning. + (message-check-news-header-syntax): Remove useless lambda. + (message-forward-make-body): Use mm-disable-multibyte, + mm-with-unibyte-current-buffer, mm-enable-multibyte. + (message-replace-chars-in-string): Deleted. + + * mm-extern.el (mm-extern-local-file): Use mm-disable-multibyte. + (mm-extern-url): Use mm-with-unibyte-current-buffer, + mm-disable-multibyte. + (mm-extern-anon-ftp): Use mm-disable-multibyte. + + * mml1991.el (mml1991-mailcrypt-encrypt, mml1991-gpg-encrypt): Use + mm-with-unibyte-current-buffer. + + * mml2015.el (mml): Require. + (mml2015-mailcrypt-encrypt, mml2015-gpg-encrypt): Use + mm-with-unibyte-current-buffer. + + * nnheader.el (gnus-util): Require. + + * nntp.el (format-spec, format-spec-make, open-tls-stream): + Autoload. + + * rfc2231.el (mail-header-remove-comments, mm-encode-body) + (mail-header-remove-whitespace): Autoload. + + * sieve-manage.el (starttls-negotiate): Autoload. + +2003-05-01 Lars Magne Ingebrigtsen + + * nnrss.el (nnrss-find-rss-via-syndic8): Indent. + +2003-05-01 Mark A. Hershberger + + * nnrss.el (nnrss-find-rss-via-syndic8): Don't error out. + +2003-05-01 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + +2003-05-01 Teodor Zlatanov + + * spam-report.el (spam-report-gmane-regex): docstring fix. From + Jon Ericson (tiny change) + + * gnus.el (gnus-install-group-spam-parameters): docstring fix. + From Jon Ericson (tiny change) + + * gnus-registry.el (gnus-registry-fetch-extra) + (gnus-registry-store-extra, gnus-registry-group-count): new functions + (gnus-registry-fetch-group, gnus-registry-delete-group) + (gnus-registry-add-group): changed to work with extra data element + if present + +2003-05-01 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.10.1 is released. + +2003-05-01 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.24 is released. + +2003-05-01 Lars Magne Ingebrigtsen + + * dgnushack.el (when): Check whether defadvice is fbound. + +2003-05-01 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-unregistered-group-regex): new variable + (gnus-registry-register-message-ids): use it + +2003-05-01 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + + * gnus.el: Update copyright for several files. + +2003-05-01 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.23 is released. + +2003-05-01 Lars Magne Ingebrigtsen + + * spam-stat.el (spam-stat-test-directory): Compare against zero. + +2003-05-01 Trey Jackson (tiny change) + + * spam-stat.el (spam-stat-test-directory): Skip 0 length files. + +2003-05-01 Lars Magne Ingebrigtsen + + * message.el (message-forward-subject-name-subject): Decode + string when forwarding. + +2003-05-01 Oystein Viggen + + * dgnushack.el (when): Add defadvice. + +2003-05-01 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + +2003-05-01 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.22 is released. + +2003-05-01 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.21 is released. + +2003-05-01 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + +2003-05-01 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.20 is released. + +2003-05-01 Vasily Korytov + + * gnus-dired.el (gnus-dired-mode-map): Move to C-c C-l. + +2003-04-30 Mark A. Hershberger + + * mm-url.el (mm-url-insert-file-contents): set url-current-object + in the case where mm-url-use-external is set. + + * nnrss.el (nnrss-request-article): Change the messages created to + multipart/alternative. Hopefully fixes a problem interaction with + w3m. + (nnrss-find-rss-via-syndic8): Better handling if xml-rpc.el isn't + around. + +2003-05-01 Lars Magne Ingebrigtsen + + * message.el (message-check-news-header-syntax): Alter "posting" + message. + + * nnrss.el (nnrss-node-text): Don't use char classes. + +2003-05-01 David Z. Maze + + * nnrss.el (nnrss-find-rss-via-syndic8): Have an `error' branch + in condition-case. + +2003-05-01 Lars Magne Ingebrigtsen + + * message.el (message-required-headers): Remove In-Reply-To. + + * gnus-int.el (gnus-open-server): Revert changes. + +2003-04-30 Kai Gro,A_(Bjohann + + * gnus-int.el (gnus-open-server): Try to open unagentized servers + even when unplugged. + +2003-04-30 Reiner Steib + + * gnus-art.el (gnus-button-prefer-mid-or-mail): Fixed typo in + doc-string. + +2003-05-01 Steve Youngs + + * lpath.el: Add a section for non-Mule XEmacsen. + fbind `find-charset-string' and `coding-system-base' in that + section. + + * gnus-util.el (gnus-completing-read-maybe-default): New. + (gnus-completing-read): Use it. + + * mm-view.el (mm-view-pkcs7-decrypt): Ditto. + + * gnus-art.el (gnus-read-string): New. + (gnus-summary-pipe-to-muttprint): Use it. + + * gnus-xmas.el (gnus-xmas-open-network-stream): New. + + * dns.el (dns-make-network-process): Use it. + + Take care of some differences between XEmacs 21.1 and newer + versions of XEmacs. + +2003-04-30 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-split-fancy-with-parent): added + diagnostic message + (gnus-registry-grep-in-list): don't run when word is nil + (gnus-registry-fetch-message-id-fast): new function + (gnus-registry-delete-group, gnus-registry-add-group): make sure + the id and group are not nil + (gnus-registry-register-message-ids): new function + (gnus-register-action): optimized logical flow + (gnus-summary-prepare-hook): added gnus-registry-register-message-ids + +2003-04-30 Kai Gro,A_(Bjohann + + * gnus-delay.el (gnus-delay-article): Call + `gnus-agent-queue-setup' to create the delay group. + + * gnus-agent.el (gnus-agent-queue-setup): Support optional arg + for the (queue) group name. + +2003-04-30 Simon Josefsson + + * mm-util.el (mm-charset-to-coding-system): Use user specified + charset unless coding-system-get is fboundp. + +2003-04-30 Kevin Greiner + + * gnus-agent.el (gnus-agent-cat-defaccessor, gnus-agent-cat-name): + Wrapped in eval-when-compile. + (gnus-agent-mode): Bind gnus-agent-go-online to nil as you + shouldn't be asked twice to go online with each server. + (gnus-agent-get-undownloaded-list, gnus-agent-fetch-articles, + gnus-agent-crosspost, gnus-agent-flush-cache, + gnus-agent-fetch-session, gnus-agent-unread-articles, + gnus-agent-uncached-articles, gnus-agent-regenerate-group, + gnus-agent-group-covered-p): Expanded pop macros used for + effect. Avoids compilation warning in emacs 21.3. + + * gnus-int.el (gnus-open-server): Restructured to only open + nnagent when gnus-plugged is nil. + +2003-04-30 Katsumi Yamaoka + + * lpath.el: Fbind string-to-multibyte. + +2003-04-30 Steve Youngs + + * dgnushack.el: Add some missing autoloads for XEmacs 21.1. + +2003-04-29 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-fetch-group): faster + (gnus-registry-delete-group): new function + (gnus-registry-add-group): new function + (gnus-register-spool-action): use it + (gnus-register-action): use it + (gnus-registry-translate-from-alist) + (gnus-registry-translate-to-alist): remove the headers registry + for now + +2003-04-29 Reiner Steib + + * gnus-art.el (gnus-button-alist): Fixed CTAN regexp. + +2003-04-29 Teodor Zlatanov + + * spam-report.el (spam-report-gmane): gnus-summary-article-number + is not necessary, just use the function parameter + +2003-04-29 Karl Pfl,Ad(Bsterer + + * spam-stat.el (spam-stat-save): No longer font-locks the file + when saving + +2003-04-29 Katsumi Yamaoka + + * canlock.el: Bind mail-header-separator when compiling (XEmacs + provides it in mail-lib/auto-autoloads.el). + +2003-04-29 Simon Josefsson + + * mml2015.el (mml2015-pgg-sign): Use mml-sender instead of + message-sender. + + * mml.el (mml-generate-mime-1): Set mml-sender too. + +2003-04-29 Jesper Harder + + * gnus-sum.el (gnus-summary-display-while-building): Docstring fix. + + * mm-url.el (mm-url-use-external): do. + +2003-04-29 Simon Josefsson + + * canlock.el (mail-fetch-field): Autoload it (fix xemacs compile + warnings). + + * sieve-mode.el (c-mode): Ditto. + + * pgg.el (run-at-time): Ditto. + + * mm-url.el (require): Require timer when compiling for + with-timeout macro (fix xemacs compile warnings). + +2003-04-28 Dave Love + + * gnus-util.el (nnheader): Don't require. + (Nnheader-narrow-to-headers, nnheader-replace-chars-in-string): + Autoload. + + * spam.el: Require cl when compiling. + + * dns.el: Require cl when compiling. + +2003-04-28 Jesper Harder + + * gnus-art.el (gnus-article-goto-next-page) + (gnus-article-goto-prev-page): Revert 2003-02-12 change to make + gnus-pick-mode work. + +2003-04-28 Steve Youngs + + * Makefile.in (FLAGS): Use @FLAGS@. + +2003-04-27 Reiner Steib + + * gnus-art.el (gnus-mime-display-multipart-as-mixed) + (gnus-mime-display-multipart-alternative-as-mixed) + (gnus-mime-display-multipart-related-as-mixed): Added doc-strings, + allow customization. + +2003-04-27 Kevin Greiner + + * dgnushack.el (dgnushack-compile-verbosely): New function. Not + currently called (See source for explanation). + +2003-04-27 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-catchup): Don't mark ticked messages. + (gnus-summary-mark-read-and-unread-as-read): Take an optional + mark. + + * gnus.el (gnus-version-number): Bump. + +2003-04-27 06:47:31 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.19 is released. + +2003-04-27 Kevin Greiner + + * gnus-registry.el (gnus-register-spool-action): Replaced literal + carriage-return character with its escape sequence. + +2003-04-27 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-catchup-from-here): Doc fix. + + * nnrss.el (nnrss-node-text): Use only one + gnus-replace-in-string. + + * gnus.el: Remove gnus-functionp throughout. + + * gnus-util.el (gnus-functionp): Removed. + + * gnus-msg.el (gnus-summary-wide-reply-with-original): Doc fix. + + * message.el (message-required-headers): Add In-Reply-To. + +2003-04-27 Marshall T. Vandegrift + + * gnus-fun.el (gnus-face-from-file): Bind coding-system-for-read + to binary. + +2003-04-27 Jesper Harder + + * mml.el (mml-preview): do. + + * message.el (message-mode): do. + + * gnus-undo.el (gnus-undo-mode): do. + + * gnus-topic.el (gnus-topic-mode): do. + + * gnus-sum.el (gnus-summary-mode, gnus-summary-edit-article): do. + + * gnus-msg.el (gnus-setup-message) + (gnus-inews-add-send-actions, gnus-configure-posting-styles): do. + + * gnus-gl.el (gnus-grouplens-mode): do. + + * gnus-art.el (gnus-mime-save-part-and-strip) + (gnus-mime-delete-part): Use it. + + * gnus-util.el (gnus-make-local-hook): New function. + +2003-04-25 Simon Josefsson + + * nnrss.el (nnrss-node-text): Don't use a star. + (nnrss-node-text): Use g-r-i-s, not g-r-r-i-s which doesn't exist. + +2003-04-24 Dave Love + + * mm-encode.el (mm-long-lines-p): Autoload. + (mm-encode-content-transfer-encoding): Don't try to make buffer + unibyte before decoding. Don't ignore errors for base64 encoding. + + * qp.el (quoted-printable-decode-region): Use mm-insert-byte. + Signal error on malformed text, as for base64. + (quoted-printable-encode-region): DTRT in Emacs 22. + + * mm-util.el (mm-make-temp-file, mm-insert-byte): New. + (mm-auto-save-coding-system): Consider utf-8-emacs. + (mm-mime-mule-charset-alist, mm-mule-charset-to-mime-charset) + (mm-charset-to-coding-system, mm-mime-charset) + (mm-find-mime-charset-region): Check for :mime-charset coding + systems property. + + * mml-sec.el (mml2015, mml1991): Don't require. + (mml2015-sign, mml2015-encrypt, mml1991-sign, mml1991-encrypt) + (message-goto-body, mml-insert-tag): Autoload. + + * mm-decode.el (mm-tmp-directory): Re-write to help avoid warnings. + + * gnus-start.el (message-make-date): Autoload rather than + requiring message. + + * gnus-group.el (gnus-group-name-charset-group-alist): Use + mm-coding-system-p. + (gnus-cache-active-altered): Defvar when compiling. + (gnus-group-delete-group): Re-write to help avoid warnings. + + * gnus-art.el (gnus-use-idna): Use mm-coding-system-p. + + * pgg.el: Split eval-when-compile forms. + +2003-04-24 Reiner Steib + + * gnus-group.el (gnus-large-ephemeral-newsgroup) + (gnus-fetch-old-ephemeral-headers): News variables. + (gnus-group-read-ephemeral-group): Use them. + +2003-04-24 Simon Josefsson + + * sieve.el (sieve-upload): Don't use replace-regexp-in-string. + + * nnrss.el (nnrss-node-text): Ditto. + +2003-04-24 Katsumi Yamaoka + + * gnus-msg.el (gnus-inews-do-gcc): Make sure the obsolete variable + gnus-inews-mark-gcc-as-read exists. + +2003-04-23 Simon Josefsson + + * gnus-sieve.el (gnus-sieve-generate): Rewrite regexp search so it + doesn't exceed the regexp stack space. + +2003-04-23 Jesper Harder + + * gnus-msg.el (gnus-inews-mark-gcc-as-read): Don't defvar it. + + * gnus-art.el (gnus-article-hide-pgp-hook): do. + +2003-04-23 Reiner Steib + + * mml.el (mml-preview): Bind `=', RET, and mouse-2. + +2003-04-23 Jesper Harder + + * mm-bodies.el (mm-decode-body): Don't override supplied charset. + +2003-04-23 Katsumi Yamaoka + + * dgnushack.el (merge, copy-list): Remove compiler macros. + (butlast): Add a compiler macro. + +2003-04-22 Paul Jarc + + * gnus-util.el (gnus-merge): Added "type" argument to match CL + merge and gnus-sum.el's expectations. + +2003-04-21 Reiner Steib + + * gnus-art.el (gnus-button-url-regexp): Added nntp. + + * message.el (message-generate-headers-first): Default to + '(references). + + * gnus-art.el (gnus-mime-delete-part): Require confirmation. + +2003-04-21 Jesper Harder + + * smime.el (smime-decrypt-region): Insert From header. + +2003-04-21 Kai Gro,A_(Bjohann + + * gnus-fun.el (gnus-face-from-file, gnus-convert-png-to-face): + Max length of header is 726, not 740. From Gaute B Strokkenes + . + +2003-04-20 Jesper Harder + + * nndb.el, mml1991.el: Fix license template. + +2003-04-20 Simon Josefsson + + * nnimap.el (nnimap-split-articles): Don't download body unless + required. + + * imap.el (imap-gssapi-open, imap-ssl-open): Erase buffer before + starting process, like imap-kerberos4-open does. + + * mml-smime.el, rfc1843.el, dig.el, smime.el, uudecode.el: Fix + license template. + + * mml-sec.el: Fix license template. + + * gnus-sieve.el, sieve.el, sieve-manage.el, sieve-mode.el: Fix + license template. + + * pgg-def.el, pgg.el, pgg-gpg.el, pgg-parse.el, pgg-pgp5.el, + pgg-pgp.el: Fix license template. + +2003-04-19 Jesper Harder + + * gnus-sum.el (gnus-summary-delete-article): Improve docstring. + +2003-04-19 Teodor Zlatanov + + * spam.el (spam-move-spam-nonspam-groups-only): dumb typo fix + +2003-04-18 Teodor Zlatanov + + * spam.el (spam-split): allow a particular check as a parameter, + e.g. (: spam-split 'spam-use-bogofilter) + (spam-mark-only-unseen-as-spam): new parameter, see doc + (spam-mark-junk-as-spam-routine): use + spam-mark-only-unseen-as-spam, simplify routine to take advantage + of gnus-newsgroup-unread as well as gnus-newsgroup-unseen + +2003-04-17 Teodor Zlatanov + + * gnus.el (gnus-group-short-name, gnus-group-prefixed-p): new functions + (gnus-group-guess-full-name): don't prefix the group twice + + * nnmail.el (nnmail-split-fancy-with-parent): docstring fix + + * gnus-registry.el (gnus-registry-clear) + (gnus-registry-fetch-group, gnus-registry-grep-in-list) + (gnus-registry-split-fancy-with-parent): new functions + (gnus-register-spool-action, gnus-register-action): simplified the format + (gnus-registry): new customization group + (gnus-registry-unfollowed-groups): new variable + +2003-04-17 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-button-alist): Add nntp: urls. + (gnus-header-button-alist): Ditto. + +2003-04-17 Dave Love + + * gnus-util.el (gnus-string-equal): Revert last change. + +2003-04-17 Lars Magne Ingebrigtsen + + * gnus-srvr.el (gnus-browse-make-menu-bar): Fix typo. + +2003-04-17 Mike Woolley + + * gnus-sum.el (gnus-sum-thread-tree-false-root): New variable. + +2003-04-15 Michael Shields + + * gnus-art.el (article-hide-boring-headers): Hide Reply-To: if + the broken-reply-to group parameter is set. Idea from Vasily + Korytov . + +2003-04-17 Steve Youngs + + * dgnushack.el: 'setenv' is in env.el for XEmacsen <= 21.4, but in + process.el in XEmacsen >= 21.5. + +2003-04-17 Steve Youngs + + * dgnushack.el: Add a whole swag of autoloads and defaliases to + satisfy the byte-compiler when building with XEmacs. + + * lpath.el (maybe-bind): Add 'w3-meta-content-type-charset-regexp' + and 'w3-meta-charset-content-type-regexp' in XEmacs. The upstream + W3 doesn't have these. + + * mailcap.el: Maybe require 'lpr in XEmacs. + +2003-04-16 Simon Josefsson + + * mml2015.el (mml2015-pgg-sign): Bind pgg-default-user-id to MML + sender tag, if available. + +2003-04-16 Teodor Zlatanov + + * gnus-registry.el (gnus-register-action) + (gnus-register-spool-action, hashtable-to-alist) + (gnus-registry-translate-from-alist, alist-to-hashtable) + (gnus-registry-translate-to-alist, gnus-registry-headers-hashtb): + new variables and function fixes + + * gnus.el (gnus-registry-headers-alist): new variable to hold + article header data + (gnus-variable-list): save gnus-registry-headers-alist + + * spam-report.el (Module): new module for spam reporting + + * gnus.el (spam-process): added + gnus-group-spam-exit-processor-report-gmane to the list of choices + (gnus-install-group-spam-parameters): defined new spam exit processor + + * spam.el (autoload): autoload spam-report-gmane when needed + (spam-report-gmane-register-routine): glue for spam-report.el + (spam-group-spam-processor-report-gmane-p): glue for the + gnus-group-spam-exit-processor-report-gmane spam processor + (spam-summary-prepare-exit): check the report-gmane spam processor + and run spam-report-gmane-register-routine if it's active + + From John Wiegley + + * spam.el (spam-bogofilter-score): check bogofilter headers before + checking bogofilter itself + +2003-04-16 Dave Love + + * gnus-agent.el: Wrap defsetf in eval-when-compile. + (gnus-agent-cat-defaccessor): Don't use gensym. + + * mml1991.el: Require cl, mm-util when compiling. + (quoted-printable-decode-region, quoted-printable-encode-region): + Autoload. + + * pgg.el: Require cl when compiling. + + * nnmail.el (gnus): Require. + + * gnus-util.el: Move provide to end. + (gnus-string-equal): Maybe use compare-strings. + (gnus-merge): New. + + * gnus-sum.el (gnus-summary-prepare-threads): Don't use copy-list. + (gnus-summary-insert-articles): Use gnus-merge. + + * gnus-fun.el: Require cl and mm-util when compiling. + + * gnus-diary.el (gnus-diary-delay-format-french) + (gnus-diary-delay-format-english): Don't use setf with nthcdr. + + * nndiary.el (nndiary-compute-reminders): Don't use setf with + nthcdr. + +2003-04-16 Kevin Greiner + + * gnus-agent.el (gnus-agent-make-cat): Added optional parameter to + specify a predicate other than false. + (gnus-category-read): Use the new feature to create a 'default' + category with a 'short' predicate. + +2003-04-16 Lars Magne Ingebrigtsen + + * message.el (message-unique-id): Comment change. + + * gnus-art.el (gnus-article-next-page-1): New function. + (gnus-article-next-page): Use it. + +2003-04-15 Teodor Zlatanov + + * spam.el (spam-split): added save-restriction to save-excursion + +2003-04-15 Reiner Steib + From Julien Avarre + + * gnus-fun.el: Fixed autoload cookie. + +2003-04-15 Paul Jarc + From Remi Letot + + * nnmaildir.el (nnmaildir-request-scan): Use gnus-remove-if + instead of remove-if. + +2003-04-14 Katsumi Yamaoka + + * gnus-msg.el (gnus-summary-news-other-window): Use delq and + copy-sequence instead of remove which is a cl run-time function in + Emacs 20. + +2003-04-14 Jesper Harder + + * gnus-msg.el (gnus-summary-news-other-window): Make a buffer + local copy of gnus-discouraged-post-methods with the current + method removed. + +2003-04-14 Simon Josefsson + + * mailcap.el (mailcap-mime-data): Add application/pgp-keys. + +2003-04-13 Reiner Steib + + * mm-util.el (mm-sort-coding-systems-predicate): Convert elements + of `mm-coding-system-priorities' to base coding system. + + * gnus-sum.el: Added coding cookie ("middle dot" in + gnus-summary-morse-message). + +2003-04-13 Simon Josefsson + + * gnus-art.el (article-fill-long-lines) + (article-verify-x-pgp-sig, article-decode-group-name) + (gnus-mime-button-menu): Split >80 character lines. + +2003-04-13 Jesper Harder + + * gnus-sum.el (gnus-summary-local-variables): Use defvar since + we're let-binding it. + + * nnmbox.el (nnmbox-mbox-buffer): It's not a constant. + +2003-04-13 Lars Magne Ingebrigtsen + + * message.el (message-hide-headers): Don't do intangible. + + * gnus.el (gnus-group-prefixed-name): Comment out the test for + colon. + + * gnus-srvr.el (gnus-browse-read-group): Don't give the real name + to the ephemeral entry, but the prefixed name. + + * gnus.el (gnus-group-prefixed-name): Clean up. + +2003-04-13 Kevin Greiner + + * gnus-agent.el (gnus-agent-group-pathname): Bind + gnus-command-method so that gnus-agent-directory will always + return a valid directory. + * gnus-cache.el (gnus-cache-enter-article): Remove article from + gnus-newsgroup-undownloaded so that the summary will display the + article as downloaded. + (gnus-cache-remove-article): If the article isn't in the agent, + remove it from gnus-newsgroup-undownloaded so that the summary + will display the article as undownloaded. + +2003-04-13 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + +2003-04-13 01:12:01 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.18 is released. + +2003-04-13 Lars Magne Ingebrigtsen + + * gnus-draft.el (gnus-draft-send): Add message-hidden-headers. + +2003-04-12 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-next-page): Use + gnus-article-over-scroll. + (gnus-article-over-scroll): New variable. + + * message.el (message-newline-and-reformat): Place a boundary + before filling. + (message-make-forward-subject-function): Changed default to + message-forward-subject-name-subject. + (message-forward-subject-name-subject): New function. + + * nnimap.el (nnimap-split-fancy): Ditto. + + * gnus-sum.el (gnus-summary-line-message-size): Ditto. + + * gnus-cus.el (gnus-group-parameters): Removed "which see". + + * mml.el (mml-minibuffer-read-file): Bind + completion-ignored-extensions to nil. + + * message.el (message-fix-before-sending): Comment fix. + (message-fix-before-sending): Make hidden headers visible. + (message-hide-headers): Bind after-change-functions to nil. + (message-forbidden-properties): Put invisible and intangible + back. + (message-strip-forbidden-properties): Ignore message-hidden text. + + * gnus-msg.el: Hide headers. + + * message.el (message-hidden-headers): New variable. + (message-hide-headers): New function. + (message-hide-header-p): New function. + (message-hide-header-p): Change logic. + (message-forbidden-properties): Remove intangible nil invisible + nil. + (message-hide-headers): Narrow to headers. + + * lpath.el (featurep): Bind Info-directory, Info-menu. + +2003-04-12 Jesper Harder + + * mm-bodies.el (mm-body-charset-encoding-alist): UTF-16 *must* be + encoded. + (mm-encode-body): Don't corrupt UTF-16. + (mm-body-encoding): Pay attention to mm-body-charset-encoding-alist. + +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 + downloaded into the agent. + (gnus-agent-group-path): Modified to match nnmail-group-pathname + so that the agent front-end and back-end (nnagent) always use the + same directory. + (gnus-agent-group-pathname): New function. Wrapper for + nnmail-group-pathname. + (gnus-agent-expire-unagentized-dirs): New variable. May be + customized to disable gnus-agent-expire-unagentized-dirs. + (gnus-agent-expire-unagentized-dirs): Expand gnus-agent-directory + as the directories in gnus-agent-expire-current-dirs were + expanded. + +2003-04-10 Jesper Harder + + * gnus-sum.el (gnus-summary-make-menu-bar): Disable "Encrypt + body" entry in read only groups. + +2003-04-09 Jesper Harder + + * gnus-sum.el (gnus-summary-make-menu-bar): Disable "Import file" + and "Create article" items in non-editable groups. + +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 + use the fully qualified group name as gnus-active-to-gnus-format + blindly prefixes group names with server names. + (gnus-agent-save-group-info): Merge BOTH min/max of current active + range, was just merging min, with specified active range. + (gnus-agent-expire): Save agent's active ranges after + expiring all groups. + (gnus-agent-expire-group-1): Update min of agent's active range to + min article currently fetched. + (gnus-agent-expire-unagentized-dirs): Avoid asking to delete the + same ancestor multiple times. + + * gnus-async.el (gnus-asynchronous): Moved defcustom of + gnus-asynchronous away from defgroup of gnus-asynchronous. This + seems to fix an intermittant error in which loading gnus-async + fails to define gnus-asynchronous (the variable). + + * gnus-sum.el: Concur with Steve Young, 5th argument to 'load' is + non-essential. Removed on all platforms. + (gnus-select-newsgroup): When the agent is active, expand the + group's active range to include fetched articles that are no + longer in the server's active range. + + * gnus-util.el (gnus-with-output-to-file): Removed all of the + print-* bindings as they should be handled by the function doing + the printing. + +2003-04-09 Jesper Harder + + * mm-uu.el (mm-uu-copy-to-buffer): buffer-file-coding-system + might be unbound in non-MULE XEmacsen. + +2003-04-08 Jesper Harder + + * mm-uu.el (mm-uu-diff-groups-regexp, mm-uu-type-alist) + (mm-uu-diff-extract, mm-uu-diff-test): New functionality: + recognize diffs. + + * mm-bodies.el (mm-decode-body): Use the supplied charset + unconditionally if `code-pages' hasn't been loaded. + +2003-04-07 Jesper Harder + + * gnus-art.el (article-verify-x-pgp-sig): Don't use + `insert-buffer', the docstring says "This function is meant for + the user to run interactively. Don't call it from programs!" + + * mm-extern.el (mm-extern-mail-server): do. + + * mml1991.el (mml1991-mailcrypt-sign, mml1991-mailcrypt-sign) + (mml1991-gpg-sign, mml1991-gpg-encrypt, mml1991-pgg-sign) + (mml1991-pgg-encrypt): do. + + * pgg.el (pgg-decrypt-region): do. + + * mm-view.el (mm-view-pkcs7-decrypt): do. + + * mml-smime.el (mml-smime-verify): do. + + * mml.el (mml-insert-mime, mml-preview): do. + + * mml2015.el (mml2015-gpg-decrypt-1, mml2015-gpg-sign) + (mml2015-gpg-encrypt, mml2015-pgg-clear-decrypt) + (mml2015-pgg-encrypt): do. + +2003-04-06 Katsumi Yamaoka + + * mm-bodies.el (mm-decode-body): Silence XEmacs when compiling. + +2003-04-06 Jesper Harder + + * mm-uu.el (mm-uu-copy-to-buffer): Copy + `buffer-file-coding-system' to the new buffer. + (mm-uu-pgp-signed-extract-1): Don't copy + `buffer-file-coding-system' here. + + * mm-bodies.el (mm-decode-body): last-coding-system-used doesn't + exist in XEmacs. + (mm-decode-body): Add missing quote. + + * mm-uu.el (mm-uu-pgp-signed-extract-1): Set + buffer-file-coding-system. + + * mm-bodies.el (mm-decode-body): Set buffer-file-coding-system to + last-coding-system-used. + + * mml2015.el (mml2015-pgg-clear-verify): Encode the text + according to buffer-file-coding-system. + + * pgg-gpg.el (pgg-gpg-process-region): Revert previous change. + + * pgg-pgp.el (pgg-pgp-process-region, pgg-pgp-verify-region) + (pgg-pgp-snarf-keys-region): do. + + * pgg-pgp5.el (pgg-pgp5-verify-region) + (pgg-pgp5-snarf-keys-region, pgg-pgp5-process-region): do. + + * pgg.el (pgg-make-temp-file, pgg-temporary-file-directory): do. + +2003-04-05 Teodor Zlatanov + + * spam.el (spam-split): (save-excursion) around (widen) + (spam-ham-move-routine): Use spam-group-ham-mark-p, not + spam-group-spam-mark-p (from Michael Shields ) + +2003-04-05 Steve Youngs + + * 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 + + * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound + print-escape-nonascii to fix more characters in compiled format + specs. + +2003-04-05 Jesper Harder + + * gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player): + Fix customization type. + +2003-04-04 Kevin Greiner + + * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound + print-quoted, print-readably, print-escape-multibyte, and + print-level to match original behavior of gnus-prin1. This should + repair the format of .newsrc.eld when using compiled format specs. + +2003-04-04 Jesper Harder + + * gnus-group.el (tool-bar-map): defvar it. + + * gnus-art.el (tool-bar-map): do. + + * gnus-sum.el (tool-bar-map): do. + +2003-04-03 Jesper Harder + + * earcon.el (earcon-regexp-alist): catmeow is a wav file. + +2003-04-03 Reiner Steib + + * gnus-art.el (gnus-button-ctan-directory-regexp): Changed meaning + and value. + (gnus-button-alist): Use it. + +2003-04-03 Jesper Harder + + * pgg-gpg.el (pgg-gpg-process-region): do. + + * pgg-pgp.el (pgg-pgp-process-region, pgg-pgp-verify-region) + (pgg-pgp-snarf-keys-region): do. + + * pgg-pgp5.el (pgg-pgp5-verify-region) + (pgg-pgp5-snarf-keys-region, pgg-pgp5-process-region): Use it. + + * pgg.el (pgg-make-temp-file): New function. `make-temp-name' is + unsafe. + (pgg-temporary-file-directory): Remove. + +2003-04-02 Katsumi Yamaoka + + * lpath.el: Fbind Info-directory and Info-menu. + +2003-04-02 Reiner Steib + + * gnus-util.el (gnus-message): Added doc-string. + + * gnus-score.el (gnus-score-find-trace): Changed behavior of `q'. + (gnus-score-edit-file-at-point): Goto first match when using `e'. + +2003-04-01 Reiner Steib + + * gnus-art.el (gnus-button-ctan-directory-regexp): New variable. + (gnus-button-alist): Use it. Changed CTAN and "setq" entries. + +2003-04-01 Katsumi Yamaoka + + * nntp.el (nntp-via-rlogin-command-switches): Doc fix. + (nntp-open-via-rlogin-and-telnet): Disable the telnet linemode. + +2003-03-31 Kevin Greiner + + * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound + print-escape-newlines to print escape sequences rather than + literal newline characters. + +2003-03-31 Reiner Steib + + * gnus-art.el (gnus-button-valid-fqdn-regexp): Use + `message-valid-fqdn-regexp' for initialization. + (gnus-button-handle-info-url): Renamed and extended version of + `gnus-button-handle-info'. + (gnus-button-message-level): Renamed from `gnus-button-mail-level' + (gnus-button-handle-symbol, gnus-button-handle-library) + (gnus-button-handle-info-keystrokes): New functions. + (gnus-button-browse-level): New variable. + (gnus-button-alist): Use them. Added levels. + (gnus-header-button-alist): Added levels. + +2003-03-31 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + +2003-03-31 20:08:19 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.17 is released. + +2003-03-31 Lars Magne Ingebrigtsen + + * gnus-start.el (gnus-unload): Removed. + + * pop3.el (pop3-read-response): Use + nnheader-accept-process-output. + (pop3-retr): Ditto. + + * mm-view.el (mm-text-html-renderer-alist): Add -nolist to Lynx. + (mm-text-html-washer-alist): Ditto. + +2003-03-31 Simon Josefsson + + * imap.el (imap-gssapi-program): Also try GNU SASL. + (imap-gssapi-open): Accept GNU SASL greeting. + (imap-read-timeout): New. + (imap-wait-for-tag): Use it. + +2003-03-31 Lars Magne Ingebrigtsen + + * nntp.el (nntp-accept-process-output): Use new function. + + * nnheader.el (nnheader-read-timeout): New variable. + (nnheader-accept-process-output): New function. + + * nntp.el (nntp-read-timeout): Removed. + + * gnus-sum.el (gnus-summary-prepare-threads): Add comment. + +2003-03-30 Katsumi Yamaoka + + * gnus-cache.el (gnus-cache-braid-nov): Revoke last change. + +2003-03-30 Simon Josefsson + + * message.el (message-idna-inside-rhs-p): Narrow to header before + searching. + + * gnus-art.el (article-decode-idna-rhs): More restrictive regexp. + +2003-03-30 Lars Magne Ingebrigtsen + + * nnmail.el (nnmail-process-mmdf-mail-format): Indent. + +2003-03-28 Vasily Korytov + + * message.el (message-make-in-reply-to): Use + mail-extract-address-components to determine sender's + name/address. + +2003-03-30 Lars Magne Ingebrigtsen + + * nndoc.el (nndoc-type-alist): Move mime-parts further ahead. + + * gnus-registry.el (gnus-registry-translate-to-alist): Make a + valid lambda. + (gnus-registry-translate-from-alist): Ditto. + + * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bind + print-length to nil. + + * gnus-sum.el (gnus-summary-highlight-line-0): Indent. + + * gnus-fun.el (gnus-fun-ppm-change-string): New function. + (gnus-grab-cam-face): Use it. + +2003-03-28 Paul Jarc + + * nnmaildir.el (nnmaildir-request-set-mark) + (nnmaildir-close-group): Allow each mark directory in a group to + have its own inode for mark files, to accommodate AFS. + +2003-03-28 Teodor Zlatanov + + * gnus-start.el (gnus-read-newsrc-el-hook): new hook called by + gnus-read-newsrc-el-file + (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-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-27 Simon Josefsson + + * gnus-art.el (article-decode-group-name): Be correct instead of + smart. + +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 + for both Emacsen. + +2003-03-27 Jesper Harder + + * gnus-sum.el (gnus-article-loose-mime) + (gnus-article-emulate-mime): Move to gnus-article-mime customize + group. + + * gnus-msg.el (gnus-mailing-list-groups): Fix customize type and + doc string. + +2003-03-26 Kevin Ryde + + * gnus-sum.el (gnus-summary-find-for-reselect): Renamed from + gnus-summary-find-uncancelled, skip temporary articles inserted by + "refer" functions. + +2003-03-26 Vasily Korytov + + * smiley.el (smiley-buffer): New function. + +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 + gnus-summary-update-download-mark (which updates the article's + face by calling gnus-summary-update-line AND updates the download + mark to show that the article was fetched). + +2003-03-23 Kevin Greiner + + * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Provides + option of deleting agent directories for groups/servers that are + not currently agentized. + (gnus-agent-expire): Use gnus-agent-expire-unagentized-dirs. + + * gnus-int.el (gnus-open-server): Report backend errors in + condition handler. + +2003-03-23 Simon Josefsson + + * message.el (message-idna-to-ascii-rhs-1): Don't continue outside + header. + + * rfc2047.el (rfc2047-header-encoding-alist): Make Followup-To + same as Newsgroups. + + * nntp.el (nntp-open-connection-function): Mention + nntp-open-tls-stream. + (nntp-open-tls-stream): New function. + + * tls.el: New file. + + * nnimap.el (nnimap-server-port, nnimap-stream): Say TLS/SSL + instead of SSL. + (nnimap-stream): Add other streams, link to imap variables. + (nnimap-authenticator): Add other authenticator, link to imap + variables. + + * imap.el: Autoload open-tls-stream. + (imap-streams): Add tls in front of ssl. + (imap-stream-alist): Add tls. + (imap-default-tls-port): New variable. + (imap-tls-p, imap-tls-open): New functions. + +2003-03-22 ShengHuo ZHU + + * mm-url.el (mm-url-insert-file-contents): parse url only if + results is a list. + +2003-03-22 Lars Magne Ingebrigtsen + + * mail-source.el (mail-source-fetch-imap): Revert. + +2003-03-22 Svend Tollak Munkejord + + * deuglify.el (gnus-outlook-repair-attribution-outlook): Use a + less strict regexp. + +2003-03-22 Lars Magne Ingebrigtsen + + * mail-source.el (mail-source-fetch-imap): Use buffer name for + more imap function. + +2003-03-21 Simon Josefsson + + * gnus-art.el (article-decode-group-name): Replace Newsgroups and + Followup-To data inline. + +2003-03-21 Jesper Harder + + * gnus-art.el (gnus-treat-display-xface): Don't enable if + icontopbm isn't available. + +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. + + * gnus-sum.el (eval-when-compile): Modified to resolve + compile-time warnings. + + * gnus-uu.el (gnus-uu-mark-series): Added informative msg. + Reports length of series so that the user can compare N with a + subject that should, if the entire series is present, contain + '(.../N)'. + (gnus-uu-delete-work-dir): Avoid hanging when O/S forbids deletion + of temp file (Win-XP may leave the temp file locked when the + uudecode process fails). + +2003-03-20 ShengHuo ZHU + + * message.el (message-split-line): Ignore error. + + * lpath.el (split-line): Avoid split-line warning message. + +2003-03-20 Kim F. Storm + + * message.el (message-split-line): New function. + (message-mode-map): Remap split-line to message-split-line. + +2003-03-20 Katsumi Yamaoka + + * message.el (message-make-overlay): Defalias it to make-overlay. + (message-delete-overlay): Defalias it to delete-overlay. + (message-overlay-put): Defalias it to overlay-put. + (message-idna-to-ascii-rhs-1): Use them. + + * messagexmas.el (message-xmas-redefine): Defalias some overlay + functions to extent functions. + +2003-03-20 Reiner Steib + + * message.el (message-check-news-header-syntax): Fixed regexp. + +2003-03-20 ShengHuo ZHU + + * rfc2231.el (rfc2231-decode-encoded-string): Downcase charset. + + * mm-url.el (mm-url-insert): Move url-current-object stuff into + mm-url-insert-file-contents. + + * nnrss.el (nnrss-fetch): Fetch the local stuff. + (nnrss-check-group): Use it. + +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. + + Implemented support for Mark Pilgrim's RSS Autodiscovery.[2] This + means that if you want to read the RSS feed for example.com, all + you have to do is hit "G R http://www.example.com/ RET" and + nnrss.el will find and the feed listed on the site or (if you have + loaded xml-rpc.el) look it up on syndic8.com. + + Marked the message as HTML (by adding a Content-Type header) so + that Gnus will render it as html if the user wants that. + + Implemented the ability to save nnrss-group-alist so that any new + feeds the you subscribe to will be found the next time you start + up. + + Implemented support for RSS 2.0 elements (author, pubDate). + + Prefer for over where both + elements exist. + + * mm-url.el (mm-url-insert): Set url-current-object. + + * gnus-group.el (gnus-group-make-rss-group): New function. + +2003-03-20 Katsumi Yamaoka + + * message.el (message-idna-to-ascii-rhs-1): Don't use replace-* + for highlight overlays. + +2003-03-20 Katsumi Yamaoka + + * gnus-cache.el (gnus-cache-braid-nov): Test if a line looks like + a NOV. + +2003-03-20 Simon Josefsson + + * message.el (message-use-idna): Disable if UTF-8 unavailable. + (message-idna-to-ascii-rhs): Use it. + + * gnus-art.el (gnus-use-idna): Disable if UTF-8 unavailable. + +2003-03-19 Teodor Zlatanov + + * spam.el (spam-group-ham-mark-p, spam-group-spam-mark-p) + (spam-group-ham-marks, spam-group-spam-marks): new functions + (spam-spam-marks, spam-ham-marks): removed in favor of the + spam-marks and ham-marks parameters + (spam-generic-register-routine, spam-ham-move-routine): use the + new spam-group-{spam,ham}-mark-p functions + + * gnus.el (spam-marks, ham-marks): new group parameters with + default values same as the old spam-spam-marks and spam-ham-marks + +2003-03-19 Simon Josefsson + + * gnus-art.el (gnus-article-decode-hook): Add IDNA. + (gnus-use-idna): New variable. + (article-decode-idna-rhs): New function. + + * message.el (message-use-idna): New variable. + (message-mode-field-menu): Add entry for IDNA. + (message-idna-inside-rhs-p, message-idna-to-ascii-rhs-1) + (message-idna-to-ascii-rhs): New function. + (message-generate-headers): Invoke IDNA code. + +2003-03-19 Paul Jarc + + * nnmaildir.el (nnmaildir--system-name): New function. + (nnmaildir-request-accept-article): Use it. + +2003-03-19 Katsumi Yamaoka + + * gnus-util.el (gnus-byte-compile): Make it work silently as the + gnus-compile function does. + + * gnus-sum.el (gnus-summary-highlight-line-0): Revoke the last + bogus change. + +2003-03-19 Jesper Harder + + * mm-util.el (mm-mule-charset-to-mime-charset): Test if + sort-coding-systems is defined. + +2003-03-18 Paul Jarc + + * nnmaildir.el (nnmaildir-open-server, nnmaildir-request-scan) + (nnmaildir-request-create-group, nnmaildir-request-delete-group): + Replace create-directory with target-prefix. + +2003-03-18 Jesper Harder + + * mm-bodies.el (mm-decode-coding-region-safely): Don't use + find-charset-string which is slooow in XEmacs. + +2003-03-18 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-highlight-line-0): Silence the byte- + compiler under XEmacs. + +2003-03-18 Jesper Harder + + * gnus-art.el (gnus-treat-highlight-signature): Make the default + work for multipart/signed where the message text isn't `last'. + +2003-03-18 Katsumi Yamaoka + + * mm-view.el (mm-setup-w3m): Set w3m-display-inline-images to + the value of mm-inline-text-html-with-images. + (mm-inline-text-html-render-with-w3m): Don't bind + w3m-display-inline-images. + + * gnus-art.el (gnus-article-wash-html-with-w3m): Don't bind + w3m-display-inline-images. + + * lpath.el: Bind w3m-display-inline-images; bind mm-w3m-mode-map + regardless of an Emacs flavor. + +2003-03-18 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + +2003-03-18 00:38:22 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.16 is released. + +2003-03-18 Lars Magne Ingebrigtsen + + * lpath.el (featurep): Bind mm-w3m-mode-map. + +2003-03-17 Paul Jarc + + * nnmail.el (nnmail-cache-primary-mail-backend): Not all + 'respool-able backends define a global nnchoke-get-new-mail + variable. + +2003-03-17 Reiner Steib + + * gnus-art.el (gnus-mime-delete-part): New function. + (gnus-mime-action-alist, gnus-mime-button-commands): Use it. + +2003-03-17 Lars Magne Ingebrigtsen + + * message.el (message-check-news-header-syntax): Don't push + groups twice onto list of unknown groups. + + * nndoc.el (nndoc-type-alist): Move exim-bounce a bit further + back. + + * nnheader.el (nnheader-find-etc-directory): Doc fix. + + * gnus-msg.el (gnus-inews-add-send-actions): Don't restore window + config unless the summary buffer exists. + + * gnus-sum.el (gnus-summary-next-group): Semi-exit group first to + that target group is computed correctly when articles are marked + as read by Xref handling. + + * mail-source.el (mail-source-fetch-imap): Pass buffer-name to + imap-open. + + * message.el (message-send-mail): Add courtesy string to Bcc's, + too. + + * gnus-cite.el (gnus-cited-line-p): New function. + +2003-03-15 Jesper Harder + + * mm-bodies.el (mm-decode-body): Add new optional parameter, + force, to use the supplied charset unconditionally. + + * gnus-art.el (article-decode-charset): Use it. + +2003-03-14 Jesper Harder + + * mm-bodies.el (mm-decode-coding-region-safely): New function. + (mm-decode-body): Use it. + + * rfc2047.el (rfc2047-decode-region): do. + (rfc2047-decode-string): Guess coding system if the default is + invalid. + +2003-03-12 Paul Jarc + + * nnmaildir.el (nnmaildir-request-update-info): Pretend missing + articles are marked 'read, so we get correct article counts. + +2003-03-13 Katsumi Yamaoka + + * gnus-art.el (gnus-insert-mime-button): Exclude a newline from + the button. + (gnus-insert-prev-page-button): Ditto. + (gnus-insert-next-page-button): Ditto. + (gnus-insert-mime-security-button): Ditto. + + * mm-view.el (mm-inline-image-emacs): Open the bottom of an image + one line. Suggested by Greg Klanderman . + (mm-inline-image-xemacs): Ditto. + +2003-03-12 Paul Jarc + + * nnmaildir.el (nnmaildir--parse-filename, nnmaildir--sort-files, + nnmaildir--scan, nnmaildir-request-accept-article): Changes for + the recent filename uniqueness discussion. + +2003-03-12 Katsumi Yamaoka + + * mm-view.el (mm-inline-image-emacs): Make it delete an excessive + newline next time. + (mm-inline-image-xemacs): Ditto. + +2003-03-10 Jesper Harder + + * gnus-agent.el (gnus-agent-synchronize-flags-server): Don't use + kill-line. + +2003-03-09 Jesper Harder + + * gnus-msg.el (gnus-inews-insert-archive-gcc): Don't use + kill-line. + +2003-03-09 Kevin Greiner + + * gnus-agent.el (gnus-agent-fetched-hook): New variable. Just + fixing the code to match the documentation. + (gnus-agent-fetch-selected-article): Replaced + gnus-summary-update-article-line with gnus-summary-update-line as + the former did not correctly recalculate the thread indentation. + (gnus-agent-find-parameter): The agent-predicate, if not found + anywhere else, defaults to the value of gnus-agent-predicate. + (gnus-agent-fetch-session): Fixed typo; now executes + gnus-agent-fetched-hook rather than the undocumented + gnus-agent-fetch-hook. + (gnus-agent-fetch-group-1): Removed part of 2003-03-06 fix. The + default agent predicate is now provided by + gnus-agent-find-parameter. + (gnus-agent-message): New macro. This macro avoids potentially + costly parameter evaluation when the message's level is too high + to display. + (gnus-agent-expire-group-1): Disabled undo tracking in temp + overview buffer. Uses new gnus-agent-message macro to reduce + overhead of optional messages. Reversed message levels to + emphasize percent completion messages. Detailed messages of + little use except when debugging code. + +2003-03-08 Teodor Zlatanov + + * spam.el (spam-ham-move-routine): use + spam-mark-ham-unread-before-move-from-spam-group + (spam-mark-ham-unread-before-move-from-spam-group): new variable + +2003-03-07 Teodor Zlatanov + + * spam.el: load nnimap.el when compiling + (spam-setup-widening): use + nnimap-split-download-body-default instead of + nnimap-split-download-body which is a user-customizable variable + +2003-03-07 Simon Josefsson + + * nnimap.el (nnimap-split-download-body-default): New, holds + default for n-s-d-b. + (nnimap-split-download-body): Add new setting (symbol default), + which uses contents of n-s-d-b-d, and made it the default. + +2003-03-07 Teodor Zlatanov + + * spam.el (spam-use-hashcash): new variable + (spam-list-of-checks): added spam-use-hashcash with associated + spam-check-hashcash + (spam-check-hashcash): new function, installed iff hashcash.el is + loaded + (spam-setup-widening): don't use (return) + +2003-03-06 Kevin Greiner + + * gnus-agent.el (gnus-agent-fetch-group-1): Added default + predicate of `false' to avoid an error when a group defines no + predicate. Fixed typo that disabled agent scoring (i.e. the + low/high predicates should now work). + +2003-03-06 Teodor Zlatanov + + * spam.el: add spam-maybe-spam-stat-load to + gnus-get-top-new-news-hook, remove it from gnus-get-new-news-hook + (spam-bogofilter-register-with-bogofilter): use + spam-bogofilter-spam-switch and spam-bogofilter-ham-switch + (spam-bogofilter-spam-switch, spam-bogofilter-ham-switch): new + custom variables to replace "-s" and "-n" + + * gnus-group.el (gnus-group-get-new-news): call the new + gnus-get-top-new-news-hook hook + + * gnus-start.el (gnus-get-top-new-news-hook): new hook, run ONLY + by gnus-get-new-news, NOT by gnus-group-get-new-news-this-group + +2003-03-06 Lars Magne Ingebrigtsen + + * mm-uu.el (mm-uu-pgp-encrypted-test): Fix message. + +2003-03-06 Katsumi Yamaoka + + * gnus-cus.el (gnus-group-customize): Don't use delete-if which is + a cl run-time function. + +2003-03-06 Kevin Greiner + + * gnus-agent.el (gnus-agent-fetch-group-1): Added missing binding + on gnus-agent-short-article. + (gnus-category-read): Replaced CL function mapcar* with new macro: + gnus-mapcar. + * gnus-util.el (gnus-mapcar): New macro. Generalizes mapcar to + support functions that accept multiple parameters. A separate + sequence must be provided for each parameter in the function. + Iteration stops when the end of the shortest list is reached. + +2003-03-06 Jesper Harder + + * nnimap.el (nnimap-request-accept-article): Use delete-region. + + * html2text.el (html2text-clean-dtdd, html2text-delete-tags) + (html2text-delete-single-tag, html2text-clean-anchor) + (html2text-remove-tags): Use delete-region. + (html2text-fix-paragraphs): Simplify. + + * mml1991.el (mml1991-mailcrypt-sign, mml1991-mailcrypt-encrypt) + (mml1991-gpg-sign, mml1991-gpg-encrypt, mml1991-pgg-sign) + (mml1991-pgg-encrypt, mml1991-pgg-encrypt): Use delete-region, not + kill-region. + +2003-03-04 John Paul Wallington + + * gnus-agent.el (gnus-agent-enable-expiration) + (gnus-agent-article-alist, gnus-agent-article-alist) + (gnus-agent-cat-defaccessor): Doc fixes. + +2003-03-04 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-function-implies-unread-1): Grok + byte-compiled functions. + +2003-03-04 Kevin Greiner + + * gnus-sum.el (gnus-auto-goto-ignores): New variable. Provides + customization between new maneuvering (which permits selecting + undownloaded articles) and old maneuvering (which skipped over + undownloaded articles) behaviors. + (gnus-summary-find-next): Pass through the unread and subject + parameters when calling gnus-summary-find-prev. + (gnus-summary-find-next,gnus-summary-find-prev): Apply + gnus-auto-goto-ignores to filter out unacceptable articles. + +2003-03-04 Jesper Harder + + * mail-source.el (mail-source-read-passwd): Remove. `read-passwd' + exists in all supported Emacs versions, so we don't need this + compatibility function. + (mail-source-fetch-pop, mail-source-check-pop) + (mail-source-fetch-webmail): Use read-passwd. + + * nntp.el (nntp-send-authinfo, nntp-send-nosy-authinfo) + (nntp-open-telnet, nntp-open-via-telnet-and-telnet): Use + read-passwd. + + * nnwarchive.el (nnwarchive-open-server): Use read-passwd. + + * imap.el (imap-read-passwd): Remove. + (imap-interactive-login): Use read-passwd. + + * canlock.el (canlock-read-passwd): Remove. + (canlock-insert-header, canlock-verify): Use read-passwd. + + * sieve-manage.el (sieve-manage-read-passwd): Remove. + (sieve-manage-interactive-login): Use read-passwd. + + * pop3.el (pop3-read-passwd): Remove. + (pop3-movemail, pop3-get-message-count, pop3-apop): Use + read-passwd. + + * pgg.el (pgg-read-passphrase): Simplify. + +2003-03-04 Kevin Greiner + + * gnus-agent.el (gnus-agent-mode): Fixed the mode line reports + 'plugged' when actually 'unplugged' bug. + (gnus-category-read): Ignore nil values when converting an + old-format category so that the new-format category will default + those attributes to the global variables. + +2003-03-03 Reiner Steib + + * mail-source.el (mail-source-delete-old-incoming-confirm): Fixed + doc-string. + +2003-03-03 Jesper Harder + + * nnrss.el (nnrss-decode-entities-unibyte-string): Use `buffer-string'. + * nndoc.el (nndoc-dissect-mime-parts-sub): do. + * nndb.el (nndb-request-accept-article, nndb-status-message): do. + * mm-url.el (mm-url-decode-entities-string): do. + * mml1991.el (mml1991-mailcrypt-sign, mml1991-gpg-sign): do. + * mm-decode.el (mm-find-raw-part-by-type): do. + * message.el (message-send-mail-partially) + (message-send-mail-with-sendmail): do. + * gnus-uu.el (gnus-uu-save-article, gnus-uu-reginize-string): do. + * gnus-kill.el (gnus-pp-gnus-kill): do. + * gnus-art.el (gnus-article-treat-unfold-headers) + (gnus-article-encrypt-body): do. + +2003-02-24 Reiner Steib + + * mail-source.el (mail-source-delete-incoming): Allow integer value. + (mail-source-delete-old-incoming-confirm): New variable. + (mail-source-delete-old-incoming): Use it. New function. + (mail-source-callback): Call `mail-source-delete-old-incoming' if + `mail-source-delete-incoming' is a nonnegative integer. + +2003-03-03 Reiner Steib + + * gnus-msg.el (gnus-extended-version): Fix for 'emacs-gnus-config. + (gnus-user-agent): Fixed typo. + +2003-03-03 Kevin Greiner + + * gnus-agent.el (gnus-agent-enable-expiration): Fixed documentation. + (gnus-agent-expire-group-1): Removed invalid (interactive) specifier. + +2003-03-03 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-fetch-articles): Fix nil message. + (gnus-agent-fetch-session): Allow debugging to take place. + +2003-03-03 Jesper Harder + + * gnus-sum.el (gnus-highlight-selected-summary) + (gnus-article-get-xrefs, gnus-summary-show-thread): Use + `gnus-point-at-bol' and `gnus-point-at-eol' instead of + `(progn (beginning-of-line) (point))'. It's shorter, faster, + and makes it clear that we don't need the side effect. + * gnus-util.el (gnus-delete-line): do. + * gnus-xmas.el (gnus-group-add-icon): do. + * nnmail.el (nnmail-article-group, nnmail-cache-fetch-group): do. + * nntp.el (nntp-send-authinfo-from-file): do. + * nnml.el (nnml-header-value): do. + * nnheader.el (nnheader-insert-references): do. + * gnus-cite.el (gnus-article-highlight-citation) + (gnus-cite-parse): do. + * gnus-score.el (gnus-score-followup): do. + * gnus-draft.el (gnus-draft-send): do. + * gnus-group.el (gnus-group-highlight-line): do. + * gnus-cache.el (gnus-cache-braid-nov): do. + * nnfolder.el (nnfolder-retrieve-headers) + (nnfolder-request-article): do. + * gnus-art.el (article-hide-boring-headers) + (gnus-article-hide-header): do. + + * nnheader.el (nnheader-find-nov-line): Use gnus-delete-line. + * nnml.el (nnml-request-replace-article): do. + * nnmbox.el (nnmbox-request-move-article, nnmbox-delete-mail): do. + * nnfolder.el (nnfolder-request-move-article): do. + * gnus-cache.el (gnus-cache-possibly-remove-article): do. + * gnus-art.el (gnus-mm-display-part): do. + + * gnus-art.el (gnus-article-goto-part): Use gnus-goto-char. + +2003-03-02 Kevin Greiner + + * nntp.el (nntp-possibly-change-group): Avoid calling + process-buffer on nil (Which happened when you lost your + connection while fetching); instead signal a "Server Closed + Connection" error. + +2003-03-02 Kevin Greiner + + * gnus-agent.el (gnus-agent-enable-expiration): New + variable. Either ENABLE or DISABLE. Sets default behavior for + selecting which groups are expired. + (gnus-agent-cat-set-property, gnus-agent-cat-defaccessor, + gnus-agent-set-cat-groups): Provides abstract interface for + accessing agent category. Category now implemented by an alist. + (gnus-agent-add-group, gnus-agent-remove-group, + gnus-category-insert-line, gnus-category-edit-predicate, + gnus-category-edit-score, gnus-category-edit-groups, + gnus-category-copy, gnus-category-add, gnus-group-category): Use + new agent category abstraction. + (gnus-agent-find-parameter): New function. Search for agent + configuration parameter first in the group's parameters, then its + topics (if any), and then the group's category. If not found + anywhere, use the original defined constants. + (gnus-agent-fetch-headers, gnus-agent-fetch-group-1): Use new + gnus-agent-find-parameter. + (gnus-agent-fetch-headers, gnus-agent-uncached-articles): Clearing + gnus-agent-cache now blocks retrieving headers and articles from + the local cache. Fetched content is still added to the cache + before being returned. + (gnus-agent-fetch-session): Use error-message-string to generate + displayed error message. + (gnus-agent-customize-category): New Command. 'e' in category + buffer opens category customization buffer. + (gnus-category-read): Reads either positional or alist format; + returns alist format. + (gnus-category-write): Writes category file compatible with + current, and previous, versions of gnus-agent. + (gnus-category-make-function, gnus-category-make-function-1): + Corrected documentation; parameter is predicate NOT category. + (gnus-predicate-implies-unread): Now works in more cases per the + todo comment. + (gnus-function-implies-unread-1): New function. Supports + gnus-predicate-implies-unread. + (gnus-agent-expire-group): Command now provides default of group + under point. + (gnus-agent-expire-group-1): Obeys new agent-enable-expiration and + agent-days-until-old parameters. No longer supports + gnus-agent-expire-days being set to an alist. + (gnus-agent-request-article): Now performs its own checks of + gnus-agent, gnus-agent-cache, and gnus-plugged rather than + assuming that the caller will do them correctly. + (): Added one-time hook to gnus-group-prepare-hook. Detects when + gnus-agent-expire-days is set to an alist. Converts said alist + into group parameter so that gnus-agent-expire-days will not be + needed. + * gnus-art.el (gnus-request-article-this-buffer): Conditional + checks surrounding gnus-agent-request-article removed; now + performed by gnus-agent-request-article. + * gnus-cus.el (gnus-agent-parameters): New variable. List of + customizable group/topic parameters that regulate the agent. + (gnus-group-customize): Uses gnus-agent-parameters. Replaced + kill-buffer with gnus-kill-buffer to remove the killed buffer from + the list of gnus buffers. + (gnus-trim-whitespace): Removes leading and trailing whitespace + from multiline strings. + (gnus-agent-cat-prepare-category-field, + gnus-agent-customize-category): Constructs a category + customization buffer. + * gnus-int.el (gnus-retrieve-headers, + gnus-request-expire-articles): No longer checks gnus-agent-cache + as it is handled internally by the agent. + (gnus-request-head, gnus-request-body): Conditional checks + surrounding gnus-agent-request-article removed; now performed by + gnus-agent-request-article. + + * gnus-start.el (): Added defvar statements to resolve compilation + warnings. + (gnus-long-file-names): New function. Isolates platform dependent + msdos-long-file-names. + (gnus-save-startup-file-via-temp-buffer): New variable. Provides + option of writing directly to file. Avoids memory exhausted + errors when .newsrc.eld is huge. + (gnus-save-newsrc-file): Uses new + gnus-save-startup-file-via-temp-buffer. + (gnus-gnus-to-quick-newsrc-format): Rewritten to write to + standard-output. + (gnus-display-time-event-handler): Changed to alias from a defun + to avoid a compile-time warning when display-time-event-handler is + not defined. + * gnus-util.el (gnus-with-output-to-file): New macro. Binds + standard-output such that prin1 and princ will write directly to a + file. + + * gnus.el (gnus-agent-cache): Expanded documentation. + (gnus-summary-high-undownloaded-face): Removed second bold keyword + so that this face is actually bold. + + * nnkiboze.el (nnkiboze-request-article): Only use the cache when + gnus-use-cache has been set. + +2003-03-02 Jesper Harder + + * nnvirtual.el (nnvirtual-update-xref-header): Simplify. + +2003-03-01 Jesper Harder + + * gnus-art.el (gnus-article-refer-article): Be more permissive. + +2003-03-01 ShengHuo ZHU + + * 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 + problems. + +2003-03-01 Teodor Zlatanov + + * spam.el (spam-maybe-spam-stat-load, spam-maybe-spam-stat-load): + load stats iff spam-use-stat is on + + * spam.el: add spam-maybe-spam-stat-load to gnus-startup hook, + also use spam-maybe-spam-stat-load and spam-maybe-spam-stat-save + instead of spam-stat-load and spam-stat-save in the + gnus-get-new-news-hook and gnus-save-newsrc-hook, respectively + +2003-03-01 ShengHuo ZHU + + * mm-view.el (mm-inline-text): Ignore errors from enriched-decode. + +2003-03-01 Lars Magne Ingebrigtsen + + * message.el (message-make-fqdn): Protect against nil user-mail. + +2003-02-28 Vasily Korytov + + * gnus-art.el (gnus-boring-article-headers): New values: + 'to-list and 'cc-list. + +2003-02-28 Teodor Zlatanov + + * spam.el (spam-setup-widening): new function to set + nnimap-split-download-body, we add it to gnus-get-new-news-hook + (spam-list-of-statistical-checks): list of statistical splitter + checks + (spam-split): added a widen call when a statistical check is + enabled + +2003-02-28 Reiner Steib + + * gnus-msg.el (gnus-user-agent): Changed default to + 'emacs-gnus-type, renamed 'full. + +2003-02-28 ShengHuo ZHU + + * nnfolder.el (nnfolder-request-accept-article): Don't use + mail-header-unfold-field. + +2003-02-27 ShengHuo ZHU + + * imap.el (imap-ssl-open): Don't depend on ssl.el. + * nntp.el (nntp-open-ssl-stream): Don't depend on ssl.el. + +2003-02-26 Teodor Zlatanov + + * spam.el: add spam-stat-load to gnus-get-new-news-hook + (spam-split): remove spam-stat-load call + +2003-02-26 Simon Josefsson + + * gnus-sum.el (gnus-summary-toggle-header): Run + gnus-article-decode-hook instead of calling a-decode-encoded-words + directly (the latter is run as part of the former). + +2003-02-26 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-expire-group): Remove debug. + +2003-02-25 Jesper Harder + + * message.el (message-sendmail-envelope-from): New option. + (message-sendmail-envelope-from): New function. + (message-send-mail-with-sendmail): Use it. + +2003-02-25 Reiner Steib + + * gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): Added + compensation for TDMA addresses. + +2003-02-24 Reiner Steib + + * gnus-msg.el (gnus-user-agent): New variable. + (gnus-version-expose-system): Removed. Obsoleted by + `gnus-user-agent'. + (gnus-extended-version): Use `gnus-user-agent'. + +2003-02-24 Teodor Zlatanov + + * spam.el (spam-stat-register-spam-routine, + spam-stat-register-ham-routine): remove spam-stat-save + (spam-stat hook): add spam-stat-save to the gnus-save-newsrc-hook + +2003-02-24 Kevin Greiner + + * gnus-group.el (gnus-topic-mode-p): Fixed free variable + reference. + +2003-02-24 Kevin Greiner + + * nnheader.el (nnheader-find-nov-line): Changed midpoint + calculation to avoid integer overflow. + +2003-02-24 Reiner Steib + + * gnus-start.el (gnus-backup-startup-file): Fixed custom type. + +2003-02-24 Ted Zlatanov + * spam.el: disabled spam-get-article-as-filename + + From Michael Shields + + * gnus-group.el (gnus-group-is-exiting-without-update-p): New. + * gnus-sum.el (gnus-summary-exit-no-update): Use it. + * gnus-sum.el (gnus-summary-expire-articles): Use it. + * spam.el (spam-summary-prepare-exit): Use it. + * gnus.el (gnus-install-group-spam-parameters): New. + * spam.el (spam-group-ham-processor-copy-p): New. + * spam.el (spam-summary-prepare-exit): Support for ham copying. + * spam.el (spam-mark-spam-as-expired-and-move-routine): Fix bug + that would cause the current message to be moved if the group had + no spam. + * spam.el (spam-ham-move-routine): New `copy' argument. + +2003-02-24 Kai Gro,A_(Bjohann + From Martin Thornquist + + * gnus-topic.el (gnus-topic-select-group): Select last group if + after last group. + * gnus-group.el (gnus-group-select-group): Ditto. + +2003-02-24 Katsumi Yamaoka + + * gnus-art.el (popup-menu): Compiler macro for Emacs 20. + (gnus-article-refer-article): Use gnus-point-at-(b|e)ol instead of + point-at-(b|e)ol which aren't available in Emacs 20. + + * gnus-registry.el (puthash): Alias to cl-puthash for Emacs 20. + +2003-02-23 Kevin Greiner + + * gnus-start.el (gnus-activate-group): Re-enabled the catch error + clause of the condition-case statement. Errors connecting to a + server no longer terminate gnus. + + * gnus-agent.el (gnus-agent-toggle-plugged): Renamed parameter to + make its use obvious. Added no-nothing case to avoid + opening(closing) servers when already open(closed). + (gnus-agent-while-plugged): Added macro to facilitate internal use + of gnus-agent-toggle-plugged. + (gnus-agent-fetch-group): Use new gnus-agent-while-plugged to + temporarily open servers. + (gnus-agent-get-undownloaded-list): Sort list of article numbers + as sorting gnus-newsgroup-headers is wrong. + (gnus-agent-summary-fetch-group): Use new gnus-agent-while-plugged + to temporarily open servers. Corrected logic to handle setting + gnus-agent-mark-unread-after-downloaded. + (gnus-agent-fetch-articles): Now handles headers with missing + article sizes and/or missing article lengths. Now clears the + message buffer when finished. + (gnus-agent-fetch-group-1): Position point before calling + gnus-summary-set-agent-mark. + (gnus-get-predicate): Corrected description, parameter is + predicate not category. + (gnus-agent-expire-group): Adapted the gnus-agent-expire-* code to + provide a separate single group expiration function. + (gnus-agent-regenerate-group): Now clears the message buffer when + finished. + +2003-02-23 Kai Gro,A_(Bjohann + + * gnus.el (gnus-agent-target-move-group-header): New variable. + * gnus-draft.el (gnus-draft-send): If special header + "X-Gnus-Agent-Target-Move-Group" is present, do like Gcc into + that group, instead of performing the regular sending functions. + +2003-02-23 Katsumi Yamaoka + + * gnus-xmas.el (gnus-xmas-mime-button-menu): Accept a prefix arg. + +2003-02-20 Reiner Steib + + * message.el (message-user-fqdn, message-valid-fqdn-regexp): New + variables. + (message-make-fqdn): Use it. Improved validity check. + +2003-02-23 Lars Magne Ingebrigtsen + + * message.el (message-user-mail-address): Check whether + user-mail-address looks valid. + + * gnus-msg.el (gnus-mailing-list-followup-to): New function. + + * gnus-util.el (gnus-fetch-original-field): New function. + +2003-02-23 Kai Gro,A_(Bjohann + + * message.el (message-mode): \\(...\\) around additional + paragraph-separate alternative. + +2003-02-23 Jesper Harder + + * gnus-art.el (gnus-mime-button-commands): Add ellipsis. + (gnus-mime-button-menu): Define MIME popup menu with easy-menu to + display key bindings. + (gnus-mime-button-menu): Rewrite. + +2003-02-23 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-button-url-regexp): Removed `. + +2003-02-23 Max Froumentin + + * gnus-art.el (gnus-button-url-regexp): Remove `, enter '. + +2003-02-23 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-mime-action-on-part): Require a match + interactively. + + * gnus-start.el (gnus-save-newsrc-file): Use + gnus-backup-startup-file. + (gnus-backup-startup-file): New variable. + +2003-02-22 Lars Magne Ingebrigtsen + + * gnus.el (gnus-summary-buffer-name): Moved function here. + + * gnus-draft.el (defun): Remove debug. + +2003-02-22 Jesper Harder + + * gnus-sum.el (gnus-summary-refer-article): Skip method if we + can't open server. + +2003-02-22 Lars Magne Ingebrigtsen + + * gnus-draft.el (defun): Configure posting styles. + + * 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 + + * message.el (message-mode): MML tags separate paragraphs. Small + change from David S Goldberg . + + * gnus-agent.el (gnus-agent-get-undownloaded-list): Sort + `gnus-newsgroup-headers'. + + * gnus-art.el (gnus-article-refer-article): Grok more message id + formats. From Karl Pfl,Ad(Bsterer . + +2003-02-22 Jesper Harder + + * mm-decode.el (mm-path-name-rewrite-functions): Doc fix: don't + use "path name". + +2003-02-21 Teodor Zlatanov + + * gnus-sum.el (gnus-summary-move-article) + (gnus-summary-expire-articles): send data header for article, not + just article ID + + * gnus-registry.el (gnus-registry-hashtb, gnus-register-action) + (gnus-register-spool-action): added hashtable of message ID keys + with message motion data + +2003-02-21 Florian Weimer + From Reiner Steib . + + * gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): New + variable, used in `gnus-button-mid-or-mail-heuristic'. + (gnus-button-mid-or-mail-heuristic): New function derived from + Florian Weimer's Perl script. + (gnus-button-handle-mid-or-mail): Allow a function instead of + 'guess. + (gnus-button-guessed-mid-regexp): Removed. + +2003-02-20 Katsumi Yamaoka + + * message.el (message-resend): Bind message-setup-hook to nil; + remove X-Draft-From header. + +2003-02-20 Jesper Harder + + * gnus-sum.el (gnus-simplify-subject-fully, gnus-subject-equal) + (gnus-newsgroup-undownloaded) + (gnus-summary-save-parts-default-mime, gnus-auto-select-next): + Doc fixes. + +2003-02-17 John Paul Wallington + + * gnus.el (gnus-shell-command-separator, gnus-email-address) + (gnus-default-charset, gnus-other-frame-parameters): Doc fixes. + +2003-02-20 Jesper Harder + + * gnus-spec.el (gnus-xmas-format): Use insert instead of + insert-string which is obsolete in Emacs 22.1. + + * message.el (message-cross-post-followup-to-header): do. + + * spam.el (spam-ifile-register-with-ifile) + (spam-stat-register-spam-routine) + (spam-stat-register-ham-routine) + (spam-bogofilter-register-with-bogofilter): do. + + * mailcap.el (mailcap-mime-data): Fix typo. + + * gnus-topic.el (gnus-topic-make-menu-bar): Add ellipsis. + +2003-02-19 Reiner Steib + + * gnus-cite.el (gnus-cite-unsightly-citation-regexp) + (gnus-cite-parse): Renamed `gnus-unsightly-citation-regexp' to + `gnus-cite-unsightly-citation-regexp'. + +2003-02-19 Katsumi Yamaoka + + * gnus-msg.el (gnus-copy-article-buffer): Copy an article header + even if there's just a header. + +2003-02-19 Jesper Harder + + * message.el (message-fix-before-sending): Fix highlighting of + illegible and invisible text. + + * gnus-util.el (gnus-multiple-choice): Separate choices with + ",,A (B". Suggested by Dan Jacobson . + +2003-02-18 Jesper Harder + + * gnus-sum.el (gnus-summary-exit-no-update): Use gnus-kill-buffer. + +2003-02-18 Teodor Zlatanov + + * spam.el (spam-ham-move-routine) + (spam-mark-spam-as-expired-and-move-routine): use + gnus-summary-kill-process-mark and gnus-summary-yank-process-mark + around process-mark manipulation on the group + +2003-02-17 Kai Gro,A_(Bjohann + + * gnus-sum.el (gnus-summary-make-menu-bar): Add MIME/Multipart + submenu. + +2003-02-17 Lars Magne Ingebrigtsen + + * mail-source.el (mail-source-fetch): Reverse the return value of + the continuation question. + +2003-02-16 Lars Magne Ingebrigtsen + + * nndraft.el (nndraft-request-move-article): Bind + nnmh-allow-delete-final to t. + +2003-02-14 ShengHuo ZHU + + * mm-uu.el (mm-uu-uu-filename): Fix use of character constant. + +2003-02-11 Stefan Monnier + + * nntp.el (nntp-accept-process-output): Don't use point-max to get + the buffer's size. + +2003-01-31 Joe Buehler + + * nnheader.el: Added cygwin to system-type comparisons. + +2003-01-27 Juanma Barranquero + + * imap.el (imap-mailbox-status): Fix typo. + +2003-02-14 ShengHuo ZHU + + * gnus-art.el (gnus-article-prepare): Don't set agent mark if + online. + +2003-02-14 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-group-make-menu-bar): Include all + commands. + * gnus-sum.el: Small change from Frank Weinberg + : + (gnus-auto-center-group): New variable. + (gnus-summary-read-group-1): Use it. + (gnus-summary-next-group): Fix docstring. + +2003-02-13 Katsumi Yamaoka + + * gnus-util.el (gnus-faces-at): Simplify. + +2003-02-13 Teodor Zlatanov + + * spam.el (spam-ham-move-routine) + (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 + + * 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 . + +2003-02-13 Katsumi Yamaoka + + * gnus-art.el (gnus-article-only-boring-p): Make sure that the + gnus-article-boring-faces variable is bound; use gnus-faces-at. + + * gnus-util.el (gnus-faces-at): New macro. + +2003-02-13 Michael Shields + + * gnus-cite.el + (gnus-cite-attribution-suffix, gnus-cite-parse): + Better handling for Microsoft citation styles. + (gnus-unsightly-citation-regexp): New. + +2003-02-12 Michael Shields + + * gnus-art.el (article-strip-banner): Strip both per-group and + per-user-address banners. + (article-really-strip-banner): New. + +2003-02-12 Michael Shields + + * gnus-sum.el (gnus-article-goto-next-page, + gnus-article-goto-prev-page): Call gnus-summary-*-page, instead of + relying on the summary bindings of `n' and `p'. + +2003-02-12 Michael Shields + + * gnus-art.el (gnus-article-only-boring-p): New. + (gnus-article-skip-boring): New. + * gnus-cite.el (gnus-article-boring-faces): New. + * gnus-sum.el (gnus-summary-next-page): Use + gnus-article-only-boring-p. + +2003-02-12 Teodor Zlatanov + + * spam.el (spam-mark-spam-as-expired-and-move-routine) + (spam-ham-move-routine): unmark all articles before marking those + of interest and calling gnus-summary-move-article + +2003-02-12 Jesper Harder + + * gnus.el (gnus-kill-buffer): Move to gnus.el because it's + logically the complement of gnus-get-buffer-create and + gnus-add-buffer. + + * gnus-util.el (gnus-kill-buffer): do. + + * nnmail.el: Autoload gnus-kill-buffer. + +2003-02-11 Kevin Greiner + + * gnus-agent.el (gnus-summary-set-agent-mark): Added call to + gnus-summary-goto-subject as gnus-summary-update-mark operates on + the current LINE. + (gnus-agent-summary-fetch-group): Minimized the number of times + that the article is updated in the buffer. + +2003-02-11 Teodor Zlatanov + + * spam.el (spam-ham-move-routine): use the process-mark instead of + gnus-current-article when moving articles + (spam-mark-spam-as-expired-and-move-routine): ditto, use the process-mark + +2003-02-11 Lars Magne Ingebrigtsen + + * gnus-topic.el (gnus-topic-expire-articles): Recursive. + (gnus-topic-catchup-articles): Ditto. + (gnus-topic-mark-topic): Reverse recursive logic. + +2003-02-11 Jesper Harder + + * gnus-sum.el (gnus-summary-refer-thread): Handle case where + gnus-refer-thread-limit is t. + +2003-02-10 Jesper Harder + + * mm-util.el (mm-mule-charset-to-mime-charset): Use + sort-coding-systems to prefer utf-8 over utf-16. + +2003-02-09 Kevin Greiner + + * gnus-agent.el (gnus-agent-expire-days): + gnus-request-move-article depends on gnus-agent-expire to clean up + the cache after moving the article. Therefore, g-a-e-d can NOT + default to nil or can gnus-agent-expire be disabled by doing so. + If you don't want to run gnus-agent-expire, don't call it. + (gnus-agent-expire): The broken test to disable gnus-agent-expire + when g-a-e-d was NOT nil was removed. + (gnus-agent-article-name): Removed unnecessary input test as + article IDs are always strings. + (gnus-agent-regenerate-group): Added check to protect against + servers that generate absurdly long article IDs. Valid IDs are + less than 10 digits to avoid overflow errors. Fixed logic error + when ensuring that the final article ID is present in the new + alist. + +2003-02-09 Lars Magne Ingebrigtsen + + * gnus-topic.el (gnus-topic-goto-missing-topic): Just move to the + next line after finding the parent. + +2003-02-08 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bumped. + +2003-02-08 23:23:27 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.15 is released. + +2003-02-08 Michael Welsh Duggan + + * nnmail.el (nnmail-split-it): If a message ends up matching the + same mailbox more than once, it will cause duplicates to appear + in the mailbox. + +2003-02-08 Simon Josefsson + + * 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 Jesper Harder + + * gnus-art.el (gnus-article-refer-article): Use + gnus-replace-in-string. + + * gnus-util.el (gnus-map-function): Remove unneeded let-binding. + (gnus-remove-duplicates): do. + +2003-02-07 Teodor Zlatanov + + * gnus-int.el (gnus-internal-registry-spool-current-method): new variable + (gnus-request-scan): set + gnus-internal-registry-spool-current-method to gnus-command-method + before a request-scan operation + + * gnus-registry.el (regtest-nnmail): use + gnus-internal-registry-spool-current-method + +2003-02-07 Lars Magne Ingebrigtsen + + * mail-source.el (mail-source-fetch): Typo fix. + +2003-02-07 Teodor Zlatanov + + * nnmail.el (nnmail-spool-hook): new hook + (nnmail-cache-insert): call nnmail-spool-hook + + * gnus-registry.el: new file with examples of using the hooks + + * gnus.el (gnus-registry): added registry customization group + (gnus-group-prefixed-name): improve function to return full group + name optionally + (gnus-group-guess-prefixed-name): shortcut to + gnus-group-prefixed-name, using just the group name + (gnus-group-full-name): always get a group's full name + (gnus-group-guess-full-name): shortcut, using just the group name + + * gnus-sum.el (gnus-summary-article-move-hook) + (gnus-summary-article-delete-hook) + (gnus-summary-article-expire-hook): new hooks + (gnus-summary-move-article, gnus-summary-expire-articles) + (gnus-summary-delete-article): invoke the new hooks + +2003-02-07 Frank Weinberg + + * gnus-art.el (gnus-article-refer-article): Strip leading "news:" + from message-ID + +2003-02-07 Jesper Harder + + * gnus-util.el (gnus-run-hooks): Use save-current-buffer. + +2003-02-07 John Paul Wallington + + * mm-util.el (mm-delete-duplicates, mm-append-to-file) + (mm-write-region, mm-detect-coding-region): Doc fixes. + +2003-02-07 Lars Magne Ingebrigtsen + + * mail-source.el (mail-source-fetch): Ignore errors. + (mail-source-ignore-errors): New variable. + + * gnus-sum.el (gnus-summary-refer-thread): Don't re-fetch current + articles. + + * gnus-msg.el (gnus-version-expose-system): Change default. + +2003-02-07 Vasily Korytov + + * gnus-msg.el (gnus-version-expose-system): New variable. + +2003-02-07 Simon Josefsson + + * mml-sec.el (mml-unsecure-message): Don't use kill-region. Tiny + patch from deskpot@myrealbox.com (Vasily Korytov). + +2003-02-02 Lars Magne Ingebrigtsen + + * gnus-art.el (article-display-face): Get the Face header from + the current buffer. + +2003-02-06 Katsumi Yamaoka + + * gnus-art.el (gnus-mime-view-part-internally): Bind + buffer-read-only to nil. + +2003-02-05 Katsumi Yamaoka + + * gnus-agent.el (gnus-agent-expire-1,2): Pass the dir argument + from g-a-e-1 to g-a-e-2. + +2003-02-05 Teodor Zlatanov + + * spam.el (spam-check-BBDB): no need to regexp-quote the argument + of bbdb-search-simple, use spam-use-BBDB-exclusive + (spam-check-whitelist): use spam-use-whitelist-exclusive + (spam-use-whitelist-exclusive): new variable affecting + spam-use-whitelist + (spam-use-BBDB-exclusive): new variable affecting spam-use-BBDB + +2003-02-05 Simon Josefsson + + * gnus-agent.el (gnus-agent-expire-days): Change default to nil. + (gnus-agent-expire): Don't expire if g-a-e-d is nil. + (gnus-agent-expire): Move most code into gnus-agent-expire-1. + (gnus-agent-expire-1): New. + (gnus-agent-expire-1): Move code into gnus-agent-expire-2. + (gnus-agent-expire-2): New. + +2003-02-05 Jesper Harder + + * gnus-util.el (gnus-delete-if): Rename to gnus-remove-if. + "delete-if" is misleading because it isn't actually destructive. + + * gnus-topic.el (gnus-group-prepare-topics): Use new name. + + * nnmail.el (nnmail-purge-split-history): do. + + * gnus-win.el (gnus-get-buffer-window): do. + + * gnus-sum.el (gnus-simplify-whitespace): Remove unnecessary + let-binding. + (gnus-simplify-all-whitespace): do. + +2003-02-05 Katsumi Yamaoka + + * gnus-delay.el (gnus-delay-article): Fix binding of the + nndraft:delayed group. + +2003-02-04 Teodor Zlatanov + + * gnus.el (spam group parameters): change 'other to 'const in + the group parameter definitions to soothe XEmacs + +2003-02-04 Kai Gro,A_(Bjohann + + * gnus-delay.el (gnus-delay-article): Really create + nndraft:delayed group if it doesn't exist. + +2003-02-04 Jesper Harder + + * gnus-sum.el (gnus-summary-search-article): Speed up by + disabling various visual features while searching. + (gnus-summary-recenter): Test gnus-auto-center-summary first. + +2003-02-03 Jesper Harder + + * spam.el (spam-list-of-checks): Don't quote nil and t in + docstrings. From the elisp manual: + + When a documentation string refers to a Lisp symbol, write + it [..] with single-quotes around it. [..] There are two + exceptions: write t and nil without single-quotes. + + * messcompat.el (message-from-style): do. + + * message.el (message-send-mail): do. + + * gnus-util.el (gnus-use-byte-compile): do. + + * gnus-score.el (gnus-score-lower-thread): do. + + * gnus-int.el (gnus-server-unopen-status): do. + + * gnus.el (gnus-define-group-parameter, gnus-large-newsgroup) + (large-newsgroup-initial, gnus-install-group-spam-parameters): do. + + * gnus-cus.el (gnus-group-customize, gnus-score-parameters) + (gnus-group-parameters): do. + + * gnus-art.el (gnus-article-mime-match-handle-function): do. + + * mm-decode.el (mm-text-html-renderer): do. + +2003-02-02 Katsumi Yamaoka + + * nnheader.el (nnheader-directory-separator-character): Change the + way to compute the dafault value. + +2003-02-02 Jesper Harder + + * gnus-art.el (gnus-button-handle-describe-key): Implement it. + (gnus-button-alist): Fix regexp for describe-key. + (gnus-button-handle-describe-function) + (gnus-button-handle-describe-variable) + (gnus-button-handle-apropos, gnus-button-handle-apropos-command) + (gnus-button-handle-apropos-variable) + (gnus-button-handle-apropos-documentation): Docstring fix. + + * gnus-util.el (gnus-kill-buffer): Use get-buffer. + +2003-02-01 Lars Magne Ingebrigtsen + + * gnus-draft.el (gnus-group-send-queue): Bind gnus-posting-styles + to nil. + + * nnmail.el: Removed gnus-util autoload. + + * gnus.el: Use gnus-prin1-to-string throughout. + + * gnus-util.el (gnus-prin1-to-string): Bind print-length and + print-level. + + * gnus-art.el (article-display-x-face): Removed grey x-face stuff. + (gnus-treat-display-grey-xface): Removed. + + * gnus-fun.el (gnus-grab-cam-face): New. + (gnus-convert-image-to-gray-x-face): Removed. + (gnus-convert-gray-x-face-to-xpm): removed. + (gnus-convert-gray-x-face-region): Removed. + (gnus-grab-gray-x-face): Removed. + + * nnmail.el (nnmail-expiry-wait-function): Doc indent. + +2003-01-31 Jesper Harder + + * gnus-util.el (gnus-kill-buffer): Functions in gnus-util + shouldn't depend on the rest of Gnus, so test if gnus-buffers is + bound. + + * nnmail.el (nnmail-cache-close): Use gnus-kill-buffer. + +2003-01-30 Jesper Harder + + * gnus-cite.el (gnus-cite-reply-regexp, gnus-cite-always-check): + Remove -- these are bogus options which are never used. + +2003-01-29 Jesper Harder + + * gnus-art.el (gnus-article-mode): Use summary tool bar. + +2003-01-27 Teodor Zlatanov + + * spam.el (spam-check-blackholes) + (spam-blackhole-good-server-regex): new variable to skip some IPs + when checking blackholes; use it + (spam-check-bogofilter-headers) + (spam-bogofilter-bogosity-positive-spam-header): new variable, in + case more X-Bogosity is used than just "Yes/No" + (spam-ham-move-routine): semi-fixed, only first article is + properly moved now + +2003-01-27 Jesper Harder + + * gnus-util.el (gnus-kill-buffer): Remove buffer from gnus-buffers + as well. + + * gnus-sum.el (gnus-select-newsgroup): Use gnus-kill-buffer. + + * gnus-score.el (gnus-score-headers, gnus-score-find-bnews): do. + + * gnus-start.el (gnus-save-newsrc-file, gnus-clear-system): do. + + * gnus-bcklg.el (gnus-backlog-shutdown): do. + + * gnus-srvr.el (gnus-server-exit, gnus-browse-exit): do. + +2003-01-26 Lars Magne Ingebrigtsen + + * gnus-fun.el (gnus-face-encode): New function. + (gnus-convert-png-to-face): Use it. + + * gnus-sum.el (gnus-summary-make-menu-bar): Added M-& to marks. + +2003-01-26 Jesper Harder + + * mm-decode.el (mm-dissection-list): Remove. + (mm-dissect-singlepart): Don't push to mm-dissection-list, it's + only used in mm-remove-all-parts. + (mm-remove-all-parts): Remove it, it's never called. + +2003-01-25 Simon Josefsson + + * gnus-group.el (gnus-group-make-group): Report errors. + + * nnimap.el (nnimap-request-create-group): Ditto. + + * sieve-manage.el (sieve-manage-is-okno): Parse literal strings. + + * sieve.el (sieve-upload): Fix error printing. + + * mm-encode.el (mm-qp-or-base64): Always QP iff + mm-use-ultra-safe-encoding and cleartext PGP. + + * gnus-sum.el (gnus-summary-select-article): Inhibit + redisplay (mainly for secured messages). + + * nnmail.el (nnmail-article-group): Copy body too (but don't + process it). + +2003-01-25 Jesper Harder + + * gnus-art.el (gnus-article-setup-buffer): Reset + gnus-button-marker-list. + +2003-01-25 Lars Magne Ingebrigtsen + + * nntp.el (nntp-read-timeout): Default to using a second delay + under Microsoft Windows. + +2003-01-24 Lars Magne Ingebrigtsen + + * nnheader.el (nnheader-directory-separator-character): New + variable. + +2003-01-24 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-max-fetch-size) + (gnus-agent-article-alist, gnus-agent-get-undownloaded-list) + (gnus-agent-catchup, gnus-agent-summary-fetch-group) + (gnus-agent-fetch-articles, gnus-agent-backup-overview-buffer) + (gnus-agent-flush-cache, gnus-agent-fetch-headers) + (gnus-agent-braid-nov, gnus-agent-load-alist) + (gnus-agent-article-alist-save-format) + (gnus-agent-read-agentview, gnus-agent-save-alist) + (gnus-agent-fetch-group-1, gnus-agent-expire) + (gnus-agent-uncached-articles, gnus-agent-retrieve-headers) + (gnus-agent-regenerate-group): Reformat to keep under eighty + columns. Reword docstrings so that first line is under eighty + chars and a complete sentence. Still need to work on the rear + end of the file, in particular gnus-agent-expire. + +2003-01-24 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agentize): Indent. + + * gnus.el (gnus-version-number): Bumped. + +2003-01-24 20:32:44 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.14 is released. + +2003-01-24 Kai Gro,A_(Bjohann + + * gnus-sum.el (gnus-summary-prepare-threads): Reset state for %B + before beginning. Tiny patch from Mark Thomas + . + +2003-01-24 Teodor Zlatanov + + * spam.el (spam-check-blackholes, spam-split) + (spam-mark-junk-as-spam-routine, spam-summary-prepare-exit): added + gnus-message calls to show to users what spam.el is doing + +2003-01-24 Jesper Harder + + * gnus-msg.el (gnus-message-replysign) + (gnus-message-replyencrypt): Fix typo. + +2003-01-24 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-mime-security-show-details): Toggle showing + details. + +2003-01-23 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-press-button): let* -> let. + (gnus-mime-security-show-details): Cleaned up. + (gnus-mime-security-press-button): Save excursion. + (gnus-insert-mime-security-button): Clean up. + + * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Doc fix. + + * gnus-async.el (gnus-async-wait-for-article): Don't use a + timeout. + + * nntp.el (nntp-accept-process-output): Removed timeout. + (nntp-read-timeout): New variable. + (nntp-accept-process-output): Use it. + + * gnus-sum.el (gnus-data-find-list): Remove *. + +2003-01-23 Kevin Greiner + + * gnus-sum.el (gnus-summary-first-subject): Fixed bug that I + introduced on 2002-01-22. + (gnus-summary-first-unseen-or-unread-subject): Ditto. + +2003-01-23 Teodor Zlatanov + + * spam.el (spam-check-regex-headers, spam-list-of-checks) + (spam-regex-headers-spam, spam-regex-headers-ham): added spam/ham + checks of incoming mail based on simple header regexp matching + +2003-01-22 Teodor Zlatanov + + * gnus-sum.el (gnus-spam-mark): set to `$' + +2003-01-22 Kevin Greiner + + * gnus-agent.el (gnus-agent-get-undownloaded-list): Now computes + gnus-newsgroup-unfetched, the list of articles whose headers have + not been fetched from the server. + + * gnus-sum.el (gnus-summary-find-next): Removed undownloaded + parameter as it never worked due to a bug. Added check to prevent + selection of any article in the gnus-newsgroup-unfetched list. + (gnus-summary-find-prev): Added check to prevent selection of any + article in the gnus-newsgroup-unfetched list. + (gnus-summary-first-subject): Documented API. Modified + implementation so that constraints are handled independently. + Added check to prevent selection of any article in the + gnus-newsgroup-unfetched list. + (gnus-summary-first-unseen-subject): Updated parameters in + gnus-summary-first-subject call to match new API. + (gnus-summary-first-unseen-or-unread-subject): Ditto. + (gnus-summary-catchup): Do not mark unfetched articles as read. + +2003-01-22 Jesper Harder + + * gnus-art.el (gnus-treat-strip-pgp, gnus-article-hide-pgp-hook): + make-obsolete-variable allows only two arguments in XEmacs and + Emacs 20. + + * gnus-sum.el (gnus-summary-wash-hide-map): Remove + gnus-article-hide-pgp. + (gnus-summary-make-menu-bar): do. + + * gnus-art.el (gnus-treat-strip-pgp): Make obsolete. + (gnus-treatment-function-alist): Remove gnus-treat-strip-pgp and + gnus-article-hide-pgp. + (article-hide-pgp): Remove. + (gnus-article-hide): Remove gnus-article-hide-pgp. + + * gnus.el: Remove gnus-article-hide-pgp + +2003-01-21 Lars Magne Ingebrigtsen + + * message.el (message-required-headers): Doc fix. + +2003-01-21 Teodor Zlatanov + + * spam.el (spam-group-ham-processor-bogofilter-p): fixed bug + (spam-ifile-register-ham-routine, spam-ifile-ham-category): new + option to make ifile a purely binary classifier + +2003-01-21 Lars Magne Ingebrigtsen + + * mml-sec.el (mml-secure-sign-pgpauto): Renamed. + (mml-secure-encrypt-pgpmime): Removed double. + + * gnus-sum.el (gnus-summary-mark-article-as-replied): Added + debugging statements. + +2003-01-21 Andreas Fuchs + + * mml-sec.el (mml-sign-alist): Added pgpauto. + +2003-01-21 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bumped version number. + +2003-01-21 07:15:41 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.13 is released. + +2003-01-21 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-button-url-regexp): Removed |. + + * message.el (message-send-hook): Doc fix. + + * gnus-win.el (gnus-buffer-configuration): Display article + instead of article-copy when `reply'. + +2003-01-21 Jesper Harder + + * gnus.el (gnus-format): Change customize group to gnus. + (gnus-cache): Add link. + (gnus-group-charter-alist): Fix docstring. + +2003-01-20 Jesper Harder + + * mailcap.el (mailcap-print-command): lpr-command might be + unbound in XEmacs. + +2003-01-18 Kevin Greiner + + * gnus-agent.el (gnus-agent-regenerate-group): Added interactive form. + + * gnus-sum.el (gnus-summary-update-article-line): Fixed + calculation of net characters added for use in the gnus-data + structure. + +2003-01-18 Kai Gro,A_(Bjohann + + * nnmail.el (nnmail-process-unix-mail-format): Improve error + message. Suggested by Jari Aalto. + +2003-01-17 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-followup-with-original): Clean up. + (gnus-article-reply-with-original): Ditto. + + * gnus-sum.el (gnus-summary-catchup): Make sure downloadable, + read articles don't become unread. + +2003-01-17 Simon Josefsson + + * gnus-fun.el (gnus-x-face-from-file): + (gnus-face-from-file): Suggest image format in minibuffer prompt. + + * gnus-fun.el (gnus-convert-image-to-x-face-command) + (gnus-convert-image-to-face-command): Doc fix. + +2003-01-17 Lars Magne Ingebrigtsen + + * gnus-fun.el (gnus-convert-face-to-png): Protect against errors. + +2003-01-17 Jesper Harder + + * gnus-art.el (gnus-mime-print-part): Use mm-save-part-to-file to + avoid encoding problems. + + * mailcap.el (mailcap-ps-command): New variable. + (mailcap-mime-data): Add print entry where applicable. Use + pdftotext on a tty. + +2003-01-16 ShengHuo ZHU + + * gnus-sum.el (gnus-alter-header-function): Add type and group. + +2003-01-16 Simon Josefsson + + * gnus-fun.el (gnus-convert-image-to-x-face-command) + (gnus-convert-image-to-face-command, gnus-x-face-from-file) + (gnus-face-from-file): Doc fix; don't mention image format. + +2003-01-16 Teodor Zlatanov + + * spam.el (spam-get-article-as-filename): new function (unused for now) + (spam-get-article-as-buffer): new function + (spam-get-article-as-string): use spam-get-article-as-buffer + (spam-summary-prepare-exit): fixed bug, noticed by Malcolm Purvis + +2003-01-15 ShengHuo ZHU + + * gnus-agent.el: Don't use `path'. + From the GNU coding standards: + + Please do not use the term ``pathname'' that is used in Unix + documentation; use ``file name'' (two words) instead. We use + the term ``path'' only for search paths, which are lists of + directory names. + + * nnsoup.el (nnsoup-file-name): Ditto. + + * nnmail.el (nnmail-pathname-coding-system): Ditto. + (nnmail-group-pathname): Ditto. + + * nnimap.el (nnimap-group-overview-filename): Ditto. + + * nnheader.el (nnheader-pathname-coding-system): Ditto. + (nnheader-group-pathname): Ditto. + + * nnfolder.el (nnfolder-group-pathname): Ditto. + + * gnus.el (gnus-home-directory): Ditto. + + * gnus-group.el (gnus-group-icon-list): Ditto. + +2003-01-16 Jesper Harder + + * gnus-art.el (gnus-mime-print-part): Use mm-handle-media-type. + + * message.el (message-mode-menu): Use it. + (message-mode-menu): Deactivate "Yank Original" if there's no + reply buffer. + + * messagexmas.el (message-xmas-redefine): Redefine in XEmacs. + + * message.el (message-mark-active-p): New function. + +2003-01-15 Teodor Zlatanov + + * spam.el (spam-use-bogofilter-headers, spam-bogofilter-header) + (spam-bogofilter-database-directory): new variables + (spam-check-bogofilter-headers, spam-check-bogofilter) + (spam-bogofilter-register-with-bogofilter) + (spam-bogofilter-register-spam-routine) + (spam-bogofilter-register-ham-routine) + (spam-group-ham-processor-bogofilter-p): new functions for the new + Bogofilter interface + (spam-summary-prepare-exit): use the new Bogofilter functions + (spam-list-of-checks): added spam-use-bogofilter-headers + (spam-bogofilter-score): rewrote function + (spam-check-bogofilter): optional score parameter, uses + spam-check-bogofilter-headers better + (spam-check-bogofilter-headers): optional score parameter + + * gnus.el (gnus-install-group-spam-parameters): new variable, t by + default, in the gnus-start customization group. Used to disable + the spam-*/ham-* parameters. + (gnus-group-ham-exit-processor-bogofilter): new ham processor + +2003-01-15 Jesper Harder + + * gnus-xmas.el (gnus-xmas-redefine): Use region-exists-p in + XEmacs. + + * gnus-ems.el (gnus-mark-active-p): do. + +2003-01-15 Kevin Ryde + + * gnus.texi (Using MIME): Mention auto-compression-mode with + gnus-mime-copy-part. + +2003-01-15 Lars Magne Ingebrigtsen + + * message.el (message-send): Don't warn about duplicates when + superseding. + +2003-01-15 Simon Josefsson + + * nnimap.el (nnimap-split-download-body): New variable. + (nnimap-split-articles): Use it. + +2003-01-14 Kevin Greiner + + * gnus-agent.el (gnus-agent-check-overview-buffer): This data + integrity checker was incorrectly flagging, and removing, articles + whose article number was negative. + (gnus-agent-fetch-group-1): When executed in the group's summary + buffer, refresh each downloaded line to update the status flag and + font. Preserve the value of gnus-newsgroup-headers so that + gnus-agent-fetch-articles can split the requests by size. + (gnus-agent-expire): Corrected day calculation for when + gnus-agent-expire-days contains a list. + +2003-01-14 Lars Magne Ingebrigtsen + + * gnus-audio.el (gnus-audio-au-player): Use executable-find. + +2003-01-13 Jhair Tocancipa Triana + + * gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player): Use + /usr/bin/play as default player. + (gnus-audio-play): Added ARG-DESCRIPTOR to prompt for a file to play. + +2003-01-14 Katsumi Yamaoka + + * gnus-msg.el (gnus-inews-add-send-actions): Allow a list of + articles to be marked as well. + +2003-01-14 Kevin Greiner + * gnus-agent.el (gnus-agent-get-undownloaded-list): Include the + fictious headers generated by nnagent (ie. Undownloaded Article + ####) in the list of articles that have not been downloaded. + + * gnus-int.el (): Added require declarations to resolve + compile-time warnings. + (gnus-open-server): If the server status is set to offline, + recursively execute gnus-open-server to open the offline backend + (e.g. nnagent). + +2003-01-14 Jesper Harder + + * gnus-art.el (gnus-article-reply-with-original): Use + gnus-mark-active-p. + (gnus-article-followup-with-original): do. + +2003-01-13 Reiner Steib + + * gnus-sum.el: Removed `(when t ...)' around `gnus-define-keys'. + +2003-01-13 Reiner Steib + + * gnus-score.el (gnus-score-edit-file-at-point): New function. + (gnus-score-find-trace): Bind it to `e' key. Added `q' for quit. + +2003-01-13 Romain FRANCOISE + + * gnus-fun.el (gnus-x-face-from-file): Quote file name. + (gnus-face-from-file): Ditto. + +2003-01-13 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-articles-to-read): Don't just apply + gnus-alter-articles-to-read-function to the unread articles. + +2003-01-13 Reiner Steib + + * deuglify.el (gnus-article-outlook-unwrap-lines) + (gnus-article-outlook-repair-attribution) + (gnus-article-outlook-rearrange-citation): New function names, + renamed from "gnus-outlook-" to "gnus-article-outlook-". Changed + doc-string. + + * gnus-sum.el (gnus-summary-mode-map): Use new function names, + removed `W k' key binding (use `W Y f' instead). + (gnus-summary-make-menu-bar): Use new function names. + +2003-01-13 Simon Josefsson + + * gnus-fun.el (gnus-random-x-face): Doc fix. + (gnus-insert-random-x-face-header): New function. + +2003-01-13 Jesper Harder + + * gnus-sum.el (gnus-summary-make-menu-bar): Deactivate items if + mark is not active. + + * gnus-msg.el (gnus-inews-do-gcc): Comment. + + * gnus-ems.el (gnus-mark-active-p): New function. + + * gnus-group.el (gnus-topic-mode-p): New function. + (gnus-group-make-menu-bar): Show more key bindings in topic mode. + Deactivate items if mark is not active. + +2003-01-12 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bumped version. + (gnus-summary-line-format): Doc fix. + +2003-01-12 22:02:49 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.12 is released. + +2003-01-12 Lars Magne Ingebrigtsen + + * mail-source.el (mail-sources): Removed autoload to make it + compile under XEmacs. + +2003-01-12 Raymond Scholz + + * gnus-msg.el (gnus-confirm-mail-reply-to-news): May be a + regexp or a function too. + (gnus-confirm-treat-mail-like-news): New variable. Ask for + confirmation even if the original article is mail. + +2003-01-12 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-inews-add-send-actions): Get the right + articles to be marked when not yanking. + +2003-01-12 Fran,Ag(Bois-David Collin + + * mm-decode.el (mm-get-part): Use mm-with-unibyte-current-buffer. + +2003-01-12 Lars Magne Ingebrigtsen + + * gnus-fun.el (gnus-face-from-file): Autoload. + + * gnus-cite.el (gnus-cite-delete-overlays): Protect against more + errors. + +2003-01-12 Simon Josefsson + + * sieve.el (sieve-upload-and-bury): New. Suggested by + kai.grossjohann@uni-duisburg.de (Kai Gro,A_(Bjohann). + + * sieve-mode.el (sieve-mode-map): Bind s-u-a-b to C-c C-c. + Suggested by kai.grossjohann@uni-duisburg.de (Kai Gro,A_(Bjohann). + +2003-01-12 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-ignored-headers): Don't include the ^ and : + in every string. + + * gnus.el (gnus-version-number): Bumped version number. + +2003-01-12 13:46:20 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.11 is released. + +2003-01-12 Jesper Harder + + * message.el (message-fetch-reply-field): Narrow to headers. + + * gnus-msg.el (gnus-inews-do-gcc): Don't try to mark GCC's as read + if Gnus isn't alive. + +2003-01-11 Kevin Greiner + + * gnus-agent.el (gnus-agent-fetch-group-1): Remove downloadable + marks from articles that are already stored in the agent. + (gnus-agent-backup-overview-buffer): New debug tool. Creates a + backup copy of an invalid .overview file for later analysis. + +2003-01-12 Gregorio Gervasio, Jr. + + * gnus-sum.el (gnus-summary-exit): Reverse change to make group + exit work with two frames. + +2003-01-11 Fran,Ag(Bois-David Collin + + * message.el (message-forward-make-body): Use mule4. + +2003-01-11 Lars Magne Ingebrigtsen + + * message.el (message-mode-map): Move wide-reply command. + +2003-01-10 Reiner Steib + + * deuglify.el (gnus-outlook-deuglify-attrib-verb-regexp): Added + castellano. + (gnus-outlook-display-hook): New variable. + (gnus-outlook-display-article-buffer): New function. + (gnus-outlook-unwrap-lines, gnus-outlook-repair-attribution) + (gnus-outlook-deuglify-article): Made them interactive and added + optional arg. Use `g-o-d-a-b'. + (gnus-article-outlook-deuglify-article): Use `g-o-d-a-b'. + + * gnus-sum.el: Added autoloads. + (gnus-summary-mode-map): Added gnus-summary-wash-deuglify-map. + (gnus-summary-make-menu-bar): Added "(Outlook) Deuglify" menu. + +2003-01-11 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-display-mime): Use the mime emulation + variable. + + * gnus-sum.el (gnus-article-emulate-mime): New variable. + + * gnus-start.el (gnus-read-newsrc-el-file): Make sure that the + newsrc-alist is initialized properly. + + * mail-source.el (mail-sources): Autoload. + + * gnus-sum.el (gnus-summary-make-false-root-always): Default to + nil. + + * gnus-msg.el (gnus-configure-posting-styles): Make sure we don't + insert two newlines. + + * message.el (message-check-news-header-syntax): Compute the + header length correctly. + +2003-01-10 Kevin Greiner + + * gnus-agent.el (gnus-agent-expire): Do not remove article from + alist when keeping fetched article file. + (gnus-agent-retrieve-headers): When parsing response for article + numbers, use the same algorithm as gnus-agent-braid-nov to protect + against garbage in the server's response. + + * gnus-int.el (gnus-request-expire-articles, + gnus-request-move-article): Only expire when the group's server + has been agentized. + +2003-01-10 Lars Magne Ingebrigtsen + + * gnus-cite.el (gnus-cite-delete-overlays): Protect against + errors when deleting overlays. + + * gnus-score.el (gnus-score-followup): Allow tracing. + + * gnus-art.el (gnus-treat-display-face): New variable. + (article-display-face): New command. + + * gnus-fun.el (gnus-face-from-file): New function. + (gnus-convert-face-to-png): Ditto. + + * gnus-art.el (gnus-ignored-headers): Added Face. + +2003-01-10 Simon Josefsson + + * nndraft.el (nndraft-request-group): Avoid crash in + directory-files when draft directory doesn't exists. + + * gnus-sum.el (gnus-select-article-hook): Add :option. + +2003-01-10 Teodor Zlatanov + + * spam.el (spam-use-stat): new variable + (spam-group-spam-processor-stat-p) + (spam-group-ham-processor-stat-p): new convenience functions + (spam-summary-prepare-exit): add spam/ham processors to sequence + (spam-list-of-checks): add spam-use-stat to list of checks + (spam-split): conditionally load the spam-stat tables + (spam-stat-register-spam-routine, spam-stat-register-ham-routine, + spam-check-ifile): new functions + + * spam-stat.el (spam-stat): typo fix + (spam-stat-install-hooks): new variable + (spam-stat-split-fancy-spam-group): added documentation clarification + (spam-stat-split-fancy-spam-threshhold): new variable + (spam-stat-install-hooks): make hooks conditional + (spam-stat-split-fancy): use spam-stat-split-fancy-spam-threshhold + + * gnus.el (gnus-group-ham-exit-processor-stat, spam-process): add + spam-stat ham/spam processor symbols + +2003-01-10 Lars Magne Ingebrigtsen + + * gnus-start.el (gnus-read-newsrc-el-file): Make sure the .eld + file exists. + +2003-01-10 Simon Josefsson + + * gnus-sum.el (gnus-summary-read-group-1): Don't select first + undownloaded/downloadable only when unplugged. + +2003-01-10 Jesper Harder + + * gnus-srvr.el (gnus-browse-foreign-server): Optimize inner loop. + +2003-01-09 Teodor Zlatanov + + * spam.el (spam-check-ifile): fixed call-process-region to use the + db parameter only if it's set + (spam-ifile-register-with-ifile): ditto + +2003-01-09 Alex Schroeder + + * spam-stat.el (spam-stat-save): Set spam-stat-ngood and + spam-stat-nbad before creating the hash table. + (spam-stat-reset): Set spam-stat-ngood and spam-stat-nbad to 0. + Changed copyright statement to FSF. + +2003-01-09 Kevin Greiner + + * gnus-agent.el (gnus-agent-catchup): Do not mark cached nor + processable articles as read. + (gnus-agent-summary-fetch-series): Remove processable and + downloadable marks on all downloaded articles in the series. + + * nntp.el (nntp-report): Throw error after reporting the problem. + (nntp-accept-process-output): Corrected error check to report an + error when the process is nil. + +2003-01-09 Simon Josefsson + + * message.el (message-tool-bar-map): Add preview. + +2003-01-09 Jesper Harder + + * mml.el (mml-preview): Get rid of MIME handles and buffers after + previewing. + +2003-01-08 Paul Jarc + + * nnmaildir.el (nnmaildir--grp-add-art): Fix wrong-type-argument + bug when the (n+1)th article to be added to a group has a smaller + number than the n articles already added. + +2003-01-08 Jesper Harder + + * message.el (message-mode-field-menu): Use backquote. + +2003-01-08 Teodor Zlatanov + + * spam.el: fixed the BBDB autoloads again, using + bbdb-search-simple now (which is not a macro, thank god) + + * lpath.el (bbdb-search): removed function from maybe-fbind list + + * gnus.el (ham-process-destination): added new parameter for + destination of ham articles found in spam groups at summary exit + + * spam.el (spam-get-ifile-database-parameter): use spam-ifile-database-path + (spam-check-ifile, spam-ifile-register-with-ifile): use spam-get-ifile-database-parameter + (spam-ifile-database-path): added new parameter for ifile's database + (spam-move-spam-nonspam-groups-only): new parameter to determine + if spam should be moved from all groups or only some + (spam-summary-prepare-exit): fixed logic to use + spam-move-spam-nonspam-groups-only when deciding to invoke + spam-mark-spam-as-expired-and-move-routine; always invoke that + routine after the spam has been expired-or-moved in case there's + some spam left over; use spam-ham-move-routine in spam groups + (spam-ham-move-routine): new function to move ham articles to the + ham-process-destinations group parameter + +2003-01-08 Lars Magne Ingebrigtsen + + * gnus-spec.el (gnus-parse-complex-format): %~ => ~*. + + * gnus-agent.el (gnus-agent-fetch-selected-article): Use + gnus-summary-update-article-line. + +2003-01-08 Simon Josefsson + + * nnmail.el (nnmail-expiry-target-group): Request group, create it + not successful. + +2003-01-08 Katsumi Yamaoka + + * lpath.el (bbdb-records): Fbind it for both Emacs and XEmacs. + +2003-01-07 Teodor Zlatanov + + * spam.el (spam-check-ifile): fixed the spam-ifile-all-categories + logic, finally + +2003-01-08 Lars Magne Ingebrigtsen + + * gnus-spec.el (gnus-parse-format): %C is a complex format. + (gnus-parse-format): Change to %~. + + * message.el (message-generate-headers): Don't generate optional + empty headers. + +2003-01-07 Reiner Steib + + * message.el (message-cross-post-default) + (message-cross-post-note-function, message-shoot-gnksa-feet) + (message-strip-subject-trailing-was, message-change-subject) + (message-mark-insert-file, message-cross-post-followup-to) + (message-cross-post-followup-to, message-mode-map) + (message-generate-unsubscribed-mail-followup-to) + (message-make-mail-followup-to): Minor changes to doc-strings and + error messages. Updated copyright line. + + * message.el (message-make-mail-followup-to, + message-generate-unsubscribed-mail-followup-to): New function + names. Renamed functions: "-mft" -> "-mail-followup-to". + (message-make-mft, message-gen-unsubscribed-mft): Removed function + names. + + * mml.el (mml-preview-insert-mail-followup-to): New function name. + (mml-preview-insert-mft): Removed function name. + (mml-preview): Use new function names. + + * gnus-art.el (gnus-article-edit-mode-map): Use new function names. + + * message.el (message-mode-field-menu): Moved header related + commands from "Message" to "Field" menu. + +2003-01-07 Reiner Steib + + * message.el (message-generate-headers-first): Added customization + if variable is a list. + +2003-01-07 Michael Shields + + * gnus-art.el (gnus-article-next-page): Correctly handle the case + where the last line of the article is the last line of the window. + +2003-01-08 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-debug): Use ignore-errors. + + * gnus-agent.el (gnus-agent-fetch-selected-article): Use + `gnus-summary-update-line'. + +2003-01-08 Simon Josefsson + + * gnus-art.el (gnus-unbuttonized-mime-types) + (gnus-buttonized-mime-types): Doc fix. + +2003-01-08 Jesper Harder + + * mm-decode.el (mm-inline-media-tests): .xpm is 'x-xpixmap'. + +2003-01-07 ShengHuo ZHU + + * nnrss.el (nnrss-group-alist): Add and clear up. + +2003-01-07 Teodor Zlatanov + + * spam.el: removed unnecessary condition-case for loading bbdb-com.el + + * lpath.el (bbdb-search): added BBDB functions for a better way to + fix missing functions + + * spam.el (spam-check-ifile): if should be an unless + + * spam.el: define 'ignore alias for spam-BBDB-register-routine, + spam-enter-ham-BBDB, and bbdb-create-internal initially to hush up warnings + (spam-ifile-all-categories): doc string fixed to be less than 80 chars + +2003-01-07 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-make-menu-bar): Added + gnus-summary-refer-thread to thread menu. + +2003-01-07 Kevin Greiner + + * gnus-agent.el (gnus-agent-fetch-group-1): When fetching within a + summary buffer, articles that cannot be fetched are marked as + canceled. + + * nntp.el (nntp-with-open-group): The quit signal handler must + propagate the quit signal to the next outer handler so that the + caller knows that the request aborted abnormally. + +2003-01-07 Teodor Zlatanov + + * spam.el (spam-check-ifile, spam-ifile-register-with-ifile) + (spam-ifile-register-spam-routine) + (spam-ifile-register-ham-routine): added ifile functionality that + does not use ifile-gnus.el to classify and register articles + (spam-get-article-as-string): convenience function + (spam-summary-prepare-exit): added ifile spam and ham registration + (spam-ifile-all-categories, spam-ifile-spam-category) + (spam-ifile-path, spam-ifile): added customization options + + * gnus.el (gnus-group-ham-exit-processor-ifile): added ifile ham + exit processor + (spam-process): added gnus-group-ham-exit-processor-ifile to the + list of choices + +2003-01-07 Lars Magne Ingebrigtsen + + * gnus-score.el (gnus-score-followup): Also score immediate + followups. + +2003-01-06 Lars Magne Ingebrigtsen + + * nnweb.el (nnweb-asynchronous-p): Changed to nil. + +2003-01-07 Simon Josefsson + + * message.el (message-mode-menu): Fix receipt balloon help. + +2003-01-07 Jesper Harder + + * gnus-msg.el (gnus-group-post-news): Don't assume that "" will + always be interpreted as news. + +2003-01-07 Simon Josefsson + + * gnus-sieve.el (gnus-sieve-script): Use the crosspost argument to + gnus-sieve-script, instead of the global variable + gnus-sieve-crosspost. One-line patch from Steinar Bang + . + +2003-01-06 Kevin Greiner + + * gnus.el: Renamed gnus-summary-*-uncached-face as + gnus-summary-*-undownloaded-face to avoid confusing the agent with + the cache. + + * gnus-sum.el: Ditto. + +2003-01-06 Kevin Greiner + + * gnus-agent.el (gnus-agent-fetch-group): Modified to permit execution + in either the group or summary buffer. + New command "JS", in summary buffer, will fetch articles per the + group's category, predicate, and processable flags. + (gnus-agent-summary-fetch-series): Rewritten to call + gnus-agent-session-fetch-group once with all articles in the + series. + (gnus-agent-summary-fetch-group): Fixed bug and modified code to + return list of fetched articles. + (gnus-agent-fetch-articles): Split fetch list into sublists such + that the article buffer is only slightly larger than + gnus-agent-max-fetch-size. Added unwind-protect to ensure that + the group's article alist is saved. + (gnus-agent-fetch-headers): The 'killed' and 'cached' marks no + longer result in the agent trying to fetch an article. + (gnus-agent-fetch-group-1): Can now be called in either the group + or summary buffer. Removed the max-fetch-size code that I added + on 2002-12-13 as that capability is now part of + gnus-agent-fetch-articles. Added code to update summary buffer. + When called in the group buffer, articles that can not be fetched + are AUTOMATICALLY MARKED AS READ. + + * gnus-sum.el (): Modified eval-when-compile to minimize + misleading compilation warnings. + (gnus-update-summary-mark-positions): Changed code to use + gnus-undownloaded-mark rather than gnus-downloaded-mark. + + * nnheader.el (nnheader-insert-nov-file): Do not try to insert an + empty file as the parser assumes that the file isn't empty. + + * nntp.el (nntp-send-string): The process-send-string call can, + because it performs I/O on the process, change the process' state + from open to closed. If this happens, call nntp-report + immediately to report the broken connection. + (nntp-report): Rewritten to avoid needing a global variable to + determine the appropriate course of action. Instead, two function + implementations are provided and the nntp-report function value is + bound to the appropriate implementation. + (nntp-retrieve-data): Moved nntp-report call to end of implementation. + (nntp-with-open-group): Now binds nntp-report's function cell + rather than binding gnus-with-open-group-first-pass. Added a + condition-case to detect a quit during a nntp command. When the + quit occurs, the current connection is closed as a fetch articles + request could have several megabytes queued up for reading. + (nntp-retrieve-headers): Bind articles to itself. If + nntp-with-open-group repeats this command, I must have access to + the original list of articles. + (nntp-retrieve-groups): Ditto for groups. + (nntp-retrieve-articles): Ditto for articles. + (*): Replaced nntp-possibly-change-group calls to + nntp-with-open-group forms in all, but one, occurrance. + (nntp-accept-process-output): Bug fix. Detect when called with + null process. + +2003-01-06 Jesper Harder + + * mm-util.el (mm-find-mime-charset-region): Don't do Latin-9 hack + if we don't need to. + (mm-iso-8859-x-to-15-region): Fix misplaced parenthesis. + +2003-01-06 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-make-web-group): Pass the select + method on to group-create. + (gnus-group-line-format-alist): %U is an integer. + + * gnus-sum.el (gnus-summary-exit-no-update): Don't update + ephemeral groups. + (gnus-summary-read-group-1): Ditto. + (gnus-group-make-articles-read): Ditto. + + * mm-url.el (mm-url-program): Doc fix. + + * message.el (message-mode-map): Rebound + message-insert-wide-reply. + +2003-01-05 Katsumi Yamaoka + + * gnus-xmas.el (gnus-xmas-group-startup-message): Bind the oort + color as `gnus-group-startup-message' does. + +2003-01-05 Teodor Zlatanov + + * spam.el: fixed line lengths to 80 chars or less + + * gnus-sum.el (gnus-read-mark-p): added the spam-mark as a + "not-read" mark + (gnus-summary-mark-forward): added the spam-mark to the list of + marks not to be marked as "read" when viewed + +2003-01-05 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-inews-make-draft): Quote article-reply. + + * gnus-group.el (gnus-number-of-unseen-articles-in-group): + Protect against unactive groups. + + * message.el (message-check-news-header-syntax): Check long + header lines. + (message-check-news-header-syntax): Update `start'. + + * gnus-group.el (gnus-group-expire-articles): Doc fix. + (gnus-group-line-format): %U. + (gnus-group-line-format-alist): ?U. + (gnus-number-of-unseen-articles-in-group): New function. + + * nntp.el (nntp-accept-process-output): Use a 0.1 second timeout. + + * gnus.el (gnus-version-number): Bump version number. + +2003-01-05 01:53:30 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.10 is released. + +2003-01-05 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Fix version number. + +2003-01-05 01:40:09 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.08 is released. + +2003-01-04 Jesper Harder + + * mm-util.el: Add mm-string-make-unibyte. + + * gnus-group.el (gnus-group-jump-to-group): Make it work for + UTF-8 groups. + +2003-01-04 Lars Magne Ingebrigtsen + + * gnus.el (gnus-variable-list): Write gnus-format-specs last. + + * gnus-sum.el (gnus-summary-goto-subjects): Fix typo. + +2003-01-04 Kevin Ryde + + * gnus-art.el (gnus-mime-jka-compr-maybe-uncompress): New + function. + +2003-01-04 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-exit): Bind gnus-group-is-exiting-p. + (gnus-summary-read-group-1): Update group line. + (gnus-summary-exit-no-update): Update group on exit. + + * gnus-group.el (gnus-group-line-format): Add %*. + (gnus-group-line-format-alist): Ditto. + (gnus-group-insert-group-line): Set it. + (gnus-group-is-exiting-p): New variable. + (gnus-group-insert-group-line): Use it. + +2003-01-03 Teodor Zlatanov + + * spam.el (spam-enter-ham-BBDB, spam-BBDB-register-routine): + enable BBDB ham processing + (spam-blacklist-register-routine): enable blacklist spam processing + (spam-whitelist-register-routine): enable whitelist ham processing + (spam-fetch-field-from-fast): fast fetching of the "from" field + from (gnus-data-list) + (spam-summary-prepare-exit): works completely now + (spam-use-blacklist): oops, should be nil by default + (spam-summary-prepare-exit): spam-use-PROCESSOR is only for + split processing now; before it was for summary exit as + well but that's done with the spam-contents and spam-process + parameters now + +2003-01-03 Jesper Harder + + * mml.el (mml-insert-tag): Don't quote non-ASCII unibyte + characters. + +2003-01-02 Teodor Zlatanov + + * spam.el (spam-group-spam-contents-p, spam-group-ham-contents-p) + (spam-group-processor-p, spam-group-processor-bogofilter-p) + (spam-group-processor-ifile-p, spam-group-processor-blacklist-p) + (spam-group-processor-whitelist-p, spam-group-processor-BBDB-p) + (spam-mark-spam-as-expired-and-move-routine) + (spam-generic-register-routine, spam-BBDB-register-routine) + (spam-ifile-register-routine, spam-blacklist-register-routine) + (spam-whitelist-register-routine): new functions + (spam-summary-prepare-exit): added summary exit processing (expire + or move) of spam-marked articles for spam groups; added slots for + all the spam-*-register-routine functions + +2003-01-03 Lars Magne Ingebrigtsen + + * pop3.el (pop3-retr): Wait 500 msecs. + (pop3-read-response): Ditto. + + * gnus-msg.el (gnus-setup-message): Get the evaliation order + right. + (gnus-inews-make-draft): New function. + (gnus-setup-message): Use it. + + * message.el (message-required-headers): Add From. + +2003-01-02 Katsumi Yamaoka + Trivial patch from Norbert Koch . + + * gnus-msg.el (gnus-gcc-externalize-attachments): Fix typo. + +2003-01-02 Lars Magne Ingebrigtsen + + * message.el (message-generate-headers): Let header formatters do + their work. + +2003-01-02 Raymond Scholz + + * deuglify.el (gnus-article-outlook-deuglify-article): + Rehighlight, reapply treatments and call + `gnus-article-prepare-hook'. Suggested by Niels Olof Bouvin. + (gnus-outlook-repair-attribution-block): Recognize cited + attributions. Suggested by Niklas Morberg. + +2003-01-02 Pete Kazmier + + * gnus-art.el (gnus-treat-predicate): Check condition first. + +2003-01-02 Jesper Harder + + * lpath.el: Add url-http-file-exists-p. + + * gnus-group.el (gnus-group-fetch-charter): Use + http://TLH.news-admin.org/charters/GROUPNAME as a fallback. + +2003-01-02 Lars Magne Ingebrigtsen + + * message.el (message-draft-headers): Also generate From to get a + nicer draft buffer summary. + + * gnus-xmas.el (gnus-xmas-read-event-char): Take an optional + parameter. + + * gnus-art.el (article-wash-html): Clean up. + (article-wash-html): Typo fix. + + * gnus-msg.el (gnus-summary-mail-forward): Clean up. + (gnus-summary-mail-forward): To many lists of lists. + + * gnus-art.el (article-wash-html): Clean up. + +2003-01-02 pete-temp + + * gnus-art.el (gnus-treat-wash-html): New variable. + +2003-01-02 Lars Magne Ingebrigtsen + + * message.el (message-check-news-header-syntax): Allow posting. + (message-check-news-header-syntax): Fix logic for sure, this + time. + +2003-01-02 Matthieu Moy + + * message.el (message-check-news-header-syntax): Check syntax of + continuation headers. + +2003-01-02 Reiner Steib + + * gnus-art.el (gnus-button-url-regexp, + (gnus-button-mid-or-mail-regexp, gnus-button-alist, + (gnus-header-button-alist): Regexps are case insensitive here. + +2003-01-02 Simon Josefsson + + * dig.el (query-dig): Doc fix. + +2003-01-02 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-fetch-selected-article): Update whole + summary buffer line, not just the download mark. + +2003-01-02 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-goto-subjects): New function. + (gnus-summary-insert-dormant-articles): New command and + keystroke. + + * gnus-cache.el (gnus-summary-insert-cached-articles): Use new + function for mass insertion of subjects. + + * nndraft.el (nndraft-generate-headers): Don't move point. + + * gnus.el (nnheader): Require nnheader. + + * nndraft.el (nndraft-request-associate-buffer): Use + make-local-variable. + +2003-01-02 Michael Shields + + * nndraft.el (nndraft-request-associate-buffer): Make + write-contents-hooks buffer-local before setting it. + +2003-01-02 Lars Magne Ingebrigtsen + + * gnus.el (gnus-group-parameter-value): Take an extra param. + (gnus-group-fast-parameter): Let group param results be nil. + + * gnus-art.el (gnus-article-forward-header): New function. + (article-date-ut): Use it to remove continuation date headers. + + * gnus-sum.el (gnus-summary-walk-group-buffer): Supply prompt to + read-event. + (gnus-summary-remove-bookmark): Clean up. + (gnus-summary-set-bookmark): Clean up. + + * gnus-util.el (gnus-read-event-char): Take an optional prompt. + + * gnus.el (gnus-group-startup-message): Bind data-directory to + the Gnus etc directory. + +2003-01-01 Teodor Zlatanov + + * spam.el (spam-summary-prepare-exit): added slots for spam- and + ham-processing of articles; use the new + spam-group-(spam|ham)-contents-p functions + (spam-group-spam-contents-p, spam-group-ham-contents-p): new + convenience functions + (spam-mark-junk-as-spam-routine): use the new + spam-group-spam-contents-p function + + * gnus.el (spam-process, spam-contents, spam-process-destination): + added new parameters with corresponding global variables + (gnus-group-spam-exit-processor-ifile, + gnus-group-spam-exit-processor-bogofilter, + gnus-group-spam-exit-processor-blacklist, + gnus-group-spam-exit-processor-whitelist, + gnus-group-spam-exit-processor-BBDB, + gnus-group-spam-classification-spam, + gnus-group-spam-classification-ham): added new symbols for the + spam-process and spam-contents parameters + + * spam.el (spam-ham-marks, spam-spam-marks): changed list + customization and list itself to store mark symbol rather than + mark character. + (spam-bogofilter-register-routine): added logic to generate mark + values list from spam-ham-marks and spam-spam-marks, so (member) + would work. + +2003-01-02 Katsumi Yamaoka + + * message.el (message-cross-post-followup-to): Fix comment. + +2003-01-01 Teodor Zlatanov + + * spam.el (spam-ham-marks, spam-spam-marks): changed list + customization and list itself to store mark symbol rather than + mark character. + (spam-bogofilter-register-routine): added logic to generate mark + values list from spam-ham-marks and spam-spam-marks, so (member) + would work. + +2003-01-01 Raymond Scholz + + * message.el (message-signature-insert-empty-line): New variable. + +2002-12-30 Reiner Steib + + * message.el: Renamed functions and variables: "xpost" -> + "cross-post", "-fup2" -> "-followup-to". + (message-cross-post-old-target, message-cross-post-default, + message-cross-post-note, message-followup-to-note, + message-cross-post-note-function): New variables names. + (message-xpost-old-target, message-xpost-default, + message-xpost-note, message-fup2-note, + message-xpost-note-function): Removed variable names. + (message-cross-post-followup-to-header, + message-cross-post-insert-note, message-cross-post-followup-to): + New function names. + (message-xpost-fup2-header, message-xpost-insert-note, + message-xpost-fup2): Removed function names. + +2002-12-30 Reiner Steib + + * message.el (message-send-mail): Added message-cleanup-headers to + prevent newlines in headers. + +2003-01-01 Lars Magne Ingebrigtsen + + * dns.el (dns-make-network-process): Comment. + + * gnus-sum.el (gnus-summary-display-while-building): Default to + nil. + +2003-01-01 Wes Hardaker + + * gnus-sum.el (gnus-summary-display-while-building): New + variable. + +2003-01-01 Raymond Scholz + + * deuglify.el (gnus-outlook-rearrange-article): Kill overlays + before rearranging the article. + +2003-01-01 Lars Magne Ingebrigtsen + + * nndraft.el (nndraft-generate-headers): New function. + (nndraft-request-associate-buffer): Use it to write headers on + buffer save. + + * message.el (message-generate-headers): Let the function be a + lambda form. + (message-draft-headers): New variable. + + * gnus-msg.el (gnus-inews-make-draft-meta-information): New + function. + (gnus-setup-message): Use it. + + * message.el (message-generate-headers-first): Doc fix. + (message-setup-1): Use new function for getting which headers to + generate. + (message-headers-to-generate): New function. + +2003-01-01 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-save-alist): Make directory. + +2002-12-31 Reiner Steib <4uce.02.r.steib@gmx.net> + + * gnus-sum.el (gnus-summary-limit-to-age): Make prompt string + mention negatives. + +2002-12-31 Raymond Scholz + + * deuglify.el (gnus-outlook-rearrange-article): Use + `transpose-regions' instead of tempering the kill-ring. + (gnus-article-outlook-deuglify-article): Rehighlight article + instead of a complete redisplay. + +2002-12-31 Teodor Zlatanov + + * spam.el: most defvars are defcustoms now + + patches from Michael Shields + + * spam.el (spam-bogofilter-articles): Select the article + body using gnus-summary-show-article t instead of + gnus-summary-select-article; this presents the raw text + without running any hooks. + + * spam.el (spam-bogofilter-articles): Use message-remove-header + to remove headers; the old way incorrectly removed just the first + line of folded headers. + +2002-12-31 Katsumi Yamaoka + + * gnus-start.el (gnus-load): Replace `ding-file' with `file'. + +2002-12-30 Lars Magne Ingebrigtsen + + * gnus-start.el (gnus-load): New function. + (gnus-read-newsrc-el-file): Use it. + +2002-12-30 Reiner Steib + + * gnus-art.el (gnus-button-valid-fqdn-regexp): New variable. + (gnus-button-handle-apropos-documentation): New function. + (gnus-button-handle-ctan): New function. + (gnus-button-alist): Use them. Improve some regexps. + (gnus-button-prefer-mid-or-mail): Addition to doc-string. + +2002-12-30 Reiner Steib + + * message.el (message-subscribed-p): New function. + (message-send-mail): Use it. + * mml.el (mml-preview-insert-mft): New function. + (mml-preview): Use it. + +2002-12-30 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-thread-latest-date): Protect against errors + when sorting by date. + + * gnus-art.el (gnus-article-edit-mode): New variable. + (gnus-article-setup-buffer): Warn user about discarding edits. + + * gnus-sum.el (gnus-summary-pipe-output): Clean up. + (gnus-summary-pipe-output): Take a symbolic prefix to save all + headers. + + * mm-uu.el (mm-uu-configure-list): Default to (shar . disabled). + +2002-12-30 Reiner Steib + + * message.el (message-completion-alist): Added "Mail-Followup-To" + and "Mail-Copies-To". + +2002-07-21 Jesper harder + + * gnus-group.el: Add key bindings for + gnus-group-sort-groups-by-real-name and + gnus-group-sort-selected-groups-by-real-name. + +2002-07-21 Jesper harder + + * gnus.texi (Sorting Groups): Add key bindings for + gnus-group-sort-groups-by-real-name and + gnus-group-sort-selected-groups-by-real-name. + +2002-12-30 Teodor Zlatanov + + * spam.el (spam-use-dig): new variable for blackhole checking + through dig.el + (spam-check-blackholes): added dig.el checking functionality and + more verbose reporting; query-dig is autoloaded from dig.el + (spam-use-blackholes): disabled by default + (spam-blackhole-servers): removed rbl.maps.vix.com from the + blackhole servers list + +2002-12-30 Lars Magne Ingebrigtsen + + * message.el (message-required-headers): New variable. + +2002-12-30 Teodor Zlatanov + + * dig.el (query-dig): new function + +2002-12-30 Lars Magne Ingebrigtsen + + * flow-fill.el (fill-flowed): Don't infloop on too long fill + prefixes. + + * dns.el (query-dns): Protect against errors. + + * gnus-msg.el (gnus-article-yanked-articles): New variable. + (gnus-inews-add-send-actions): Mark all answered messages as + answered. + +2002-08-10 Jari Aalto + + * nnmail.el (nnmail-split-it): Added tracing to + `:' split rule + +2002-08-13 Hrvoje Niksic + + * mm-decode.el (mm-mailcap-command): Remove the quotes around '%s' + and "%s" so we don't overquote them. + +2002-08-13 Hrvoje Niksic + + * (mm-display-external): Display the actual command that has been + executed in the echo area. + +2002-12-29 Lars Magne Ingebrigtsen + + * gnus-topic.el (gnus-topic-display-missing-topic): Bind entry. + + * message.el (message-with-reply-buffer): New macro. + (message-fetch-reply-field): Use it. + (message-insert-wide-reply): New command and keystroke. + (message-carefully-insert-headers): New function. + (message-insert-to): Use new function. + + * gnus-topic.el (gnus-topic-display-missing-topic): New function. + (gnus-topic-goto-missing-group): Use it. + + * message.el (message-required-news-headers): Removed Lines. + (message-reply): Don't insert References first. + (message-followup): Ditto. + (message-make-references): New function. + (message-followup): Set message-reply-headers before generating + the buffer stuff. + +2002-12-29 Jesper Harder + + * mml.el (mml-generate-mime-1): Reverse the order of + encoding/flowing. + +2002-12-29 Lars Magne Ingebrigtsen + + * nnmail.el (nnmail-expiry-target-group): Mark articles as read + after moving them. + + * gnus-sum.el (gnus-summary-dummy-line-format): Update format to + fit with newer standard format. + (gnus-summary-make-false-root-always): New variable. + (gnus-gather-threads-by-subject): Use it. + + * message.el (message-get-reply-headers): Take an address list + optional argument. + +2002-12-28 Lars Magne Ingebrigtsen + + * gnus.el (gnus-keep-backlog): Change default to 20. + + * gnus-agent.el (gnus-agent-check-overview-buffer): Start from + start. + (gnus-agent-check-overview-buffer): Remove negative article + numbers. + + * nnmail.el (nnmail-split-fancy-with-parent-ignore-groups): Doc fix. + (nnmail-cache-ignore-groups): Doc fix. + + * nnimap.el (nnimap-debug): Made into a flag and defcustomed. + (nnimap-debug-buffer): New variable. + (nnimap-debug): Use it. + +2002-12-28 Lars Magne Ingebrigtsen + + * gnus.el (gnus-summary-high-uncached-face): New color scheme. + +2002-12-28 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-check-overview-buffer): Sort lines if + they aren't already sorted. + +2002-12-28 Jesper Harder + + * message.el (message-mode-menu): Add ellipses to menu items + expecting user interaction. + (message-mode-field-menu): do. + +2002-12-26 Jesper Harder + + * gnus-sum.el (gnus-summary-highlight-line): Don't bind `list' -- + it isn't used any more. + +2002-12-22 Jesper Harder + + * binhex.el (binhex-decoder-program): Fix docstring. + +2002-12-21 Kai Gro,A_(Bjohann + + * 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 + + * gnus-int.el (gnus-request-update-info): nnchoke-r-u-i might not + return the info object. + +2002-12-18 Paul Jarc + + * gnus-int.el (gnus-request-update-info): Artificially add + (1 . (1- min)) to the read range, in case the backend doesn't + store marks for nonexistent articles. + +2002-12-17 Katsumi Yamaoka + + * binhex.el (binhex-insert-char): Eval-and-compile. + +2002-12-17 Jesper Harder + + * lpath.el: Add tool-bar-local-item-from-menu. + + * message.el (message-tool-bar-local-item-from-menu): New function. + (message-tool-bar-map): Use it. + +2002-12-14 Jesper Harder + + * gnus-uu.el (gnus-uu-digest-headers): Mention nil value in docstring. + + * gnus-art.el (gnus-article-header-rank): Last header in + gnus-sorted-header-list should have higher rank than non-members. + +2002-12-13 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-close-agent): Don't blank out the list of + covered methods. + +2002-12-12 Kai Gro,A_(Bjohann + + * nntp.el (nntp-with-open-group-first-pass): Do not wrap in + eval-when-compile. Suggested by 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 + even though no headers may have been fetched + (gnus-agent-fetch-group-1, and perhaps others, require this + behavior). + (gnus-agent-fetch-group-1): Fetch articles in chucks so that the + server buffer is constrained by gnus-agent-max-fetch-size. + Multiple chunks in the same group may perform arbitrarily large + updates. + +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 + + * gnus.el (gnus-summary-high-uncached-face, + gnus-summary-normal-uncached-face, gnus-summary-low-uncached-face) + New faces. + + * gnus-agent.el (gnus-agent-downloaded-article-face): REMOVED. I + added this on 2002-11-23 but it just wasn't working out as + intended. The idea isn't entirely dead, three new faces + gnus-summary-*-uncached-face are being added to gnus.el to provide + the basis for an improved implementation. + (gnus-agent-read-servers): Undo the change made on 2002-11-23. The + proper file to open is lib/servers. + (gnus-summary-set-agent-mark): Expanded documentation. Unmarking + (i.e. removing the article from gnus-newsgroup-downloadable) will + now restore the article's default mark rather than simply setting + no mark. + (gnus-agent-get-undownloaded-list): Corrected documentation. + Added code to set new summary local variable, + gnus-newsgroup-agentized. Reworked impl so that it doesn't create + a temporary list. No longer sets gnus-newsgroup-downloadable. + (gnus-agent-summary-fetch-group): Keep gnus-newsgroup-undownloaded + up to date. Call new gnus-summary-update-download-mark to keep + summary buffer up-to-date. + (gnus-agent-fetch-selected-article): Keep + gnus-newsgroup-undownloaded up to date. + (gnus-agent-fetch-articles): Return list of articles that were + successfully fetched. + (gnus-agent-check-overview-buffer): No more thingatpt. + (gnus-agent-expire): No longer deletes NOV entries of unread + articles. + (gnus-agent-unread-articles): New function. + (gnus-agent-regenerate-group): The article number must be + terminated by a tab character. Added more messages to report + repairs. Inhibit quits while writing changes so it is now safe + have to quit regeneration. Renamed gnus-tmp-downloaded back to + downloaded to 1) resolve the unbound references and 2) avoid + confusing this list with the gnus-tmp-downloaded in gnus-sum.el + + * gnus-art.el (gnus-article-prepare): The agent + downloaded/undownloaded mark is no longer stored as the article's + mark. + + * gnus-salt.el (gnus-tree-highlight-node): Added uncached as + gnus-summary-highlight may use it. Added downloaded as + gnus-summary-highlight was using it. + + * gnus-sum.el (gnus-undownloaded-mark): Changed from ?@ to ?- as + the download mark now follows Kai's +/- convention. + (gnus-downloaded-mark): Added ?+ mark. + (gnus-summary-highlight): Added rules to select + gnus-summary-high-uncached-face, + gnus-summary-normal-uncached-face, and + gnus-summary-low-uncached-face. Removed the + gnus-agent-downloaded-article-face. + (gnus-summary-line-format-alist): Implemented the download flag + format (?O) as named in the manual. This implementation displays + either gnus-undownloaded-mark, gnus-downloaded-mark, or + gnus-no-mark. + (gnus-newsgroup-agentized): New local variable that identifies + which groups are agentized. While the agent is now on by default, + you don't have to agentize every server that you use. + (gnus-update-summary-mark-positions): Completed support for the + download type of mark. + (gnus-summary-insert-line): Added undownloaded to the parameters. + (gnus-summary-prepare-threads): Set gnus-tmp-downloaded for + reference by the gnus-summary-line-format-spec. + + * nntp.el (nntp-with-open-group): This macro handles dropped or + broken connections by opening a new connection and repeating the + failed command. + (nntp-retrieve-headers-with-xover): Some NNTP servers respond to + XOVER commands preceeding the active articles with the nov entry + of the first available article. When gnus connected to such a + server, the unexpected nov entry would result in duplicate lines + in the agent's overview file. This patch fixes the duplicate + lines problem and improves performance by skipping over all + articles IDs that preceed the first nov entry in the server's + reply. + +2002-12-11 Katsumi Yamaoka + + * gnus-sum.el (gnus-tmp-downloaded): New internal variable. + (gnus-summary-highlight): Use it instead of `downloaded'. + (gnus-summary-highlight-line): Ditto. + + * gnus-agent.el (gnus-agent-regenerate-group): Ditto. + +2002-12-11 Lars Magne Ingebrigtsen + + * gnus.el (gnus-variable-list): Add gnus-agent-covered-methods. + + * gnus-agent.el (gnus-agent-check-overview-buffer): Remove debug + calls. + + * gnus-sum.el (gnus-summary-highlight-line): Don't set the + downloaded variable if we're in an uncovered group. + + * gnus-agent.el (gnus-agent-downloaded-article-face): Change the + font to soemthing less noticeable. + (gnus-agent-group-covered-p): New function. + +2002-12-09 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-braid-nov): Remove corrupted lines. + Because of an unknown bug, the group buffer is saved in .overview + file. + +2002-12-09 Kai Gro,A_(Bjohann + + * nntp.el (nntp-send-command): Braino in last commit. Replace + `and' with `or'. + +2002-12-08 Kai Gro,A_(Bjohann + + * nntp.el (nntp-send-command): Assume that echo does not happen + when nntp-open-connection-function is nntp-open-network-stream. + Suggested by Sebastian D.B. Krause . + +2002-12-07 ShengHuo ZHU + + * nnslashdot.el (nnslashdot-retrieve-headers-1): Update the parser. + +2002-12-06 Paul Jarc + + * nnmaildir.el (nnmaildir-request-group): bugfix: don't erase + nntp-server-buffer if we aren't going to write to it. + +2002-12-04 Katsumi Yamaoka + Trivial patch from Itai Zukerman . + + * mm-decode.el (mm-w3m-safe-url-regexp): Fix parenthesis. + +2002-12-04 Katsumi Yamaoka + + * rfc2047.el (rfc2047-decode-region): Remove newlines between + decoded words. + +2002-12-03 Kai Gro,A_(Bjohann + + * gnus.el (fboundp): After loading mm-util, make sure it was the + right one. + +2002-11-29 Kai Gro,A_(Bjohann + + * gnus-art.el (gnus-inhibit-mime-unbuttonizing): Moved here from + gnus-sum. Made into a user option. + + * gnus-sum.el (gnus-simplify-ignored-prefixes) + (gnus-summary-mark-article-as-unread) + +2002-11-29 ShengHuo ZHU + + * time-date.el (date-to-time): Typo. + + * parse-time.el: Typo. + + * nnsoup.el (nnsoup-retrieve-headers): Typo. + + * nnmail.el (nnmail-split, nnmail-process-unix-mail-format): Typos. + + * nnimap.el: + (nnimap-split-rule, nnimap-find-minmax-uid): Typos. + + * mm-encode.el (mm-safer-encoding): Typo. + + * messcompat.el: Typo. + + * message.el (message-face-alist): Typo. + + * imap.el (imap-interactive-login, imap-open): Typos. + + * ietf-drums.el (ietf-drums-text-token, ietf-drums-qtext-token): Typos. + + * gnus.el: Typo. + + * gnus-win.el (gnus-configure-frame): Typo. + + * gnus-util.el (gnus-atomic-progn-assign): Typo. + + * gnus-topic.el (gnus-topic-sort-topics): Typo. + + * gnus-sum.el (gnus-summary-article-number) + (gnus-summary-read-group-1, gnus-summary-mark-article) + (gnus-summary-fetch-faq, gnus-refer-article-methods): Typos. + + * gnus-mule.el (gnus-mule-add-group): Typo. + + * gnus-mlspl.el (gnus-group-split-fancy): Typo. + + * gnus-group.el (gnus-group-fetch-faq): Typo. + + * gnus-art.el (gnus-decode-header-methods): Typo. + + * flow-fill.el: Typo. + +2002-11-19 Stefan Monnier + + * binhex.el (binhex-decode-region): Don't hardcode point-min == 1. + +2002-11-29 Kai Gro,A_(Bjohann + + * gnus-sum.el (gnus-simplify-ignored-prefixes) + (gnus-summary-mark-article-as-unread) + (gnus-mark-article-as-unread, gnus-summary-highlight-line): + Reformatting to avoid long lines. + (gnus-inhibit-mime-unbuttonizing): Moved to gnus-art. + +2002-11-28 Daiki Ueno + + * gnus-agent.el (gnus-agent-fetch-group-1): Article numbers should + be accessed through `mail-header-number'. + +2002-11-27 Kevin Greiner + + * gnus-sum.el (gnus-summary-insert-old-articles): No longer passes + compressed range to gnus-summary-insert-articles. + +2002-11-26 Kevin Ryde + + * gnus-art.el (gnus-mime-copy-part): Look for filename + parameter under content-disposition, not content-type. + + * gnus-sum.el (gnus-summary-find-uncancelled): New function. + (gnus-summary-reselect-current-group): Use it. + +2002-11-26 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-uncached-articles): if + gnus-agent-load-alist fails, return ARTICLES. + + * nnrss.el (nnrss-group-alist): Update the link of Jabber. + +2002-11-26 Kai Gro,A_(Bjohann + + * gnus-sum.el (gnus-summary-insert-old-articles): Remove + superfluous function call. + (gnus-summary-catchup-all, gnus-summary-catchup-all-and-exit): + Add warning to docstring. + +2002-11-26 Katsumi Yamaoka + + * gnus-agent.el: Autoload number-at-point instead. + (gnus-agent-check-overview-buffer): No warning for deactivate-mark. + +2002-11-26 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-check-overview-buffer): Explicitly + require thingatpt (for number-at-point) and protect against + deactivate-mark being unbound (on XEmacs). + +2002-11-25 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-check-overview-buffer): Make debugger + print message on entry. + + From Kevin Greiner . + + * gnus-range.el (gnus-range-difference): New function. + * gnus-sum.el (gnus-summary-insert-old-articles): Use it. + +2002-11-24 Kai Gro,A_(Bjohann + + * gnus-sum.el (gnus-summary-insert-old-articles): Use + gnus-remove-from-range instead of gnus-range-difference which + doesn't exist. + +2002-11-23 Kai Gro,A_(Bjohann + From Kevin Greiner . + + * gnus-agent.el (gnus-agent-downloaded-article-face): New face, + used for showing which articles have been downloaded. + (gnus-agent-article-alist): Format change. Add documentation. + (gnus-agent-summary-mode-map): New keybinding `J s' for fetching + process-marked articles. + (gnus-agent-summary-fetch-series): Command for `J s'. Articles + in the series are individually fetched to minimize lose of + content due to an error/quit. + (gnus-agent-synchronize-flags-server, gnus-agent-add-server): Use + gnus-message instead of message. + (gnus-agent-read-servers): Use file lib/methods instead of + lib/servers. TODO: Why? + (gnus-summary-set-agent-mark): Adapt to new agent-alist format. + (gnus-agent-get-undownloaded-list): Remove articles that appear to + come from the agent. This means that they are not downloaded. + (gnus-agent-fetch-selected-article): Don't use history. + (gnus-agent-save-history, gnus-agent-enter-history) + (gnus-agent-article-in-history-p, gnus-agent-history-path): + Removed function; history is not used anymore. + (gnus-agent-fetch-articles): Fix handling of crossposted articles. + (gnus-agent-crosspost): Started rewrite then realized that a typo + in gnus-agent-fetch-articles ensures that this function is never + called. This will need to be fixed later. + (gnus-agent-check-overview-buffer): Some sanity checks on the + agent overview buffer. This is a safety net used during + development. + (gnus-agent-flush-cache): The gnus-agent-article-alist format has + changed, write a number to the file indicating this. + (gnus-agent-fetch-headers): Rewrite to respect + gnus-agent-consider-all-articles without relying on the + `.fetched' files. Make it fast. + (gnus-agent-braid-nov): Change resulting from + gnus-agent-fetch-headers change. + (gnus-agent-load-alist, gnus-agent-save-alist): Don't use + `.fetched' files. + (gnus-agent-read-agentview): New function, used by + gnus-agent-load-alist. + (gnus-agent-load-fetched-headers): Remove. + (gnus-agent-save-alist): Rewrite to accomodate new format. + (gnus-agent-fetch-group-1): Make sure list of articles is in the + same order as in gnus-newsgroup-headers. + (gnus-agent-expire): Document and implement extra args ARTICLES, + GROUP, FORCE. Do not restrict usage. + (gnus-agent-uncached-articles): New function. + (gnus-agent-retrieve-headers): Use it. + (gnus-agent-regenerate-group): No longer needs to be called from + gnus-agent-regenerate. Individual groups may be regenerated. The + regeneration code now fixes duplicate, and mis-ordered, NOV entries. + The article fetch dates are validated in the article alist. The + article alist is pruned of entries that do not reference existing + NOV entries. All changes are computed then applied with + inhibit-quit bound to t. As a result, it is now safe to quit out of + regeneration. The optional clean parameter has been replaced with + an optional reread parameter. Clean is no longer necessary as + regeneration gets the appropriate setting from + gnus-agent-consider-all-articles. The new reread parameter will + result in fetched, or all, articles being marked as unread. + (gnus-agent-regenerate): Removed code to regenerate the history + file as it is no longer used. + + * gnus-start.el (gnus-make-ascending-articles-unread): New + function, for efficient mass-marking. + + * gnus-sum.el (gnus-summary-highlight): Use new face for + downloaded articles. + (gnus-article-mark): Prefer to indicate read/unread status over + downloaded status. + (gnus-summary-highlight-line-0): New function, maybe rehighlights + line. + (gnus-summary-highlight-line): Use new face for downloaded + articles. + (gnus-summary-insert-old-articles): Improved performance by + replacing the initial LIST of older articles with a compressed + RANGE of older articles. Some servers appear to lie about + their active range so the original list could contain millions + of article numbers. The range is not expanded into a list + until the optional ALL parameter has been applied. + +2002-11-18 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-category-mode): Typo in doc string. + +2002-11-21 Teodor Zlatanov + + * spam.el: + added patch from Andreas Fuchs to prevent apply errors + + * spam.el: added `M s t' and `M s x' key mappings + +2002-11-20 Simon Josefsson + + * gnus-sum.el (gnus-summary-morse-message): Narrow to body. + +2002-11-19 Simon Josefsson + + * gnus-sum.el (gnus-summary-morse-message): Load + morse.el (unmorse-region not autoloaded in Emacs 20 nor XEmacs). + (unmorse-region): Autoload it instead. + +2002-11-18 Simon Josefsson + + * gnus-sum.el (gnus-summary-morse-message): New function. + (gnus-summary-wash-map): Bind to `W m'. + (gnus-summary-make-menu-bar): Add. + + * nnimap.el (nnimap-request-expire-articles): Compress sequence + before storing \Deleted mark on expired articles. + +2002-11-17 Shenghuo Zhu + Trivial patch from Markus Rost + + * gnus-sum.el (gnus-summary-goto-unread): Doc fix - escape open + parens in column 0. + +2002-11-17 Juanma Barranquero + + * nnweb.el (nnweb-google-create-mapping): Fix typo. + + * nnlistserv.el (nnlistserv-kk-create-mapping): Likewise. + + * gnus-nocem.el (gnus-nocem-liberal-fetch): Likewise. + +2002-11-17 ShengHuo ZHU + + * message.el (message-set-auto-save-file-name): Use + make-directory, to avoid the dependence on gnus-util. + +2002-11-16 Simon Josefsson + + * nnimap.el (nnimap-callback-callback-function): + (nnimap-callback-buffer): Removed, these cannot be global but must + be embedded into the callback. + (nnimap-make-callback): New. Embedd article number, callback and + buffer in function. + (nnimap-callback, nnimap-request-article-part): Update. + +2002-11-15 Katsumi Yamaoka + + * mml.el (mml-preview): Bind message-this-is-mail if it is mail. + +2002-11-13 Kai Gro,A_(Bjohann + + * gnus.el (gnus-summary-line-format): Document %C. + +2002-11-11 Simon Josefsson + + * pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify): Display + output when called interactively. + +2002-11-08 Katsumi Yamaoka + + * gnus-art.el (gnus-article-edit-exit): Kill local variables. + + * message.el (message-draft-coding-system): Improve comment; use + mm-auto-save-coding-system for the default value. + + * nndraft.el (nndraft-request-article): Revert to the state before + 2002-10-29; regexp-quote mail-header-separator. + +2002-11-06 Jesper Harder + + * gnus-draft.el (gnus-draft-setup): Set gnus-message-group-art to + allow editing of drafts from an nnvirtual group. + +2002-11-06 Katsumi Yamaoka + + * nndraft.el (nndraft-request-article): Replace emacs-mule with + mm-auto-save-coding-system. + + * message.el (message-draft-coding-system): Default to + iso-2022-7bit. + + * mm-util.el (mm-auto-save-coding-system): Undo last change to + restore the default value to emacs-mule or escape-quoted. + +2002-11-05 Katsumi Yamaoka + + * gnus-art.el (gnus-article-encrypt-body): Inhibit encrypting of + a delayed or a queued article as well as a draft. + + * gnus-sum.el (gnus-summary-edit-article): Inhibit editing of a + delayed or a queued article in the raw format; treat a delayed + article as a raw article as well as a draft. + (gnus-summary-setup-default-charset): Clear gnus-newsgroup-charset + for the delayed group. + + * nndraft.el (nndraft-request-article): Ignore auto save files for + a delayed or a queued article; don't bother to decode a queued + article; don't bind nnmail-file-coding-system for a queued article. + + * nnmail.el (nnmail-split-fancy-with-parent): Ignore the delayed + and the queue group. + +2002-11-04 Jesper Harder + + * gnus-group.el (gnus-group-delete-group): + gnus-cache-active-hashtb might be void. + +2002-11-02 Simon Josefsson + + * pgg-gpg.el (pgg-gpg-encrypt-region): Makes PGG respect the + setting of the default user ID. From Raymond Scholz + . + +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 + * 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. + +2002-10-31 Kai Gro,A_(Bjohann + + * gnus-util.el (gnus-user-date-format-alist): Clarify and correct + documentation. + +2002-10-28 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-fetched-headers) + (gnus-agent-load-fetched-headers) + (gnus-agent-save-fetched-headers): Remove variable and two + functions. Kevin Greiner's version of gnus-agent-fetch-headers + works better. + (gnus-agent-fetch-headers): New implementation from Kevin + Greiner. Uses gnus-agent-article-alist to store information + about fetched messages which aren't on the server anymore. The + trick is to return a list of considered messages to the caller, + but to only fetch those which haven't been fetched yet. + +2002-10-30 Simon Josefsson + + * pgg-def.el (pgg-passphrase-cache-expiry): New, defcustom. + + * pgg.el (pgg-passphrase-cache-expiry): Removed. + +2002-10-30 TSUCHIYA Masatoshi + + * mm-view.el (mm-w3m-local-map-property): Make it work with older + versions of emacs-w3m than 1.3.3. + + * lpath.el: Bind w3m-minor-mode-map. + + * mm-view.el (mm-w3m-mode-command-alist) + (mm-w3m-mode-dont-bind-keys, mm-w3m-mode-ignored-keys): Removed. + (mm-w3m-mode-map): Undefined for Emacs21 and XEmacs. + (mm-setup-w3m): Simplified. + (mm-w3m-local-map-property): New function. + (mm-inline-text-html-render-with-w3m): Use it. + + * gnus-art.el (gnus-article-wash-html-with-w3m): Use + mm-w3m-local-map-property. + +2002-10-29 Katsumi Yamaoka + + * mm-util.el (mm-auto-save-coding-system): Default to + iso-2022-7bit. + + * nndraft.el (nndraft-request-article): Decode an article using + the coding-system emacs-mule if it seems to have been saved using + emacs-mule. + (nndraft-request-replace-article): Use message-draft-coding-system + instead of mm-auto-save-coding-system for the draft or delayed + group. + +2002-10-28 Josh + + * mml.el (mml-mode-map): Fixed keybindings for mml-secure-* + functions. + +2002-10-28 Katsumi Yamaoka + From mah@everybody.org (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 + mm-url-use-external. + +2002-10-26 Kai Gro,A_(Bjohann + + * nnimap.el (nnimap-request-article-part): Try harder to show + group name in debugging message. + +2002-10-25 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-save-fetched-headers): Create + directory if it doesn't exist. + (gnus-agent-fetch-headers): Remove old cruft that tried to + abstain from downloading articles more than once if + gnus-agent-consider-all-articles was true. This is now done + properly via the .fetched files. + +2002-10-25 Katsumi Yamaoka + + * nndraft.el (nndraft-request-article): Treat delayed articles + like drafts. + +2002-10-24 Katsumi Yamaoka + + * gnus-agent.el (gnus-agent-load-alist): Fix parenthesis. + +2002-10-24 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-save-alist, gnus-agent-load-alist): + Remove unused optional arg DIR and corresponding code. + + * nnimap.el (nnimap-request-article-part): Include group name in + debugging output. + +2002-10-24 Paul Jarc + + * gnus-agent.el (gnus-agent-fetch-headers): Add some comments. + +2002-10-23 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-fetched-headers): New variable, + contains range of headers that have been fetched by the agent + already. Compare gnus-agent-article-alist. + (gnus-agent-file-header-cache): Like + gnus-agent-file-loading-cache, but for gnus-agent-fetched-headers. + (gnus-agent-fetch-headers): Improve comment. Revert to old + seen/recent logic. + Remember which headers have been fetched before and don't fetch + them again the next time round. + (gnus-agent-load-fetched-headers) + (gnus-agent-save-fetched-headers): New functions, for remembering + which headers have been fetched before. + +2002-10-23 Katsumi Yamaoka + + * lpath.el: Remove useless bindings. + +2002-10-22 Jesper Harder + + * gnus-sum.el (gnus-summary-execute-command): Disable visual + features while searching. + +2002-10-22 TSUCHIYA Masatoshi + + * pgg.el (pgg-snarf-keys): Do not refer unbinded local variables. + +2002-10-22 Simon Josefsson + + * pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify) + (pgg-snarf-keys): Add. + +2002-10-22 Katsumi Yamaoka + + * lpath.el: Fbind bbdb-records. + + * spam.el: Don't autoload bbdb-records. + +2002-10-22 Katsumi Yamaoka + + * spam.el: Set autoload for bbdb-records after loading bbdb-com to + prevent inf-loop. + +2002-10-22 Lars Magne Ingebrigtsen + + * nnslashdot.el: Removed some test lines. + More test. + +2002-10-21 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-fetch-headers): Remove articles that + are known to be downloaded already. + +2002-10-21 Lars Magne Ingebrigtsen + + * mm-view.el (mm-text-html-renderer-alist): Add w3m-standalone. + (mm-text-html-washer-alist): Ditto. + +2002-10-19 TSUCHIYA Masatoshi + + * nnheader.el (nnheader-remove-body): Fix an error of detecting + boundary between headers and body. + * nnml.el (nnml-parse-head): Ditto. + +2002-10-20 Lars Magne Ingebrigtsen + + * nnslashdot.el (nnslashdot-generate-active): Ignore any bogus + entries. + + * gnus-group.el (gnus-fetch-group): Allow an optional + specification of the articles to select. + + * gnus-srvr.el (gnus-server-prepare): Removed superfluous cdr. + +2002-10-20 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-fetch-group-1): After fetching + headers from the group, update variable `articles' to contain + only those numbers where headers exist. (When fetching all + articles in a group, Gnus creates lots of numbers where there is + no articles.) + +2002-10-20 Steve Youngs + + * pgg-parse.el (pgg-parse-public-key-algorithm-alist): XEmacs + doesn't have the 'alist custom type, use cons cells instead. + (pgg-parse-symmetric-key-algorithm-alist): Ditto. + (pgg-parse-hash-algorithm-alist): Ditto. + (pgg-parse-compression-algorithm-alist): Ditto. + (pgg-parse-signature-type-alist): Ditto. + + * pgg-gpg.el (pgg-gpg-extra-args): Fix custom mismatch. + + * pgg-pgp5.el (pgg-pgp5-extra-args): Ditto. + + * pgg-pgp.el (pgg-pgp-extra-args): Ditto. + +2002-10-19 Simon Josefsson + + * nnimap.el (nnimap-open-server): Check imap-state in IMAP server + buffer. + +2002-10-18 Kai Gro,A_(Bjohann + + * gnus-spec.el (gnus-make-format-preserve-properties) + (gnus-xmas-format, gnus-parse-simple-format): Preserve text + properties also on XEmacs. `gnus-xmas-format' is like format but + preserves text properties on XEmacs (though it only understands + simple format specs). The variable + `gnus-make-format-preserve-properties' controls whether the + function is used, and is checked in `gnus-parse-simple-format'. + Patch by Paul Moore . + + * gnus-agent.el (gnus-agent-fetch-articles): More debugging + output. + (gnus-agent-consider-all-articles): New variable. + (gnus-agent-get-undownloaded-list): Comment that marks todo item. + (gnus-agent-fetch-headers): Depending on + gnus-agent-consider-all-articles, maybe get all articles. + (gnus-category-predicate-alist, gnus-agent-read-p): New predicate + `read'. + (gnus-predicate-imples-unread): New function. + (gnus-agent-fetch-headers): Optimize to call + gnus-list-of-unread-articles if that is sufficient. + Check unseen and recent instead of seen and recent. + (gnus-agent-fetch-headers): Abstain from calling + gnus-list-range-intersection if range (a . b) would have (> a b). + +2002-10-18 Katsumi Yamaoka + + * message.el (message-send-mail): Make it possible to perform + edebug-defun. + +2002-10-18 Simon Josefsson + + * gnus-art.el (gnus-button-man-handler): Change default to + `manual-entry' (defined in both emacsen). + (gnus-button-man-handler): Remove emacsen difference and use + `manual-entry'. + +2002-10-18 Katsumi Yamaoka + + * spam.el: Wrap autoload settings for bbdb-records, + executable-find and ifile-spam-filter with eval-and-compile. + (spam-display-buffer-contents): Remove. + (spam-bogofilter-score): Merge spam-display-buffer-contents. + +2002-10-17 Ted Zlatanov + + * spam.el (spam-display-buffer-contents): New function. + (spam-bogofilter-score): use spam-display-buffer-contents, patch + from Katsumi Yamaoka . + +2002-10-17 TSUCHIYA Masatoshi + + * nnheader.el (nnheader-parse-naked-head): New function. + (nnheader-parse-head): Use the above function, in order to handle + continuation lines properly. + (nnheader-remove-body): New function. + (nnheader-remove-cr-followed-by-lf): New function. + (nnheader-ms-strip-cr): Use the above function. + + * gnus-agent.el (gnus-agent-regenerate-group): Call + `nnheader-remove-body'; use `nnheader-parse-naked-head' instead of + `nnheader-parse-head'. + * gnus-cache.el (gnus-cache-possibly-enter-article): Ditto. + + * gnus-msg.el (gnus-inews-yank-articles): Do not unfold + continuation lines by itself; call `nnheader-parse-naked-head' + instead of `nnheader-parse-head'. + * nndiary.el (nndiary-parse-head): Ditto. + * nnfolder.el (nnfolder-parse-head): Ditto. + * nnimap.el (nnimap-retrieve-headers-progress): Ditto. + * nnmaildir.el (nnmaildir--update-nov): Ditto. + * nnml.el (nnml-parse-head): Ditto. + +2002-10-17 Steve Youngs + + * gnus-art.el (gnus-button-man-handler): Add 'manual-entry' for + XEmacs, default to it if featurep 'xemacs. + +2002-10-16 Katsumi Yamaoka + + * spam-stat.el: Check for the existence of hash functions instead + of the Emacs version to decide whether to load cl. Suggested by + Kai Gro,A_(Bjohann. + +2002-10-15 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-fetch-selected-article): Open history + if it isn't open yet. + +2002-10-14 Katsumi Yamaoka + + * gnus-group.el: Require mm-url only when compiling. + (gnus-group-fetch-charter): Require mm-url. + + * spam-stat.el: Require cl for the functions gethash, + hash-table-count, make-hash-table and mapc for Emacs 20. + (puthash): Alias to cl-puthash for Emacs 20. + (with-syntax-table): New macro for Emacs 20. + +2002-10-12 Jesper Harder + + * gnus-spec.el (gnus-pad-form): Use gnus-string-width-function. + +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. + +2002-10-12 Simon Josefsson + + * message.el (message-beginning-of-line): New variable. + (message-beginning-of-line): Use it. + +2002-10-11 Ted Zlatanov + + * spam.el: more compilation fixes for BBDB + + * spam-stat.el added code from Alex Schroeder + (spam-stat-reduce-size): Interactive. + (spam-stat-reset): New function. + (spam-stat-save): Interactive. + +2002-10-11 Katsumi Yamaoka + + * gnus.el: Autoload gnus-delay-initialize. + + * message.el: Autoload gnus-delay-article. + +2002-10-11 Jesper Harder + + * gnus-spec.el (gnus-balloon-face-function): Use the help-echo + text property in Emacs. + +2002-10-11 Simon Josefsson + + * mml2015.el (mml2015-pgg-decrypt, mml2015-pgg-clear-decrypt) + (mml2015-pgg-verify, mml2015-pgg-clear-verify): Remove CR. + + * mml1991.el (mml1991-pgg-sign): Remove CR. + +2002-10-10 Simon Josefsson + + * mml2015.el (mml2015-pgg-decrypt): Set gnus details even when + decrypt failed. + (mml2015-trust-boundaries-alist): Removed. + (mml2015-gpg-extract-signature-details): Don't use it. + (mml2015-unabbrev-trust-alist): New. + (mml2015-gpg-extract-signature-details): Use it. + +2002-10-10 Ted Zlatanov + + * spam.el: compilation fixes, spam-check-bbdb function is nil if no + BBDB installed + + * spam-stat.el: added code from Alex Schroeder to do + statistical analysis of spam in Lisp only + +2002-10-10 Simon Josefsson + + * nnimap.el (nnimap-open-server): Re-open server if it isn't in + auth, selected or examine state. + + * pgg-gpg.el (pgg-gpg-verify-region): Filter out stuff into output + buffer and error buffer depending on type of information. + + * mml2015.el (mml2015-gpg-extract-signature-details): Parse + --status-fd stuff even if gpg.el is not used (revert earlier + change). + (mml2015-pgg-{clear-,}verify): Store both output and errors as + gnus details. + (mml2015-pgg-{clear-,}verify): Extract signature info from errors + buffer. + + * pgg.el (pgg-verify-region): Use it. + + * pgg-def.el (pgg-query-keyserver): New variable. + + * pgg.el (pgg-decrypt-region): Bind pgg-default-user-id to + key-identifier in packet. Is this a good idea? + + * mml.el (mml-mode-map): Add security commands that operates on + MIME parts. + (mml-menu): And menu items for them. + + * mml1991.el (mml1991-pgg-encrypt): Remove headers. + + * mml.el (mml-parse-1): Support sender in #secure tags. + + * mml1991.el (mml1991-pgg-sign): Only use message-sender if it is + defined. + + * mml-sec.el (mml-smime-encrypt-buffer): Warn about combined signing. + (mml-pgp-encrypt-buffer): Support combined signing. + + * mml1991.el (mml1991-mailcrypt-encrypt): Support combined signing. + (mml1991-gpg-encrypt): Ditto. + (mml1991-pgg-encrypt): Ditto. + (mml1991-encrypt): Pass sign parameter. + + * mml-sec.el (mml-signencrypt-style-alist): Defcustom. + (mml-signencrypt-style): Mention the variable. + +2002-10-09 Simon Josefsson + + * mml1991.el (mml1991-pgg-sign): Bind pgg-default-user-id, not + pgg-gpg-user-id. + + * pgg.el (pgg-insert-url-with-w3): Ignore errors. + (pgg-fetch-key-function): Nil if w3 is not installed. + +2002-10-08 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-fetch-selected-article): Bind + gnus-agent-current-history. + +2002-10-06 Simon Josefsson + + * imap.el (imap-parse-status): Don't use read to read token. + +2002-10-05 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-fetch-selected-article): Do nothing + for methods not covered by the agent, and when unplugged. + +2002-10-05 Simon Josefsson + + * pgg-gpg.el (pgg-gpg-encrypt-region): Query passphrase when + signing. + + * gnus-agent.el (gnus-agent-read-servers): If getting method from + a named server fails, ignore the server. + + * mml1991.el (mml1991-pgg-sign): Do QP. + + * pgg-gpg.el (pgg-gpg-encrypt-region): Make signencrypt really + work. + +2002-10-04 Simon Josefsson + + * pgg-gpg.el (pgg-gpg-encrypt-region): Make signencrypt work. + + * pgg-pgp.el (pgg-pgp-verify-region): Inline + binary-write-decoded-region from MEL. + + * pgg.el (pgg-encrypt-region): Support sign. + + * pgg-gpg.el (pgg-gpg-encrypt-region): Ditto. + + * mml2015.el (mml2015-pgg-encrypt): Ditto. + + * pgg.el, pgg-def.el, pgg-parse.el, pgg-gpg.el, pgg-pgp5.el, + pgg-pgp6.el: Moved from ../pgg/. Modifications compared to EMIKO + branch where PGG was taken from in the ChangeLog entries below. + +2002-10-01 Simon Josefsson + + * pgg-pgp.el: Don't require mel. Don't use luna. + (pgg-scheme-pgp-instance, pgg-make-scheme-pgp): Remove. + (pgg-pgp-process-region): Use expand-file-name instead of concat. + (pgg-pgp-process-region): Don't use binary-funcall. + + * pgg-pgp5.el (pgg-pgp5-process-region): Don't use binary-funcall. + + * pgg-gpg.el (pgg-gpg-process-region): Use expand-file-name + instead of concat. + + * pgg-pgp5.el (pgg-pgp5-process-region): Ditto. + +2002-09-29 Simon Josefsson + + * pgg-parse.el (pgg-char-int, pgg-string-as-unibyte): Prevent byte + compile warnings. + + * pgg.el (pgg-decrypt-region): Don't parse packet. + + * pgg.el, pgg-gpg.el, pgg-pgp5.el: Don't depend on luna.el. + +2002-09-29 Daiki Ueno + + * pgg.el: Remove dependency on calist.el. + +2002-09-28 Simon Josefsson + + * pgg.el (pgg-temporary-file-directory): New variable. + (pgg-verify-region): Don't assume set-buffer-multibyte exists. + + * pgg-pgp5.el (pgg-pgp5-process-region, pgg-scheme-verify-region) + (pgg-scheme-snarf-keys-region): Use pgg-temporary-file-directory. + + * pgg-parse.el (pgg-char-int): Defalias. + (pgg-format-key-identifier, pgg-byte-after, pgg-read-byte) + (pgg-read-bytes, pgg-read-body): Use it. + (pgg-decode-packets): Don't use MEL, use base64-*. + (pgg-parse-armor): Don't assume set-buffer-multibyte exists. + (pgg-string-as-unibyte): Defalias. + (pgg-parse-armor-region): Use it. + + * pgg-gpg.el (pgg-gpg-process-region): Use + pgg-temporary-file-directory. + + * luna.el: Don't def-edebug. + + * pgg-pgp5.el (pgg-scheme-verify-region): Inline + binary-write-decoded-region from MEL. + + * pgg-pgp5.el, pgg-gpg.el: Don't require mel. + + * alist.el, calist.el: Don't require product/APEL. + + * pgg-parse.el (top-level): Remove dependency on static.el, + pccl.el, mel.el. + (pgg-parse-crc24, pgg-parse-crc24-string): Only define if + `define-ccl-program' is boundp, instead of using broken. + +2002-10-01 Simon Josefsson + + * message.el (message-required-mail-headers): Remove Lines:. + +2002-10-03 Kai Gro,A_(Bjohann + From 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-group-fetch-control to summary key map and menu. + +2002-10-03 Paul Jarc + + * nnmaildir.el (nnmaildir--group-maxnum-art): fix maximum article + number when there are no articles. + +2002-10-03 Kai Gro,A_(Bjohann + + * gnus-agent.el (gnus-agent-summary-fetch-group): Optional prefix + arg ALL means to fetch all articles, not only downloadable ones. + (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 . + + * gnus-ems.el (gnus-x-splash): Set coding-system-for-read to + raw-text. + +2002-09-30 Ted Zlatanov + + * spam.el: merged changes from pinard@iro.umontreal.ca (Fran,Ag(Bois + Pinard). + Major revamp of the code, documentation is in comments in the file + for now. + +2002-09-30 Simon Josefsson + + * mml2015.el (mml2015-pgg-clear-verify): Verifying in a unibyte + buffer seem to be needed? + +2002-09-29 Simon Josefsson + + * mml1991.el (pgg-output-buffer, pgg-errors-buffer): Prevent byte + compile warnings. + + * mml1991.el (mml1991-function-alist): Add pgg. + (mml1991-pgg-sign, mml1991-pgg-encrypt): New functions. + (mml1991-pgg-encrypt): Fix recipients querying. + +2002-09-28 Simon Josefsson + + * mml2015.el (autoload): Autoload correct files. Trivial patch + from dme@dme.org. + (mml2015-pgg-decrypt, mml2015-pgg-verify): Make sure either nil or + handle is returned. + +2002-09-27 Katsumi Yamaoka + + * gnus-start.el (gnus-fixup-nnimap-unread-after-getting-new-news): + Protect against non-existent of `nnimap-mailbox-info'. + +2002-09-27 Simon Josefsson + + * gnus-start.el (gnus-fixup-nnimap-unread-after-getting-new-news): New. + (gnus-setup-news-hook): Use it. + (gnus-after-getting-new-news-hook): Ditto. + + * nnimap.el (nnimap-fixup-unread-after-getting-new-news): Remove. + +2002-09-27 Katsumi Yamaoka + From Mats Lidell . + + * gnus-art.el (gnus-article-mode-syntax-table): Replace "-" to " ". + +2002-09-27 TSUCHIYA Masatoshi + + * gnus-sum.el (gnus-nov-parse-line): When an error is signaled in + the part to decode encoded words, use raw words instead of decoded + words. + +2002-09-26 ShengHuo ZHU + + * nnimap.el (nnimap-update-unseen): Use gnus-gethash-safe. + + * mm-view.el (mm-w3m-mode-ignored-keys): New variable. + (mm-setup-w3m): Use it. + +2002-09-27 Simon Josefsson + + * gnus-art.el (gnus-article-mode-syntax-table): Make M-. work in + article buffers. + + * nnimap.el (nnimap-fixup-unread-after-getting-new-news): Autoload + it just in case. + (nnimap-update-unseen): New function; update unseen count in + `n-m-info'. + (nnimap-close-group): Call it. + + * gnus-start.el (gnus-setup-news-hook): Add n-f-u-a-g-n-n. + (gnus-after-getting-new-news-hook): Ditto. + + * nnimap.el (nnimap-retrieve-groups): Move the quick mail check + message into verboselevel 9. Change slow mail check message. + (nnimap-retrieve-groups): Use prefixed names in n-mailbox-info. + (nnimap-fixup-unread-after-getting-new-news): New function, to be + used as a hook after getting new mail. + +2002-09-26 Simon Josefsson + + * imap.el (imap-parse-resp-text-code): The UNSEEN value in + SELECT/EXAMINE is first unseen article, not number of unseen + articles. Make them distinct by renaming the former to + `first-unseen' instead of `unseen'. + + * nnimap.el (nnimap-retrieve-groups): Get uidvalidity and unseen + too. + (nnimap-retrieve-groups): Don't used cached data if uidvalidity + changed. + (nnimap-retrieve-groups): Store uidvalidity and unseen data too. + + * gnus-int.el (gnus-server-unopen-status): Defcustom. + + * mml-sec.el (mml-signencrypt-style): Docstring to font-lock + better. + + * mml2015.el (mml2015-pgg-decrypt): Only add security information + if dissecting resulting buffer actually had any information. + +2002-09-26 Katsumi Yamaoka + + * gnus-group.el (gnus-group-sort-by-method): Remove `symbol-name' + because the function `string<' allows symbols. + + * gnus-sum.el (gnus-summary-make-menu-bar): Ditto. + +2002-09-25 ShengHuo ZHU + + * message.el (message-forward-make-body): Revert an early change + because 8-bit utf-8 emails. + +2002-09-25 Bj,Av(Brn Torkelsson + + * gnus-agent.el (gnus-category-line-format): Doc fixes (mostly added + links to Info) + * gnus-art.el (gnus-treat-highlight-signature): + * gnus-art.el (gnus-treat-buttonize): + * gnus-art.el (gnus-treat-buttonize-head): + * gnus-art.el (gnus-treat-emphasize): + * gnus-art.el (gnus-treat-strip-cr): + * gnus-art.el (gnus-treat-unsplit-urls): + * gnus-art.el (gnus-treat-leading-whitespace): + * gnus-art.el (gnus-treat-hide-headers): + * gnus-art.el (gnus-treat-hide-boring-headers): + * gnus-art.el (gnus-treat-hide-signature): + * gnus-art.el (gnus-treat-fill-article): + * gnus-art.el (gnus-treat-hide-citation): + * gnus-art.el (gnus-treat-hide-citation-maybe): + * gnus-art.el (gnus-treat-strip-list-identifiers): + * gnus-art.el (gnus-treat-strip-pgp): + * gnus-art.el (gnus-treat-strip-pem): + * gnus-art.el (gnus-treat-strip-banner): + * gnus-art.el (gnus-treat-highlight-headers): + * gnus-art.el (gnus-treat-highlight-citation): + * gnus-art.el (gnus-treat-date-ut): + * gnus-art.el (gnus-treat-date-local): + * gnus-art.el (gnus-treat-date-english): + * gnus-art.el (gnus-treat-date-lapsed): + * gnus-art.el (gnus-treat-date-original): + * gnus-art.el (gnus-treat-date-iso8601): + * gnus-art.el (gnus-treat-date-user-defined): + * gnus-art.el (gnus-treat-strip-headers-in-body): + * gnus-art.el (gnus-treat-strip-trailing-blank-lines): + * gnus-art.el (gnus-treat-strip-leading-blank-lines): + * gnus-art.el (gnus-treat-strip-multiple-blank-lines): + * gnus-art.el (gnus-treat-unfold-headers): + * gnus-art.el (gnus-treat-fold-headers): + * gnus-art.el (gnus-treat-fold-newsgroups): + * gnus-art.el (gnus-treat-overstrike): + * gnus-art.el (gnus-treat-display-xface): + * gnus-art.el (gnus-treat-display-smileys): + * gnus-art.el (gnus-treat-from-picon): + * gnus-art.el (gnus-treat-mail-picon): + * gnus-art.el (gnus-treat-newsgroups-picon): + * gnus-art.el (gnus-treat-body-boundary): + * gnus-art.el (gnus-treat-capitalize-sentences): + * gnus-art.el (gnus-treat-fill-long-lines): + * gnus-art.el (gnus-treat-play-sounds): + * gnus-art.el (gnus-treat-translate): + * gnus-art.el (gnus-treat-x-pgp-sig): + * gnus-art.el (gnus-mime-button-line-format): + * gnus-art.el (gnus-button-man-level): + * gnus-art.el (gnus-button-emacs-level): + * gnus-cus.el (gnus-group-parameters): + * gnus-gl.el (bbb-build-mid-scores-alist): + * gnus-group.el (gnus-group-line-format): + * gnus-mlspl.el (gnus-group-split-setup): + * gnus-mlspl.el (gnus-group-split): + * gnus-msg.el (gnus-mailing-list-groups): + * gnus-msg.el (gnus-posting-styles): + * gnus-nocem.el (gnus-nocem-issuers): + * gnus-score.el (gnus-score-regexp-bad-p): + * gnus-srvr.el (gnus-server-line-format): + * gnus-topic.el (gnus-topic-line-format): + * gnus.el (gnus-summary-line-format): + * mail-source.el (mail-sources): + * message.el (message-subscribed-address-file): + * nnmail.el (nnmail-split-fancy): + +2002-09-24 Evgeny Roubinchtein + + * mail-source.el(mail-source-run-script): use `functionp' to test + whether the argument `script' is in fact a function. + (mail-sources): adjust the defcustom to allow users to specify a + function or a string as the value of the `:prescript' and + `:postscript' arguments of the `file' and `pop3' mail sources. + +2002-09-25 Paul Jarc + + * nnmaildir.el (nnmaildir--grp-add-art): fix minimum article + number when article 1 does not exist. + +2002-09-25 Kai Gro,b_(Bjohann + + * 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. + (gnus-button-handle-describe-function) + (gnus-button-handle-describe-variable): Doc fix. From Reiner Steib. + (gnus-button-handle-describe-key, gnus-button-handle-apropos) + (gnus-button-handle-apropos-command): Doc fix. From Reiner Steib. + +2002-09-25 Mark A. Hershberger + Trivial patch. + + * nnrss.el (nnrss-save-server-data): Save nnrss-group-alist in + the file. + +2002-09-24 ShengHuo ZHU + + * gnus-start.el (gnus-1): Create nndraft:queue, nndraft:drafts. + +2002-09-24 Simon Josefsson + + * mml2015.el (top-level): Require mm-util for mm-make-temp-file. + (mml2015-use): Prefer PGG if installed. + (mml2015-function-alist): Add PGG wrappers. + (mml2015-gpg-extract-signature-details): Check mml2015-use too. + (mml2015-gpg-extract-signature-details): PGG strips "gpg: " + prefix, make regexp optionally skip it. + (mml2015-pgg-decrypt, mml2015-pgg-clear-decrypt) + (mml2015-pgg-verify, mml2015-pgg-clear-verify, mml2015-pgg-sign) + (mml2015-pgg-encrypt): New functions. + (defvar, autoload): Prevent byte-compile warnings. + +2002-09-24 Katsumi Yamaoka + From TSUCHIYA Masatoshi . + + * gnus-art.el (article-strip-banner): Check for the existence of + from header. + +2002-09-23 Kai Gro,b_(Bjohann + + * 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. + + * nnmaildir.el (nnmaildir--update-nov): fix wrong-type error when + nnmail-extra-headers is non-nil. + +2002-09-23 Paul Jarc + + * nnmaildir.el: Store article numbers persistently. General + revision. + (nnmaildir-request-expire-articles): handle 'immediate and 'never + for nnmail-expiry-wait; delete instead of moving if 'force is + given. + +2002-09-23 Simon Josefsson + Trivial fix from beaker@iavmb.pl (Krzysztof J,Bj(Bdruczyk). + + * smime.el (smime-sign-buffer): Get key and extra certs. + (smime-get-key-with-certs-by-email): Utility function. + +2002-09-21 ShengHuo ZHU + Trivial patch from Micha Wiedenmann + + * gnus-soup.el (gnus-soup-add-article): Mark as read only when the + article exists. + +2002-09-20 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-next-group): Switch to the summary buffer. + +2002-09-20 Kai Gro,b_(Bjohann + From Reiner Steib. + + * gnus-art.el (gnus-button-handle-custom, + gnus-button-handle-mid-or-mail, + gnus-button-handle-describe-{function,variable,key}, + gnus-button-handle-apropos{,command,variable}): New functions. + (gnus-button-prefer-mid-or-mail,gnus-button-guessed-mid-regexp, + gnus-button-{man,emacs,mail}-level): New variables. + (gnus-button-alist): Use the above to buttonize emacs and mail + related links. + +2002-09-18 Juanma Barranquero + + * gnus-int.el (gnus-status-message): Fix spacing. + + * imap.el (imap-continuation): Fix typos. + +2002-09-18 ShengHuo ZHU + + * gnus-msg.el (gnus-configure-posting-styles): Sort results. + + * gnus-art.el (gnus-article-reply-with-original): Correct + with-current-buffer scope. + + * message.el (message-completion-alist): Add Reply-To, From, etc. + +2002-09-18 Simon Josefsson + + * nnimap.el (nnimap-request-expire-articles): Make flag setting + conditional. From Nevin Kapur . + +2002-09-17 Simon Josefsson + + * nnimap.el (nnimap-expiry-target): Don't search for which + articles exists here. + (nnimap-request-expire-articles): Do it here instead. Only expire + when articles are found. Suggested by Nevin Kapur + . + +2002-09-17 Kai Gro,A_(Bjohann + From Reiner Steib . + + * message.el (message-strip-subject-trailing-was) + (message-change-subject, message-add-archive-header) + (message-xpost-fup2-header, message-xpost-insert-note) + (message-xpost-fup2, message-reduce-to-to-cc): New functions + adopted from message-utils.el. Add functions to the keymap, mode + describtion and menu. + (message-change-subject,message-xpost-fup2): Signal error if + current header is empty. + (message-xpost-insert-note): Changed insert position. + (message-archive-note): Ensure to insert note in message body (not + in head). + (message-archive-header, message-archive-note) + (message-xpost-default, message-xpost-note, message-fup2-note) + (message-xpost-note-function): New variables adopted from + message-utils.el. Changed some doc-strings. + (message-mark-insert-{begin,end}): Rename from + message-{begin,end}-inserted-text-mark (message-utils.el), changed + values. + (message-subject-trailing-was-query) + (message-subject-trailing-was-ask-regexp) + (message-subject-trailing-was-regexp): New variables. + (message-to-list-only): Added doc-string and menu entry. + + * message-utils.el: Removed. Functions are now in message.el. + +2002-09-16 ShengHuo ZHU + + * gnus-art.el (gnus-article-reply-with-original, + gnus-article-followup-with-original): Switch to + gnus-summary-buffer before reply/followup. + +2002-09-15 John Paul Wallington + + * gnus-sum.el (gnus-summary-toggle-header): The article window may + not exist. Toggle it anyway. + +2002-09-13 ShengHuo ZHU + + * gnus-msg.el (gnus-copy-article-buffer): Bind mail-header-separator. + + * gnus-art.el (article-fill-long-lines): Fill-paragraph properly. + Trivial patch from Urban Engberg . + + * rfc2047.el (message-posting-charset): Defvar it. + (rfc2047-charset-encoding-alist): Use B for iso-8859-7 and + iso-8859-8. Fix doc. Suggested by Dave Love . + + * mail-source.el (mail-source-fetch): Hide password. + + * gnus-sum.el (gnus-summary-next-group): Semi-exit only when needed. + +2002-09-12 Katsumi Yamaoka + From John Paul Wallington . + + * gnus.el (gnus-visual, gnus-meta): Fix typo. + +2002-09-11 Katsumi Yamaoka + + * gnus-art.el (gnus-article-address-banner-alist): Doc fix. + +2002-09-11 Simon Josefsson + + * nnimap.el (nnimap-expiry-target): Only expiry-target existing articles. + (nnimap-split-rule): Doc fix. + (nnimap-request-expire-articles): Cleanup code. + +2002-09-11 Katsumi Yamaoka + From TSUCHIYA Masatoshi . + + * gnus-art.el (gnus-article-address-banner-alist): New option. + (article-strip-banner): Refer the above option to split banners of + free mail servers, when no group parameter is specified. + +2002-09-10 Katsumi Yamaoka + + * nntp.el (nntp-wait-for-string): Check for a process in the + current buffer instead of `nntp-server-buffer'. + +2002-09-09 Simon Josefsson + + * gnus-art.el (gnus-button-man-handler): New variable. + (gnus-button-alist): Use g-b-handle-man. + (gnus-button-handle-man): New, call g-b-man-handler. + +2002-09-08 Simon Josefsson + + * gnus-art.el (gnus-button-alist): Buttonize man page links. + +2002-09-07 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-dumbquotes-map): Add \230. + +2002-09-06 Lars Magne Ingebrigtsen + + * gnus-srvr.el (gnus-browse-make-menu-bar): Add "d". + + * gnus-sum.el (gnus-summary-limit-to-unseen): New command and + keystroke. + + * gnus-srvr.el (gnus-browse-describe-group): New command and + keystroke. + +2002-09-06 Katsumi Yamaoka + + * gnus-art.el (gnus-article-treat-body-boundary): Don't quote a + value for gnus-decoration property. + +2002-09-06 Kai Gro,b_(Bjohann + + * nnmail.el (nnmail-cache-fetch-group): Don't return "" (empty + string) as group name in case we have a CRLF in the file. + +2002-09-04 Jesper Harder + + * rfc1843.el (rfc1843-decode-loosely): Move to mime customization + group. + (rfc1843-decode-hzp): do. + (rfc1843-newsgroups-regexp): do. + +2002-09-04 Simon Josefsson + + * message.el (message-canlock-generate): Make sure sha1 doesn't + call external programs. + +2002-09-03 Simon Josefsson + + * nntp.el (nntp-wait-for-string): Dont infloop if process died. + + * gnus-agent.el (gnus-agent-batch): Add doc. + +2002-09-03 Josh Huber + + * gnus-msg.el (gnus-summary-handle-replysign): Change the order we + check for signed and encrypted parts. + * mml.el (mml-parse-1): Correct small typo which preventing + setting recipients in a secure tag. + +2002-09-03 Katsumi Yamaoka + + * mm-util.el (mm-coding-system-priorities): Default to a list of + iso-2022-jp and others for the Japanese environment. + +2002-09-03 Katsumi Yamaoka + + * gnus-util.el (gnus-frame-or-window-display-name): Exclude + invalid display names. + +2002-08-30 Simon Josefsson + + * gnus-group.el (gnus-group-fetch-control): Fix typo in last + commit. From Reiner Steib <4uce.02.r.steib@gmx.net>. + +2002-08-26 Jesper Harder + + * gnus.el (gnus-group-charter-alist): New option. + (gnus-group-fetch-control-use-browse-url): New option. + + * gnus-group.el (gnus-group-fetch-charter): New function. + (gnus-group-fetch-control): New function. + Add them to the keymap and menu. Require mm-url. + +2002-08-30 Katsumi Yamaoka + + * gnus-mlspl.el (gnus-group-split-fancy): Doc fix. + From Alex Schroeder . + +2002-08-29 Jesper Harder + + * gnus-group.el (gnus-group-make-menu-bar): Add ellipses to menu + items expecting user interaction. + + * gnus-topic.el (gnus-topic-make-menu-bar): do. + + * gnus-sum.el (gnus-summary-make-menu-bar): do. + + * gnus-srvr.el (gnus-server-make-menu-bar): do. + + * mml.el (mml-menu): do. + +2002-08-28 Katsumi Yamaoka + + * mail-source.el (mail-source-touch-pop): New function. + + * message.el (message-smtpmail-send-it): New function. + (message-send-mail-function): Add it for a candidate. + +2002-08-27 Simon Josefsson + + * gnus-msg.el (posting-charset-alist): Use + gnus-define-group-parameter instead of defcustom. + (gnus-put-message): Handle SPC in GCC. + (gnus-inews-insert-gcc): Ditto. + (gnus-inews-insert-archive-gcc): Ditto. + +2002-08-26 Simon Josefsson + + * gnus-agent.el (gnus-agent-auto-agentize-methods): New variable. + (gnus-agentize): Auto agentize all nntp and nnimap groups. + (gnus-agent-possibly-save-gcc): Autoload. + Suggested by (KOSEKI Yoshinori) . + +2002-08-26 Katsumi Yamaoka + + * gnus.el (gnus-other-frame-function): New user option. + (gnus-other-frame): Use it; add a doc-string; make it work with + the gnuclient program. + + * gnus-util.el (gnus-frame-or-window-display-name): New function. + + * lpath.el: Fbind `frame-parameter', `make-frame-on-display', + `device-connection' and `dfw-device'. + +2002-08-22 Kai Gro,b_(Bjohann + + * gnus-art.el (gnus-emphasis-alist): Strikethru had a lot of false + positives, make it stricter. From Jochen Hein (trivial change). + +2002-08-21 Katsumi Yamaoka + + * gnus.el (gnus-other-frame): Trivial fix. + +2002-08-21 Katsumi Yamaoka + + * gnus.el (gnus-other-frame-parameters): New user option. + (gnus-other-frame-object): New variable. + (gnus-other-frame): Make it search for existing Gnus frame; don't + read new news; delete frame on exit. + + * gnus-util.el (gnus-select-frame-set-input-focus): New function. + + * lpath.el: Fbind w32-focus-frame and x-focus-frame. + +2002-08-20 Katsumi Yamaoka + From $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'. + * nnheader.el (nnheader-file-name-translation-alist): Ditto. + +2002-08-20 ShengHuo ZHU + + * gnus-art.el (gnus-button-url-regexp): Use POSIX regexp if possible. + + * nnmh.el (nnmh-request-list-1): Use %.0f instead of %d to + avoid arithmetic errors. + +2002-08-20 Katsumi Yamaoka + + * gnus-art.el: Don't fbind `gnus-article-replace-with-quoted-text'. + +2002-08-19 Katsumi Yamaoka + + * message.el (message-ignored-supersedes-headers): Add X-Hashcash. + (message-ignored-resent-headers): Add envelope From. + +2002-08-18 Kai Gro,b_(Bjohann + + * gnus.el (gnus-summary-line-format): Document %k specifier. + +2002-08-17 Kai Gro,b_(Bjohann + + * gnus-sum.el (gnus-summary-line-message-size): New function. + (gnus-summary-line-format-alist): Use it. + +2002-08-15 Katsumi Yamaoka + + * gnus-art.el (article-make-date-line): Refer to the value for + `gnus-article-time-format' in the summary buffer. + + * message.el (message-cite-prefix-regexp): Exclude ":" and ",A;(B". + +2002-08-14 Simon Josefsson + + * gnus-art.el (gnus-button-alist): Use ' not ` for default value + quoting. + (gnus-button-alist): Fix doc. + (gnus-header-button-alist): Use ' not ` for default value quoting. + (gnus-header-button-alist): Don't inline gnus-button-url-regexp, + rationale similar to 2002-05-01 change. + (gnus-article-add-buttons-to-head): Evaluate expression. + + * gnus-sum.el (gnus-summary-make-menu-bar): Add MIME button option. + +2002-08-14 Katsumi Yamaoka + + * message.el (message-font-lock-keywords): Refer to the value for + `message-cite-prefix-regexp' dynamically. + +2002-08-13 Katsumi Yamaoka + + * gnus-art.el (gnus-decode-header-methods): Doc fix. + +2002-08-12 Simon Josefsson + + * imap.el (imap-shell-open): Allow non-list `imap-shell-program'. + (imap-shell-open): Skip initial junk before IMAP greeting. + +2002-08-11 Simon Josefsson + + * message-utils.el (message-xpost-default, + message-xpost-fup2-header, message-xpost-fup2): Fixed + Typos. Trivial changes from Reiner Steib + <4uce.02.r.steib@gmx.net>. + +2002-08-09 Simon Josefsson + + * message.el (message-canlock-password): Set + canlock-password-for-verify to newly generated canlock-password. + When Emacs is restarted, Custom makes sure this is set, but during + the same session we must set it manually. + +2002-08-07 Jesper Harder + + * yenc.el: New file. + + * mm-uu.el (mm-uu-yenc-decode-function): New variable. + (mm-uu-type-alist): Add yenc. + (mm-uu-yenc-filename): New function. + (mm-uu-yenc-extract): New function. + + * mm-bodies.el (mm-decode-content-transfer-encoding): Add yenc. + +2002-08-06 ShengHuo ZHU + + * dgnushack.el (merge): Don't use coerce. + +2002-05-27 Jesper Harder + + * mailcap.el (mailcap-mime-data): Test window-system rather than + mm-device-type. + (mailcap-mime-data): Call xdvi and gv with "-safer". + + * mm-util.el: Don't define mm-device-type. + +2002-08-05 Simon Josefsson + + * mm-util.el (mm-coding-system-priorities): coding-system type not + supported everywhere. + +2002-08-04 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bumped version number. + +2002-08-04 01:48:57 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.07 is released. + +2002-08-04 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-thread-sort-functions): Doc fix. + (gnus-article-sort-functions): Doc fix. + (t): New keystroke. + (gnus-article-sort-by-random): New function. + (gnus-thread-sort-by-random): New function. + +2002-08-02 Simon Josefsson + + * gnus-logic.el (gnus-advanced-integer): Swap arguments in + funcall. From Scott A Crosby . + +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 . + + * nnweb.el (nnweb-type, nnweb-type-definition) + (nnweb-gmane-create-mapping, nnweb-gmane-wash-article) + (nnweb-gmane-search, nnweb-gmane-identity): Added gmane + functionality. + * nnweb.el: Removed old non-functioning search engines. + +2002-07-27 Simon Josefsson + + * message.el (message-forward-make-body): Don't use + `message-forward-ignored-headers' when doing a "raw" followup (it + is important to preserve e.g. CTE). + + * flow-fill.el (fill-flowed): Disable filladapt-mode. + + * gnus-sieve.el (gnus-sieve-guess-rule-for-article): Don't + regexp-quote, Cyrus Sieve is fixed. + + * sieve-manage.el (sieve-manage-deletescript): New function. + + * sieve.el (sieve-manage-mode-map): Fix down-mouse-2 and down-mouse-3. + (sieve-manage-mode): Fix menubar. + (sieve-activate): Change some messages. + (sieve-deactivate-all): New function. + (sieve-deactivate): New alias. + (sieve-remove): New function. + (sieve-help): Fix help. + All suggested by Ned Ludd. + +2002-07-24 Katsumi Yamaoka + + * mm-decode.el (mm-inline-text-html-with-images): Doc fix. + (mm-w3m-safe-url-regexp): New user option. + + * mm-view.el (mm-inline-text-html-render-with-w3m): Use + `mm-w3m-safe-url-regexp' to bind `w3m-safe-url-regexp'. + +2002-07-23 Karl Kleinpaste + + * gnus-sum.el (gnus-summary-delete-article): Force + 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 . + + * nnmail.el (nnmail-fancy-expiry-target): Treat nonexisting + headers as empty headers. + +2002-07-21 Kai Gro,b_(Bjohann + From 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 . + + * nnfolder.el (nnfolder-retrieve-headers): Avoid searching the + entire file for each of a sequence of missing articles. + + * gnus-salt.el (gnus-binary-display-article): Respect an existing + value for gnus-view-pseudos. + + * gnus-sum.el (gnus-summary-insert-new-articles): Count down to + avoid nreverse. + +2002-07-14 Kai Gro,b_(Bjohann + From Ted Zlatanov . + + * gnus-sum.el (gnus-auto-expirable-marks): Remove `spam'. + (gnus-summary-mode-line-format-alist): Add %h for number of + spams. + (gnus-newsgroup-spam-marked): New variable. + (gnus-summary-local-variables): Add gnus-newsgroup-spam-marked. + (gnus-article-read-p, gnus-article-mark) + (gnus-set-global-variables, gnus-set-global-variables) + (gnus-article-marked-p, gnus-summary-mark-article-as-read) + (gnus-summary-mark-article-as-unread) + (gnus-summary-mark-article-as-unread, gnus-summary-mark-article) + (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 + + * nnimap.el (nnimap-split-to-groups): Allow group string to be a + function. From KANEMATSU Daiji . + +2002-07-09 Nevin Kapur + + * gnus-sum.el (gnus-summary-delete-article): Respect group + parameters while expiring. + +2002-07-08 Simon Josefsson + + * gnus-art.el (article-make-date-line): Fix string. From Henrik + Enberg. + +2002-07-08 Kai Gro,b_(Bjohann + + * gnus-art.el (article-unsplit-urls): Only display MIME when this + function is called interactively. From Niklas Morberg. + +2002-07-06 ShengHuo ZHU + + * gnus-topic.el (gnus-topic-indent, gnus-topic-unindent): Change + cdaar to cdar and car. + + * nnsoup.el (nnsoup-retrieve-headers, nnsoup-request-type) + (nnsoup-read-active-file, nnsoup-article-to-area): Ditto. + +2002-07-05 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-toggle-header): Show headers anyway; + don't break a narrowed article. + + * nntp.el (nntp-via-rlogin-command-switches): Doc fix. + (nntp-open-via-rlogin-and-telnet): Ditto. + +2002-07-02 Didier Verna + + * nnmail.el (nnmail-split-methods): fix custom type. + +2002-07-02 Kai Gro,b_(Bjohann + + * gnus-art.el (article-unsplit-urls): Keep URL buttonized after + unsplitting. From Niklas Morberg . + +2002-07-01 Kai Gro,b_(Bjohann + + * gnus-msg.el (gnus-summary-resend-default-address): New user option. + (gnus-summary-resend-message): Use it. + +2002-06-28 Katsumi Yamaoka + + * 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 + + * 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 + + * nntp.el (nntp-open-via-rlogin-and-telnet): Revert last change. + +2002-06-28 Katsumi Yamaoka + + * nntp.el (nntp-open-via-rlogin-and-telnet): Hide commandline args. + +2002-06-26 Kai Gro,b_(Bjohann + + * message.el (message-font-lock-keywords): Revert 2002-06-22 + change. + +2002-06-24 Kai Gro,b_(Bjohann + + * message.el (message-font-lock-keywords): Put colon in header + name match. + +2002-06-22 Kai Gro,b_(Bjohann + + * message.el (message-font-lock-keywords): Don't use header faces + in the body. Thanks to Stefan Monnier for the hint on the + implementation. + +2002-05-09 Miles Bader + + * gnus-cite.el (gnus-cite-blank-line-after-header): New variable. + (gnus-article-hide-citation): Respect it. + +2002-04-12 Juanma Barranquero + + * pop3.el (pop3-open-server): Fix typo. + +2002-06-18 Josh Huber + + * gnus.el (gnus-find-subscribed-addresses): Use add-to-list + instead of push to ignore duplicate to-(list|address) values. + * nnmail.el (nnmail-cache-ignore-groups): New. + * nnmail.el (nnmail-cache-insert): Obey nnmail-cache-ignore-groups + +2002-06-18 Kai Gro,b_(Bjohann + + * gnus-delay.el (gnus-delay-send-queue): Delete the delay header + before sending. Suggested by Jan Rychter. + +2002-06-18 Katsumi Yamaoka + + * dgnushack.el (remove): New compiler macro. + (last, coerce, subseq): Remove compiler macros for those built-in + or unused functions. + +2002-06-17 Kai Gro,b_(Bjohann + + * 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. + +2002-06-16 Kai Gro,b_(Bjohann + + * 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 + + * gnus-cache.el (gnus-cache-remove-article): n is &optional. From + Reiner Steib <4uce.02.r.steib@gmx.net>. + +2002-06-15 ShengHuo ZHU + + * nnheader.el (nnheader-file-name-translation-alist): Set the + default value for MS Windows systems. + + * gnus-ems.el (nnheader-file-name-translation-alist): Removed. + +2002-06-14 Katsumi Yamaoka + + * message.el (message-beginning-of-line): Keep the region active + in XEmacs. Suggested by TAKAHASHI Kaoru . + +2002-06-13 Josh Huber + + * gnus-msg.el (gnus-summary-followup): Use g-s-handle-replysign. + * gnus-msg.el (gnus-summary-reply): Ditto. + * gnus-msg.el (gnus-summary-handle-replysign): New. + +2002-06-12 Katsumi Yamaoka + + * message.el (message-send-mail-with-sendmail): Kill errbuf even + if sending failed. + +2002-06-11 Josh Huber + + * gnus-start.el (gnus-dribble-enter): Don't call set-window-point anymore + * mml2015.el (mml2015-mailcrypt-encrypt): Accept optional argument + to sign while encrypting. + +2002-06-11 Simon Josefsson + + * gnus-int.el (gnus-request-move-article): Agent expire article if + successfuly moved. + + * nnweb.el (nnweb-google-create-mapping): Honors the value of + nnweb-max-hits. From Niklas Morberg . + +2002-06-10 Simon Josefsson + + * gnus-int.el (gnus-request-expire-articles): Fix last change? + +2002-06-09 Simon Josefsson + + * gnus-sum.el (gnus-summary-delete-article): Don't agent expire here. + + * gnus-int.el (gnus-request-expire-articles): Do it here instead. + +2002-06-08 ShengHuo ZHU + + * flow-fill.el (fill-flowed): Ignore errors. + +2002-06-06 Simon Josefsson + + * message.el (message-send-mail-with-sendmail): Improve error message. + +2002-06-06 Kai Gro,b_(Bjohann + + * message.el (message-interactive): Change default from nil to t. + Better to be safe than to be fast. + +2002-06-05 Kai Gro,b_(Bjohann + + * message.el (message-send-mail-with-sendmail): Check return value + from call-process-region. + +2002-06-04 Simon Josefsson + + * gnus-msg.el (gnus-group-mail, gnus-group-news) + (gnus-group-post-news, gnus-summary-mail-other-window) + (gnus-summary-news-other-window, gnus-summary-post-news): Bind + gnus-article-copy to nil, thereby inhibiting the `header' posting + style match to use data from last viewed article. + Suggested by Hrvoje Niksic. + +2002-06-04 Katsumi Yamaoka + + * spam.el (spam-point-at-eol): New alias. + (spam-parse-whitelist): Use it. + +2002-06-03 Simon Josefsson + + * nnmail.el (nnmail-mail-splitting-decodes): New variable. + (nnmail-article-group): Use it. + +2002-05-30 Kai Gro,b_(Bjohann + + * gnus-msg.el (gnus-inews-yank-articles): Merge split header lines + so that code reading them won't be surprised. From Jesper Harder + . + +2002-05-29 Simon Josefsson + + * gnus-sum.el (gnus-summary-delete-article): Agent expire deleted + articles. + + * gnus.el (gnus-agent-cache): Doc fix. + (gnus-agent): Change default to t. + + * gnus-agent.el (gnus-agent-expire): Make it accept optional + ARTICLES, GROUP and FORCE parameters. + +2002-05-28 Simon Josefsson + + * gnus-group.el (gnus-group-line-format): Doc fix. + +2002-05-28 Kai Gro,b_(Bjohann + + * gnus-msg.el (gnus-inews-yank-articles): Unfold headers of + original article before yanking. From Jesper Harder + . + +2002-05-26 Simon Josefsson + + * gnus-sum.el (gnus-summary-menu-split): New function. + (gnus-summary-make-menu-bar): Split charset submenu. + (gnus-summary-menu-maxlen): New variable. + (gnus-summary-menu-split): Use it. + +2002-05-25 Simon Josefsson + + * mml.el (mml-preview): Generate some headers. + + * gnus.el (gnus-large-newsgroup): Fix :type. + + * nnimap.el (nnimap-nov-is-evil): Change default to t (because the + Agent cache NOV's by default now). + (nnimap-nov-is-evil): Make it default to `gnus-agent' instead. + +2002-05-18 Jesper Harder + + * gnus-sum.el (gnus-dependencies-add-header): Avoid one unecessary + call to gnus-parent-id when we check for References loops. + (gnus-summary-prepare-threads): Avoid simplifying every Subject + twice by saving the simplified subject string in simp-subject. + +2002-05-23 Simon Josefsson + + * gnus-msg.el (gnus-confirm-mail-reply-to-news): Typo. Trivial + change from Benjamin Rutt . + + * nnweb.el (nnweb-type): Remove dejanewsold. Trivial change from + Niklas Morberg . + +2002-05-22 Simon Josefsson + + * sieve.el (sieve-change-region): Define it before it is used. + + * 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 + . + + * nnimap.el (nnimap-nov-is-evil): Improve doc. + +2002-05-21 Simon Josefsson + + * sieve-mode.el (sieve-manage): Fix autoloads. + + * sieve-manage.el (sieve-manage-cram-md5-auth): Just send the SASL + name (makes it work with recent Cyrus timsieved). + +2002-05-20 Jason + Trivial patch. + + * gnus-art.el (gnus-request-article-this-buffer): Try + reconnecting if you don't get the message. + +2002-05-20 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-enter-digest-group): Only get + Reply-To headers from the headers. + +2002-05-18 Lars Magne Ingebrigtsen + + * mm-url.el (mm-url-insert): Remove junk message. + +2002-05-17 Lars Magne Ingebrigtsen + + * nnslashdot.el (nnslashdot-request-list): Parse new html. + (nnslashdot-use-front-page): New variable. + (nnslashdot-request-list): Use it. + + * mm-url.el (mm-url-timeout): New variable. + (mm-url-retries): Ditto. + (mm-url-insert): Use it. + +2002-05-16 Simon Josefsson + + * gnus-sum.el (gnus-simplify-all-whitespace): New function. + (gnus-simplify-subject-functions): Mention g-s-a-w. + +2002-05-15 Josh Huber + + * nnbabyl.el (nnbabyl-request-accept-article): Pass group to + nnmail-cache-insert. + * nndiary.el (nndiary-request-accept-article): Ditto. + * nnfolder.el (nnfolder-request-accept-article): Ditto. + * nnimap.el (nnimap-request-accept-article): Ditto. + * nnmail.el (nnmail-process-unix-mail-format): Ditto. + * nnmail.el (nnmail-check-duplication): Ditto. (from gnus-art) + * nnmbox.el (nnmbox-request-accept-article): Ditto. + * nnmh.el (nnmh-request-accept-article): Ditto. + * nnmail.el (nnmail-cache-insert): Change group to required, + removed code which tried to figure out the group. + +2002-05-13 Josh Huber + + * mml.el (mml-generate-mime-1): Fix mml generation for signed only + messages. From Hans de Graaff . + * nnml.el (nnml-request-accept-article): Pass in the group name to + nnmail-cache-insert, since it's available. + +2002-05-10 ShengHuo ZHU + + * nndoc.el (nndoc-mime-digest-type-p): Set proper file-end. + +2002-05-08 Kai Gro,b_(Bjohann + From Florian Weimer . + + * gnus.el (subscribed): New group parameter. + (gnus-find-subscribed-addresses): Use it. + +2002-05-08 Josh Huber + + * mml-sec.el (mml-signencrypt-style-alist): Rename. Also, changed + the default for pgpmime to support pgp v2. + * mml-sec.el (mml-signencrypt-style): New accessor function to + allow users to get/set the signencrypt style more easily without + frobbing the alist directly. + * mml.el (mml-generate-mime-1): Use accessor function. + +2002-05-08 Kai Gro,b_(Bjohann + + * gnus-art.el (gnus-article-mode-syntax-table): Specify matching + parenthesis for "<" and ">". Suggested by Andreas Schwab + . + +2002-05-07 Kai Gro,b_(Bjohann + + * nnmail.el (nnmail-cache-insert): Prefer group-art over group + when intuiting the group the message is written to. From Josh + Huber . + +2002-05-06 Simon Josefsson + + * gnus-topic.el (gnus-group-topic-parameters): Work when group + buffer doesn't show group. From Matt Armstrong . + +2002-05-06 Josh Huber + + * mml2015.el (mml2015-gpg-encrypt): Changed name of optional + argument, and fixed compiler warning. (added autoload for + gpg-encrypt). + +2002-05-04 Simon Josefsson + + * mml1991.el (mml1991-function-alist): Doc fix. + + * mml.el (mml-preview): Bind gnus-newsrc-hashtb temporarily if it + doesn't exist (for previewing messages without having Gnus + started). + + * mm-util.el (mm-coding-system-priorities): Defcustom. + + * mm-encode.el (mm-content-transfer-encoding-defaults): Defcustom. + +2002-05-01 Josh Huber + + * gnus-msg.el (gnus-message-replysignencrypted): enabled by + default. + * mml-sec.el: + * mml-sec.el (mml-signencrypt-style): New. + * mml-sec.el (mml-pgpmime-encrypt-buffer): Accept optional + argument `sign'. + * mml-sec.el (mml-secure-message-encrypt-pgp): Changed default to + signencrypt. + * mml-sec.el (mml-secure-message-encrypt-pgpmime): Ditto. + * mml.el (mml-generate-mime-1): Changed logic so a part which is + both signed & encryped is processed in one operation. (rather than + two separate ops: sign, then encrypt) + * mml2015.el (mml2015-gpg-extract-signature-details): Give some + indication if a message is signed by an expired key. + * mml2015.el (mml2015-gpg-encrypt): Accept optional argument which + enables combined sign & encrypt operation. (this was always on + before). + * mml2015.el (mml2015-encrypt): Accept optional argument `sign'. + +2002-05-01 Simon Josefsson + + * nnimap.el (nnimap-retrieve-groups): Use separate data for each + server. + (nnimap-mailbox-info): defvar instead of defvoo. + +2002-05-01 20:09:21 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.06 is released. + +2002-05-01 Lars Magne Ingebrigtsen + + * lpath.el: Bind url-package-version. + +2002-05-01 Simon Josefsson + + * nnfolder.el (nnfolder-request-delete-group): Figure out nov/mrk + filename before deleting the group itself, because the presence of + a group filename decides if long filenames are used or not. + + * gnus-art.el (gnus-button-alist): Don't inline + gnus-button-url-regexp. This makes it possible to change g-b-u-r + without also modifying g-button-alist. + (gnus-button-alist): Fix type to allow variable as well as regexp. + (gnus-article-add-buttons): Evaluate regexp. Strings evaluate to + themselves, variables to its contents. + (gnus-button-entry): Ditto. + +2002-05-01 Simon Josefsson + + * imap.el (imap-parse-resp-text-code, imap-parse-status): Treat + UIDNEXT as a string. + + * nnimap.el (nnimap-string-lessp-numerical): New function. + (nnimap-retrieve-groups): Compare UIDNEXT as strings instead of + integers. + +2002-04-29 Simon Josefsson + + * nnmail.el (nnmail-cache-insert): Accept optional group + parameter. + + * nnimap.el (nnimap-retrieve-groups): Don't send STATUS when + n-r-g-a is disabled. + +2002-04-29 Simon Josefsson + + * nnimap.el (nnimap-split-fancy): Fix doc. + (nnimap-split-fancy): Fix doc. + + * nnimap.el (nnimap-retrieve-groups-asynchronous): New variable. + (nnimap-mailbox-info): New internal variable. + (nnimap-retrieve-groups): Implement faster new mail check. + + * nnimap.el (nnimap-split-articles): Support + nnmail-cache-accepted-message-ids. + (nnimap-request-accept-article): Ditto. + + * imap.el (imap-mailbox-status-asynch): New command. + +2002-04-29 Nevin Kapur + + * gnus.el (gnus-find-subscribed-addresses): Return nil when there + are no subscribed mail groups. + - Strip quoted names when comparing addresses + +2002-04-28 Jesper Harder + + * mm-decode.el (mm-text-html-renderer): Change customize type to + const. + + * gnus-msg.el (gnus-discouraged-post-methods): Fix typo. + (gnus-debug-exclude-variables): do. + +2002-04-27 ShengHuo ZHU + + * gnus-msg.el (gnus-article-mail): Use gnus-msg-mail instead. + Trivial change from Karl Pfl,Ad(Bsterer . + +2002-04-27 Katsumi Yamaoka + + * dns.el (dns-make-network-process): New macro. + (query-dns): Use it. + +2002-04-27 ShengHuo ZHU + + * gnus-msg.el (gnus-summary-reply): Remove unbound variable + article-buffer. + + * mm-url.el (mm-url-package-name): New variable. + (mm-url-package-version): New variable. + (mm-url-insert-file-contents): Bind url-package-name and + url-package-version here. + * nnrss.el (nnrss-insert-w3): Move the bindings. + + * nnrss.el (nnrss-insert-w3): Bind url-package-name and + url-package-version. Trivial change from Andrew J Cosgriff + + + * mm-decode.el (mm-save-part): Fill in file name when GUI saving + attachments. Trivial change from Peter 'Luna' Runestig + . + +2002-04-19 Jesper Harder + + * nnkiboze.el (nnkiboze-request-scan): Call + nnkiboze-possibly-change-group. + (nnkiboze-generate-group): Use mm-with-unibyte to avoid encoding + problems. + (nnkiboze-generate-group): Set newsrc to the *highest* article + number kibozed, not the lowest. + +2002-04-15 Jesper Harder + + * gnus-art.el (article-unsplit-urls): Allow trailing SPC. + +2002-04-24 Kai Gro,b_(Bjohann + From Dan Christensen . + + * nndoc.el (nndoc-type-alist, nndoc-lanl-gov-announce-type-p) + (nndoc-transform-lanl-gov-announce, nndoc-generate-lanl-gov-head): + Recognize math postings. Extract Date (now ignores "(15kb)"). + Extract email address using gnus-extract-address-components + instead of just taking the first word. Create Date and From + headers for message which are missing these headers. Get rid + of spurious \\ lines (purely cosmetic). Extend body-end and + file-end regexps, to exclude more garbage from the message. + Make URL rephrasing regexp more flexible, to match current + format. + +2002-04-23 Simon Josefsson + + * netrc.el: New file, functions copied from gnus-util.el by Ted + Zlatanov . + + * gnus-util.el: Require netrc. + (gnus-netrc-get, gnus-netrc-machine, gnus-parse-netrc): Aliased to + new code in netrc.el. + +2002-04-23 Kai Gro,b_(Bjohann + + * gnus-msg.el (gnus-summary-resend-message-edit): Remove + message-ignored-resent-headers, too. From Matthieu Moy + . + +2002-04-22 Bj,Av(Brn Torkelsson + + * gnus-srvr.el (gnus-server-browse-in-group-buffer): it is a + boolean not a string + * gnus-group.el (gnus-group-line-format): add description of %C + * gnus-group.el (gnus-group-line-format-alist): add gnus-tmp-comment + as %C + * gnus-group.el (gnus-group-insert-group-line): add gnus-tmp-comment + +2002-04-22 Paul Jarc + + * nnmaildir.el (nnmaildir-request-scan): typo: set + nnmaildir-get-new-mail, not nnmaildir-new-mail. Don't call + nnmail-get-new-mail for 'find-new-groups. + +2002-04-21 Paul Jarc + + * nnmaildir.el (nnmaildir-request-update-info, + nnmaildir-request-group, nnmaildir-retrieve-groups): remove + unnecessary calls to nnmaildir-request-scan. + +2002-04-20 Josh Huber + + * gnus-msg.el: + * gnus-msg.el (gnus-message-replysign): New. + * gnus-msg.el (gnus-message-replyencrypt): New. + * gnus-msg.el (gnus-message-replysignencrypted): New. + * gnus-msg.el (gnus-summary-reply): Use the three new variables + (above) to automatically encrypt/sign to encrypted/signed + messages. + * message.el: + * message.el (message-mode-map): Add keybinding for + `message-to-list-only' + * message.el (message-mode): Add description for + `message-to-list-only' + * message.el (message-to-list-only): New. + * message.el (message-make-mft): Changed to use the cl loop macro, + and added optional flag to return only the matched list. (for use + in new message-to-list-only function) + +2002-04-20 Josh Huber + + * gnus-msg.el: + * gnus-msg.el (gnus-message-replysign): + * gnus-msg.el (gnus-replysign): New. + * gnus-msg.el (gnus-replyencrypt): New. + * gnus-msg.el (gnus-replysignencrypted): New. + * gnus-msg.el (gnus-summary-reply): + * message.el: + * message.el (message-mode-map): + * message.el (message-mode): + * message.el (message-to-list-only): New. + * message.el (message-make-mft): + +2002-04-19 ShengHuo ZHU + + * gnus-win.el (gnus-configure-windows-hook): Fix typo. + +2002-04-18 Josh Huber + + * 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 . + + * spam.el (spam-whitelist, spam-blacklist, spam-enter-whitelist): + Improve docstring. + (spam-enter-blacklist): New command. + + * gnus-sum.el (gnus-spam-mark): New mark. + (gnus-auto-expirable-marks): Add gnus-spam-mark. + (gnus-summary-make-tool-bar): Correct conditional. + (gnus-summary-limit-to-unread): Add gnus-spam-mark. + (gnus-summary-mark-as-spam): New command. + +2002-04-13 Josh Huber + + * mml-sec.el (mml-secure-message): changed to support arbritrary + modes. + * mml-sec.el (mml-secure-message-encrypt-(smime|pgp|pgpmime)): + changed to support "signencrypt" mode. + * mml.el (mml-parse-1): changed to support different secure modes + more easily. (for signencrypt) + +2002-04-11 Stefan Monnier + + * gnus-sum.el (gnus-update-summary-mark-positions) + (gnus-summary-toggle-header): + * gnus-uu.el (gnus-uu-binhex-article, gnus-uu-reginize-string) + (gnus-uu-expand-numbers, gnus-uu-post-make-mime) + (gnus-uu-post-encoded): + * nnfolder.el (nnfolder-possibly-change-group): + * nnimap.el (nnimap-retrieve-headers): + * nnmbox.el (nnmbox-create-mbox): Don't assume point-min == 1. + +2002-04-08 Stefan Monnier + + * nnml.el (nnml-save-nov, nnml-generate-nov-file): + * pop3.el (pop3-md5): Don't hardcode point-min == 1. + +2002-04-12 Katsumi Yamaoka + + * 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 + + * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Force + viewing of security buttons. Thanks to Nicolas Kowalski + . + + * smime.el (smime-CA-directory): Fix doc. Thanks to Arne + J,Ax(Brgensen . + (smime-sign-buffer): Work in XEmacs. Thanks to Nicolas Kowalski + . + (smime-decrypt-buffer): Ditto. + +2002-04-11 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-prepare): Place point on the emtpy + header line. + +2002-04-11 Per Abrahamsen + + * gnus.el (gnus-refer-article-method): Change `dejanews' to `google'. + +2002-04-08 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-delete-marked-with): Fix typo. + +2002-04-07 ShengHuo ZHU + + * mm-view.el (mm-inline-text-html-render-with-w3): Don't ignore + errors when debug. + +2002-04-07 Josh Huber + + * message.el (message-make-mft): Changed MFT code from using + message-recipients (which included Bcc) to use only the To and CC + headers. + +2002-04-05 Per Abrahamsen + + * gnus-art.el (gnus-treat-from-picon): Add to gnus-picon group and + add link. + (gnus-treat-mail-picon): Ditto. + (gnus-treat-newsgroups-picon): Ditto. + (gnus-picon-databases): Fix custom type. + (gnus-picon-databases): Add link. + (gnus-article-x-face-command): Add to gnus-picon group. + +2002-04-01 Jesper Harder + + * message.el (message-buffer-naming-style): Remove. + +2002-04-02 ShengHuo ZHU + + * gnus-group.el (gnus-group-make-tool-bar): Load tool-bar first. + + * message.el (message-tool-bar-map): Ditto. + + * gnus-sum.el (gnus-summary-make-tool-bar): Ditto. + +2002-04-01 ShengHuo ZHU + + * nnwarchive.el (nnwarchive-mail-archive-article): Fix typo. + +2002-04-01 Paul Jarc + + * nnmaildir.el: fixed some buggy invocations of nnmaildir--pgname. + +2002-03-31 Andrew Cohen + Trivial patch. + + * dns.el: open-network-stream under XEmacs does udp. + +2002-03-31 Lars Magne Ingebrigtsen + + * spam.el (spam-enter-whitelist): New function. + (spam-parse-whitelist): Ditto. + (spam-refresh-list-cache): Ditto. + (spam-address-whitelisted-p): New function. + + * dns.el (query-dns): Use TCP when make-network-process isn't + available. + (dns-servers): New variable. + (dns-parse-resolv-conf): New function. + (query-dns): Use it. + + * spam.el: New file. + + * dns.el (query-dns): Test. + +2002-03-31 Lars Magne Ingebrigtsen + + * lpath.el (featurep): Bind make-network-process. + +2002-03-31 Paul Jarc + + * nnmaildir.el: Use defstruct. Use a single copy of + nnmail-extra-headers to save memory. Store server's group name + prefix instead of each group's prefixed name. + * nnnil.el (nnnil-retrieve-headers, nnnil-request-list): Erase + nntp-server-buffer. + +2002-03-31 Lars Magne Ingebrigtsen + + * dns.el: New file. + +2002-03-28 Simon Josefsson + + * gnus-sum.el (gnus-summary-dummy-line-format): + * gnus.el (gnus-summary-line-format): Fixing links to Info. + Trivial change from Bj,Av(Brn Torkelsson . + +2002-03-29 Kai Gro,b_(Bjohann + + * gnus-sum.el (gnus-summary-move-article) + (gnus-summary-copy-article): Mention `gnus-move-split-methods' in + the doc string. + +2002-03-28 Simon Josefsson + + * mml-sec.el (mml-secure-message): Search after + mail-header-separator from top of message. + +2002-03-28 Paul Jarc + + * nnmaildir.el: Cosmetic changes. + (nnmaildir--with-nntp-buffer, nnmaildir--with-work-buffer, + nnmaildir--with-nov-buffer, nnmaildir--with-move-buffer, + nnmaildir--group-ls): New macros/functions. Use them. + (nnmaildir--unlink): Evalutate argument only once. + +2002-03-27 Jesper Harder + + * gnus-sum.el (gnus-summary-highlight): Use `eq' when comparing + symbols. + (gnus-summary-highlight-line): Use `gnus-point-at-bol' and + `gnus-point-at-eol'. + +2002-03-27 Paul Jarc + + * nnmaildir.el (nnmaildir--subdir, nnmaildir--nov-dir, + nnmaildir--marks-dir): New macros. Use them. + Use inhibit-quit for atomicity instead of in-memory journaling. + (nnmaildir--edit-prep): New function. + (Local Variables): Use it. + +2002-03-26 Pavel@Janik.cz (Pavel Jan,Am(Bk) + + * gnus-sum.el (gnus-summary-make-menu-bar): Fix typo. + +2002-03-25 Simon Josefsson + + * message.el (message-mode): Fix doc. + +2002-03-25 Simon Josefsson + + * message.el (message-subject-re-regexp): Skip Re[42]: junk. From + Matthieu Moy . + +2002-03-24 Jesper Harder + + * mml-sec.el (mml-unsecure-message): Add docstring. + +2002-03-23 ShengHuo ZHU + + * nnmail.el (nnmail-large-newsgroup): Fix doc, allow non-numeric + value. + Trivial change from andre@slamdunknetworks.com + +2002-03-22 Josh Huber + + * mml.el (mml-mode-map): Added a keybinding for + `mml-unsecure-message'. Also, added a menu entry for said + function in the Attachments menu. + +2002-03-22 Katsumi Yamaoka + + * canlock.el (canlock-version): Remove. + (canlock-sha1-with-openssl): Don't use `canlock-string-as-unibyte' + here; simplify \x insertions. + (canlock-sha1): New function, always return a unibyte string. + (canlock-make-cancel-key): Use `canlock-sha1'; simplify truncation + of a password. + (canlock-insert-header): Use `canlock-sha1'. + (canlock-verify): Ditto. + +2002-03-21 ShengHuo ZHU + + * message.el (message-fix-before-sending): Add an option that + ignores illegible text. + Trivial change from Mark Milhollan + + * message.el (message-font-lock-keywords): Support multi-line MML + tags. + + * 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 + + * gnus-sum.el (gnus-summary-make-menu-bar): Use intern'ed function + symbols for "View as different encoding" submenu. + +2002-03-19 Simon Josefsson + + * gnus-sum.el (gnus-summary-make-menu-bar): Add "View as different + encoding" submenu. + +2002-03-19 ShengHuo ZHU + + * gnus-group.el (gnus-group-process-prefix): Make sure there is a mark. + +2002-03-19 Kai Gro,b_(Bjohann + + * gnus-sum.el (gnus-sum-thread-tree-root) + (gnus-sum-thread-tree-single-indent) + (gnus-sum-thread-tree-vertical, gnus-sum-thread-tree-indent) + (gnus-sum-thread-tree-leaf-with-other) + (gnus-sum-thread-tree-single-leaf): Make customizable. + +2002-03-16 Simon Josefsson + + * gnus-util.el (gnus-extract-address-components): Don't break on + names such as James "Kibo" Parry. From Francis Litterio + . + +2002-03-13 Simon Josefsson + + * pop3.el (pop3-open-server): Revert multibyte change. From + Pavel@Janik.cz (Pavel Jan,Am(Bk). + + * message.el (message-send-mail-with-qmail): Make it work. From + Pavel@Janik.cz (Pavel Jan,Am(Bk). + +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 + + * 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). + +2002-03-12 ShengHuo ZHU + + * message.el (message-abbrevs-loaded): Remove. + (mailabbrev): Require it. + + * nnslashdot.el (nnslashdot-request-article): Remove IFRAME. + +2002-03-12 Katsumi Yamaoka + + * pop3.el (pop3-open-server): Set process buffer unibyte. + +2002-03-10 Lars Magne Ingebrigtsen + + * gnus-fun.el (gnus-subscribe-to-mailing-list): New function. + +2002-03-10 ShengHuo ZHU + + * nnslashdot.el (nnslashdot-request-article): Remove javascript + too. + +2002-03-09 ShengHuo ZHU + + * 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 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. + + * nndoc.el (nndoc-mail-in-mail-type-p): Break a long regexp into + pieces. + +2002-03-05 Paul Jarc + + * nnnil.el: New file. + * gnus.el (gnus-valid-select-methods): Include nnnil. + +2002-03-05 ShengHuo ZHU + + * message.el (message-syntax-checks): Because canlock is + supported, we disable sender syntax check. + (message-shoot-gnksa-feet): Add cancel-messages option doc. + + * gnus-draft.el (gnus-draft-send): If interactive, use its default + value of message-syntax-checks. + + * qp.el (quoted-printable-decode-region): Doc addition. + From: Eli Zaretskii + + * mail-source.el (make-source-make-complex-temp-name): Use + make-temp-file. + + * mm-util.el (mm-make-temp-file): New function. + * nneething.el (nneething-file-name): Use it. + * mml-smime.el (mml-smime-encrypt): Ditto. + * mm-view.el (mm-inline-wash-with-file): Ditto. + * mm-decode.el (mm-display-external, mm-create-image-xemacs): Ditto. + * gnus-uu.el (gnus-uu-decode-binhex, gnus-uu-decode-binhex-view) + (gnus-uu-digest-mail-forward, gnus-uu-initialize): Ditto. + * gnus-start.el (gnus-slave-save-newsrc): Ditto. + * gnus-fun.el (gnus-convert-image-to-gray-x-face): Ditto. + * gnus-art.el (gnus-mime-print-part): Ditto. + +2002-03-04 Paul Jarc + + * message.el (nnmaildir-article-number-to-base-name): New + function. + (nnmaildir-base-name-to-article-number): New function. + +2002-03-04 Katsumi Yamaoka + + * smime.el (smime-make-temp-file): Don't quote + `temporary-file-directory'. + +2002-03-04 Simon Josefsson + + * smime.el (smime-sign-region): Rename argument keyfiles to + keyfile. You only sign something with one key. + (smime-sign-buffer): Better completing-read prompt. + (smime-decrypt-buffer): Ditto. + + * smime.el (smime-make-temp-file): Make it work under XEmacs. + + * mm-view.el (mm-view-pkcs7-decrypt): Better prompt for + completing-read. + (mm-view-pkcs7-decrypt): CRLF->LF. + +2002-03-04 Paul Jarc + + * message.el (message-hierarchical-addresses): New variable. + (message-get-reply-headers): Use it. + From Ted Zlatanov + +2002-03-03 ShengHuo ZHU + + * 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 + + * gnus-util.el (gnus-multiple-choice): Use message. XEmacs only + takes one argument in read-char. + + * message.el (message-fix-before-sending): Forward a char. + Check mmu-multibyte-p, add control-1. + +2002-03-01 ShengHuo ZHU + + * gnus-start.el (gnus-read-init-file): Ditto. + + * gnus-agent.el (gnus-agent-fetch-session): Ditto. + + * dgnushack.el (dgnushack-make-load): Ditto. + + * mail-source.el (mail-source-fetch): Extract the right error + code. + + * message.el (message-fix-before-sending): Check illegible text. + + * gnus-util.el (gnus-multiple-choice): New function. + + * gnus-kill.el (gnus-score-insert-help): Removed, because it is + also defined in gnus-score.el. + +2002-03-01 Paul Jarc + + * message.el (message-get-reply-headers): downcase email addresses + for comaparisons for duplicate removal. + +2002-03-01 ShengHuo ZHU + + * mm-view.el (mm-view-pkcs7-verify): New function. A bogus + implementation of PKCS#7, which just allows users read the + message. + (mm-view-pkcs7): Use it. + +2002-02-27 ShengHuo ZHU + + * gnus.el (large-newsgroup-initial): New parameter. + + * gnus-sum.el (gnus-articles-to-read): Use large-newsgroup-initial. + (gnus-summary-insert-old-articles): Ditto. + +2002-02-26 ShengHuo ZHU + + * 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 + + * nnagent.el (nnagent-retrieve-headers): Remove articles with + small numbers. + +2002-02-24 ShengHuo ZHU + + * deuglify.el: Fix comments. + +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. + + * mm-decode.el (mm-text-html-renderer): Add html2text. + + * html2text.el: Face lift. + + * html2text.el: New file from Joakim Hove . + +2002-02-22 ShengHuo ZHU + + * gnus-sum.el: Add gnus-article-outlook-deuglify-article. + + * 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 . + + * mm-decode.el (mm-display-external): Use + mm-file-name-rewrite-functions. From + +2002-02-22 Paul Jarc + + * nnmaildir.el (nnmaildir-request-list): Report the highest + article number, not the total number of articles. + +2002-02-21 ShengHuo ZHU + + * gnus-sum.el: Move uu key map here. + (gnus-summary-make-menu-bar): Add gnus-summary-save-parts. + +2002-02-21 Paul Jarc + + * nnmaildir.el (nnmaildir-request-expire-articles): Use + nnmail-expiry-wait* if expire-age parameter is not set. + +2002-02-21 ShengHuo ZHU + + * gnus-group.el (gnus-group-sort-groups-by-real-name): New + function. + (gnus-group-sort-selected-groups-by-real-name): New function. + (gnus-group-make-menu-bar): Add sort by real name. + + * gnus-sum.el (gnus-dependencies-add-header): If replaced, don't + rebuild. + (gnus-summary-edit-article-done): Gnus-get-newsgroup-headers takes + nil as dependencies as well. + +2002-02-20 ShengHuo ZHU + + * nndoc.el (nndoc-dissect-mime-parts-sub): Fix MIME-Version header + for mime-parts. + + * gnus-art.el (gnus-article-edit-done): Widen the buffer. + + * 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. + + * 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 + + * many files: Remove trailing whitespaces, replace spc+tab with + tab, replace leading whitespaces with tabs. + +2002-02-19 Paul Jarc + + * gnus-sum.el (gnus-summary-toggle-header): Fix handling of + articles with no body and no blank line after the header. + +2002-02-19 ShengHuo ZHU + + * mm-decode.el (mm-dissect-multipart): Consider the case of empty + parts. + + * ietf-drums.el (ietf-drums-syntax-table): Modify syntax of + non-ascii chars. + + * rfc2231.el (rfc2231-parse-string): Support non-ascii chars. + + * gnus-art.el (gnus-article-wash-html-with-w3): Remove + w3-delay-image-loads. + * mm-view.el (mm-inline-text-html-render-with-w3): Ditto. + (mm-w3-prepare-buffer): Ditto. + + * mail-source.el (mail-source-fetch-directory): Run scripts. + +2002-02-19 Lars Magne Ingebrigtsen + + * gnus-fun.el (gnus-respond-to-confirmation): Do the right thing + for Majordomo confirmations. + +2002-02-18 Lars Magne Ingebrigtsen + + * gnus-fun.el (gnus-respond-to-confirmation): New command. + +2002-02-11 Lars Magne Ingebrigtsen + + * nnultimate.el (nnultimate-retrieve-headers): Clean up. + +2002-02-18 Paul Jarc + + * gnus-util.el (gnus-parent-id): Ignore trailing whitespace in the + References header field. From Mark Thomas . + +2002-02-18 ShengHuo ZHU + + * mm-view.el (mm-inline-render-with-file): With unibyte buffer. + (mm-inline-render-with-stdin): Ditto. + (mm-inline-render-with-function): Ditto. + (mm-inline-wash-with-file): Bind coding-system-for-write. + (mm-inline-wash-with-stdin): Ditto. + +2002-02-18 ShengHuo ZHU + + Suggested by Felix Natter + + * gnus-art.el (gnus-mime-view-part-externally): Rename from + gnus-mime-externalize-view. + (gnus-mime-view-part-internally): Rename from + gnus-mime-internalize-view. + (gnus-article-view-part-externally): Rename from + gnus-article-externalize-part. + (gnus-mime-action-alist): Change correspondingly. + (gnus-mime-button-commands): Ditto. + (gnus-mime-action-alist): Remove duplication. + + * gnus-sum.el (gnus-summary-mime-map): Change correspondingly. + +2002-02-18 ShengHuo ZHU + + * mm-decode.el (mm-dissect-buffer): Add loose-mime parameter. + + * gnus-art.el (gnus-display-mime): Use it. + + * mm-partial.el (mm-partial-find-parts): Use it. + + * gnus-sum.el (gnus-article-loose-mime): Rename from + gnus-article-no-strict-mime. + (gnus-summary-save-parts): Use it. + +2002-02-18 Katsumi Yamaoka + + * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Remove unused + local variable. + + * gnus-art.el (article-display-x-face): Don't sort multiple + X-Faces. + +2002-02-18 Katsumi Yamaoka + + * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Improved to speed + up. Suggested by Yuuichi Teranishi . + + * gnus-art.el (article-display-x-face): Sort gray X-Faces. + +2002-02-17 ShengHuo ZHU + + Some ideas is inspired by code from Hrvoje Niksic + + + * gnus-art.el (gnus-article-wash-function): Set the default to + nil, so that we use mm-text-html-renderer instead. + (article-wash-html): Use mm-text-html-renderer. + + * mm-decode.el (mm-inline-media-tests): Use mm-inline-text-*. + (mm-text-html-renderer): New variable. + (mm-inline-text-html-renderer): Set the default to nil, so that we + use mm-text-html-renderer instead. + + * mm-view.el (mm-inline-text-html): New function. + (mm-text-html-renderer-alist): New variable. + (mm-inline-text-vcard): New function. + (mm-inline-text): Split. + (mm-links-remove-leading-blank): New function. + (mm-inline-render-with-file): New function. + (mm-inline-render-with-stdin): New function. + (mm-inline-render-with-function): New function. + (mm-text-html-washer-alist): New variable. + (mm-inline-wash-with-file): New function. + (mm-inline-wash-with-stdin): New function. + +2002-02-17 ShengHuo ZHU + + * message-utils.el: Fix installation doc. + From: Reiner Steib <4uce.02.r.steib@gmx.net> + +2002-02-16 ShengHuo ZHU + + * gnus-msg.el (gnus-discouraged-post-methods): New variable. + (gnus-post-method): Use it. + (gnus-summary-cancel-article): Find the correct post-method. + + * gnus-soup.el (gnus-soup-send-packet): Via ... using ... + * message.el (message-send-news): Ditto. + Suggested by Lloyd Zusman and IPmonger + + + * gnus.el (gnus-select-method): Fix doc. + (gnus-server-string): Use 'using nntp'. + + * gnus-agent.el (gnus-slave-unplugged): New command. + From: Felix Natter + +2002-02-15 ShengHuo ZHU + + * gnus-art.el (gnus-article-edit-done): Kill-all-local-variables. + Call edit-done-function first, then change the window + configuration. + (gnus-article-edit-mode-map): Add message key bindings. Add menu. + (gnus-article-edit-mode): mml-mode. + + * gnus-util.el (gnus-byte-compile): Work around a bug in XEmacs + 21.4. Suggested by Russ Allbery . + + * message-utils.el: Adopt the file. + + * message-utils.el: New file. + From Holger Schauer + +2002-02-14 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-move-article): Select-article only + when gnus-move-split-methods is non-nil. And we don't render or + mark the article. + + * gnus-fun.el (gnus-shell-command-to-string): New function. + (gnus-shell-command-on-region): New function. + (gnus-random-x-face): Use them. + (gnus-x-face-from-file): Ditto. + (gnus-convert-image-to-gray-x-face): Ditto. + (gnus-convert-gray-x-face-to-xpm): Ditto. + (gnus-convert-image-to-x-face-command): Don't use 2>/dev/null. + +2002-02-14 Katsumi Yamaoka + + * gnus-art.el (gnus-treat-display-xface): Don't use + `shell-command-to-string' when compiling. + (gnus-treat-display-grey-xface): Ditto. + +2002-02-13 Paul Jarc + + * nnmaildir.el (nnmaildir--article-count): If the group is + completely empty, report minimum article number as 1 instead of 0. + +2002-02-13 ShengHuo ZHU + + * gnus-agent.el (gnus-get-predicate): Use nconc. + + * gnus-sum.el (gnus-summary-display-make-predicate): Use + gnus-summary-display-cache as cache. + + * nndoc.el (nndoc-type-alist): Add mail-in-mail type. + (nndoc-mail-in-mail-type-p): New function. + (nndoc-mail-in-mail-article-begin): New function. + +2002-02-12 ShengHuo ZHU + + * mailcap.el (mailcap-mime-data): Use enriched-decode. + + * gnus-cite.el (gnus-article-fill-cited-article): Bind + use-hard-newlines to nil. + + * gnus-xmas.el (gnus-xmas-image-type-available-p): Assume that + image is not available if window-system is not available. + + * gnus-sum.el (gnus-summary-display-make-predicate): Add unread. + +2002-02-11 ShengHuo ZHU + + * gnus.el (gnus-article-unpropagated-mark-lists): Don't propagate + bookmark, because update-mark doesn't handle it correctly. + +2002-02-09 ShengHuo ZHU + + * gnus-soup.el (gnus-soup-send-packet): Send news and mail + directly instead of calling message-send-mail. + + * gnus-start.el (gnus-read-descriptions-file): Use + gnus-default-charset. + + * mm-util.el (mm-guess-mime-charset): New function. + + * gnus.el (gnus-default-charset): Use it. + (gnus-group-charset-alist): Remove .*, Let gnus-default-charset be + the default. + +2002-02-08 ShengHuo ZHU + + * gnus-art.el (gnus-treat-display-grey-xface): New variable. + (article-display-x-face): Use it. Disable grey xface, if + uncompface is not found. + + * message.el (message-mode): Don't enable multibyte on an indirect + buffer. + + * nnrss.el (nnrss-content-function): New variable. + (nnrss-request-article): Use it. + +2002-02-08 ShengHuo ZHU + + * gnus.el: Add article-unsplit-urls. + * gnus-sum.el: Ditto. + * gnus-art.el (gnus-treat-strip-cr): New variable. + (gnus-treatment-function-alist): Use it. + (article-unsplit-urls): New function. + (gnus-article-make-menu-bar): Use it. + From: Michael Cook + +2002-02-08 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-braid-nov): Find the first article to + copy. + +2002-02-07 Paul Jarc + + * gnus-util.el (gnus-split-references): Allow (broken) Message-IDs + with internal whitespace. + (gnus-parent-id): Ditto. + +2002-02-07 ShengHuo ZHU + + * gnus-art.el (gnus-article-treat-body-boundary): Add + 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. + + * rfc2047.el (rfc2047-unfold-region): Ditto. + (rfc2047-decode-region): Don't unfold. Let + gnus-article-treat-unfold-headers do it. + + * gnus-sum.el (gnus-dependencies-add-header): Fix typo. + From: Jesper Harder + +2002-02-06 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-posting-styles): Add x-face-file. + (gnus-configure-posting-styles): Use it. + (gnus-configure-posting-styles): Remove trailing newspaces. + +2002-02-06 ShengHuo ZHU + + * gnus-sum.el (gnus-articles-to-read): Fetch all if the predicate + is non-nil. + + * mm-util.el (mm-use-find-coding-systems-region): Add doc. + + * gnus.el (gnus-server-to-method): Switch position with + gnus-server-get-method. + (gnus-agent): Add doc. + + * gnus-sum.el (gnus-article-no-strict-mime): New variable. + (gnus-summary-save-parts): Use it. + + * gnus-art.el (gnus-display-mime): Use it. + * mm-partial.el (mm-partial-find-parts): Use it. + + * 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 + + * message.el (message-gen-unsubscribed-mft): New function. + From Sriram Karra . + + * gnus.el (gnus-article-unpropagated-mark-lists): Backslash the + open parenthesis. + + * mm-view.el (mm-w3-prepare-buffer): Bind url-gateway-unplugged. + (mm-inline-text-html-render-with-w3): Ditto. + * gnus-art.el (gnus-article-wash-html-with-w3): Ditto. + Suggested by Dave Love . + + * mm-url.el (mm-url-load-url): Require w3-vars for old versions. + + * nntp.el (nntp-send-command-and-decode): Check PROCESS. + * nntp.el (nntp-send-command): Ditto. + * nntp.el (nntp-send-command-nodelete): Ditto. + +2002-02-04 ShengHuo ZHU + + * mm-url.el (mm-url-load-url): New function. + (mm-url-insert-file-contents): Use it. + + * gnus-msg.el (gnus-summary-mail-forward): Use gnus-article-charset. + + * message.el (message-forward-make-body): Correctly copy + forward-buffer. + + * rfc2047.el (rfc2047-decode-region): Don't decode us-ascii characters. + +2002-02-04 Simon Josefsson + + * gnus-art.el (gnus-article-followup-with-original): Mark with + force, prevent errors when following up from article buffer. + (gnus-article-reply-with-original): Ditto. + + * binhex.el (binhex-decoder-switches): Fix doc. From + Pavel@Janik.cz (Pavel Jan,Am(Bk). + +2002-02-04 ShengHuo ZHU + + * gnus-art.el (gnus-treatment-function-alist): Move hide-citation, + highlight-citation after emphasize. + +2002-02-04 Simon Josefsson + + * nnfolder.el (nnfolder-open-marks): + + * nnml.el (nnml-open-marks): Message when done. From David + Edmondson . + +2002-02-03 ShengHuo ZHU + + * imap.el (imap-anonymous-auth): Fix typo. + From: Steinar Bang + + * gnus-cache.el (gnus-cache-braid-nov): Use set-buffer instead of + save-excursion. + (gnus-cache-braid-heads): Ditto. + + * gnus-agent.el (gnus-agent-copy-nov-line): Move to the correct + line, because there are extra articles in the overview buffer. + + * nntp.el (nntp-retrieve-groups): Check whether BUF is live. + + * message.el (message-forward-rmail-make-body): Directly use + rmail-msg-restore-non-pruned-header to avoid calling + vertical-motion. + +2002-02-02 ShengHuo ZHU + + * gnus-cache.el (gnus-summary-insert-cached-articles): + (gnus-summary-limit-include-cached): gnus-newsgroup-cached is sorted. + + * gnus-group.el (gnus-group-mark-article-read): Nreverse + gnus-newsgroups-unselected. + + * gnus-agent.el (gnus-summary-set-agent-mark): Use + gnus-add-to-sorted-list. + + * gnus-sum.el (gnus-summary-update-info): gnus-newsgroup-unreads + gnus-newsgroup-unselected are sorted. Use gnus-sorted-union. + (gnus-build-all-threads): Use gnus-add-to-sorted-list. + (gnus-update-read-articles): UNREAD is sorted. + (gnus-newsgroup-unreads, gnus-newsgroup-unselected) + (gnus-newsgroup-marked, gnus-newsgroup-cached) + (gnus-newsgroup-expirable, gnus-newsgroup-downloadable) + (gnus-newsgroup-dormant): Require sorted. + + * gnus-dired.el (gnus-dired-find-file-mailcap): Correctly handle + directories. + (gnus-dired-print): New function. + + * gnus-art.el (gnus-mime-print-part): Add argument filename. Call + ps-despool. + +2002-02-02 Simon Josefsson + + * gnus-dired.el (turn-on-gnus-dired-mode): Autoload. Make defun. + +2002-02-02 ShengHuo ZHU + + * gnus-start.el (gnus-1): Call gnus-agentize if gnus-agent is + t. This makes gnus-agent customizable without putting + gnus-agentize into .gnus. + + * 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-01 Simon Josefsson + + * gnus-int.el (gnus-request-accept-article): Use gnus-get-function. + +2002-02-01 Katsumi Yamaoka + + * mm-view.el (mm-w3m-mode-dont-bind-keys): New variable. + (mm-setup-w3m): Don't bind keys listed in the above. + +2002-02-01 Katsumi Yamaoka + + * mm-view.el (mm-inline-text-html-render-with-w3m): Bind + `w3m-safe-url-regexp' with nil if `mm-inline-text-html-with-images' + is non-nil; bind `w3m-force-redisplay' with nil. + + * gnus-art.el (gnus-article-wash-html-with-w3m): Ditto. + + * mm-decode.el (mm-inline-text-html-with-images): Supplement docs. + +2002-01-31 ShengHuo ZHU + + * nnfolder.el (nnfolder-request-replace-article): Unfold. Don't + use mail-header-unfold-field. + + * gnus-cache.el (gnus-summary-insert-cached-articles): Use + gnus-summary-limit. + + * gnus-range.el (gnus-add-to-sorted-list): New function. + * gnus-sum.el (gnus-mark-article-as-read): Use it. + (gnus-mark-article-as-unread): Ditto. + (gnus-summary-mark-article-as-unread): Ditto. + (gnus-build-get-header): Ditto. + (gnus-summary-prepare-threads): Ditto. + (gnus-summary-insert-pseudos): Ditto. + (gnus-articles-to-read): Use gnus-sorted-union and gnus-sorted-nunion. + (gnus-summary-insert-new-articles): Use gnus-sorted-nunion. + (gnus-summary-insert-old-articles): Ditto. + + * gnus-msg.el (gnus-posting-styles): Add new format of header. + (gnus-configure-posting-styles): Support the new format. + + * mail-source.el (mail-source-bind, mail-source-bind-common): Set + edebug-form-spec to (sexp body). + Suggested by Joe Wells . + + * message.el (message-reply-headers): Add doc. + +2002-01-30 ShengHuo ZHU + + * gnus-group.el (gnus-group-delete-group): Nix the entry in + gnus-cache-active-hashtb. + + * gnus-agent.el (gnus-agent-mark-unread-afer-downloaded): New variable. + (gnus-agent-summary-fetch-group): Use it. + + * gnus-msg.el (gnus-debug-files): New variable. + (gnus-debug-exclude-variables): New variable. + (gnus-debug): Use them. + + * gnus-range.el (gnus-range-length): Don't use gnus-uncompress-range. + +2002-01-30 ShengHuo ZHU + + * message.el (message-cite-prefix-regexp): Use text-mode-syntax-table. + (message-mode-syntax-table): Move back the previous position. + + * nnagent.el (nnagent-retrieve-headers): Use gnus-sorted-difference. + + * gnus-agent.el (gnus-agent-retrieve-headers): Use + gnus-sorted-difference. + + * nnsoup.el (nnsoup-request-expire-articles): Use + gnus-sorted-difference. + + * nnheader.el: Autoload gnus-sorted-difference. + + * nnfolder.el (nnfolder-request-expire-articles): Use + gnus-sorted-difference. + + * gnus-cache.el (gnus-cache-retrieve-headers): Use + gnus-sorted-difference. + + * gnus-range.el: Autoload cookies. + (gnus-sorted-difference): New function. + (gnus-sorted-ndifference): New function. + (gnus-sorted-nintersection): Rename from + gnus-set-sorted-intersection. + (gnus-sorted-nunion): Rename from gnus-set-sorted-union. + (gnus-list-range-difference): Rename from + gnus-inverse-list-range-intersection. + (gnus-inverse-list-range-intersection): Use defalias. + + * gnus-sum.el (gnus-select-newsgroup): Use gnus-sorted-difference, + gnus-sorted-ndifference, and gnus-sorted-nintersection. + (gnus-articles-to-read): Use gnus-sorted-difference. + (gnus-summary-limit-mark-excluded-as-read): Use + gnus-sorted-intersection and gnus-sorted-ndifference. + (gnus-list-of-read-articles): Use gnus-list-range-difference. + (gnus-summary-insert-articles): Use gnus-sorted-difference. + + * gnus-sum.el (gnus-summary-update-info): Use gnus-sorted-union. + +2002-01-30 Katsumi Yamaoka + + * gnus-art.el (gnus-article-wash-html-with-w3m): Add keymap + property to the buffer for using emacs-w3m command keys. + + * mm-decode.el (mm-inline-text-html-with-w3m-keymap): New user + option. + + * mm-view.el (mm-w3m-mode-map): New variable. + (mm-w3m-mode-command-alist): New variable. + (mm-w3m-minor-mode): Removed. + (mm-setup-w3m): Setup `mm-w3m-mode-map'; don't add minor mode. + (mm-inline-text-html-render-with-w3m): Add keymap property to the + buffer for using emacs-w3m command keys. + +2002-01-29 ShengHuo ZHU + + * message.el (message-mode-syntax-table): Move forward. + (message-cite-prefix-regexp): Auto detect non word constituents. + (message-cite-prefix-regexp): Don't use with-syntax-table. + + * gnus-sum.el (gnus-summary-update-info): Use + gnus-list-range-intersection. + + * gnus-agent.el (gnus-agent-fetch-headers): Use + gnus-list-range-intersection. + + * gnus-range.el (gnus-range-normalize): Use correct predicate. + (gnus-list-range-intersection): Use it. + (gnus-inverse-list-range-intersection): Ditto. + (gnus-sorted-intersection): Add doc. + (gnus-set-sorted-intersection): Add doc. + (gnus-sorted-union): New function. + (gnus-set-sorted-union): New function. + + * gnus-range.el (gnus-list-range-intersection): Correct the logic. + (gnus-inverse-list-range-intersection): Ditto. + +2002-01-29 Karl Kleinpaste + + * mm-uu.el (mm-uu-type-alist): Add optional leading `0'. + + * gnus-uu.el (gnus-uu-shar-name-marker): Add optional leading `0' + and permit `:' and `\' in order to handle full Windows pathnames. + (gnus-uu-begin-string): Add optional leading `0'. Leading `0' is + technically not correct per standard, but seems to have common use. + +2002-01-29 ShengHuo ZHU + + * gnus-uu.el (gnus-uu-expand-numbers): Ignore errors when + replacing numbers. + +2002-01-28 ShengHuo ZHU + + * gnus-art.el (gnus-article-followup-with-original): Use (mark). + + * gnus-score.el (gnus-score-insert-help): Move to (point-min). + Don't split when the window is small, e.g. when a small *BBDB* + window is the lowest one. + + * gnus-agent.el (gnus-agent-retrieve-headers): Use + nnheader-find-nov-line to speed up. Use nreverse, because it is + sorted. Use nnheader-insert-nov-file. + +2002-01-28 Katsumi Yamaoka + + * mm-decode.el (mm-inline-text-html-with-images): New user option. + + * mm-view.el (mm-inline-text-html-render-with-w3m): Bind the value + of `w3m-display-inline-images' with the value of + `mm-inline-text-html-with-images'. + From: TSUCHIYA Masatoshi . + + * gnus-art.el (gnus-article-wash-html-with-w3m): Ditto. + +2002-01-27 Richard M. Stallman + + * time-date.el: Add autoload cookies. Many doc fixes. + (time-add): New function. + (time-subtract): Renamed from subtract-time. + (subtract-time): New alias for time-subtract. + +2002-01-28 Katsumi Yamaoka + + * gnus-art.el (gnus-article-wash-html-with-w3m): Replace w3m to + emacs-w3m in doc-string. + + * lpath.el: Bind `w3m-cid-retrieve-function-alist' and + `w3m-current-buffer'. + +2002-01-27 TSUCHIYA Masatoshi + + * gnus-art.el (gnus-article-wash-html-with-w3m): Handle cid: URLs. + + * mm-view.el (mm-setup-w3m): Add `mm-w3m-cid-retrieve' to + `w3m-cid-retrieve-function-alist' for `gnus-article-mode'. + (mm-w3m-cid-retrieve): New function. + (mm-inline-text-html-render-with-w3m): Handle cid: URLs. + +2002-01-27 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-fetch-articles): Don't save empty articles. + +2002-01-27 Lars Magne Ingebrigtsen + + * gnus-util.el (gnus-cache-file-contents): Don't use equalp. + +2002-01-26 Lars Magne Ingebrigtsen + + * nnheader.el (nnheader-insert-nov-file): Increased cutoff to + 32K. + + * gnus-sum.el (gnus-summary-expire-articles): Clean up. + + * nnmail.el (nnmail-article-group): Decode headers before running + split rules over them. + (nnmail-mail-splitting-charset): New variable. + + * smiley.el: Replaced with smiley-ems.el. + +2002-01-26 ShengHuo ZHU + + * mm-url.el (mm-url-predefined-programs): Add w3m. + (mm-url-program): Ditto. + +2002-01-26 Lars Magne Ingebrigtsen + + * nnml.el (nnml-use-compressed-files): New variable. + (nnml-filenames-are-evil): Removed. + (nnml-current-group-article-to-file-alist): Don't use. + (nnml-update-file-alist): Inhibit. + (nnml-article-to-file): Use new var. + +2002-01-26 ShengHuo ZHU + + * gnus-util.el (gnus-parse-without-error): Add edebug-form-spec. + + * nnagent.el (nnagent-retrieve-headers): loop until eobp. + +2002-01-26 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-load-alist): Use new caching + function. + + * gnus-util.el (gnus-cache-file-contents): New function. + + * gnus-agent.el (gnus-agent-file-loading-cache): New variable. + (gnus-agent-load-alist): Use it. + + * nnagent.el (nnagent-retrieve-headers): Use optimized function. + + * nnheader.el (nnheader-insert-nov-file): New function. + + * gnus-util.el (gnus-parse-without-error): Correct the loop. + + * gnus-sum.el (gnus-dependencies-add-header): Use in-reply-to if + there are no references. + (gnus-extract-message-id-from-in-reply-to): New function. + (gnus-nov-parse-line): Use in-reply-to if there are no + references. + +2002-01-25 Lars Magne Ingebrigtsen + + * nnagent.el (nnagent-retrieve-headers): Use new macro. + + * gnus-util.el (gnus-parse-without-error): New macro. + +2002-01-25 ShengHuo ZHU + + * gnus-art.el (gnus-article-wash-html-with-w3m): Call w3m-region. + (gnus-article-wash-function): use locate-library to decide which + to use. + +2002-01-25 Simon Josefsson + + * pop3.el (pop3-munge-message-separator): Work if no date. + Trivial patch from Marius Vollmer . + +2002-01-25 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-save-alist): Fix. + + * nnagent.el (nnagent-retrieve-headers): Must have cut too much by + mistake. Reinstated lost code. + +2002-01-25 Josh Huber + + * mml2015.el (mml2015-mailcrypt-decrypt): Display a signature if + one exists in the case of an encrypted message with an internal + signature. + +2002-01-25 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-save-alist): Optimized. + +2002-01-25 Katsumi Yamaoka + + * dgnushack.el: Commented out the experimental code. + +2002-01-25 Lars Magne Ingebrigtsen + + * gnus-range.el (gnus-inverse-list-range-intersection): Off-by-one + error. + + * gnus.el (gnus-server-to-method): Made into subst. + (gnus-server-method-cache): New variable. + (gnus-server-to-method): Use it. + (gnus-group-method-cache): New variable. + (gnus-find-method-for-group-1): Renamed. + (gnus-find-method-for-group): New function. + (gnus-group-method-cache): Removed. + + * gnus-sum.el (gnus-compute-unseen-list): Use new optimized + function. + + * gnus-range.el (gnus-members-of-range): New function. + (gnus-list-range-intersection): Renamed. + (gnus-inverse-list-range-intersection): New function. + + * gnus-sum.el (gnus-compute-unseen-list): Made into own function. + + * nnagent.el (nnagent-retrieve-headers): New implementation. + + * gnus-agent.el (gnus-agent-get-undownloaded-list): New, faster + implementation. + +2002-01-25 Katsumi Yamaoka + + * lpath.el: Fbind `w3m-charset-to-coding-system'; bind + `w3m-meta-content-type-charset-regexp'. + + * mm-view.el (mm-inline-text-html-render-with-w3m): Decode + charset-encoded html contents. + +2002-01-24 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-request-article): Make sure it is not + an empty file. + + * nnweb.el (url): Ignore errors when request url. + + * nnrss.el: Clean up the comments. + +2002-01-24 Katsumi Yamaoka + + * lpath.el: Fbind `w3m-region'; bind `w3m-mode-map'. + + * mm-decode.el (mm-inline-text-html-renderer): New user option. + (mm-inline-media-tests): Test whether the value of + `mm-inline-text-html-renderer' is a function for text/html. + + * mm-view.el (mm-inline-text-html-render-with-w3): New function + separated from `mm-inline-text'. + (mm-w3m-minor-mode): New variable. + (mm-w3m-setup): New variable. + (mm-setup-w3m): New function. + (mm-inline-text-html-render-with-w3m): New function. + (mm-inline-text): Funcall `mm-inline-text-html-renderer' for + text/html. + +2002-01-23 Paul Jarc + + * lpath.el: fbind make-symbolic-link and unix-sync for nnmaildir. + +2002-01-23 Katsumi Yamaoka + + * gnus-xmas.el (gnus-xmas-redefine): Quote `gnus-completing-read' + and `gnus-xmas-completing-read'. + +2002-01-19 TSUCHIYA Masatoshi + + * nneething.el (nneething-message-id-number): Abolished. + (nneething-encode-file-name): Not encode numerical characters. + (nneething-make-head): `nneething-message-id-number' is not + used to generate message IDs. + +2002-01-23 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-emphasis-alist): Include !? as sentence-ending + characters. + +2002-01-22 Lars Magne Ingebrigtsen + + * gnus-xmas.el (gnus-xmas-completing-read): New function. + (gnus-xmas-redefine): Redefine conditionally. + +2002-01-22 Josh Huber + + * mml.el (mml-parse-1): Fixed usage of recipients in the secure + tag. + +2002-01-22 Josh Huber + + * message.el (message-font-lock-keywords): Added the secure tag. + * mml-sec.el: Added functions to generate/modify/remove the secure + tag while in message mode. + * mml-sec.el (mml-secure-message): New. + * mml-sec.el (mml-unsecure-message): New. + * mml-sec.el (mml-secure-message-sign-smime): New. + * mml-sec.el (mml-secure-message-sign-pgp): New. + * mml-sec.el (mml-secure-message-sign-pgpmime): New. + * mml-sec.el (mml-secure-message-encrypt-smime): New. + * mml-sec.el (mml-secure-message-encrypt-pgp): New. + * mml-sec.el (mml-secure-message-encrypt-pgpmime): New. + * mml.el (mml-parse-1): Added code to recognise the secure tag and + convert it to either a part or multipart depending on if there are + other parts in the message. + * mml.el (mml-mode-map): Changed default sign/encrypt keybindings + to use the secure tag, rather than the part tag. + * mml.el (mml-preview): Added a save-excursion to keep cursor + position after doing an MML preview. + +2002-01-22 Lars Magne Ingebrigtsen + + * nnheader.el (nnheader-parse-overview-file): New function. + (nnheader-write-overview-file): New function. + +2002-01-21 Lars Magne Ingebrigtsen + + * gnus.el (gnus-group-fast-parameter): Check better if expansion + in wanted. + + * nnweb.el (nnweb-type-definition): Clean up. + +2002-01-21 Alastair Burt + Trivial patch. + + * gnus-art.el (gnus-mm-display-part): Make sure that the summary + buffer exists before jumping to it. + +2002-01-21 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-wash-html-with-w3): Made into own + function. + (article-wash-html): Use it. + (gnus-article-wash-function): New variable. + (gnus-article-wash-html-with-w3m): New function. + +2002-01-20 Bj,Av(Brn Torkelsson + + * dgnushack.el (dgnushack-compile): Compile smiley-ems for + XEmacs. + +2002-01-20 John H. Palmieri + + * gnus-fun.el (gnus-convert-image-to-gray-x-face): More standard + command line. + +2002-01-21 Simon Josefsson + + * canlock.el (base64-encode-string): Autoload it from base64. + (canlock-make-cancel-key): Base64 encode unibyte string. + +2002-01-20 Lars Magne Ingebrigtsen + + * nnfolder.el (nnfolder-request-accept-article): Unfold + x-from-line. + (nnfolder-request-replace-article): Ditto. + +2002-01-20 Nevin Kapur + + * gnus-group.el (gnus-group-best-unread-group): Use the right + positioning function. + +2002-01-20 Lars Magne Ingebrigtsen + + * smiley-ems.el (smiley-region): Use new function. + (smiley-update-cache): Use general image functions. + (smiley-region): Use general functions. + + * gnus-util.el (gnus-graphic-display-p): New function. + + * nnmail.el (nnmail-article-group): Allow outputting traces of + non-strings. + + * nndoc.el (nndoc-type-alist): Rules for exim bounces. + (nndoc-exim-bounce-type-p): New function. + + * message.el (message-dont-send): Doc fix. + + * gnus-util.el (gnus-completing-read): Remove + inherit-input-method. + + * gnus-art.el (gnus-treat-smiley): Doc fix. + + * gnus-agent.el (gnus-agent-fetch-headers): Ignore seen and recent + articles. + +2002-01-19 Simon Josefsson + + * imap.el (imap-gssapi-open): Don't wait for logout to complete. + (imap-kerberos4-open): Ditto. + (imap-open): Set port correctly, don't set auth. + +2002-01-20 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump version number. + +2002-01-20 05:33:30 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.05 is released. + +2002-01-20 Lars Magne Ingebrigtsen + + * nnkiboze.el (nnkiboze-generate-group): Make sure the directory + exists. + + * gnus-spec.el (gnus-string-width-function): New function. + (gnus-tilde-cut-form): Use it. + (gnus-tilde-max-form): Ditto. + (gnus-use-correct-string-widths): Default to (featurep 'xemacs). + (gnus-substring-function): Use it. + (gnus-tilde-cut-form): Ditto. + (gnus-substring-function): New function. + + * message.el (message-check-news-header-syntax): New message. + + * gnus.el (gnus-slave-no-server): Doc fix. + + * gnus-spec.el (gnus-use-correct-string-widths): Default to t. + +2002-01-15 Katsumi Yamaoka + + * gnus-sum.el (gnus-adjust-marked-articles): Fix the record for + `seen' if it looks like (seen NUM1 . NUM2). It should be + (seen (NUM1 . NUM2)). + +2002-01-20 Lars Magne Ingebrigtsen + + * gnus-topic.el (gnus-topic-catchup-articles): Update article + number in closed topics. + +2002-01-19 Daniel Pittman + + * gnus-sum.el (gnus-summary-first-unseen-or-unread-subject): New + functions. + +2002-01-19 Lars Magne Ingebrigtsen + + * gnus.el (gnus-group-find-parameter): Clean up. + + * gnus-sum.el (gnus-summary-goto-subject): Error on non-numerical + articles. + + * gnus-util.el (gnus-completing-read-with-default): Renamed. + + * nnmail.el (nnmail-article-group): Clean up. + +2002-01-19 Paul Stodghill + + * gnus-agent.el (gnus-category-name): Intern the category name. + +2002-01-19 Lars Magne Ingebrigtsen + + * gnus-topic.el (gnus-topic-move-group): Use gnus-topic-history. + + * gnus-util.el (gnus-completing-read): New function. + +2002-01-19 ShengHuo ZHU + + * gnus-art.el (gnus-add-wash-type): Use add-to-list. + + * smiley-ems.el (smiley-region): Register smiley. + (smiley-toggle-buffer): Rewrite the function. + (smiley-active): Removed. + +2002-01-19 Simon Josefsson + + * gnus-util.el (gnus-parent-id): Optimize null n case. From + Jesper Harder . + +2002-01-18 TSUCHIYA Masatoshi + + * gnus-art.el (gnus-request-article-this-buffer): Call + `nneething-get-file-name' to extract the file name from the + message id. + + * nneething.el (nneething-encode-file-name): New function. + (nneething-decode-file-name): Ditto. + (nneething-get-file-name): Ditto. + (nneething-make-head): Encode the file name and encapsulate it + into the field of the message id. + +2002-01-18 Simon Josefsson + + * nnml.el (nnml-request-update-info): Don't erase flags that isn't + stored in .marks. + + * nnfolder.el (nnfolder-request-update-info): Ditto. + +2002-01-18 ShengHuo ZHU + + * gnus-art.el (gnus-url-parse-query-string): Allow new line in value. + +2002-01-18 Simon Josefsson + + * imap.el (imap-starttls-p): Don't check for binary. + (imap-gssapi-auth-p): Ditto. + (imap-kerberos4-auth-p): Ditto. + (imap-open): Change logic. Iterate through all possible streams, + instead of bailing out after first failure. Move authenticator + decision to `imap-authenticate'. + (imap-authenticate): Change logic, now finds the authenticator to + use, was previously in `imap-open'. + (imap-open): Return nil on failure. + (imap-open): Setup temp buffer correctly. + (imap-open): Return buffer only on success. + (imap-interactive-login, imap-interactive-login): Tell the user + which stream/authenticator is used for the queried + username/password. + (imap-open, imap-authenticate): Set variables. + (imap-gssapi-auth-p, imap-kerberos4-auth-p): Fix typo. + (imap-open): Don't assume how `with-temp-buffer' is implemented. + +2002-01-17 Lars Magne Ingebrigtsen + + * gnus-fun.el (gnus-grab-cam-x-face): New function. + +2002-01-16 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-emphasis-alist): Allow matching "*this*.)". + +2002-01-17 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-toggle-group-plugged): New function. + (gnus-agent-group-mode-map): Bind it to "Jo". + (gnus-agent-group-make-menu-bar): Add it into menu bar. + +2002-01-17 Karl Kleinpaste + + * gnus-xmas.el (gnus-group-toolbar): Add .newsrc save button. + (gnus-summary-mail-toolbar): Add mail article deletion button. + + * smiley.el (smiley-deformed-regexp-alist): Eliminate noseless + false positives for lines of "^^^^". + + * gnus-picon.el (gnus-picon-find-face): faces database is all + lowercase. + +2002-01-17 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-retrieve-headers): Use correct buffer. + (gnus-agent-braid-nov): Switch back to nntp-server-buffer. Remove + duplications. + (gnus-agent-batch): Bind gnus-agent-confirmation-function. + +2002-01-16 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-initial-limit): Inline + gnus-summary-limit-children. + (gnus-summary-initial-limit): Don't limit if + gnus-newsgroup-display is nil. + (gnus-summary-initial-limit): No, don't. + + * gnus-util.el + (gnus-put-text-property-excluding-characters-with-faces): Inline + gnus-put-text-property. + + * gnus-spec.el (gnus-default-format-specs): New variable. + + * gnus-start.el (gnus-read-newsrc-file): Don't clear + gnus-format-specs. + (gnus-read-newsrc-el-file): Default to gnus-default-format-specs. + + * gnus-spec.el (gnus-update-format-specifications): Really check + the Gnus version of the .newsrc.eld file. + (gnus-format-specs): Save the new default summary format. + + * gnus-util.el (gnus-parent-id): Check whether references is empty + before splitting. + + * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Inline some + functions. + (gnus-gather-threads-by-references): Inline + `gnus-split-references'. + + * gnus-spec.el (gnus-summary-line-format-spec): New, optimized + default value of gnus-summary-line-format-spec. + +2002-01-15 ShengHuo ZHU + + * nnslashdot.el (nnslashdot-retrieve-headers-1): A better error + message. + (nnslashdot-request-list): Ditto. + (nnslashdot-sid-strip): Removed. + +2002-01-15 Simon Josefsson + + * nnimap.el (nnimap-close-asynchronous): Enable. + (nnimap-close-group): Expunge. + +2002-01-15 ShengHuo ZHU + + * gnus-util.el (gnus-user-date-format-alist): Typo. + From: Frank Schmitt + +2002-01-15 TSUCHIYA Masatoshi + + * nneething.el (nneething-request-article): Set + `nnmail-file-coding-system' to `binary' locally, in order to read + files without any conversion. + +2002-01-15 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-retrieve-headers): Use + nnheader-file-coding-system and nnmail-active-file-coding-system. + (gnus-agent-regenerate-group): Ditto. + (gnus-agent-regenerate): Ditto. + (gnus-agent-write-active): Ditto. + Suggested by Katsumi Yamaoka + +2002-01-14 ShengHuo ZHU + + * gnus-art.el (gnus-button-alist): Don't highlight + +2002-01-14 ShengHuo ZHU + + * gnus.el: We don't need gnus-article-show-all-headers. + + * gnus-art.el (article-show-all, gnus-article-show-all-header): + Ditto. + + * gnus-sum.el (gnus-summary-select-article): Don't call + show-all-headers, because hidden headers are not hidden text any + more. + +2002-01-13 Simon Josefsson + + * message.el (message-newline-and-reformat): Use `newline' instead + of inserting \n, so that the newline is marked as hard. + + * gnus-spec.el (gnus-pad-form): Don't evaluate EL multiple times. + From Jesper Harder . + +2002-01-12 ShengHuo ZHU + + * imap.el (imap-close): Keep going if quit. + + * gnus-agent.el (gnus-agent-retrieve-headers): Erase + nntp-server-buffer. + +2002-01-12 Lars Magne Ingebrigtsen + + * mm-view.el (mm-display-inline-fontify): Require font-lock to + avoid unbinding shadowed variables. + + * gnus-art.el (gnus-picon-databases): Moved here. + (gnus-picons-installed-p): Moved here. + (gnus-article-reply-with-original): Use `mark'. + + * gnus.el (gnus-picon): Moved here and renamed. + + * gnus-art.el (gnus-treat-from-picon): Only be on if picons are + installed. + (gnus-treat-mail-picon): Ditto. + (gnus-treat-newsgroups-picon): Ditto. + + * gnus-picon.el (gnus-picons-installed-p): New function. + +2002-01-12 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-go-online): Fix doc. + +2002-01-12 Simon Josefsson + + * nnimap.el (nnimap-need-unselect-to-notice-new-mail) + (nnimap-before-find-minmax-bugworkaround): Use it. + (nnimap-find-minmax-uid): Don't reselect current mailbox. + (nnimap-dont-close): New variable. + (nnimap-close-group): Use it. + +2002-01-12 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-reply-with-original): Use + `mark-active'. + + * gnus-msg.el (gnus-summary-reply): Don't bug out on regions. + + * gnus-logic.el (gnus-advanced-score-rule): Thinko fix. + (gnus-score-advanced): Clean up. + (gnus-score-advanced): Accept a multiple of the score. + +2002-01-12 Simon Josefsson + + * flow-fill.el (fill-flowed-display-column) + (fill-flowed-encode-columnq): New variables. Suggested by + Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Gro,b_(Bjohann). + (fill-flowed-encode, fill-flowed): Use them. + + * message.el (message-send-news, message-send-mail): Use + m-b-s-n-p-e-h-n. + + * mml.el (autoload): Autoload fill-flowed-encode. + (mml-buffer-substring-no-properties-except-hard-newlines): New + function. + (mml-read-part): Use it. + (mml-generate-mime-1): Encode format=flowed if appropriate. + (mml-insert-mime-headers): Insert format=flowed. + + * flow-fill.el (fill-flowed-encode): New function. + (fill-flowed): Bind fill-column to window width. + +2002-01-12 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-buffer-name): Return the dead name if + it exists. + (gnus-summary-setup-buffer): Wake up dead summary buffers. + (gnus-summary-buffer-name): Don't return the dead name after all. + (gnus-summary-setup-buffer): Kill the dead buffer. + + * gnus-art.el (gnus-article-followup-with-original): Store the + value of the mark before deactivating it. + +2002-01-11 ShengHuo ZHU + + * gnus-fun.el (gnus-display-x-face-in-from): Fake it. + From: Karl Kleinpaste + + * gnus-art.el (article-display-x-face): Ditto. + (gnus-article-reply-with-original): Use gnus-region-active-p. + (gnus-article-followup-with-original): Ditto. + + * gnus-sum.el (gnus-summary-read-group-1): Don't select + downloadable article either. + +2002-01-11 ShengHuo ZHU + + * gnus-art.el (article-display-x-face): Insert From:. + + * gnus-sum.el (gnus-summary-move-article): Don't draw the + article. Bind gnus-display-mime-function and + gnus-article-prepare-hook. + + * gnus-agent.el (gnus-agent-retrieve-headers): Load agentview. + (gnus-agent-toggle-plugged): Use gnus-agent-go-online. Move + gnus-agent-possibly-synchronize-flags to the last. + (gnus-agent-go-online): New function. New variable. + +2002-01-11 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-regenerate-group): Add clean option. + (gnus-agent-regenerate): Ditto. + +2002-01-11 ShengHuo ZHU + + * message.el (message-ignored-news-headers) + (message-ignored-mail-headers): Add X-Gnus-Agent-Meta-Information:. + Suggested by ARISAWA Akihiro + + * gnus.el (gnus-gethash-safe): New macro. + + * gnus-agent.el (gnus-agent-regenerate-history): New function. + (gnus-agent-regenerate): Show messages. + +2002-01-11 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-regenerate-group): New function. + (gnus-agent-regenerate): New function. + (gnus-agent-save-alist): Sort. + (gnus-agent-copy-nov-line): Test eobp. + (gnus-agent-retrieve-headers): Erase buffer. + +2002-01-10 ShengHuo ZHU + + * mm-util.el (mm-charset-to-coding-system): Change charset to cs. + From: Torsten Hilbrich + + * gnus.el (gnus-agent-covered-methods): Move here. + (gnus-online): New function. + (gnus-agent-method-p): Move here. + + * nnagent.el (nnagent-retrieve-headers): Check whether arts is + nil. Remove articles-alist. + + * gnus-start.el (gnus-get-unread-articles): Check online. + (gnus-groups-to-gnus-format): Ditto. + (gnus-active-to-gnus-format): Ditto. + + * gnus-agent.el (gnus-agent-get-function): Use it. + (gnus-agent-get-undownloaded-list): Ditto. + (gnus-agent-fetch-session): Only fetch online methods. + + * gnus-srvr.el (gnus-server-make-menu-bar): Add offline. + (gnus-server-mode-map): Ditto. + (gnus-server-offline-face): New face. + (gnus-server-offline-face): New variable. + (gnus-server-font-lock-keywords): Add offline. + (gnus-server-insert-server-line): Ditto. + (gnus-server-offline-server): New function. + + * gnus-int.el (gnus-open-server): Turn to offline. + (gnus-server-unopen-status): New variable. + +2002-01-10 ShengHuo ZHU + + * nnkiboze.el (nnkiboze-request-article): Use + gnus-agent-request-article. + + * nnagent.el (nnagent-retrieve-headers): Don't use nnml + function. Insert undownloaded NOV. + + * gnus-agent.el (gnus-agent-retrieve-headers): New function. + (gnus-agent-request-article): New function. + + * gnus.el (gnus-agent-cache): New variable. + + * gnus-int.el (gnus-retrieve-headers): Use + gnus-agent-retrieve-headers. + (gnus-request-head): Use gnus-agent-request-article. + (gnus-request-body): Ditto. + + * gnus-art.el (gnus-request-article-this-buffer): Use + gnus-agent-request-article. + + * gnus-sum.el (gnus-summary-read-group-1): Don't show the first + article if it is undownloaded. + +2002-01-10 Katsumi Yamaoka + + * gnus-spec.el (gnus-spec-tab): Deal with wide characters. + +2002-01-09 Katsumi Yamaoka + + * canlock.el (canlock-string-as-unibyte): New macro. + (canlock-sha1-with-openssl): Return a unibyte string. + (canlock-make-cancel-key): Treat Message-ID as a unibyte string. + +2002-01-09 ShengHuo ZHU + + * gnus.el (gnus-expand-group-parameters): Match \N or \& only. + +2002-01-08 ShengHuo ZHU + + * mm-encode.el (mm-content-transfer-encoding-defaults): Add + application/x-emacs-lisp. + + * gnus-msg.el (gnus-bug): Use application/emacs-lisp. + + * nntp.el (nntp-request-article): Add group parameter. + (nntp-request-head): Ditto. + (nntp-find-group-and-number): Add parameter group. Figure out + number if the status line doesn't give (e.g. quimby.gnus.org). + +2002-01-08 Simon Josefsson + + * mml.el (mml-generate-mime-1): Set recipient correctly. + +2002-01-08 ShengHuo ZHU + + * message.el (message-read-from-minibuffer): Add parameter + initial-contents. + * gnus-msg.el (gnus-summary-resend-message): Use it. + + * gnus-group.el (gnus-group-read-ephemeral-group): Restore the old + behavior of quit-config. + + * message.el (message-make-from): Don't quote fullname. + From: Bj,Ax(Brn Mork + + * gnus-group.el (gnus-group-suspend): Don't kill message buffers. + From: + +2002-01-07 ShengHuo ZHU + + * gnus-group.el (gnus-group-mark-article-read): Typo. Increase n. + + * gnus-art.el (gnus-header-button-alist): Handle mailto. + + * mml.el (mml-preview): Bind gnus-original-article-buffer because + article-decode-group-name uses it. Bind gnus-article-prepare-hook + because bbdb may use it. + +2002-01-07 TSUCHIYA Masatoshi + + * nneething.el (nneething-request-article): When a non-text file + is converted to an article, its data is encoded in base64. Call + `nneething-make-head' with options to specify MIME types. + (nneething-make-head): Add optional arguments to specify MIME + types. + +2002-01-06 ShengHuo ZHU + + * gnus-fun.el (gnus-display-x-face-in-from): Fake a "From: " + header if there is not. + + * gnus-xmas.el (gnus-xmas-put-image): Insert " " if bobp. + + * gnus-msg.el (gnus-gcc-mark-as-read): New variable. + (gnus-inews-mark-gcc-as-read): Obsolete variable. + (gnus-inews-do-gcc): Use them. + + * gnus-group.el (gnus-group-mark-article-read): Put holes into + gnus-newsgroup-unselected. + +2002-01-06 Simon Josefsson + + * imap.el (imap-ssl-open, imap-ssl-open, imap-parse-fetch): Use + condition-case, not ignore-errors. + +2002-01-06 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-insert-old-articles): Bind + gnus-fetch-old-headers. + + * gnus-art.el (article-display-x-face): Use the current buffer + unless `W f'. Otherwise, X-Face may be shown in the header of a + forwarded part. + (gnus-treatment-function-alist): Treat xface before hiding + headers. + +2002-01-06 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-read-ephemeral-group): Fix + parameters. + +2002-01-06 ShengHuo ZHU + + * mm-util.el (mm-multibyte-p): Define conditionally when load. + (mm-guess-charset): New function. + (mm-charset-after): Use it. + (mm-detect-coding-region): New function. + (mm-detect-mime-charset-region): New function. + + * gnus-sum.el (gnus-summary-show-article): Use + mm-detect-coding-region. + +2002-01-06 Lars Magne Ingebrigtsen + + * message.el (message-make-fqdn): Be less violent. + + * gnus.el (gnus-logo-color-style): Compute custom form + automatically. + + * gnus-sum.el (gnus-summary-enter-digest-group): Feed the adaptive + score file of the parent to the document group. + + * gnus-group.el (gnus-group-read-ephemeral-group): Add an optional + parameters parameter. + + * gnus-score.el (gnus-score-load-file): Clean up. + +2002-01-06 ShengHuo ZHU + + * gnus-sum.el (gnus-thread-sort-by-most-recent-number): Fix typo. + From: Damien Wyart + + * gnus-util.el (gnus-local-map-property): In Emacs 21, use keymap. + +2002-01-05 ShengHuo ZHU + + * gnus-sum.el (gnus-select-group-hook): Typo. + + * rfc2047.el (rfc2047-decode-string): Return immediately if there + is no quoted-printable-encoded STRING. + From: Jesper Harder + + (rfc2047-decode-string): Decode it. + +2002-01-05 Lars Magne Ingebrigtsen + + * gnus.el (gnus-logo-color-alist): Added more colors from Luis. + +2002-01-05 Keiichi Suzuki + Trivial patch. + + * nntp.el (nntp-possibly-change-group): Erase contents of nntp + buffer to get rid of junk line. + +2002-01-05 Simon Josefsson + + * message.el (message-mode-map): Bind message-goto-from to C-c C-f + C-o. + (message-mode-map): Bind message-insert-or-toggle-importance to + C-c C-u. + (message-mode-map): Bind message-disposition-notification-to to + C-c M-n. + (message-mode-menu): Add m-d-n-t. + (message-mode-field-menu): Add m-goto-from. + (message-mode): Doc fix. + (message-goto-from): New function. + (message-insert-disposition-notification-to): New function. + (message-tool-bar-map): Add receipt button. + +2002-01-05 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-thread-latest-date): New function. + (gnus-thread-sort-by-most-recent-number): Renamed. + (gnus-thread-sort-functions): Doc fix. + (gnus-select-group-hook): Don't use setq on a hook. + (gnus-thread-latest-date): Use date, not number + + * gnus-agent.el (gnus-agent-expire-days): Doc fix. + (gnus-agent-expire): Allow regexp of expire-days. + + * gnus-art.el (gnus-article-reply-with-original): Deactivate + region. + (gnus-article-followup-with-original): Ditto. + + * gnus-sum.el (gnus-thread-highest-number): Doc fix. + + * gnus-art.el (gnus-mime-display-alternative): Use + gnus-local-map-property. + (gnus-mime-display-alternative): Ditto. + (gnus-insert-mime-security-button): Ditto. + (gnus-insert-next-page-button): Ditto. + (gnus-button-prev-page): Take optional args. + (gnus-insert-prev-page-button): widget-convert. + + * gnus-util.el (gnus-local-map-property): New function. + + * gnus-art.el (gnus-prev-page-map): Use parent map. + (gnus-next-page-map): Ditto. + + * gnus-spec.el (gnus-parse-format): Clean up. + (gnus-parse-format): Do complex formatting for %=. + + * gnus-fun.el (gnus-display-x-face-in-from): Add the string + "X-Face: " to the data in the built-in scenario. + + * gnus-spec.el (gnus-parse-simple-format): Use gnus-pad-form. + (gnus-correct-pad-form): Renamed. + (gnus-tilde-max-form): Clean up. + (gnus-pad-form): Use gnus-use-correct-string-widths. + + * gnus-fun.el (gnus-display-x-face-in-from): Use native xface + support if that is available. + + * gnus-sum.el (gnus-thread-highest-number): New function. + (gnus-thread-sort-by-most-recent-thread): New function. + (gnus-thread-sort-functions): Doc fix. + +2002-01-04 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-select-article): Disable multibyte in + all cases. + (gnus-summary-mode): Enable it in all cases. + (gnus-summary-display-article): Ditto. + (gnus-summary-edit-article): Ditto. + + * gnus-ems.el (gnus-put-image): Really return glyph. + + * gnus-art.el (gnus-article-x-face-command): Fix :type. + (gnus-treat-smiley): Don't take "P" in the interactive form. + +2002-01-04 Lars Magne Ingebrigtsen + + * compface.el (uncompface): XEmacs and Emacs have differing + capabilities. + + * gnus-fun.el (gnus-display-x-face-in-from): Use face. + + * gnus-ems.el (gnus-article-xface-ring-internal): Removed. + (gnus-article-xface-ring-size): Removed. + (gnus-article-display-xface): Removed. + (gnus-remove-image): Cleaned up. + + * gnus-xmas.el (gnus-xmas-create-image): Convert pbm to xbm. + (gnus-xmas-create-image): Take pbm files. + (gnus-x-face): Removed. + (gnus-xmas-article-display-xface): Removed. + + * gnus-fun.el (gnus-display-x-face-in-from): Bind + default-enable-multibyte-characters. + + * compface.el (uncompface): Doc fix. + + * gnus-art.el (gnus-article-x-face-command): Use + gnus-display-x-face-in-from. + + * gnus-xmas.el (gnus-xmas-put-image): Return the image. + + * gnus-ems.el (gnus-put-image): Return the image. + + * gnus-fun.el (gnus-display-x-face-in-from): New function. + (gnus-x-face): Moved here. + +2002-01-04 ShengHuo ZHU + + * gnus-xmas.el (gnus-xmas-put-image): Don't insert SPC or make + invisible if string is nil. + (gnus-xmas-article-display-xface): Use it. + + * gnus-ems.el (gnus-put-image): Explicitly use SPC, and add text + property when string is nil. + (gnus-article-display-xface): Use it. + +2002-01-04 Lars Magne Ingebrigtsen + + * gnus-art.el (article-display-x-face): Check whether valid grey + face was returned. + (article-display-x-face): Place image in the right spot. + + * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Get rid of + stderr. + (gnus-convert-gray-x-face-to-xpm): Check whether output is valid. + +2002-01-03 Lars Magne Ingebrigtsen + + * gnus-xmas.el (gnus-xmas-create-image): Take optional + parameters. + (gnus-xmas-put-image): Allow non-strings to be passed. + + * gnus-art.el (article-display-x-face): Use optional parameters. + + * gnus-ems.el (gnus-create-image): Take optional parameters. + + * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Use uncompface. + + * compface.el (compface-xbm-p): Removed. + + * gnus-ems.el (gnus-article-compface-xbm): Removed. + (gnus-article-display-xface): Use compface. + + * compface.el: New file. + + * gnus-fun.el (gnus-convert-pbm-to-x-face-command): Remove quotes. + (gnus-convert-image-to-x-face-command): Ditto. + (gnus-random-x-face): Quote argument. + (gnus-x-face-from-file): Ditto. + +2002-01-03 Paul Jarc + + * nnmaildir.el (nnmaildir-request-expire-articles): evaluate + the expire-group parameter once per article rather than once + per group; bind `nnmaildir-article-file-name' and `article' + for convenience. Leave article alone when expire-group + specifies the current group. + (nnmaildir--update-nov): be more concurrency-friendly with + temp file names. + +2002-01-03 Lars Magne Ingebrigtsen + + * gnus-start.el (gnus-read-init-file): Cleaned up. + +2002-01-03 Dave Love + + * gnus-start.el (gnus-startup-file-coding-system): Removed. + (gnus-read-init-file): Don't use it. + +2002-01-03 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-fetch-session): Run hook. + +2002-01-03 Kai Gro,b_(Bjohann + + * gnus-start.el (gnus-read-init-file): Don't force coding system + for ~/.gnus. From Dave Love . + +2002-01-03 ShengHuo ZHU + + * nntp.el (nntp-send-buffer): Use mm-with-unibyte-current-buffer. + * nnspool.el (nnspool-request-post): Ditto. + + * mm-util.el (mm-use-find-coding-systems-region): New variable. + (mm-find-mime-charset-region): Use it. + +2002-01-03 Per Abrahamsen + + * gnus.el (gnus-summary-line-format): Added :link. + * gnus-topic.el (gnus-topic-line-format): Ditto. + * gnus-sum.el (gnus-summary-dummy-line-format): Ditto. + * gnus-srvr.el (gnus-server-line-format): Ditto. + * gnus-group.el (gnus-group-line-format): Ditto. + + * gnus-sum.el (gnus-summary-make-menu-bar): Use correct syntax for + :keys, it works on both Emacsen. + +2002-01-03 ShengHuo ZHU + + * mm-util.el (mm-charset-to-coding-system): Don't setq charset. + +2002-01-03 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-summary-send-map): Fix binding for very-wide. + +2002-01-03 Reiner Steib + + * gnus-sum.el (gnus-summary-make-menu-bar): Menu bar entries for + very wide reply. + +2002-01-03 Lars Magne Ingebrigtsen + + * gnus-picon.el (gnus-picon-transform-address): Cache stuff. + (gnus-picon-cache): New variable. + (gnus-picon-transform-newsgroups): Cache stuff. + + * gnus-art.el (gnus-article-reply-with-original): New command. + (gnus-article-followup-with-original): New command. + + * gnus-msg.el (gnus-copy-article-buffer): Take optional BEG and + END parameters. + (gnus-summary-followup): Take a list of list of articles. + (gnus-inews-yank-articles): Allow lists of article/regions. + + * gnus-art.el (gnus-article-read-summary-keys): `R' and `F' are no + longer the usual commands. + + * gnus-fun.el (gnus-convert-image-to-gray-x-face): Use pnmnoraw. + (gnus-convert-gray-x-face-to-xpm): Don't use six parameters to + shell-command-on-region. + +2002-01-02 ShengHuo ZHU + + * gnus-picon.el (gnus-picon-transform-newsgroups): Fix for the case + "Newsgroups: rec.music.beatles.moderated, rec.music.beatles". + +2002-01-03 Steve Youngs + + * gnus-sum.el (gnus-summary-make-menu-bar): XEmacs doesn't + understand ':keys', wrap it in an featurep 'xemacs. + +2002-01-02 ShengHuo ZHU + + * gnus-ems.el (gnus-article-display-xface): Show xface in the + order of headers (Actually, it is called in a reversed order). Add + 'gnus-image-text-deletable property. + (gnus-remove-image): Remove text with such a property. + + * gnus-xmas.el (gnus-xmas-article-display-xface): Don't use + gnus-put-image. + + * gnus-art.el (gnus-article-treat-fold-newsgroups): Replace ", *" + with ", " + +2002-01-02 Lars Magne Ingebrigtsen + + * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Renamed. + + * gnus-art.el (gnus-ignored-headers): Hide all X-Faces. + (article-display-x-face): Display grey X-Faces. + + * gnus-fun.el (gnus-convert-gray-x-face-region): New function. + (gnus-convert-gray-x-face-to-ppm): Ditto. + (gnus-convert-image-to-gray-x-face): Ditto. + + * gnus-sum.el (gnus-summary-make-menu-bar): Add a :keys to + gnus-summary-show-raw-article. + +2002-01-02 ShengHuo ZHU + + Display picons in XEmacs without showing text. + + * gnus-xmas.el (gnus-xmas-create-image): Don't use + mm-create-image-xemacs to create xbm glyph, because it deletes + temporary files. + (gnus-xmas-put-image): Use end-glyph. Make text invisible. + (gnus-xmas-remove-image): Make text visible, remove glyph. + + * gnus-picon.el (gnus-picon-transform-newsgroups) + (gnus-picon-transform-address): Insert spec backward, due to the + incompatibility of gnus-xmas-put-image. + +2002-01-02 Pavel Jan,Am(Bk + + * gnus-fun.el (gnus-convert-pbm-to-x-face-command): Doc fix. + +2002-01-02 Lars Magne Ingebrigtsen + + * gnus.el: Doc fix. + + * gnus-art.el: Doc fix. + + * gnus-agent.el: Doc fix. + +2002-01-01 ShengHuo ZHU + + * gnus-diary.el, gnus-delay.el: Fix copyright lines. + +2002-01-01 Paul Jarc + + * nnmaildir.el (nnmaildir--update-nov): automatically parse + NOV data out of the message again if nnmail-extra-headers has + changed. + +2002-01-02 Lars Magne Ingebrigtsen + + * gnus-fun.el: New file. + (gnus-convert-image-to-x-face-command): New variable. + (gnus-insert-x-face): New function. + (gnus-random-x-face): Renamed. + (gnus-x-face-from-file): Renamed. + + * gnus-art.el (gnus-body-boundary-delimiter): Changed default to + "_". + (gnus-body-boundary-delimiter): Typo fix. + +2002-01-02 Simon Josefsson + + * gnus-art.el (gnus-article-treat-body-boundary): Handle nil. + (gnus-body-boundary-delimiter): Fix type. + +2002-01-01 Simon Josefsson + + * gnus-art.el (gnus-treat-buttonize, gnus-treat-buttonize-head) + (gnus-treat-emphasize, gnus-treat-strip-cr) + (gnus-treat-leading-whitespace, gnus-treat-hide-headers) + (gnus-treat-hide-boring-headers, gnus-treat-hide-signature) + (gnus-treat-fill-article, gnus-treat-hide-citation) + (gnus-treat-hide-citation-maybe) + (gnus-treat-strip-list-identifiers, gnus-treat-strip-pgp) + (gnus-treat-strip-pem, gnus-treat-strip-banner) + (gnus-treat-highlight-headers, gnus-treat-highlight-citation) + (gnus-treat-date-ut, gnus-treat-date-local) + (gnus-treat-date-english, gnus-treat-date-lapsed) + (gnus-treat-date-original, gnus-treat-date-iso8601) + (gnus-treat-date-user-defined, gnus-treat-strip-headers-in-body) + (gnus-treat-strip-trailing-blank-lines) + (gnus-treat-strip-leading-blank-lines) + (gnus-treat-strip-multiple-blank-lines) + (gnus-treat-unfold-headers, gnus-treat-fold-headers) + (gnus-treat-fold-newsgroups, gnus-treat-overstrike) + (gnus-treat-display-xface, gnus-treat-display-smileys) + (gnus-treat-from-picon, gnus-treat-mail-picon) + (gnus-treat-newsgroups-picon, gnus-treat-body-boundary) + (gnus-treat-capitalize-sentences, gnus-treat-fill-long-lines) + (gnus-treat-play-sounds, gnus-treat-translate) + (gnus-treat-x-pgp-sig): Doc fix, add link to manual. + + * gnus-art.el (gnus-body-boundary-delimiter): New variable. + (gnus-article-treat-body-boundary): Use it. + + * message.el (message-mode): Fix doc. + (message-mode-menu): Fix names. + +2002-01-01 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-first-subject): Really go to unseen + articles. + + * gnus-picon.el (gnus-picon-find-face): Search MISC for all types. + (gnus-picon-transform-address): Search for unknown faces as well. + (gnus-picon-find-face): Don't search "news" for MISC. + (gnus-picon-user-directories): Changed default back to exclude + "unknown". + + * gnus-sum.el (gnus-summary-hide-all-threads): Reversed logic. + + * gnus-picon.el (gnus-picon-find-face): Search through all + databases. + (gnus-picon-find-face): New implementation. + + * gnus-topic.el (gnus-topic-goto-previous-topic): New command and + keystroke. + (gnus-topic-goto-next-topic): Ditto. + + * gnus.el (gnus-summary-line-format): Changed default. + + * nnmail.el (nnmail-extra-headers): Change default. + + * gnus-sum.el (gnus-extra-headers): Change default. + + * message.el (message-news-other-window): Changed "news" to + "posting". + (message-news-other-frame): Ditto. + (message-do-send-housekeeping): Ditto. + + * gnus-sum.el (gnus-summary-maybe-hide-threads): Use predicate + function. + (gnus-article-unread-p): New function. + (gnus-article-unseen-p): New function. + (gnus-dead-summary-mode-map): Typo. + + * gnus-util.el (gnus-make-predicate): New function. + (gnus-make-predicate-1): New function. + + * gnus-sum.el: New function. + (gnus-map-articles): New function. + + * gnus-art.el (gnus-treat-fold-headers): New variable. + (gnus-article-treat-fold-headers): New command and keystroke. + + * gnus-sum.el (gnus-dead-summary-mode-map): Clean up. + (gnus-dead-summary-mode-map): Bind q to bury-buffer. + +2002-01-01 ShengHuo ZHU + + * message.el (message-fcc-externalize-attachments): New variable. + (message-do-fcc): Use it. + + * gnus-msg.el (gnus-gcc-externalize-attachments): New variable. + (gnus-inews-do-gcc): Use it. + + * mml.el (mml-tweak-sexp-alist): New variable. + (mml-externalize-attachments): New variable. + (mml-tweak-part): Use mml-tweak-sexp-alist. + (mml-tweak-externalize-attachments): New function. + +2002-01-01 Steve Youngs + + * gnus-xmas.el (gnus-xmas-article-display-xface): Uncomment + 'set-glyph-face' so x-face back/foreground can be set. + +2001-12-31 ShengHuo ZHU + + * message.el (message-fix-before-sending): Fix a typo. + +2002-01-01 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-treat-smiley): Renamed command. + (gnus-article-remove-images): New command and keystroke. + + * gnus-sum.el (gnus-summary-toggle-smiley): Removed. + + * smiley-ems.el (gnus-smiley-display): Removed. + + * gnus.el (gnus-version-number): Update version. + + * message.el (message-text-with-property): Renamed and moved + here. + (message-fix-before-sending): Highlight invisible text and place + point there. + +2002-01-01 02:32:53 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.04 is released. + +2002-01-01 Lars Magne Ingebrigtsen + + * gnus-delay.el (gnus-delay-send-queue): Renamed. + + * gnus-art.el (gnus-ignored-headers): More headers, + + * ietf-drums.el (ietf-drums-parse-addresses): Use `error' instead + of `scan-error', since XEmacs doesn't seem to support that. + +2001-12-31 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-best-unread-article): Take a prefix + arg. + (gnus-summary-best-unread-subject): Ditto. + (gnus-summary-best-unread-subject): No, don't. + (gnus-summary-better-unread-subject): New command. + + * gnus-xmas.el (gnus-xmas-put-image): Insert the string itself. + + * lpath.el ((featurep 'xemacs)): fbind url function. + + * gnus-xmas.el (gnus-xmas-article-display-xface): Use data, not + buffer. + (gnus-xmas-remove-image): Implementation that does something. + (gnus-xmas-article-display-xface): Mark images properly. + + * gnus-art.el (gnus-mime-print-part): Use mm-temp-directory. + +2001-12-31 Florian Weimer + + * gnus.el (gnus): Warn if trying to run Gnus un-byte-compiled. + +2001-12-31 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-line-format): Added %O to the default + value. + + * gnus-util.el (gnus-text-with-property): The smallest point is + point-min. + + * smiley-ems.el (smiley-region): Return images. + (gnus-smiley-display): Allow toggling. + (smiley-region): Use text properties, not overlays. + + * gnus-xmas.el (gnus-xmas-remove-image): New function, not + implemented yet. + + * smiley-ems.el (smiley-update-cache): Check for valid types. + + * gnus-art.el (gnus-with-article-buffer): New macro. + + * gnus-picon.el (gnus-picon-transform-newsgroups): Keep the + strings as well as the glyphs. + (gnus-picon-transform-address): Ditto. + (gnus-picon-insert-glyph): Ditto. + (gnus-picon-transform-newsgroups): Toggle. + (gnus-picon-transform-address): Toggle. + + * gnus-ems.el (gnus-remove-image): New function. + (gnus-put-image): Take an optional string. + + * gnus-util.el (gnus-text-with-property): New function. + + * gnus-art.el (gnus-delete-images): New function. + + * gnus-ems.el (gnus-article-display-xface): Mark and store image. + + * gnus-art.el (gnus-article-wash-status-entry): Renamed. + (gnus-article-wash-status): Use it. + (gnus-signature-toggle): Clean up. + (gnus-add-wash-status): New function. + (gnus-delete-wash-status): New function. + (gnus-article-hide-text-type): Use them throughout. + (gnus-add-image): New function. + + * gnus-ems.el (gnus-article-display-xface): Use new interface. + + * gnus-xmas.el (gnus-xmas-article-display-xface): Use new + interface. + + * gnus-art.el (article-display-x-face): Cleaned up. + + * rfc2047.el (rfc2047-field-value): New function. + + * mail-parse.el (mail-header-field-value): New alias. + + * gnus-art.el (gnus-mime-print-part): Fix typos. + + * smiley-ems.el (gnus-smiley-file-types): New variable. + (smiley-update-cache): Use it. + (smiley-regexp-alist): Suffix-less smiley names. + (smiley-regexp-alist): Added more smileys. + + * gnus-sum.el (gnus-print-buffer): Made into own function. + (gnus-summary-print-article): Use it. + + * mailcap.el (mailcap-mime-info): Actually return the bit that we + looked for when REQUEST is a string. + + * gnus-art.el (gnus-mime-button-commands): Add printing + keystroke. + (gnus-mime-copy-part): Doc fix. + (gnus-mime-print-part): New command. + +2001-12-31 Simon Josefsson + + * imap.el (imap-parse-fetch): Notice empty flags responses. From + Nic Ferrier . + +2001-12-30 ShengHuo ZHU + + * gnus-picon.el (gnus-treat-from-picon): Autoload. + (picon): Fix doc. + + * gnus-win.el (gnus-window-to-buffer): gnus-picon-buffer-name no + longer exists. Remove those codes. + * gnus.el (gnus-use-picons): Ditto. + +2001-12-30 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-treat-fold-newsgroups): Don't + infloop. + + * gnus-sum.el (t): New `W D' map. + + * gnus-art.el (gnus-treat-fold-newsgroups): New variable. + (gnus-article-treat-body-boundary): Clean up. + (gnus-body-boundary-face): Removed. + (gnus-article-goto-header): Moved here. + (gnus-article-goto-header): Allow better regexps. + (gnus-article-treat-fold-newsgroups): New command. + + * gnus-sum.el (gnus-summary-move-article): We have to select an + article to give `gnus-read-move-group-name' an opportunity to + suggest an appropriate default. + + * rfc2047.el (rfc2047-fold-line): New function. + (rfc2047-unfold-line): Ditto. + (rfc2047-fold-region): Don't fold just after the header name. + + * mail-parse.el (mail-header-fold-line): New alias. + (mail-header-unfold-line): Ditto. + + * gnus-art.el (gnus-body-boundary-face): Renamed. + (gnus-article-treat-body-boundary): Use it. + (gnus-article-treat-body-boundary): Use an invisible header and a + line of underline characters. + +2001-12-30 ShengHuo ZHU + + * ietf-drums.el (ietf-drums-parse-addresses): Recover from errors. + + * gnus-picon.el (gnus-picon-transform-address): Skip bad addresses. + (gnus-picon-split-address): New function. + (gnus-picon-find-face): Use it. + (gnus-picon-transform-address): Use it. Set first to t for each + address. + + * gnus-art.el (gnus-with-article-headers): Move to here. Define + the macro then use it. + (gnus-treatment-function-alist): Treat picons earlier. + +2001-12-30 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-body-separator-face): New variable. + (gnus-article-treat-body-boundary): Use a blank, colored line. + + * gnus-picon.el (gnus-picon-find-face): Look into misc/MISC as + well. + + * gnus-art.el (gnus-treat-body-boundary): New variable. + (gnus-article-treat-unfold-headers): Use helper macro. + (gnus-article-treat-body-boundary): New command. + + * gnus.el (gnus-logo-color-style): Change the default color. + (gnus-splash-face): Gray, gray. + + * gnus-xmas.el (gnus-xmas-group-startup-message): Use general + colors. + + * gnus.el (gnus-logo-color-alist): Moved here and renamed. + (gnus-logo-color-style): Ditto. + (gnus-logo-colors): Ditto. + + * gnus-picon.el (gnus-picon-create-glyph): Cache glyphs. + + * gnus-art.el (gnus-treat-newsgroups-picon): New variable. + + * gnus-picon.el (gnus-treat-newsgroups-picon): New function. + (gnus-picon-transform-newsgroups): New function. + + * ietf-drums.el (ietf-drums-parse-addresses): Accept a nil + string. + + * gnus-picon.el (gnus-treat-mail-picon): Renamed. + + * gnus-art.el (gnus-treat-cc-picon): New variable. + (gnus-treat-mail-picon): Renamed. + + * gnus-picon.el: New implementation. + (gnus-picon-find-face): Renamed. + (gnus-treat-from-picon): Use it. + (gnus-picon-transform-address): Renamed. + (gnus-treat-from-picon): Use it. + (gnus-picon-create-glyph): Renamed. + (gnus-picon-transform-address): Use it. + (gnus-treat-cc-picon): New command. + + * mm-decode.el (mm-create-image-xemacs): Separated out into + function. + (mm-get-image): Use it. + + * gnus-art.el (gnus-treat-display-picons): Simplify. + (gnus-treat-from-picon): Renamed. + + * gnus-ems.el (gnus-create-image): New function. + (gnus-put-image): New function. + + * gnus-art.el (gnus-article-treat-unfold-headers): Doc fix. + (gnus-with-article-headers): New macro. + (gnus-article-goto-header): New function. + + * gnus-xmas.el (gnus-image-type-available-p): New function. + + * gnus-ems.el (gnus-image-type-available-p): New function. + +2001-12-30 ShengHuo ZHU + + * nnrss.el (nnrss-check-group): Find the correct tag, because + xml.el is changed. + +2001-12-30 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-treat-unfold-headers): Only fold when + lines are shorter than the window width. + (gnus-ignored-headers): More headers. + +2001-12-29 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-treat-unfold-lines): New variable. + (gnus-treat-unfold-headers): Renamed. + (gnus-article-treat-unfold-headers): New command and keystroke. + + * rfc2047.el (rfc2047-encode-message-header): Clean up. + + * gnus-int.el (gnus-open-server): Mark quit-ed server as denied. + +2001-12-29 ShengHuo ZHU + + * sha1-el.el (sha1-use-external): New variable. + (sha1-region): Use it. + (sha1-string): Ditto. + + * dgnushack.el (dgnushack-compile): Compile gnus-picon for Emacs. + * gnus-picon.el: Less warnings when compile. + +2001-12-29 Lars Magne Ingebrigtsen + + * gnus-picon.el (gnus-picons-news-directories): Removed obsolete + alias. + (gnus-picons-database): Default to list. + (gnus-picons-lookup-internal): Use it. + + * nnmail.el (nnmail-article-group): Default nnmail-split-methods + to "bogus". + + * gnus-win.el (gnus-configure-windows-hook): New hook. + +2001-12-29 Sascha L,A|(Bdecke + + * gnus-win.el (gnus-configure-windows): Minimize tree buffer. + +2001-12-29 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-update-marks): Don't uncompress the seen + lists. + (gnus-select-newsgroup): Don't append; push. + (gnus-adjust-marked-articles): Remove obsolete ranges from + `seen'. + (gnus-update-marks): Clean up. + (gnus-select-newsgroup): Don't stomp gnus-newsgroup-seen. + +2001-12-29 Frank Schmitt + + * gnus-sum.el (gnus-summary-limit-to-age): Allow negative days. + +2001-12-29 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-auto-select-subject): New variable. + (gnus-summary-best-unread-subject): New function. + (gnus-summary-best-unread-article): Use it. + (gnus-summary-first-unseen-subject): New function and command. + + * gnus-art.el (gnus-treatment-function-alist): Emphasize after + other treatments. + + * gnus-util.el (gnus-put-overlay-excluding-newlines): New + function. + + * gnus-art.el (gnus-article-show-hidden-text): Remove the type + from the list of hidden types. + + * mm-view.el (mm-inline-text): Ditto. + (mm-inline-text): Ditto. + (mm-w3-prepare-buffer): Ditto. + + * gnus-art.el (article-wash-html): Inhibit more remote fetching. + +2001-12-29 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-ignored-headers): Added more headers. + +2001-12-29 Jesper Harder + + * gnus-srvr.el (gnus-browse-foreign-server): Compute the prefix + once. + +2001-12-29 Lars Magne Ingebrigtsen + + * gnus-srvr.el (gnus-server-browse-in-group-buffer): Doc fix. + +2001-12-28 Simon Josefsson + + * gnus-srvr.el (gnus-browse-foreign-server): Fix typo. From + Jesper Harder . + +2001-12-27 Simon Josefsson + + * gnus-sum.el (gnus-select-newsgroup): Make + `gnus-newsgroup-unseen' sorted. Make `gnus-newsgroup-unseen' + contain all articles (instead of none) when no seen marks have + been set for the group. + (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 + + * mm-util.el (mm-iso-8859-x-to-15-region): Use + insert-before-markers. + From Jesper Harder + +2001-12-26 Paul Jarc + + * nnmaildir.el (nnmaildir-save-mail): create the destination + groups if they do not exist. + +2001-12-26 Katsumi Yamaoka + + * canlock.el (canlock-sha1-with-openssl): Remove unused variable. + +2001-12-22 22:00:00 ShengHuo ZHU + + * gnus-group.el (gnus-group-read-ephemeral-group): Call + gnus-group-real-name. + + * gnus-sum.el (gnus-decode-encoded-word-methods): Backslash paren. + (gnus-newsgroup-variables): Ditto. + + * gnus.el (gnus-group-prefixed-name): If group name is prefixed, + return it. + +2001-12-21 Paul Jarc + + * gnus.el (gnus-valid-select-methods): Include nnmaildir. + * nnmaildir.el (top-level): Add commentary. + (nnmaildir-version): Indicate that nnmaildir is now a standard + part of Gnus, not separately released. + +2001-12-21 08:00:00 ShengHuo ZHU + + * 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 + + * nnmaildir.el: Copyright changes. Require cl only at compile time. + +2001-12-20 Simon Josefsson + + * nnimap.el (top-level): Don't require cl. Suggested by ShengHuo + ZHU . + (nnimap-close-group): Don't quote KEYLIST items. Suggested by + Brian P Templeton . + +2001-12-19 17:00:00 ShengHuo ZHU + + * nnmaildir.el: New file. + From Paul Jarc . + +2001-12-19 16:00:00 ShengHuo ZHU + + * nndoc.el (nndoc-type-alist): Move forward to the end. + +2001-12-19 Katsumi Yamaoka + + * gnus.el (gnus-find-subscribed-addresses): Replace `mapc' with + `dolist'. + +2001-12-19 01:00:00 ShengHuo ZHU + + * gnus-win.el (gnus-frames-on-display-list): New function. + (gnus-get-buffer-window): Use it. + +2001-12-19 00:00:00 ShengHuo ZHU + + * nnwarchive.el (nnwarchive-mail-archive-xover): Fix the regexp. + +2001-12-18 11:00:00 ShengHuo ZHU + + * gnus-win.el (gnus-get-buffer-window): Use gnus-delete-if. + +2001-12-18 11:00:00 ShengHuo ZHU + From Harald Meland + + * gnus-win.el (gnus-get-buffer-window): New function. + (gnus-all-windows-visible-p): Use it. + + * gnus-util.el (gnus-horizontal-recenter) + (gnus-horizontal-recenter, gnus-horizontal-recenter) + (gnus-horizontal-recenter, gnus-set-window-start): Use it. + + * gnus-score.el (gnus-score-insert-help): Use it. + + * gnus-salt.el (gnus-tree-recenter, gnus-generate-tree) + (gnus-generate-tree, gnus-highlight-selected-tree) + (gnus-highlight-selected-tree, gnus-tree-highlight-article): Use + it. + + * gnus-art.el (gnus-article-set-window-start) + (gnus-mm-display-part, gnus-request-article-this-buffer) + (gnus-button-next-page, gnus-button-prev-page) + (gnus-article-button-next-page, gnus-article-button-prev-page): + Use it. + +2001-12-18 Josh Huber + + * ChangeLog, ChangeLog.1, nnwfm.el, smiley.el: + * gnus-cite.el, gnus-delay.el, gnus-spec.el, message.el: + * mml1991.el, nnultimate.el: Removed buffer-file-coding-system tag. + +2001-12-18 01:00:00 ShengHuo ZHU + + * ChangeLog, ChangeLog.1, nnwfm.el, gnus-smiley.el: + * gnus-cite.el, gnus-delay.el, gnus-spec.el, message.el: + * mml1991.el, nnultimate.el: Add `coding'. + +2001-12-17 Josh Huber + + * ChangeLog: changed coding to buffer-file-coding-system + * ChangeLog.1: same + * nnwfm.el: same + * gnus-smiley.el: same + * gnus-cite.el: moved -*- magic cookie -*- to Local Variables + * gnus-delay.el: same + * gnus-spec.el: same + * message.el: same + * mml1991.el: same + * nnultimate.el: same + +2001-12-16 Simon Josefsson + Inspired by code by Dirk Meyer . + + * gnus-sum.el (gnus-summary-muttprint-program): New variable. + (gnus-summary-save-map): Add muttprint. + (gnus-summary-make-menu-bar): Ditto. + (gnus-summary-muttprint): New function. + + * gnus-art.el (gnus-summary-pipe-to-muttprint): New function. + +2001-12-14 11:00:00 ShengHuo ZHU + + * uudecode.el (uudecode-decode-region-internal): Speedup by using + temporary list instead of buffer. + + * mm-url.el (executable-find): autoload. + +2001-12-12 Pavel Jan,Am(Bk + + * gnus-mlspl.el (gnus-group-split-fancy): Doc fix (add reference + to variable, follow doc-string conventions). + +2001-12-13 Josh Huber + + * gnus-cus.el (gnus-extra-topic-parameters): added topic parameter + subscribe-level + * gnus-topic.el (gnus-subscribe-topics): use it. + +2001-12-13 22:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-summary-mail-forward): Forward all marked + messages. (A small patch with indentation) + From Sean Neakums . + + * gnus-uu.el (gnus-uu-grab-articles): Set gnus-current-article to + nil after shooting down the gnus-original-article-buffer. + +2001-12-13 20:00:00 ShengHuo ZHU + + * uudecode.el (uudecode-use-external): New variable. + (uudecode-decode-region): Automatically detect external program. + + * binhex.el (binhex-use-external): New variable. + (binhex-decode-region-internal): New function. + (binhex-decode-region): Automatically detect external program. + + * mm-uu.el (mm-uu-decode-function,mm-uu-binhex-decode-function): + Use them. + +2001-12-12 Simon Josefsson + + * nnvirtual.el (nnvirtual-always-rescan) + (nnvirtual-component-regexp): Fix doc. + + * nnoo.el (defvoo): Add doc to defvoo variables. + + * nnml.el (nnml-directory, nnml-active-file) + (nnml-newsgroups-file, nnml-get-new-mail, nnml-nov-is-evil) + (nnml-marks-is-evil, nnml-filenames-are-evil) + (nnml-prepare-save-mail-hook, nnml-inhibit-expiry): Fix doc. + + * nnmh.el (nnmh-directory, nnmh-get-new-mail) + (nnmh-prepare-save-mail-hook, nnmh-be-safe): Fix doc. + (nnmh-possibly-change-directory): Use `nnheader-report' instead of + `error'. + + * nnmbox.el (nnmbox-mbox-file, nnmbox-active-file) + (nnmbox-get-new-mail, nnmbox-prepare-save-mail-hook): + + * nnfolder.el (nnfolder-directory, nnfolder-active-file) + (nnfolder-newsgroups-file, nnfolder-get-new-mail) + (nnfolder-save-buffer-hook, nnfolder-inhibit-expiry) + (nnfolder-nov-is-evil, nnfolder-marks-is-evil): Fix doc. + + * nnbabyl.el (nnbabyl-mbox-file, nnbabyl-active-file) + (nnbabyl-get-new-mail, nnbabyl-prepare-save-mail-hook): Fix doc. + + * imap.el, nnimap.el: Fix indentation. + + * gnus-sieve.el (gnus-sieve-article-add-rule): Autoload it. + +2001-12-12 Didier Verna + + * gnus-msg.el (gnus-group-news): New function. + * gnus-group.el (gnus-group-mode-map): bind it to `i'. + * gnus-group.el (gnus-group-make-menu-bar): add a menu item for it. + * gnus-salt.el (gnus-carpal-group-buffer-buttons): add a button + for it. + * gnus-msg.el (gnus-summary-news-other-window): New function. + * gnus-msg.el ((gnus-summary-send-map "S" gnus-summary-mode-map)): + bind it to `i'. + * gnus-sum.el (gnus-summary-mode-map): bind it to `i'. + * gnus-sum.el (gnus-summary-make-menu-bar): add a menu item for it. + * gnus-salt.el (gnus-carpal-summary-buffer-buttons): add a button + for it (called with a prefix). + * gnus-msg.el (gnus-configure-posting-styles): add an optional + group-name argument. + * gnus-msg.el (gnus-setup-message): use it. + +2001-12-12 00:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-show-article): Fix doc. + +2001-12-10 17:00:00 ShengHuo ZHU + + * mml.el (mime-to-mml): Remove Content-Disposition too. + +2001-12-09 08:00:00 ShengHuo ZHU + + * 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 + + * nnmail.el (nnmail-fancy-expiry-targets): New variable. + (nnmail-fancy-expiry-target): Use it. + Suggestions from Simon Josefsson . + +2001-12-07 14:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-show-article): Recount lines if not exist. + +2001-12-07 10:00:00 ShengHuo ZHU + + * nnwfm.el (nnwfm-create-mapping): Use gnus-url-unhex-string. + + * gnus-util.el (gnus-url-unhex-string): Move here. + +2001-12-07 09:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-decode-entities-unibyte-string): Use + mm-url-decode-entities-nbsp. + + * nnlistserv.el, nnultimate.el, nnwarchive.el, nnweb.el: + * webmail.el, nnwfm.el: Use mm-url. + + * mm-url.el (mm-url-fetch-form): Move from nnweb. + (mm-url-remove-markup): Move from nnweb. + (mm-url-fetch-simple): Move from webmail. + + * nnslashdot.el (nnslashdot-request-post): Use mm-url-fetch-form. + +2001-12-07 01:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-print-truncate-and-quote): New function. + (gnus-summary-print-article): Use it. + + * gnus-util.el (gnus-replace-in-string): Typo. + +2001-12-06 10:00:00 ShengHuo ZHU + + * nnweb.el (nnweb-replace-in-string): Removed. + + * gnus-util.el (gnus-replace-in-string): New function. + (gnus-mode-string-quote): Use it. + + * nnrss.el (nnrss-format-string): Use gnus-replace-in-string. + * nnwfm.el (nnwfm-create-mapping): Ditto. + +2001-12-06 01:00:00 ShengHuo ZHU + + * dgnushack.el (dgnushack-compile): nnrss.el and + nnslashdot.el don't depend on nnweb, url, w3. + + * nnrss.el: Use mm-url. + +2001-12-06 00:00:00 ShengHuo ZHU + + * mm-url.el (mm-url-insert-file-contents): Support file:. + +2001-12-05 14:00:00 ShengHuo ZHU + + * mm-view.el: Lower case for the description line. Sync from the + Emacs CVS. + +2001-12-05 12:00:00 ShengHuo ZHU + + * gnus-group.el (gnus-group-find-new-groups): Fix doc. + From: Stefan Monnier + +2001-12-05 Katsumi Yamaoka + + * mm-view.wl (mm-inline-text): Decode a charset-encoded rich text. + +2001-12-04 08:00:00 ShengHuo ZHU + + * mm-url.el: Require executable. + Suggested by Katsumi Yamaoka . + +2001-12-03 11:00:00 ShengHuo ZHU + + * pop3.el (pop3-munge-message-separator): Only use valid date. + Trivial patch from Michael Welsh Duggan . + + * Makefile.in: gnus-load.elc may not be generated. + +2001-12-03 09:00:00 ShengHuo ZHU + + * mm-url.el: New file. + * nnslashdot.el: Use it. + * mm-extern.el (mm-extern-url): Use it. + +2001-12-01 15:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-save-article): Nix + gnus-display-mime-function and gnus-article-prepare-hook. + + * gnus-spec.el (gnus-parse-complex-format): Properly handle %C at + the beginning of lines. + (gnus-complex-form-to-spec): Ditto. + +2001-12-01 08:00:00 ShengHuo ZHU + + * message.el (message-make-mft): Fix the m-s-a-file regexp. + From Paul Jarc . + +2001-11-30 21:00:00 ShengHuo ZHU + + * message.el: New variable message-subscribed-address-file; + use it in message-make-mft. From Paul Jarc . + +2001-11-30 12:00:00 ShengHuo ZHU + + * message.el (message-tab-body-function): Set to nil. + (message-tab): Use text-mode-map or global-map. + Suggested by Kai Gro,b_(Bjohann . + +2001-11-30 Simon Josefsson + + * gnus-agent.el (gnus-agent-fetch-headers): Use gnus-range-add + instead of gnus-union, for speed. Suggested by Christoph Conrad + . + (gnus-agent-fetch-group-1): Add verbose message. + +2001-11-29 12:00:00 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-write-active): Make sure sym is a cons + of integers. + +2001-11-29 Kai Gro,b_(Bjohann + + * message.el (message-newgroups-header-regexp) + (message-completion-alist, message-tab-body-function): Use + defcustom rather than defvar. + (message-tab): Mention `message-tab-body-function' in doc. + Suggested by Karl Eichwalder. + +2001-11-28 16:00:00 ShengHuo ZHU + + * gnus-uu.el (gnus-uu-save-article): Use #part instead of #mml. + +2001-11-28 12:00:00 ShengHuo ZHU + + * nnheader.el (nnheader-find-nov-line): Don't use macro + gnus-delete-line. + + * gnus-group.el (gnus-group-name-decode): Defun instead of defsubst. + (gnus-group-name-charset): Ditto. + + * gnus-util.el (gnus-buffer-live-p): Ditto. + +2001-11-28 11:00:00 ShengHuo ZHU + + * sieve-manage.el (sieve-manage-stream-alist): Backslash before + open parenthesis in doc. + (sieve-manage-authenticator-alist): Typo in doc. + * imap.el (imap-authenticator-alist): Typo in doc. + (imap-stream-alist): Backslash. + + * gnus-sum.el (gnus-summary-limit-to-author): Missing arguments. + Thanks to david.goldberg6@verizon.net (David S. Goldberg) + +2001-11-27 14:00:00 ShengHuo ZHU + + * gnus-topic.el (gnus-topic-mode): Add LOCAL for add-hook. + + * message.el (message-mode): make-local-hook is harmless in Emacs 21. + + * gnus-msg.el (gnus-configure-posting-styles): use + make-local-hook. Add LOCAL for add-hook. + +2001-11-27 Per Abrahamsen + + * message.el (message-mode): Use `make-local-hook' unless + obsolete. + Patch by Katsumi Yamaoka . + +2001-11-26 Katsumi Yamaoka + + * canlock.el: Remove sha1.el and base64.el stuff. + +2001-11-26 Didier Verna + + * nnmbox.el (nnmbox-create-mbox): create the mbox file directory + if needed. + +2001-11-21 Katsumi Yamaoka + + * message.el (message-tamago-not-in-use-p): New function. + (message-strip-forbidden-properties): Use it. + +2001-11-26 Didier Verna + + * gnus-start.el (gnus-check-first-time-used): only check for + existence of .el[d] files. + +2001-11-25 15:00:00 ShengHuo ZHU + + * mm-util.el (mm-coding-system-priorities): Add backslash in the doc. + + * message.el (message-setup-1): Clean up mc-*. + +2001-11-25 09:00:00 ShengHuo ZHU + + * gnus-util.el (gnus-directory-sep-char-regexp): New variable. + * gnus-score.el (gnus-score-find-bnews): Use it. + + * gnus-sum.el (gnus-summary-limit-to-subject): An exclusion version. + (gnus-summary-limit-to-author): Ditto. + (gnus-summary-limit-to-extra): Ditto. + (gnus-summary-find-matching): Support not-matching argument. + +2001-11-25 Kai Gro,b_(Bjohann + + * message.el (message-wash-subject): Use `insert' rather than + `insert-string', which is deprecated. + +2001-11-24 Simon Josefsson + + * mm-encode.el (mm-encode-content-transfer-encoding): Fix error + message. (Gnus does not "default" to using 8bit for the message, + it default to use 8bit encoding and the user-supplied CTE + value. Calling this behaviour "treating it as 8bit" is perhaps + better.) + + * mm-bodies.el (mm-body-encoding): Intern encoding if needed + (compare mm-charset-to-coding-system). + +2001-11-23 02:00:00 ShengHuo ZHU + + * canlock.el (canlock-sha1-with-openssl): Use unibyte + buffer. Correctly decode hex. + +2001-11-21 01:00:00 ShengHuo ZHU + + * gnus-agent.el (gnus-category-insert-line): Convert category + names to strings. + +2001-11-20 21:00:00 ShengHuo ZHU + + * message.el (sha1): eval-and-compile. + +2001-11-20 Simon Josefsson + + * 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). + +2001-11-20 09:00:00 ShengHuo ZHU + + * mm-util.el (mm-coding-system-priorities): New variable. + (mm-sort-coding-systems-predicate): New function. + (mm-find-mime-charset-region): Resort coding systems if needed. + Suggested by Katsumi Yamaoka . + +2001-11-20 Didier Verna + + * gnus-group.el (gnus-group-make-help-group): new optional + argument to control the error behavior. + * gnus-start.el (gnus-check-first-time-used): use it to avoid + erroring. + +2001-11-19 Simon Josefsson + + * message.el (message-mode-map): Use C-c C-f C-i for Importance: + instead of C-c C-u. Suggested by Per Abrahamsen + . + +2001-11-18 08:00:00 ShengHuo ZHU + + * nnfolder.el (nnfolder-read-folder): Use group instead of + nnfolder-current-group. + Suggested by K,Ba(Broly L,Bu(Brentey . + +2001-11-17 Simon Josefsson + + * message.el (message-send): Ask user if Fcc/Gcc should be + performed when no other sender was specified. + Suggested by prj@po.cwru.edu (Paul Jarc). + +2001-11-17 Simon Josefsson + + * message.el (message-mode, message-mode-map): Use C-c C-u for + Importance: instead of C-c C-p (used by SC). + +2001-11-16 Simon Josefsson + + * message.el (message-insert-importance-high) + (message-insert-importance-low): Save point. + + * mail-source.el (mail-source-fetch-imap): Fix BODY.PEEK return + value. + +2001-11-16 Per Abrahamsen + + * message.el (message-strip-special-text-properties): New option. + (message-strip-forbidden-properties): Obey it. + +2001-11-14 Sam Steingold + + * gnus-score.el: Fixed some doc strings to properly quote symbols. + +2001-11-15 Simon Josefsson + + Support "Importance:" header in Message. + + * message.el (message-mode-map): Bind C-c C-p to + `message-insert-or-toggle-importance' + (message-mode-menu): Add message-insert-importance-{high,low}. + (message-insert-importance-high, message-insert-importance-low) + (message-insert-or-toggle-importance): New functions. + (message-tool-bar-map): Add {un,}important. + (message-mode): Doc fix. + +2001-11-15 Simon Josefsson + + * message.el (message-tool-bar-map): Fix attach toolbar tooltip. + + * mml.el (mml-menu): Fix toolbar tooltip. + +2001-11-15 14:00:00 ShengHuo ZHU + + * nnfolder.el (nnfolder-save-marks): gnus-prin1 takes one argument. + * nnml.el (nnml-save-marks): Ditto. + + * gnus-sum.el (gnus-newsgroup-variables): Fix doc. + +2001-11-15 Simon Josefsson + + * nnml.el (nnml-save-marks): + * nnfolder.el (nnfolder-save-marks): Use `gnus-prin1'. + Suggested by Istvan Marko . + +2001-11-15 Per Abrahamsen + + * gnus-art.el (gnus-article-wash-status-strings): Use + `copy-sequence', not `copy-seq'. + +2001-11-15 Per Abrahamsen + + * gnus-art.el (gnus-article-wash-status-strings): New constant. + (gnus-gnus-article-wash-status-entry): New function. + (gnus-article-wash-status): Use it. + +2001-11-13 10:00:00 ShengHuo ZHU + + * mml1991.el: Add coding header. + +2001-11-12 Simon Josefsson + + * mml1991.el (mml1991-use, mml1991-function-alist): New variables. + (mml1991-gpg-sign, mml1991-gpg-encrypt): Renamed, from + `mml1991-sign' and `mml1991-encrypt'. + (mml1991-encrypt, mml1991-sign): New glue functions. + (mml1991-mailcrypt-sign, mml1991-mailcrypt-encrypt): New functions. + + * mml.el (mml-mode-map): `C-c RET o' map for PGP. + (mml-menu): Add PGP to menu. + + * mml-sec.el (top-level): Require mml1991. Don't require smime. + (mml-sign-alist, mml-encrypt-alist): Add "pgp". + (mml-pgp-sign-buffer, mml-pgp-encrypt-buffer) + (mml-secure-sign-pgp, mml-secure-encrypt-pgp): New glue functions. + + * mml2015.el: Mention RFC 3156. + + * mml1991.el: New file. From Sascha L,A|(Bdecke . + +2001-11-12 13:00:00 ShengHuo ZHU + + * gnus-start.el (gnus-auto-subscribed-groups): Use ^nnml. + + * gnus-sum.el (gnus-summary-move-article): Use number-to-string. + From + +2001-11-11 Simon Josefsson + + * message.el (top-level): Autoload sha1. + (message-canlock-generate): Use sha1 instead of md5 (sha1 used by + canlock, no need to require two different hash algs). Suggested + by Ferenc Wagner . + +2001-11-09 Simon Josefsson + + * gnus.el (gnus-local-domain): Fix doc. From Pavel Jan,Am(Bk + . + +2001-11-09 Kai Gro,b_(Bjohann + + * message.el (message-point-in-header-p): New function. + (message-do-auto-fill): Use it. + (message-beginning-of-line): New function. Goes to beginning of + header value (i.e., end of header name), or to beginning of line + if already at beginning of value. Behaves like + `beginning-of-line' when in message body. + (message-mode-map): Bind it. + +2001-11-08 Simon Josefsson + + * gnus-msg.el (gnus-posting-styles): Add doc. + +2001-11-07 Simon Josefsson + + * gnus-sieve.el (gnus-sieve-generate): Don't invoke sieve-mode. + + * sieve-mode.el (sieve-control-commands-face) + (sieve-control-commands-face, sieve-action-commands-face) + (sieve-test-commands-face, sieve-tagged-arguments-face): New + faces. + (sieve-font-lock-keywords): Use them. + (sieve-mode): Only set font-lock-defaults in emacs. + + * gnus-art.el (gnus-default-article-saver): Add + gnus-summary-save-body-in-file. + (gnus-summary-write-to-file): Fix doc. + +2001-11-07 Simon Josefsson + + * gnus-art.el (gnus-treat-highlight-signature): Add cross + reference to the correct chapter in the manual. + + * mml.el (mml-mode): Add cross reference to Emacs MIME manual. + Suggested by "Golubev I. N." . + +2001-11-07 06:00:00 ShengHuo ZHU + + * mml.el (mml-preview): Bind mail-header-separator. + +2001-11-07 Katsumi Yamaoka + + * message.el: Always require canlock. + (message-ignored-supersedes-headers): Include Cancel-Lock and + Cancel-Key. + (message-insert-canlock): Don't require canlock. + (message-cancel-news): Don't check whether canlock is available. + (message-supersede): Support cancel-locks. + + * gnus-art.el: Don't autoload canlock. + +2001-11-06 18:00:00 ShengHuo ZHU + + * mail-source.el (mail-source-fetch-imap): ASYNC param. + From: + +2001-11-06 10:00:00 ShengHuo ZHU + + * many files: Fix copyright lines. + +2001-11-05 07:00:00 ShengHuo ZHU + + * mml.el (mml-generate-mime-1): Use mm-with-unibyte-current-buffer. + Suggested by Dave Love . + +2001-11-04 10:00:00 ShengHuo ZHU + + * message.el (message-kill-buffer): Remove auto-save file after + confirm. + + * message.el (message-send-mail): Call message-generate-headers + once. Suggested by Matt Armstrong . + + * gnus-topic.el (gnus-topic-rename): Initial-input. + Suggested by Katsuhiro Hermit Endo . + +2001-11-03 Per Abrahamsen + + * message.el (message-forbidden-properties): New constant. + (message-strip-forbidden-properties): New function. + (message-mode): Activate it. + +2001-11-02 17:00:00 ShengHuo ZHU + + * mm-util.el (mm-iso-8859-15-compatible): Fix doc. + (mm-hack-charsets): Fix doc. + +2001-11-02 Simon Josefsson + + * gnus-int.el (gnus-check-server): Message "...done" when done. + + * imap.el (imap-close): Don't message (imap-send-command-wait + returns if the connection is dropped). + (imap-wait-for-tag): Nix out message only when necessary. + + * gnus-sieve.el (gnus-sieve-script): Use "stop" instead of "elsif" + for non-crossposting. + (gnus-sieve-crosspost): Default to t to be consistent with other + parts of Gnus. + +2001-11-01 18:00:00 ShengHuo ZHU + + * mm-util.el (mm-iso-8859-15-compatible): Add inconvertible chars. + (mm-iso-8859-x-to-15-table): Ditto. + (mm-iso-8859-x-to-15-region): Ditto. + (mm-find-mime-charset-region): Ditto. + +2001-11-01 Simon Josefsson + + * nnimap.el (nnimap-close-asynchronous): New variable. + (nnimap-close-group): Use it. + (nnimap-expunge): Don't use it. + + * imap.el (imap-callbacks): New variable. + (imap-remassoc): Copied from `gnus-remassoc'. + (imap-add-callback): New function. + (imap-mailbox-expunge, imap-mailbox-close): Support asynchronous + behaviour. + (imap-parse-response): Call the callback. + + * message.el (message-insert-canlock): New variable. + (message-canlock-generate, message-canlock-password) + (message-insert-canlock): New functions. + (message-send-news): Call `message-insert-canlock'. + (top-level): Require canlock when compiling. + (message-insert-canlock): Require canlock before we need it. + +2001-11-01 13:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-copy-article-buffer): Copy sequence. + +2001-11-01 12:00:00 ShengHuo ZHU + + * dgnushack.el (dgnushack-make-load): A workaround for + custom-add-loads bug in some versions of XEmacs. + +2001-11-01 10:00:00 ShengHuo ZHU + + * mm-util.el (mm-charset-synonym-alist): Revert (some). + +2001-11-01 09:00:00 ShengHuo ZHU + + * mm-util.el (mm-iso-8859-x-to-15-region): New function. + (mm-hack-charsets): New variable. + (mm-iso-8859-15-compatible): New variable. + (mm-iso-8859-x-to-15-table): New variable. + (mm-find-mime-charset-region): Add parameter hack-charsets. + + * mm-bodies.el (mm-encode-body): Use it. + * mml.el (mml-parse-1): Ditto. + +2001-11-01 Simon Josefsson + + * gnus-group.el (gnus-group-make-menu-bar): Add Sieve. + +2001-11-01 08:00:00 ShengHuo ZHU + + * mm-util.el (mm-charset-to-coding-system): Return nil, if charset + is nil. + +2001-11-01 07:00:00 ShengHuo ZHU + + * smiley-ems.el (smiley-update-cache): Auto detect file type. + + * message.el (message-forward-rmail-make-body): Use + save-window-excursion. + (message-encode-message-body): Search with noerror. + (message-setup-1): Convert compose-mail send-actions to + message-send-actions. + +2001-11-01 Simon Josefsson + + * sieve.el: Don't require easy-mmode. Suggested by Katsumi Yamaoka + . + +2001-10-31 20:00:00 ShengHuo ZHU + + * sieve-manage.el (sieve-string-bytes): No complain. + +2001-11-01 Simon Josefsson + + * gnus-group.el (gnus-group-mode-map): Bind "D u" to + `gnus-sieve-update' and "D g" to `gnus-sieve-generate'. (Functions + has autoload cookies, so no `require' should be necessary.) + + * sieve.el, sieve-mode.el, sieve-manage.el, gnus-sieve.el: New + files. + +2001-10-31 Simon Josefsson + + * gnus-cus.el (gnus-group-parameters): Support integer `display' + parameter. + + * gnus-sum.el (gnus-select-newsgroup): If group parameter + `display' is a number (and C-u wasn't used to enter group), only + fetch that number of articles. + +2001-10-31 Matt Armstrong + + * gnus.el (gnus-find-subscribed-addresses): Doc fix: + not-subscribed -> subscribed. + +2001-10-31 08:00:00 ShengHuo ZHU + From: Josh Huber + + * message.el (message-subscribed-address-functions): New variable. + (message-subscribed-addresses): New variable. + (message-subscribed-regexps): New variable. + (message-goto-mail-followup-to): New function. + (message-send-mail): Add Mail-Followup-To. + (message-make-mft): New function. + + * gnus.el (gnus-find-subscribed-addresses): New function. + +2001-10-31 07:00:00 ShengHuo ZHU + + * mail-source.el (mail-source-fetch): If debug, don't regain signals. + (mail-source-fetch-pop): Ditto. + (mail-source-check-pop): Ditto. + + * gnus-start.el (gnus-read-init-file): Ditto. + (gnus-activate-group): Ditto. + (gnus-read-newsrc-el-file): Ditto. + +2001-10-30 23:00:00 ShengHuo ZHU + + * message.el (message-get-reply-headers): Make sure there is ", ". + + * mm-util.el (mm-mime-mule-charset-alist): Move down and call + mm-coding-system-p. Don't correct it only in XEmacs. + (mm-charset-to-coding-system): Use mm-coding-system-p and + mm-get-coding-system-list. + (mm-emacs-mule, mm-mule4-p): New variables. + (mm-enable-multibyte, mm-disable-multibyte, + mm-enable-multibyte-mule4, mm-disable-multibyte-mule4, + mm-with-unibyte-current-buffer, + mm-with-unibyte-current-buffer-mule4): Use them. + (mm-find-mime-charset-region): Treat iso-2022-jp. + + From Dave Love : + + * mm-util.el (mm-mime-mule-charset-alist): Make it correct by + construction. + (mm-charset-synonym-alist): Remove windows-125[02]. Make other + entries conditional on not having a coding system defined for + them. + (mm-mule-charset-to-mime-charset): Use + find-coding-systems-for-charsets if defined. + (mm-charset-to-coding-system): Don't use + mm-get-coding-system-list. Look in mm-charset-synonym-alist + later. Add last resort search of coding systems. + (mm-enable-multibyte-mule4, mm-disable-multibyte-mule4) + (mm-with-unibyte-current-buffer-mule4): Just treat Mule 5 like + Mule 4. + (mm-find-mime-charset-region): Re-write. + (mm-with-unibyte-current-buffer): Restore buffer as well as + multibyteness. + +2001-10-30 21:00:00 ShengHuo ZHU + + * canlock.el, sha1-el.el, hex-util.el: Move from contrib + directory. Thanks to Katsumi Yamaoka and Shuhei + KOBAYASHI . + +2001-10-30 20:00:00 ShengHuo ZHU + + * gnus-art.el (article-display-x-face): Nix buffer-read-only + again. + + * mml2015.el (mml2015-gpg-verify): Convert to . + +2001-10-30 13:00:00 ShengHuo ZHU + + * gnus-spec.el (gnus-parse-simple-format): Use + buffer-substring-no-properties. + +2001-10-30 Katsumi Yamaoka + + * gnus-art.el (article-verify-cancel-lock): New function. + + * nnheader.el (nntp-process-response): New variable. + (nnheader-init-server-buffer): Make `nntp-process-response' + buffer-local in `nntp-server-buffer'. + + * nntp.el (nntp-prepare-post-hook): New hook. + (nntp-wait-for): Save a server's ID in `nntp-process-response'. + (nntp-async-trigger): Ditto. + (nntp-request-post): Insert a server's ID if there's no Message-ID + header; run `nntp-prepare-post-hook'. + +2001-10-30 04:00:00 ShengHuo ZHU + + * gnus-art.el (article-decode-group-name): Use nnmail-fetch-field + instead. + + * message.el (message-forward-subject-author-subject): Don't use + message-news-p, which widens the buffer. + (message-forward-make-body): New function. + (message-forward): Use it. + (message-insinuate-rmail): New function. + (message-forward-rmail-make-body): New function. + +2001-10-30 02:00:00 ShengHuo ZHU + + * mm-extern.el (mm-extern): Provide it. + + * mm-partial.el (mm-partial): Provide it. + +2001-10-28 16:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-setup-message): Call post-command-hook. + +2001-10-29 Simon Josefsson + + * mml.el (mml-preview): Bind message-this-is-news if it is + news. From Jesper Harder . + +2001-10-28 Simon Josefsson + + * gnus-sum.el (gnus-group-make-articles-read): Inline group. + +2001-10-29 Per Abrahamsen + + * smiley-ems.el (smiley-regexp-alist): Add support for sad and + ironic smilies. + +2001-10-27 Simon Josefsson + + * 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-26 14:00:00 ShengHuo ZHU + + * nnweb.el (nnweb-possibly-change-server): Create nnweb-hashtb if + not available. + (nnweb-request-scan): Nix nnweb-hashtb if ephemeral. + (nnweb-type-definition): Add google as alias of dejanews. + (nnweb-google-parse-1): Forward 1 line. + +2001-10-26 Kai Gro,b_(Bjohann + + * gnus-msg.el (gnus-summary-mail-forward): Doc fix: add pointer to + variable `message-forward-ignored-headers'. + +2001-10-24 Per Abrahamsen + + * gnus.el (gnus-expand-group-parameter): New function. + (gnus-expand-group-parameters): Call it. + (gnus-group-fast-parameter): New function. + (gnus-group-find-parameter): Call it. + +2001-10-23 Per Abrahamsen + + * gnus.el (gnus-news-group-p): Rewrote. Now accepts a header + vector (it didn't before because of a bug). + * gnus-msg.el (gnus-post-news): Use header vector directly, if + available. Before it converted it to an article number. + + This makes followup to news articles with negative numbers in + nnvirtual groups use news instead of mail. + +2001-10-23 Per Abrahamsen + + * gnus.el (post-method): Use `native' instead of `nil'. + + * gnus-msg.el (gnus-post-method): Ditto. + +2001-10-23 Per Abrahamsen + + * gnus.el (gnus-define-group-parameter): Grammar fix. + +2001-10-22 Simon Josefsson + + * gnus-msg.el (gnus-extended-version): Include + system-configuration. + Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Gro,b_(Bjohann). + +2001-10-22 Per Abrahamsen + + * gnus.el (post-method): Customization fix: `native' is not a + valid value. + * gnus-msg.el (gnus-post-method): Doc and customization fix: + `native' is not a valid value. + +2001-10-21 Simon Josefsson + + * nnimap.el (nnimap): Defgroup + (nnimap-strict-function, nnimap-strict-function-match): New + widget, from Per Abrahamsen . + (nnimap-split-crosspost, nnimap-split-inbox) + (nnimap-split-rule, nnimap-split-predicate) + (nnimap-split-predicate): Defcustom. + (nnimap-split-inbox, nnimap-expunge-search-string) + (nnimap-importantize-dormant): Remove "*" from doc. + +2001-10-20 Kai Gro,b_(Bjohann + + * gnus-sum.el (gnus-summary-limit-to-score): Prompt for score if + not supplied via prefix arg. From Lisp, make arg mandatory. + Suggested by Frank Schmitt. + +2001-10-20 Per Abrahamsen + + * message.el (message-do-auto-fill): Avoid calling + 'rfc822-goto-eoh'. + +2001-10-20 Kai Gro,b_(Bjohann + From Paul Jarc . + + * message.el (message-get-reply-headers): Restructure the logic + and add comments. From Paul Jarc . + +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-19 Per Abrahamsen + + * mm-decode.el (mm-default-directory): Fix customize type. + + * message.el (message-setup-fill-variables): Kludge to use + normal-auto-fill-function even if auto fill is already activated. + +2001-10-19 Per Abrahamsen + + * message.el (message-do-auto-fill): New version that does not + rely on text properties, by Simon Josefsson . + (message-setup-1): Removed the `message-field' property. + + * gnus-draft.el (gnus-draft-edit-message): Removed the + `message-field' property. + +2001-10-19 Per Abrahamsen + + * gnus-draft.el (gnus-draft-edit-message): Change `field' to + `message-field'. The `field' property has a special significance in + Emacs 21. + + * message.el (message-send, message-setup-1): Ditto. + +2001-10-18 Simon Josefsson + + * gnus-sum.el (gnus-group-make-articles-read): Call g-r-set-mark + when undoing. + +2001-10-18 Simon Josefsson + From Frank Schmitt + + * gnus-sum.el (gnus-summary-limit-to-display-predicate): Fix typo. + (gnus-summary-make-menu-bar): Ditto. + +2001-10-17 Simon Josefsson + + * 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 + + * 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 + + * message.el (message-check-news-header-syntax): Special case + nnvirtual groups. + + * gnus-sum.el (gnus-summary-respool-default-method): Changed + customize type to `symbol'. + +2001-10-17 12:00:00 ShengHuo ZHU + + * gnus-spec.el (gnus-parse-simple-format): Support extended spec + %&foo;. + (gnus-parse-simple-format): Support user extended spec too. + %u&foo; invokes gnus-user-format-function-foo. + +2001-10-17 11:00:00 ShengHuo ZHU + + * nnml.el (nnml-request-expire-articles): Make sure it is back to + the server. + * nnmbox.el (nnmbox-request-expire-articles): Ditto. + * nnfolder.el (nnfolder-request-expire-articles): Ditto. + * nnbabyl.el (nnbabyl-request-expire-articles): Ditto. + * nndiary.el (nndiary-request-expire-articles): Ditto. + (nndiary-schedule): Defsubst it before use it. + (nndiary-error): eval-and-compile. + +2001-10-17 Per Abrahamsen + + * 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 . + + * message.el (message-setup-fill-variables): Use + `normal-auto-fill-function' instead of `auto-fill-function'. + +2001-10-16 Simon Josefsson + + * mml2015.el (mml2015-fix-micalg): Fix for Mutt-bug. + (mml2015-gpg-decrypt-1): Decanonicalize decrypted MIME + body. (Mailcrypt seem to do this, but gpg.el doesn't.) + +2001-10-16 Kai Gro,b_(Bjohann + Patch by Oliver Scholz . + + * gnus-draft.el (gnus-draft-edit-message): Add text property + `field' with value `header' to message headers. + * message.el (message-setup-1): Really add text property to all of + the header, not just part of it. + +2001-09-04 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-sort-by-server): Use it. + + * gnus.el (gnus-method-to-full-server-name): New, bogus function. + + * gnus-topic.el (gnus-topic-sort-groups-by-server): New command + and keystroke. + +2001-10-14 Simon Josefsson + + * dig.el: Doc fix. + + * smime.el: Doc fix. + + * gnus-msg.el (gnus-inews-do-gcc): Port header encoded-word + charset magic from message.el. + +2001-10-12 Simon Josefsson + Suggested by david.goldberg6@verizon.net (David S. Goldberg) + + * gnus-cite.el (gnus-article-toggle-cited-text): Don't remove + 'cite from g-a-wash-types. + (gnus-cite-toggle): Ditto. Add 'cite. Set modeline. + (gnus-article-hide-citation): Fix. + + * gnus-cite.el (gnus-article-hide-citation): Add `c' mode line + character. + (gnus-article-toggle-cited-text): Toggle `c' mode line character. + + * gnus-art.el (gnus-treat-hide-citation-maybe): Remove duplicate + definition. + (gnus-signature-toggle): Toggle `s' mode line character. + + * gnus-art.el (article-emphasize): Set `g-a-wash-types' after + doing stuff that clears it. + +2001-10-12 Simon Josefsson + + * gnus-cache.el (gnus-summary-limit-include-cached): Rewrite. + From Eric Marsden . + +2001-10-12 10:00:00 ShengHuo ZHU + + * message.el (message-do-auto-fill): Use gnus-point-at-bol. + (autoload): Add some autoloads. + +2001-10-12 Kai Gro,b_(Bjohann + Suggested by Oliver Scholz . + + * message.el (message-do-auto-fill): New function. Like + `do-auto-fill' but don't fill when in the message header. + (message-setup-1): Put a text property on the message header. + (message-setup-fill-variables): Use `message-do-auto-fill'. + +2001-10-10 12:00:00 ShengHuo ZHU + + * message.el (message-send-mail-partially): Insert an empty line + first, because of the change of message-make-lines. + +2001-10-10 Florian Weimer + + * mm-util.el (mm-charset-synonym-alist): If Emacs doesn't support + iso-8859-15, make it an alias for iso-8859-1. + +2001-10-10 Katsumi Yamaoka + + * message.el (message-send-news): Don't modify the value of + `message-syntax-checks' if it is not a list (possibly it is + `dont-check-for-anything-just-trust-me'). + +2001-10-10 Katsumi Yamaoka + + * gnus-group.el (gnus-group-name-charset-group-alist): Use + `find-coding-system' for XEmacs to check whether the coding-system + `utf-8' is available. + +2001-10-09 13:00:00 ShengHuo ZHU + + * dgnushack.el (dgnushack-compile): Detect mh-e and xml. + +2001-10-09 Per Abrahamsen + + * message.el (message-send-news): Oops, missed case with no + "Followup-To" header... + +2001-10-09 Per Abrahamsen + + * message.el (message-send-news): Allow + `gnus-group-name-charset-group-alist' to affect encoding of the + "Newsgroups" and "Followup-To" headers. + +2001-10-07 15:00:00 ShengHuo ZHU + + * Makefile.in (install-el): Depend on gnus-load.el. + +2001-10-07 13:00:00 ShengHuo ZHU + + * Makefile.in (install-el): Use -f. + From: Amos Gouaux + +2001-10-07 Per Abrahamsen + + * message.el (message-send-news): Don't encode Followups-To when + `gnus-group-name-charset-group-alist is' ".*". [Yuck] + + * gnus-util.el (gnus-decode-newsgroups): No space in newsgroup + header. + + * gnus-art.el (article-decode-group-name): Also decode + "Followup-To". + + * rfc2047.el (rfc2047-encode-message-header): Encode without + asking for null methods. + + * gnus-group.el (gnus-group-name-charset-group-alist): Make utf-8 + default charset for newsgroup names in accordance with USEFOR. + + * gnus-group.el (gnus-group-name-charset-method-alist, + gnus-group-name-charset-group-alist): Removed "*" from doc + strings, "*" should not be used for complex variables. + +2001-10-06 Simon Josefsson + + Support UTF-8 group names better. + + * message.el (message-check-news-header-syntax): Encode group + names before comparison. + + * gnus-msg.el (gnus-copy-article-buffer): Run all + `gnus-article-decode-hook's except `article-decode-charset' + instead of hardcoding call to one of them. + + * gnus-art.el (gnus-article-decode-hook): Add + `article-decode-group-name'. + (article-decode-group-name): New function, use `g-d-n'. + + * gnus-group.el (gnus-group-insert-group-line): Decode + gnus-tmp-group using `g-d-n'. + + * gnus-util.el (gnus-decode-newsgroups): New function. + +2001-10-06 Per Abrahamsen + + * gnus-srvr.el (gnus-browse-foreign-server): Fixed bug non-nil + `gnus-group-name-charset-group-alist'. + +2001-10-06 08:00:00 ShengHuo ZHU + + * Makefile.in: Install el in install. Add uninstall. + +2001-10-05 Simon Josefsson + + * nnheader.el (gnus-verbose-backends, gnus-nov-is-evil): Custom. + + * gnus-sum.el (gnus-summary-move-article): Also activate new groups. + + * nnfolder.el (nnfolder-normalize-buffer): Don't insert \n\n in + empty folders. + + * gnus-sum.el (gnus-select-newsgroup): Don't enable `display' + limiting if read-all (C-u RET) was used. + +2001-10-04 Simon Josefsson + + * mail-source.el (mail-source-movemail-program): New variable. + (mail-source-movemail): Use it. Suggested by Taylor Hutt + . + +2001-10-03 Simon Josefsson + + * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): New param. + (gnus-summary-line-format-alist): Fix param. + +2001-10-02 Simon Josefsson + + * nnimap.el (nnimap-request-move-article): Use imap.el directly, + don't go through `nnimap-request-expire-articles' to delete the + article. Thanks to prj@po.cwru.edu (Paul Jarc). + +2001-10-02 10:00:00 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-write-active): The min in the + agent/active may be larger than that in the server/active. + +2001-10-01 Simon Josefsson + + * mail-source.el (mail-source-fetch-imap): Use BODY.PEEK if server + is IMAP4rev1. + + * nnml.el (gnus-article-unpropagatable-p): Autoload gnus-sum. + + * nnfolder.el: Ditto. + +2001-09-30 Dan Christensen + + * gnus-sum.el (gnus-summary-extract-address-component): New function. + (gnus-summary-from-or-to-or-newsgroups): Optimize. + +2001-09-29 Kai Gro,b_(Bjohann + + * message.el (message-mode-map): Keybinding for `gnus-delay-article'. + (message-mode-menu): Menu item for same. + + * gnus-group.el (gnus-group-make-menu-bar): Menu item for sending + delayed articles. + + * gnus-delay.el (gnus-delay-send-drafts): Do nothing if + nndraft:delayed does not exist. + (gnus-delay-initialize): Don't set up keymap, that's done from + message.el now. + (gnus-delay, gnus-delay-group, gnus-delay-header) + (gnus-delay-default-delay, gnus-delay-default-hour): Customize. + +2001-09-29 Simon Josefsson + + * mm-util.el (mm-mime-mule-charset-alist): Encode mule-utf-8 as + utf-8, not eight-bit-control. + + * imap.el (imap-shell-host, imap-default-user, imap-use-utf7) + (imap-log, imap-debug): Custom. + (imap-log-buffer, imap-debug-buffer): New constants. + (imap-kerberos4-open, imap-gssapi-open, imap-ssl-open) + (imap-network-open, imap-shell-open, imap-starttls-open) + (imap-send-command-1, imap-send-command, imap-arrival-filter) + (imap-debug): Use imap-*-buffer. + + * nndoc.el (nndoc-article-type): Add mailman. + (nndoc-type-alist): Ditto. + (nndoc-mailman-type-p): New function. + +2001-09-28 07:00:00 ShengHuo ZHU + + * gnus-xmas.el (gnus-article-x-face-command): Merge it into + gnus-art.el. + +2001-09-27 Simon Josefsson + + * gnus-topic.el (gnus-topic-mode-map): Add catchup. + (gnus-topic-catchup-articles): New function. Suggested by Robin + S. Socha . + +2001-09-27 11:00:00 ShengHuo ZHU + From 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 + + * 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 + + * gnus-group.el (gnus-group-delete-group): Typo. + +2001-09-26 Simon Josefsson + + * nnmail.el (nnmail-expiry-target-group): Add doc warning. + + * nnimap.el (nnimap-expiry-target): Use temp buffer. + +2001-09-26 07:00:00 ShengHuo ZHU + + * gnus-cus.el (gnus-group-parameters): Display as sexp. + +2001-09-22 Simon Josefsson + + * nnml.el (nnml-open-marks): Remove unpropagatable marks. + + * nnfolder.el (nnfolder-open-marks): Ditto. + + * gnus-sum.el (gnus-article-unpropagatable-p): New function. + (gnus-update-marks): Use it. + (gnus-update-marks): Use `gnus-article-mark-to-type' instead of + hardcoded list. + + * gnus.el (gnus-article-special-mark-lists): Add killed. + (gnus-article-unpropagated-mark-lists): New constant. + +2001-09-22 Simon Josefsson + + * gnus-sum.el (gnus-summary-mode-hook): Add gnus-pick-mode as + custom option. + +2001-09-23 Simon Josefsson + + * gnus-draft.el (gnus-draft-setup): Add mark in backend as well. + +2001-09-23 02:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-button-mailto): Hack save-selected-window-window. + +2001-09-22 Per Abrahamsen + + * gnus-group.el (gnus-group-sort-function): Fix customize type to + accept lists of functions. + +2001-09-20 Simon Josefsson + + * gnus-group.el (gnus-group-catchup): Update expire marks in + backend. Also, if ALL also set expire marks on tick/dormant. + +2001-09-20 Kai Gro,b_(Bjohann + + * message.el (message-tab-body-function): New variable. + * message.el (message-tab): Use it. + +2001-09-19 Sam Steingold + + * gnus-win.el (gnus-buffer-configuration): Respect + `gnus-bug-create-help-buffer'. + +2001-09-18 Simon Josefsson + + * gnus-spec.el (gnus-correct-pad-form): Re-revert. + (gnus-parse-simple-format): Re-revert. + +2001-09-16 Katsuhiro Hermit Endo + Trivial patch. + + * gnus-spec.el (gnus-parse-complex-format): Don't fold search + case. (Thanks to Daiki Ueno .) + +2001-09-18 Simon Josefsson + + * gnus-spec.el (gnus-correct-pad-form): Remove until papers are + signed. + (gnus-parse-simple-format): Don't use it. + +2001-09-17 Miles Bader + + * 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 + + * gnus-srvr.el (gnus-server-mode): Fix bogus fontification. + From Gerd M,Av(Bllmann . + +2001-09-17 Didier Verna + + * nndiary.el: version 0.2-b14. + * gnus-diary.el (gnus-diary-check-message): fix `read-string' + compatibility problem with XEmacs 21.1. + +2001-09-15 Simon Josefsson + + * gnus-group.el (gnus-group-line-format): Document %c. + + * nnml.el (nnml-parse-head): Handle CRLF files. + (nnml-generate-nov-file): Ditto. + (nnml-retrieve-headers): Ditto. + +2001-09-15 Michael Welsh Duggan + + * gnus-spec.el (gnus-parse-format): Don't treat %c as %C. + +2001-09-13 Martin Kretzschmar + + * gnus-spec.el (gnus-correct-substring): Still stopped one + character before we wanted (never included last character). + (gnus-tilde-max-form, gnus-tilde-cut-form) Made readable again, + add missing "," (once per function) + +2001-09-14 Simon Josefsson + + * gnus-start.el (gnus-group-mode-hook): Moved from gnus-group + (otherwise e.g. gnus-agentize in .gnus overrides the customized + default before gnus-group is loaded and the variable set.) + + * nnimap.el (nnimap-request-set-mark): Do not store bookmark, + killed or unsent marks. + + * gnus-draft.el (gnus-draft-setup): Don't set mark when there + isn't an article to set it on (e.g. when you `a' in a group). + +2001-09-12 Pavel Jan,Am(Bk + + * mm-util.el (mm-charset-synonym-alist): add windows-1250 so we + can read e-mails from Microsoft Outlook users not using ISO + 8859-2 character set. + +2001-09-12 18:00:00 ShengHuo ZHU + + * gnus-diary.el: Minor modifications to avoid warnings. + (gnus-summary-misc-menu): defvar. + (gnus-diary-check-message): Use gnus-point-at-eol. + (gnus-diary-kill-entire-line): eval-and-compile. + +2001-09-12 Didier Verna + + * nndiary.el: new version (0.2-b13). + * nndiary.el (nndiary-mail-sources): doc update. + * nndiary.el (nndiary-split-methods): ditto. + * nndiary.el (nndiary-request-accept-article-hooks): New. + * nndiary.el (nndiary-request-accept-article): use it, check + message validity. + * nndiary.el (nndiary-get-new-mail): changed default to nil. + * nndiary.el (nndiary-schedule): fix bug (misplaced + condition-case): it didn't return nil on error. + * gnus-diary.el: new version. + * gnus-diary.el (gnus-diary-summary-line-format): removed %I. + * gnus-diary.el (gnus-diary-header-value-history): New. + * gnus-diary.el (gnus-diary-narrow-to-headers): New. + * gnus-diary.el (gnus-diary-add-header): New. + * gnus-diary.el (gnus-diary-check-message): New. + * 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 + + * gnus-sum.el (gnus-select-newsgroup): Make + `gnus-current-select-method' buffer-local. + + * 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 + + * gnus-spec.el (gnus-correct-pad-form): Fix. + +2001-09-09 Simon Josefsson + + * mm-decode.el (mm-inline-media-tests): Add + application/x-emacs-lisp. + (mm-attachment-override-types): Add + application/{x-,}pkcs7-signature. + + * gnus-srvr.el (gnus-server-mode-hook, gnus-server-exit-hook) + (gnus-server-line-format, gnus-server-mode-line-format) + (gnus-server-browse-in-group-buffer): Customize. + +2001-09-08 16:00:00 ShengHuo ZHU + + * nnml.el (nnml-marks-changed-p): Typo. + (nnml-save-marks, nnml-open-marks): Use gnus-sethash. + (nnml-marks-changed-p): Use gnus-gethash. + (nnml-marks-modtime): Use gnus-make-hashtable. + + * nnfolder.el (nnfolder-marks-changed-p): Typo. + (nnfolder-request-expire-articles, nnfolder-save-marks) + (nnfolder-open-marks): Typo. + (nnfolder-save-marks, nnfolder-open-marks): Use gnus-sethash. + (nnfolder-marks-changed-p): Use gnus-gethash. + (nnfolder-marks-modtime): Use gnus-make-hashtable. + +2001-09-08 Simon Josefsson + + * nnfolder.el (nnfolder-marks-modtime): New variable. + (nnfolder-marks-changed-p): New function. + (nnfolder-save-marks, nnfolder-open-marks): Save modtime. + (nnfolder-request-update-info): Don't update if marks didn't change. + + * nnml.el (nnml-marks-modtime): New variable. + (nnml-marks-changed-p): New function. + (nnml-save-marks, nnml-open-marks): Save modtime. + (nnml-request-update-info): Don't update if marks didn't change. + + * gnus-agent.el (gnus-agent-any-covered-gcc) + (gnus-agent-add-server, gnus-agent-remove-server): Use + gnus-agent-method-p. + + * gnus-art.el (gnus-buttonized-mime-types): New variable. + (gnus-unbuttonized-mime-type-p): Use it. + + * gnus-agent.el (gnus-agent-fetch-group): If online, actually + fetch group. + +2001-09-08 Simon Josefsson + From Daniel Pittman + + * gnus-spec.el (gnus-correct-pad-form): New function. + (gnus-parse-simple-format): Use it. + +2001-09-07 Simon Josefsson + + * gnus-group.el (gnus-group-sort-groups): Unmark all groups. + (gnus-group-sort-selected-groups): Ditto. Suggested by Harry + Putnam . + (gnus-group-sort-selected-groups): Touch dribble file. + +2001-09-07 Raja R Harinath + + * nnml.el (nnml-filenames-are-evil): New variable. + (nnml-article-to-file-alist): Rename to ... + (nnml-current-group-article-to-file-alist): ... this. + Respect `nnml-filenames-are-evil'. + (nnml-active-number): Update. + (nnml-update-file-alist): Update. + (nnml-request-article): Use nnheader-article-to-file-alist. + (nnml-request-rename-group): Likewise. + +2001-09-06 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-insert-line): Fix. + +2001-09-06 Bj,Av(Brn Torkelsson + + * gnus-sum.el: Bind g-s-t-s to "W g". + * gnus-sum.el (gnus-summary-make-menu-bar): Add g-s-t-s. + * gnus-sum.el (gnus-summary-toggle-smiley): New function. Toggles + display of graphical smilies. + +2001-09-07 02:00:00 ShengHuo ZHU + + * gnus-start.el (gnus-setup-news): A typo. + From Bill White . + +2001-09-06 Simon Josefsson + + * gnus-sum.el (gnus-summary-insert-line): Insert forwarded, recent + and unseen marks. + +2001-09-05 Kai Gro,b_(Bjohann + + * nnmail.el (nnmail-split-fancy): Document `junk'. + +2001-09-04 Simon Josefsson + + * imap.el (imap-search): Don't error if server is broken. + +2001-09-02 Benjamin Rutt + + * nnmbox.el (nnmbox-find-article): Fix infinite loop when + searching for an article that isn't in the mbox. + +2001-09-02 23:12:48 Lars Magne Ingebrigtsen + + * nnslashdot.el (nnslashdot-retrieve-headers-1): Get references + right, and get all the comments. + +2001-09-02 Simon Josefsson + Suggested by Dan Christensen + + * nnfolder.el (nnfolder-request-update-info): Fix message. + + * nnml.el (nnml-request-update-info): Ditto. + +2001-09-01 Simon Josefsson + + * nnml.el (nnml-request-expire-articles): Also bind + `nnml-current-group' and `nnml-article-file-alist' when using + expiry-target. (Otherwise nnml will be in a inconsistent internal + state causing all kind of problems.) + (nnml-request-expire-articles): If `nnml-article-to-file' or + `file-attributes' failes, return article as un-expirable instead + of treating it as expired. + +2001-08-31 Sam Steingold + + * imap.el (imap-mailbox-examine, imap-mailbox-examine-1): Fix a + typo: `exmine' --> `examine'. + +2001-08-30 13:00:00 ShengHuo ZHU + + * nndoc.el (nndoc-forward-type-p): It is not a digest. + +2001-08-30 11:00:00 ShengHuo ZHU + + * nnml.el (nnml-check-directory-twice): Remove. + (nnml-retrieve-headers): Ditto. + (nnml-article-to-file): Use nnheader-directory-files-is-safe. + +2001-08-30 Andrew Innes + + * nnheader.el (nnheader-directory-files-is-safe): No need to read + directory twice on Windows, or on GNU Emacs-21. + +2001-08-30 Andrew Innes + + * nnml.el (nnml-request-article): Use nnml-article-to-file-alist. + (nnml-request-rename-group): Ditto. + (nnml-active-number): Ditto. + (nnml-request-create-group): Use nnml-directory-articles. + (nnml-request-expire-articles): Use nnml-directory-articles, which + gets list from nov database if available. + (nnml-get-nov-buffer): New function. + (nnml-open-nov): Use it. + (nnml-update-file-alist): Use nnml-article-to-file-alist, which + gets alist from nov database if available. + (nnml-directory-articles): New function. + (nnml-article-to-file-alist): New function. + +2001-08-30 Andrew Innes + + * mm-decode.el (mm-display-external): Use `name' as filename, if + `filename' attribute is not present. + +2001-08-30 Andrew Innes + + * mail-source.el (mail-source-flash): New defcustom. + (mail-source-new-mail-p): Ring visible bell if appropriate. + (mail-source-start-idle-timer): Use unwind-protect to ensure idle + timer is cleared even if mail check signals an error. + +2001-08-29 10:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-move-article): Only update marks of + type 'list. + +2001-08-29 00:00:00 ShengHuo ZHU + + * flow-fill.el (fill-flowed): eol might be point-max. + +2001-08-27 Simon Josefsson + + * nnml.el (nnml-request-update-info): Fix message. + (nnml-open-marks): Ditto. + + * nnfolder.el (nnfolder-request-update-info): + (nnfolder-open-marks): Fix message. + +2001-08-25 Simon Josefsson + + * nnfolder.el (nnfolder-save-marks): Don't create directory named + after group in ~/. + +2001-08-25 Simon Josefsson + From Andreas Jaeger + + * nnfolder.el (nnfolder-open-marks): Fix typo. + * nnml.el (nnml-open-marks): Likewise. + +2001-08-25 Simon Josefsson + + Make nnfolder groups self-contained as far as marks are concerned. + + * nnfolder.el (nnfolder-marks-directory, nnfolder-marks-is-evil) + (nnfolder-marks, nnfolder-marks-file-suffix): New variables. + (nnfolder-open-server): Make marks directory. + (nnfolder-request-delete-group): Delete marks file. + (nnfolder-request-delete-group): Check of nov/marks file exist + before deleting. + (nnfolder-request-rename-group): Rename marks file. + (nnfolder-request-rename-group): Only rename nov/mark if they exists. + (nnfolder-request-set-mark, nnfolder-request-update-info) + (nnfolder-group-marks-pathname, nnfolder-save-marks) + (nnfolder-open-marks): New functions. + (top-level): Require gnus. + +2001-08-25 09:00:00 ShengHuo ZHU + + * nnweb.el (nnweb-type-definition): Use google raw file. + (nnweb-google-parse-1): Ditto. + (nnweb-google-identity): Ditto. + (nnweb-reference-wash-article): Move nnweb-decode-entities here. + (nnweb-altavista-wash-article): Ditto. + (nnweb-request-article): Remove nnweb-decode-entities. + + * nnml.el: Require 'gnus. + +2001-08-25 Simon Josefsson + + * nnml.el (nnml-marks-is-evil): Add doc. + +2001-08-25 Simon Josefsson + + * nnml.el (nnml-save-marks): Wrap saving marks in a + condition-case, to allow user to start Gnus if saving marks failed + for some reason. + +2001-08-24 16:05:38 Lars Magne Ingebrigtsen + + * gnus-spec.el (gnus-compile): Don't compile gnus-version. + + * gnus-group.el (gnus-update-group-mark-positions): Bind + gnus-group-update-hook to nil. + +2001-08-24 13:00:00 ShengHuo ZHU + + * mml.el (mml-generate-mime-1): Force as multibyte string. + +2001-08-24 12:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-insert-line) + (gnus-summary-prepare-threads): gnus-tmp-lines should be a string. + From Martin Kretzschmar + + * gnus-spec.el (gnus-correct-substring): Take optional END. + + * nnrss.el (nnrss-request-article): Remove \n. + (nnrss-retrieve-headers): Lines number is -1. + +2001-08-24 Simon Josefsson + + * gnus-group.el (gnus-info-clear-data): Call + nnfoo-request-set-mark to propagate marks. Fix bug: + `gnus-group-update-line' doesn't update read range unless we call + `gnus-get-unread-articles-in-group' first. + + * nnimap.el (nnimap-request-set-mark): Don't propagate seen flags + to server. + +2001-08-23 21:00:00 ShengHuo ZHU + + * gnus-util.el (gnus-create-info-command): Return an interactive + function. + +2001-08-23 19:00:00 ShengHuo ZHU + From Katsumi Yamaoka + + * gnus-spec.el (gnus-parse-complex-format): Use equal. + +2001-08-23 18:43:05 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-select-newsgroup): Use it. + + * gnus-util.el (gnus-not-ignore): New function. + + * lpath.el (featurep): Don't fbind char-int. + + * gnus-util.el (gnus-create-info-command): New function. + + * gnus-group.el (gnus-group-edit-group): Make C-c C-i go to the + right node. + + * gnus-sum.el (gnus-select-newsgroup): Clean up. + (gnus-summary-limit-children): Use 'identity instead of `all'. + (gnus-summary-limit-to-display-predicate): New command and + keystroke. + +2001-08-23 10:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-group-alist): Use fm-releases.rdf. + + * gnus-spec.el (gnus-format-specs): Miss a right parenthesis. + +2001-08-23 18:43:05 Lars Magne Ingebrigtsen + + * gnus-spec.el: Add the Gnus version. + (gnus-update-format-specifications): If the Gnus version changes, + nix out the format spec cache. + + * gnus.el (gnus-continuum-version): Made into a command and + optionalize the VERSION. + + * gnus-spec.el (gnus-parse-complex-format): Remove %C specs from + the start of the lines. + +2001-08-22 00:06:52 Lars Magne Ingebrigtsen + + * gnus.el (gnus-visual-p): Define function before use of + function. + +2001-08-21 23:28:02 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-adjust-marked-articles): Use new variable. + (gnus-article-mark-to-type): New function. + (gnus-update-missing-marks): Only update marks of type 'list. + + * gnus.el (gnus-article-special-mark-lists): New variable. + +2001-08-21 12:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-limit-children): Check 'all. + (gnus-select-newsgroup): Still use 'all. + (gnus-summary-initial-limit): Comparing with 'all. + +2001-08-20 16:00:00 ShengHuo ZHU + + * gnus-start.el (gnus-activate-group): If dont-check, don't update + active. + +2001-08-20 15:00:00 ShengHuo ZHU + + * nnslashdot.el (nnslashdot-retrieve-headers-1): Replace + nnslashdot-*-retrieve-headers. + (nnslashdot-request-article): Fix for slashcode 2.2. + (nnslashdot-make-tuple): New function. + (nnslashdot-read-groups): Use it. + +2001-08-20 01:34:03 Lars Magne Ingebrigtsen + + * gnus.el (gnus-expand-group-parameters): Don't alter the variable + list. + + * gnus-sum.el (gnus-summary-move-article): Don't select article. + +2001-08-20 Simon Josefsson + + * gnus-msg.el (gnus-inews-do-gcc): If archive server can't be + opened, error instead of continuing (and exploding later). + +2001-08-20 01:34:03 Lars Magne Ingebrigtsen + + * gnus.el (gnus-expand-group-parameters): Return the parameter + list. + + * gnus-sum.el (gnus-summary-show-article): Doc fix. + (gnus-summary-show-article): Guess at charset if required. + + * gnus-spec.el (gnus-correct-substring): Stopped one character + before we wanted. + +2001-08-19 Pavel Jan,Am(Bk + + * earcon.el (earcon-auto-play): Remove unused option. + +2001-08-19 16:14:41 Lars Magne Ingebrigtsen + + * gnus-score.el (gnus-score-headers): Move the "Scoring..." + message down in levels, since it happens very fast. + + * smiley-ems.el (smiley-update-cache): Respect the symbol version + of smiley-regexp-alist. + + * mm-view.el (mm-inline-text): Ignore vcard errors. + + * gnus-art.el (gnus-ignored-headers): Added more junk headers. + + * gnus-score.el (gnus-all-score-files): Use append instead of + nconc. + + * gnus.el (gnus-splash-face): Doc fix. + + * mm-decode.el (mm-mailcap-command): Use + mm-path-name-rewrite-functions. + (mm-path-name-rewrite-functions): New variable. + + * gnus-spec.el (gnus-parse-complex-format): React to ?=. + (gnus-complex-form-to-spec): Insert tab. + (gnus-spec-tab): New function. + + * gnus-sum.el (gnus-select-newsgroup): Set the marks before + entering the group. + + * gnus-spec.el (gnus-complex-form-to-spec): Insert Lisp to match + the positional spec. + (gnus-parse-complex-format): React to %C. + + * gnus-ems.el (gnus-char-width): Moved here. + + * gnus-sum.el (gnus-select-newsgroup): Set + gnus-newsgroup-articles. + (gnus-unseen-mark): New variable. + (gnus-newsgroup-unseen): Ditto. + (gnus-newsgroup-seen): Ditto. + (gnus-adjust-marked-articles): Use them. + (gnus-update-marks): Use them. + (gnus-summary-update-secondary-mark): Display. + (gnus-summary-prepare-threads): Display. + + * gnus-msg.el (gnus-inews-group-method): Use and return the + method, not the server. + +2001-08-19 Simon Josefsson + + * gnus-srvr.el (gnus-server-agent-face): New. + (gnus-server-agent-face): New. + (gnus-server-mode): Turn on font-lock-mode. + + * gnus.el (gnus-server-visual): Add defgroup. + +2001-08-19 Simon Josefsson + From Joe Casadonte + + * gnus-srvr.el (gnus-server-opened-face, gnus-server-closed-face, + gnus-server-denied-face): New. + (gnus-server-opened-face, gnus-server-closed-face, + gnus-server-denied-face): New. + (gnus-server-font-lock-keywords): Add. + +2001-08-19 Simon Josefsson + + * nnml.el (nnml-request-set-mark): Return nil. + (nnml-save-marks): Use nnml-possibly-create-directory. + (nnml-open-marks): Only work in temp buffer when inserting/reading + .marks file. + +2001-08-18 19:00:00 ShengHuo ZHU + + * gnus.el (gnus-expand-group-parameters): Fix. + + * gnus-spec.el (gnus-char-width): New function. + (gnus-correct-substring, gnus-correct-length): Use it. + + * message.el (message-required-mail-headers): Fix doc. + +2001-08-18 18:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-group-make-articles-read): gnus-request-set-mark. + + * mm-decode.el (mm-save-part-to-file): Insert the handle. + +2001-08-18 13:00:00 ShengHuo ZHU + + * nnslashdot.el (nnslashdot-threaded-retrieve-headers): + slashdot 2.2 (not fully fixed yet). + (nnslashdot-request-article): Ditto. + +2001-08-18 Simon Josefsson + + * gnus-util.el (gnus-remassoc, gnus-update-alist-soft): Moved from + nnimap. + + * nnimap.el (nnimap-remassoc, nnimap-update-alist-soft): Moved to + gnus-util. + (nnimap-request-update-info-internal): Use new functions. + + * nnml.el (nnml-request-set-mark, nnml-request-update-info): Use + new functions. + +2001-08-18 Simon Josefsson + + Make nnml groups self-contained as far as marks are concerned. + + * nnml.el (nnml-request-delete-group): Delete marks file. + (nnml-request-rename-group): Move marks file. + (nnml-marks-file-name, nnml-marks-is-evil, nnml-marks): New server + variables. + (nnml-request-set-mark, nnml-request-update-info): New server + functions. + (nnml-save-marks, nnml-open-marks): New functions. + +2001-08-18 Simon Josefsson + + * gnus-sum.el (gnus-summary-move-article): Use `add' instead of + `set' when setting marks. + +2001-08-17 22:00:00 ShengHuo ZHU + + * gnus.el (gnus-info-find-node): Take an argument. + + * gnus-art.el (gnus-button-handle-info): New function. + (gnus-url-unhex-string): Replace "+" with " ". + +2001-08-17 21:00:00 ShengHuo ZHU + + * message.el (message-check-news-header-syntax): Check bad From. + +2001-08-18 00:14:45 Lars Magne Ingebrigtsen + + * gnus-spec.el (gnus-correct-length): New function. + (gnus-correct-substring): New function. + (gnus-tilde-max-form): Use it. + +2001-08-17 Nevin Kapur + + * nnmh.el: Docstring changes as below. + + * nnml.el: Docstring changes as below. + + * nnbabyl.el: Docstring changes as below. + + * nnmbox.el: Docstring changes as below. + + * nnfolder.el: Added docstrings identifying each virtual server + parameter. + +2001-08-18 Simon Josefsson + + * mml.el (mml-menu): Collapse Attach, Insert and Security submenu. + +2001-08-17 Bj,Av(Brn Torkelsson + + * message.el: rename "Abort Message" to "Postpone Message". + Remove "Attach file as MIME" from Message menu, it's already in + the MIME menu. + +2001-08-17 14:00:00 ShengHuo ZHU + + * smime.el (smime-point-at-eol): eval-and-compile. + (smime-make-temp-file): New function. + (smime-sign-region, smime-encrypt-region, smime-decrypt-region): + Use it. + +2001-08-17 10:41:14 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-fetch-group): Go online if offline. + (gnus-agent-summary-fetch-group): New command and keystroke. + + * gnus-art.el (gnus-insert-mime-button): Tiny clean-up. + (gnus-mime-display-security): Make it respect + gnus-unbuttonized-mime-type-p. + + * gnus-sum.el (gnus-articles-to-read): Comments. + (gnus-article-marked-p): New function. + (gnus-summary-display-make-predicate): New function. + (gnus-select-newsgroup): Use them. + + * mm-decode.el (mm-save-part-to-file): Made it not error. + +2001-08-17 Simon Josefsson + + * imap.el (imap-wait-for-tag): If process-status isn't open or + run, return nil instead of sit-for looping. + +2001-08-17 10:41:14 Lars Magne Ingebrigtsen + + * lpath.el (featurep): fbind xml-parse-region. + + * gnus.el (gnus-message-archive-method): Default to "archive". + (gnus-message-archive-method): Doc fix. + (gnus-parameters-get-parameter): Cleaned up. + (gnus-expand-group-parameter): New function. + + * gnus-start.el (gnus-setup-news): Push the archive server only + the server list. + + * mml.el (mml-menu): Changed name to "Attachments". + + * mm-decode.el (mm-destroy-postponed-undisplay-list): Only message + when there is something to detroy. + +2001-05-21 17:11:46 Lars Magne Ingebrigtsen + + * gnus-srvr.el (gnus-server-browse-in-group-buffer): Default to + nil. + +2001-08-15 Kai Gro,b_(Bjohann + + * 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) + + * gnus-agent.el (gnus-agent-make-mode-line-string) + (gnus-agent-toggle-plugged): Use new API. + +2001-08-14 Kai Gro,b_(Bjohann + + * gnus-delay.el (gnus-delay-send-drafts): Fix check whether + deadline has expired. + +2001-08-12 Simon Josefsson + Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE + + Support `recent' mark indicating newly arrived messages (to + separate from old but unread messages). + + * nnimap.el (nnimap-retrieve-groups): Push dummy article into + `nnmail-split-history' if recent is > 0. + (nnimap-request-update-info-internal): Update `recent' marks. + (nnimap-request-set-mark): Never set `recent' marks. + (nnimap-mark-to-predicate-alist, nnimap-mark-to-flag-alist): Add + recent. + + * gnus-sum.el (gnus-recent-mark): New mark. + (gnus-newsgroup-recent): New variable. + (gnus-summary-local-variables): Add gnus-newsgroup-recent. + (gnus-summary-prepare-threads): Mark recent articles. + (gnus-summary-add-mark): Support recent. + (gnus-summary-update-secondary-mark): Support recent. + + * gnus.el (gnus-article-mark-lists): Add recent. + +2001-08-12 Simon Josefsson + + * mm-bodies.el (mm-decode-content-transfer-encoding): Returns + whether successful decoding took place. Add doc. + +2001-08-12 Simon Josefsson + Suggested by Per Abrahamsen + + * gnus.el (gnus-summary-line-format, gnus-parameters): + * gnus-gl.el (gnus-summary-grouplens-line-format): + * gnus-salt.el (gnus-summary-pick-line-format): + * 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. + +2001-08-10 23:00:00 ShengHuo ZHU + + * nnmbox.el (nnmbox-read-mbox): No warning. + +2001-08-10 21:00:00 ShengHuo ZHU + + * nndoc.el (nndoc-article-type): Fix doc. + (nndoc-generate-article-function): New variable. + (nndoc-dissection-function): New variable. + (nndoc-type-alist): Add oe-dbx. + (nndoc-oe-dbx-type-p): New function. + (nndoc-oe-dbx-dissection): New function. + (nndoc-oe-dbx-generate-article): New function. + +2001-08-11 Kai Gro,b_(Bjohann + + * gnus-delay.el (gnus-delay-send-drafts): Cleaner way to check + whether deadline has been reached. Patch from Dan Nicolaescu + . + +2001-08-10 02:00:00 ShengHuo ZHU + + * gnus-ml.el (turn-on-gnus-mailing-list-mode): Use + gnus-group-find-parameter. Suggested by Janne Rinta-Manty + . + + * mail-source.el (mail-source-movemail): The error buffer is + modified, but nothing in it. + +2001-08-10 01:00:00 ShengHuo ZHU + + * message.el (message-bogus-system-names): New variable. + (message-make-fqdn): Use it. + +2001-08-09 15:00:00 ShengHuo ZHU + + * nndraft.el (nndraft-request-group): Use + nndraft-auto-save-file-name. + +2001-08-09 Simon Josefsson + + * mm-view.el (mm-view-pkcs7-decrypt): Operate in current buffer. + Don't ask whether to decrypt. Just leave result in buffer (don't + call mm). + + * mm-decode.el (mm-dissect-buffer): Possibly verify/decrypt single + parts as well. + (mm-inline-media-tests): Ignore application/{x-,}pkcs7-mime. + (mm-possibly-verify-or-decrypt): Support application/{x-,}pkcs7-mime. + +2001-08-09 Simon Josefsson + + * mm-decode.el (mm-insert-part): Return decoding success status. + (mm-save-part-to-file): Error if decoding failed. + +2001-08-09 10:00:00 ShengHuo ZHU + + * message.el (message-tab): Use indent-relative. + (message-mode): Don't bind indent-line-function to indent-relative. + +2001-08-09 Simon Josefsson + + * message.el (message-get-reply-headers): Fix string. Suggested by + Christoph Conrad . + +2001-08-08 15:00:00 ShengHuo ZHU + + * message.el (message-tab): Use the current value of + indent-line-function. + (message-mode): Bind indent-line-function to indent-relative. + +2001-08-08 Simon Josefsson + + * 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 + + * 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 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. + (gnus-output-to-mail): Ditto. + + * nnmail.el (nnmail-pathname-coding-system): Set default to nil. + +2001-08-06 Florian Weimer + + * message.el (message-indent-citation): Use + `message-yank-cited-prefix' for empty lines. + +2001-08-05 Florian Weimer + + * message.el (message-indent-citation): Quote only lines starting + with ">" using `message-yank-cited-prefix'. + +2001-08-05 Nuutti Kotivuori + Trivial patch. + + * gnus-cache.el (gnus-cache-possibly-enter-article): Use + gnus-cache-fully-p. + +2001-08-04 Simon Josefsson + + * gnus-cache.el (gnus-cache-possibly-update-active): Create active + file if it doesn't exist (by calling gnus-cache-read-active). + +2001-08-04 Simon Josefsson + + * gnus-cache.el (gnus-cache-possibly-enter-article): Revert. + (gnus-cache-passively-or-fully-p): Removed. + (gnus-cache-fully-p): Fix it. + + * mm-view.el (mm-pkcs7-signed-magic): Support more ASN.1 lengths. + +2001-08-04 Simon Josefsson + + * gnus-cache.el (gnus-cache-fully-p) + (gnus-cache-passively-or-fully-p): New functions. + (gnus-cache-possibly-enter-article): Cosmetic change, use + `g-c-p-o-f-p'. + (gnus-cache-possibly-enter-article): Use `g-c-p-u-a'; last change + was bogus (`g-c-p-a-a' does not change active info, just change + the functions parameters). + (gnus-cache-possibly-remove-articles-1): Make sure articles are + not removed in groups that match `gnus-uncacheable-groups'. + + Reported and modifications based on discussions with Nuutti + Kotivuori . + +2001-08-04 Simon Josefsson + Trivial patch from Nuutti Kotivuori + + * gnus-cache.el (gnus-cache-possibly-update-active): New function; + calls `gnus-cache-update-active' if bounds has been extended. + +2001-08-04 10:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-mime-security-verify-or-decrypt): Insert + before remove. + (gnus-mime-security-show-details): Ditto. + +2001-08-04 Kai Gro,b_(Bjohann + + * nnmail.el (nnmail-split-fancy-with-parent): Correct `mapconcat' + syntax. Protect string-match against nil string and regexp. + +2001-08-03 19:00:00 ShengHuo ZHU + + * mm-util.el (mm-find-charset-region): Remove control-1. + +2001-08-03 17:00:00 ShengHuo ZHU + + * mm-decode.el (mm-readable-p): Emacs 20 takes one argument. + +2001-08-04 Simon Josefsson + + * smime.el (smime-sign-region, smime-encrypt-region): Fix details + buffer. Delete MIME-Version header. + +2001-08-03 Simon Josefsson + + * gnus-cache.el (gnus-cache-possibly-enter-article): The article + that is entered does not necessarily have the highest article + number in the group, so use `gnus-cache-possibly-alter-active' + instead of `gnus-cache-update-active'. + +2001-08-03 10:00:00 ShengHuo ZHU + + * mml2015.el (mml2015-gpg-extract-signature-details): Don't barf. + +2001-08-03 Simon Josefsson + + * mml.el (mml-menu): Rename from MML to Mime. Collapse Security + menu. + +2001-08-02 Katsumi Yamaoka + + * gnus.el (post-method): New group parameter. It also provides + the user option `gnus-post-method-alist' and the internal function + `gnus-parameter-post-method'. + + * gnus-msg.el (gnus-post-method): Bind the value of + `gnus-post-method' to the group parameter if it is defined. + +2001-08-02 Simon Josefsson + + * smime.el (smime-extra-arguments): Removed. + (smime-call-openssl-region): Don't use it. + +2001-08-02 Simon Josefsson + + * smime.el (smime-sign-region): Handle stderr. + (smime-encrypt-region): Ditto. + + * mm-view.el (mm-pkcs7-signed-magic): Make it a regexp. Don't + match the ASN.1 length bytes. + (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 + + * mml2015.el (mml2015-trust-boundaries-alist): Typo. + +2001-08-01 10:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-header-button-alist): References regexp. + +2001-08-01 Gerd Moellmann + + * mm-view.el (autoload): Don't autoload `diff-mode' if it's + already fboundp. Add INTERACTIVE arg to autoload form. + +2001-08-01 09:00:00 ShengHuo ZHU + + * nnslashdot.el (nnslashdot-init): Add as gnus buffer. + + * nnmail.el (nnmail-cache-open): Ditto. + +2001-07-31 21:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-button-fetch-group): Fix the regexp. + +2001-07-31 Katsumi Yamaoka + + * gnus-msg.el (gnus-post-method): Refer to `gnus-parameters'. + +2001-07-31 17:00:00 ShengHuo ZHU + Originally from Pavel Jan,Am(Bk + + * gnus-agent.el (gnus-agent-make-mode-line-string): New function. + (gnus-agent-toggle-plugged): Use it. + +2001-07-31 ShengHuo ZHU + + * gnus-start.el (gnus-startup-file-coding-system): Revert to binary. + (gnus-ding-file-coding-system): New variable. + (gnus-read-newsrc-el-file, gnus-save-newsrc-file) + (gnus-slave-save-newsrc): Use it. + +2001-07-31 Kai Gro,b_(Bjohann + + * gnus-delay.el (gnus-delay-initialize): Use standard define-key + syntax. + +2001-07-30 15:00:00 ShengHuo ZHU + Originally from Andreas Fuchs + + * mml2015.el (mml2015-trust-boundaries-alist): New variable. + (mml2015-gpg-pretty-print-fpr): New function. + (mml2015-gpg-extract-signature-details): More details, rename from + `m-g-e-from'. + (mml2015-gpg-verify): Use them. + (mml2015-gpg-clear-verify): Use them. + +2001-07-31 Simon Josefsson + + * mml-smime.el (mml-smime-sign, mml-smime-encrypt): Goto end of + buffer when done. + +2001-07-30 Simon Josefsson + + * smime.el (smime-call-openssl-region): Revert previous change, + just pass on buf to `call-process-region'. + (smime-verify-region): Doc fix. Don't message stuff. Use + `smime-new-details-buffer'. Inserts error messages into buffer. + (smime-noverify-region): Ditto. + (smime-decrypt-region): Ditto. Handles stderr separately. + (smime-verify-buffer, smime-noverify-buffer) + (smime-decrypt-buffer): Doc fix. + (smime-new-details-buffer): New function. + (smime-pkcs7-region, smime-pkcs7-certificates-region) + (smime-pkcs7-email-region): Use `smime-new-details-buffer'. + (smime-sign-region, smime-encrypt-region): Don't use + `insert-buffer'. + + * mml-smime.el (mml-smime-verify): Fix security button strings. + +2001-07-30 12:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-mime-save-part-and-strip): Save + gnus-article-mime-handles. + +2001-07-29 Simon Josefsson + + * mail-source.el (top-level): Require message for message-directory. + (mail-source-directory): Change default to message-directory. + + * smime.el (smime-keys, smime-CA-directory, smime-CA-file) + (smime-certificate-directory, smime-openssl-program) + (smime-encrypt-cipher, smime-dns-server): Fix doc (leading "*"). + (smime-extra-arguments): New variable. + (smime-dns-server): Fix customize group. + (smime-call-openssl-region): Use `smime-extra-arguments'. + +2001-07-29 Simon Josefsson + From Vladimir Volovich + + * smime.el (smime-call-openssl-region): Ignore stderr. + +2001-07-29 Simon Josefsson + From Christoph Conrad + + * gnus-agent.el (gnus-agent-save-group-info): Don't destroy active + file. + +2001-07-29 Simon Josefsson + + * mm-view.el (mm-view-pkcs7-decrypt): Adhere to `mm-decrypt-option'. + + Support S/MIME decryption. + + * mm-decode.el (mm-inline-media-tests): + (mm-inlined-types): + (mm-automatic-display): + (mm-attachment-override-types): Add application/{x-,}pkcs7-mime. + + * mm-view.el (mm-pkcs7-signed-magic): + (mm-pkcs7-enveloped-magic): New variables. + (mm-view-pkcs7-get-type): New function; identify PKCS#7 type. + (mm-view-pkcs7): New function; mm viewer for PKCS#7 blobs. + (mm-view-pkcs7-decrypt): New function; mm viewer for encrypted + PKCS#7 blobs. + + * smime.el (smime-decrypt-region): Expand keyfile. + +2001-07-29 Simon Josefsson + + * nntp.el (nntp-open-ssl-stream): Don't mess with internal + `ssl.el' variables. + + * gnus-agent.el (gnus-agent-save-group-info): Delete everything + but line instead of narrowing to it, because `nnmail-parse-active' + calls widen. Thanks to Christoph Conrad + . + +2001-07-29 Kai Gro,b_(Bjohann + + * gnus.el (gnus-summary-line-format): Mention `gnus-sum-thread-*' + for %B spec. + + * gnus-sum.el (gnus-summary-prepare-threads): If + gnus-sum-thread-tree-root is nil, use subject instead. + (gnus-sum-thread-tree-root, gnus-sum-thread-tree-single-indent) + (gnus-sum-thread-tree-vertical, gnus-sum-thread-tree-indent) + (gnus-sum-thread-tree-leaf-with-other) + (gnus-sum-thread-tree-single-leaf): Documentation. + (gnus-sum-thread-tree-single-indent): Allow nil. + +2001-07-28 09:00:00 ShengHuo ZHU + + * message.el (message-fill-paragraph): Do nothing if the user + wants filladapt-mode. + +2001-07-27 23:00:00 ShengHuo ZHU + + * mm-decode.el (mm-image-type-from-buffer): New function. + (mm-get-image): Use it. + +2001-07-27 18:00:00 ShengHuo ZHU + + * gnus.el (gnus-large-newsgroup): Add doc, "If it is nil, ..." + + * gnus-art.el (gnus-mime-view-all-parts): buffer-read-only covers + mm-display-parts too. + +2001-07-27 12:00:00 ShengHuo ZHU + + * nnfolder.el (nnfolder-request-accept-article): Bind + nntp-server-buffer. + + * nnmail.el (nnmail-parse-active): Read from buffer instead of + nntp-server-buffer. + +2001-07-27 11:00:00 ShengHuo ZHU + + * message.el (message-check-news-header-syntax): Use + message-post-method. + (message-send-news): Bind message-post-method. + +2001-07-27 07:00:00 ShengHuo ZHU + + * mml.el (mml-tweak-type-alist): New variable. + (mml-tweak-function-alist): New variable. + (mml-tweak-part): New function. + (mml-generate-mime-1): Use it. + +2001-07-26 22:00:00 ShengHuo ZHU + + * nnfolder.el (nnfolder-request-accept-article): Replace + nnfolder-request-list. + +2001-07-27 Simon Josefsson + + * nnimap.el (nnimap-open-server): Set nnimap-server-buffer if + nnoo-change-server failed to do it. + +2001-07-26 16:00:00 ShengHuo ZHU + + * gnus.el (gnus-parameters): Make it customizable. + +2001-07-26 15:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-mm-display-part): Narrow to point if eobp. + + * message.el (message-set-auto-save-file-name): More + poor-system-types. + + * mailcap.el (mailcap-parse-mimetypes): poor-system-types. + + * gnus-ems.el (nnheader-file-name-translation-alist): M$Windows-NT + supports +. + +2001-07-26 14:00:00 ShengHuo ZHU + + * mm-decode.el (mm-readable-p): New function. + (mm-inline-media-tests): Fix the default testers. + +2001-07-26 Simon Josefsson + + * nnimap.el (nnimap-version): Bump version number. + +2001-07-26 10:00:00 ShengHuo ZHU + From Steven E. Harris + + * nnheader.el (nnheader-translate-file-chars): cygwin32 is running + in M$Windows too. + +2001-07-26 Kai Gro,b_(Bjohann + + * gnus-delay.el (gnus-delay-send-drafts): Don't `error'. + +2001-07-25 21:00:00 ShengHuo ZHU + + * gnus-bcklg.el (gnus-backlog-shutdown): Make interactive. + + * mm-decode.el (mm-get-image): Guess then use the type. + + * gnus-art.el (gnus-mime-view-part-as-type): Don't copy cache. + +2001-07-25 12:54:00 Danny Siu + + * 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 + + * gnus-msg.el: Customization patch. + +2001-07-25 22:22:22 Raymond Scholz + + * nnmail.el (nnmail-split-fancy-with-parent-ignore-groups): New + variable. + (nnmail-split-fancy-with-parent): Ignore certain groups. + +2001-07-25 11:00:00 ShengHuo ZHU + + * gnus-util.el (gnus-byte-compile): New function. + (gnus-use-byte-compile): New variable. + (gnus-make-sort-function): Use it. + + * nnmail.el (nnmail-get-new-mail): Use it. + + * gnus-agent.el (gnus-category-make-function): Simple function or + compiled function. + (gnus-agent-fetch-group-1): Don't use (caaddr predicate). + + * gnus-gl.el (bbb-build-rate-command): Remove quote before lambda. + * gnus-topic.el (gnus-topic-sort-topics-1): Ditto. + (gnus-topic-sort-topics-1): Use gnus-byte-compile. + + * message.el (message-check-news-header-syntax): Remove quote. + +2001-07-24 19:00:00 ShengHuo ZHU + + * message.el (message-use-mail-followup-to): `t' is not a + documented value. + +2001-07-24 13:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-display-arrow): Test fboundp. + +2001-07-24 12:00:00 ShengHuo ZHU + + * mm-encode.el (mm-encode-buffer): Don't use 7bit encoding if + there are long lines. + +2001-07-24 Katsumi Yamaoka + + * dgnushack.el (copy-list): New compiler macro. + +2001-07-24 09:00:00 ShengHuo ZHU + + * message.el (message-bounce): If no Return-Path, the whole + content is considered as the original message. + + * nnml.el (nnml-check-directory-twice): New variable. + (nnml-article-to-file): Use it. + (nnml-retrieve-headers): Hack it. + +2001-07-24 02:00:00 ShengHuo ZHU + + * gnus-win.el (gnus-buffer-configuration): New configure. + + * gnus-art.el (gnus-mm-display-part): Don't select-window if it is + not alive. + + * mm-decode.el (mm-remove-part): Don't murder the current window (nil). + (mm-display-external): Use display-term configure. + +2001-07-24 Kai Gro,b_(Bjohann + + * 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 + + * gnus-sum.el (gnus-summary-line-format-alist): Add %B. + (gnus-summary-prepare-threads): Ditto. + + * gnus.el (gnus-summary-line-format): Add %B. + +2001-07-23 19:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-articles-to-read): Use gnus-group-decoded-name. + + * mm-util.el (mm-string-as-multibyte): New function. + + * nnmh.el (nnmh-request-list-1): Encode, not decode! + +2001-07-23 18:00:00 ShengHuo ZHU + + * mm-util.el (mm-universal-coding-system): New variable. + + * gnus-start.el (gnus-startup-file-coding-system): Use it. + + * score-mode.el (score-mode-coding-system): Use it. + +2001-07-23 Katsumi Yamaoka + + * gnus-start.el (gnus-setup-news): Call + `gnus-check-bogus-newsgroups' just after the native server is + opened. + +2001-07-23 Kai Gro,b_(Bjohann + + * nnmail.el (nnmail-do-request-post): Util function to be used by + `nnchoke-request-post' for all nnmail-derived backends. + + * nnml.el (nnml-request-post): Use it. + + * gnus.el (gnus-valid-select-methods): nnml is a post-mail + backend, for it groks nnml-request-post. + + * gnus-group.el (gnus-group-highlight, gnus-group-highlight-line): + Treat `mail-post' backends like `mail' backends, not like `news' + backends. + +2001-07-22 09:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-setup-message): make-local-hook. + +2001-07-22 Kai Gro,b_(Bjohann + + * gnus-delay.el (gnus-delay-article): Fix `read-string' for + XEmacs. Allow more units. Submitted by Karl Kleinpaste + , slightly changed by Kai. + + * message.el (message-check-news-header-syntax): When checking + whether the groups exist, check the right server based on + `gnus-post-method'. + +2001-07-21 Kai Gro,b_(Bjohann + + * gnus-delay.el: New file. + +2001-07-21 13:00:00 ShengHuo ZHU + + * mm-util.el (mm-read-coding-system): Take two arguments. + + * gnus-sum.el (gnus-summary-show-article): Use + mm-read-coding-system. + + * gnus-art.el (article-de-quoted-unreadable): + (article-de-base64-unreadable, article-wash-html): + (gnus-mime-inline-part, gnus-mime-view-part-as-charset): Ditto. + +2001-07-21 Kai Gro,b_(Bjohann + + * nnml.el (nnml-request-post): New function. Can be used for + annotations in nnml groups. + +2001-07-19 Katsumi Yamaoka + + * nntp.el (nntp-request-newgroups): Use UTC date for NEWGROUPS + command. + + * gnus-start.el (gnus-find-new-newsgroups): Use + `message-make-date' instead of `current-time-string'. + (gnus-ask-server-for-new-groups): Ditto. + (gnus-check-first-time-used): Ditto. + +2001-07-20 11:00:00 ShengHuo ZHU + + * gnus-score.el (gnus-home-score-file): nnheader-translate-file-chars. + +2001-07-18 Per Abrahamsen + + * message.el (message-shorten-references): Change `maxcount' and + `cut' to obey USEFOR draft 5. + +2001-07-12 Colin Walters + + * gnus-sum.el (gnus-summary-display-arrow): New variable. + (gnus-summary-set-article-display-arrow): New function. + (gnus-summary-goto-subject): Use it. + +2001-07-18 12:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-import-article): Insert date if + doesn't exist. + +2001-07-18 11:00:00 ShengHuo ZHU + + * mml.el (mml-content-type-parameters): New variable. + (mml-content-disposition-parameters): New variable. + (mml-insert-mime-headers): Use them. + (mml-parse-1): Accept charset. + +2001-07-17 22:00:00 ShengHuo ZHU + + * gnus-group.el (gnus-group-select-group): Doc fix. + + * gnus-eform.el (gnus-edit-form-done): Return nil if end-of-file. + +2001-07-17 Katsumi Yamaoka + + * dgnushack.el (dgnushack-make-auto-load): Advise `make-autoload' + to handle `define-derived-mode'. + +2001-07-16 12:00:00 ShengHuo ZHU + From: Stefan Monnier + + * message.el (message-mode): Use define-derived-mode. + (message-tab): message-completion-alist. + + * imap.el (imap-interactive-login): Use make-local-variable. + (imap-open): Ditto. + (imap-authenticate): Ditto. + + * gnus-msg.el (gnus-setup-message): Change-major-mode-hook. + + * gnus-art.el (gnus-article-edit-mode): Use define-derived-mode. + +2001-07-16 Kai Gro,b_(Bjohann + + * message.el (message-citation-line-function): Refer to + gnus-cite-attribution-suffix. + +2001-07-15 Pavel Jan,Am(Bk + + * gnus-art.el,...: Error convention changes. + +2001-07-13 20:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-rebuild-thread): Count hidden lines too. + +2001-07-13 20:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-read-group-data): Nuke emacs-lisp-mode-hook. + (nnrss-read-server-data): Ditto. + +2001-07-13 12:00:00 ShengHuo ZHU + + * 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 + + * gnus.el (gnus-summary-line-format): Add %o. + + * gnus-sum.el (gnus-summary-pipe-output): Don't configure as pipe + unless shell outputs something. + +2001-07-13 07:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-boring-article-headers): Better doc. + (article-hide-headers): Better regexp. + Suggested by Matt Swift . + + * nnheader.el (nnheader-max-head-length): Better doc. + (nnheader-header-value): Skip spaces. + (nnheader-parse-head): Remove space. + Suggested by Matt Swift . + + * gnus-sum.el (gnus-summary-show-raw-article): New function. + (gnus-get-newsgroup-headers): Remove space. + +2001-07-12 23:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-msg-treat-broken-reply-to): Add force. + (gnus-summary-reply): Use it. + (gnus-summary-reply-broken-reply-to): New function. + (gnus-msg-force-broken-reply-to): New function. + + * mm-view.el (mm-inline-text): Showing as text/plain when error. + +2001-07-12 21:00:00 ShengHuo ZHU + + * gnus-draft.el (gnus-draft-setup): Restore gnus-newsgroup-name. + +2001-07-12 15:00:00 ShengHuo ZHU + + * mm-decode.el (mm-external-terminal-program): New variable. + (mm-display-external): Use it. Use term to display when no + window-system. + +2001-07-12 Bj,Av(Brn Torkelsson + + * gnus-srvr.el (gnus-browse-make-menu-bar): Changed one of the + Browse->Next entries to Browse->Prev + +2001-07-11 22:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-inews-do-gcc): Don't test gnus-alive-p. + +2001-07-11 18:00:00 ShengHuo ZHU + + * mm-encode.el (mm-content-transfer-encoding-defaults): Use base64 + for the default encoding. + + * nnrss.el (nnrss-url-field): New field. + (nnrss-request-article): Add newsgroups. + + * nnfolder.el (nnfolder-read-folder): Force to use a multibyte buffer. + +2001-07-11 04:00:00 ShengHuo ZHU + + * nndraft.el (nndraft-request-restore-buffer): Don't remove Date. + + * gnus-draft.el (gnus-draft-edit-message): Remove Date here. + (gnus-draft-setup): Remove backlog. + +2001-07-10 Pavel Jan,Am(Bk + + * gnus-logic.el, gnus-srvr.el, gnus-vm.el, nnheaderxm.el, nnoo.el: + Cleanup. + +2001-07-09 23:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-bug): Erase buffer. + + * nnfolder.el (nnfolder-possibly-change-group): Don't create group. + +2001-07-09 19:00:00 ShengHuo ZHU + + * mm-decode.el (mm-attachment-override-p): Fix typo. + +2001-03-19 05:28:00 Katsumi Yamaoka + + * gnus-kill.el (gnus-execute): Work with the extra headers. + * gnus-sum.el (gnus-summary-execute-command): Ditto. + +2001-07-09 17:00:00 ShengHuo ZHU + + * mm-view.el (mm-inline-text): w3-coding-system-for-mime-charset + may not defined. From: Raja R Harinath . + + * message.el (message-send-mail-real-function): New variable. + (message-send-mail-partially, message-send-mail): + + * nngateway.el (nngateway-request-post): Use it. + + * gnus-agent.el (gnus-agentize): Use it. + + * nnsoup.el (nnsoup-old-functions, nnsoup-set-variables) + (nnsoup-revert-variables): Use it. + +2001-07-09 Colin Walters + + * mm-decode.el (mm-inline-media-tests): Default to displaying as + text/plain if the type doesn't match any other media types. + (mm-inlined-types): Doc fix. + (mm-display-inline): Revert previous change (now handled by a + default type in `mm-inline-media-tests'. + (mm-inlinable-p): Revive. + (mm-display-part): Call `mm-inlinable-p'. + (mm-attachment-override-p): Ditto. + (mm-inlined-p): Doc fix. + + * gnus-art.el (gnus-mime-display-single): Call `mm-inlinable-p' as + well as `mm-inlined-p'. + +2001-07-09 13:00:00 ShengHuo ZHU + + * 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 + + * message.el (message-use-mail-followup-to): New variable. + (message-get-reply-headers): Use it. + +2001-07-04 Gerd Moellmann + + * nnheader.el (nnheader-init-server-buffer): Make sure the + *nntpd* buffer is made multibyte instead of a random buffer. + +2001-07-09 12:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-get-newsgroup-headers-xover): Get headers only + when it returns headers. + +2001-07-07 Simon Josefsson + + * rfc2047.el (rfc2047-encode-message-header): Skip header when + trying to fold. Thanks to Colin Walters + + +2001-07-06 Simon Josefsson + + * imap.el (imap-parse-address-list, imap-parse-flag-list) + (imap-parse-body-extension, imap-parse-body-ext, imap-parse-body): + Add information in `assert's. + + * nnimap.el (nnimap-possibly-change-group): Ignore uidvalidity + changes. (From nnimaps' point of view, `nnimap-verify-uidvalidity' + and `nnimap-group-overview-filename', should handle all + change-of-uidvalidity related issues. But there may be other + problems.) + +2001-07-05 Colin Walters + + * rfc2047.el (rfc2047-encode-message-header): Don't include the + header name when folding. + +2001-07-05 Colin Walters + + * mm-decode.el (mm-inlined-types): Document relationship with + `mm-inline-media-tests'. + (mm-display-inline): Default to displaying as plain text if no + inlining handler is available. + (mm-inlinable-p): Remove. + (mm-inlined-p): Don't call `mm-inlinable-p'. + (mm-automatic-display-p): Ditto. + (mm-attachment-override-p): Ditto. + +2001-07-04 Simon Josefsson + + * nnimap.el (nnimap-importantize-dormant): New variable. + (nnimap-request-update-info-internal): Use it. + (nnimap-request-set-mark): Ditto. + +2001-07-04 Didier Verna + + * nntp.el (nntp-send-command): don't pass a buffer argument to + `point'. Only XEmacs accepts this. + * nntp.el (nntp-send-command-nodelete): ditto. + * nntp.el (nntp-send-command-and-decode): ditto. + +2001-07-04 Didier Verna + + * nntp.el (nntp-open-connection-function): doc update. + * nntp.el (nntp-pre-command): New. + * nntp.el (nntp-via-rlogin-command): New. + * nntp.el (nntp-via-telnet-command): New. + * nntp.el (nntp-via-telnet-switches): New. + * nntp.el (nntp-via-user-name): New. + * nntp.el (nntp-via-user-password): New. + * nntp.el (nntp-via-address): New. + * nntp.el (nntp-via-envuser): New. + * nntp.el (nntp-via-shell-prompt): New. + * nntp.el (nntp-open-telnet-stream): New. + * nntp.el (nntp-open-via-rlogin-and-telnet): New. + * nntp.el (nntp-open-via-telnet-and-telnet): New. + * nntp.el (nntp-wait-for): check for possibly echo'ed commands. + * nntp.el (nntp-send-command): ditto. + * nntp.el (nntp-send-command-nodelete): ditto. + * nntp.el (nntp-send-command-and-decode): ditto. + +2001-06-30 YAGI Tatsuya + Trivial patch. + + * gnus-start.el (gnus-check-first-time-used): Use `if' instead of + `when'. + +2001-07-03 Simon Josefsson + From Nuutti Kotivuori + + * flow-fill.el (fill-flowed): Use (1+ (point-at-eol)) instead. + +2001-07-03 Simon Josefsson + + * flow-fill.el (fill-flowed): If `fill-region' inserts empty line, + remove it (workaround XEmacs `fill-region' bug). + +2001-07-01 Simon Josefsson + + * nnimap.el (nnimap-date-days-ago): Defeat locale. + +2001-06-28 11:00:00 ShengHuo ZHU + + * mml2015.el (mml2015-format-error): New function. + (mml2015-mailcrypt-decrypt, mml2015-mailcrypt-clear-decrypt) + (mml2015-mailcrypt-verify, mml2015-gpg-clear-verify) + (mml2015-mailcrypt-clear-verify, mml2015-gpg-verify): Use it. + +2001-06-26 22:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-retrieve-headers): The description may not exist. + Suggested by Christoph Conrad . + + * gnus-sum.el (gnus-summary-set-local-parameters): Don't override + group variables. + +2001-06-25 10:00:00 ShengHuo ZHU + + * nnslashdot.el (nnslashdot-write-groups): Use gnus-prin1. + + * nnrss.el (nnrss-save-server-data): Bind print-level and print-length. + (nnrss-save-group-data): Ditto. + + * gnus-agent.el (gnus-agent-save-alist): Ditto. + +2001-06-25 Katsumi Yamaoka + + * message.el (message-do-send-housekeeping): Narrow to headers. + +2001-06-24 Simon Josefsson + + * rfc2047.el (rfc2047-fold-region): The check to skip WSP + insertion when breaking lines looked for " \t" instead of "[ \t]". + (rfc2047-encode-message-header): Fold lines even if + no QP encoding is done. + +2001-06-23 Simon Josefsson + From Samuel Tardieu + + * smime.el (smime-keys): Support additional certificates. + (smime-make-certfiles): New function. + (smime-sign-region): Use previous variables. + (smime-get-certfiles): New function. + (smime-sign-buffer): Use it. + (smime-verify-region): Support both CAfile and CApath. + +2001-06-23 Simon Josefsson + + * smime.el (smime-decrypt-region): Perhaps work. + +2001-06-22 10:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-copy-article-buffer): Typo. + +2001-04-06 Ralph Schleicher + + * mm-decode.el (mm-save-part): Rewrite file name. + (mm-file-name-rewrite-functions): New variable. + (mm-file-name-delete-whitespace): New function. + (mm-file-name-trim-whitespace): New function. + (mm-file-name-collapse-whitespace): New function. + (mm-file-name-replace-whitespace): New variable and function. + +2001-06-22 Simon Josefsson + + * message.el (message-make-date): Workaround locale for weekdays. + +2001-06-21 17:00:00 ShengHuo ZHU + + * message.el (message-goto-body): Return nil if not found. (revert!) + +2001-06-21 10:00:00 ShengHuo ZHU + From Fremlin + + * message.el (message-goto-body): Some messages have no header. + + * gnus-msg.el (gnus-copy-article-buffer): Use it. + +2001-06-21 Ralph Schleicher + + * nnultimate.el (nnultimate-retrieve-headers): Date fix. + +2001-06-21 10:00:00 ShengHuo ZHU + + * message.el (message-make-date): Add week day. + Suggested by Jason R. Mastaler . + +2001-06-19 Simon Josefsson + + * message.el (message-yank-prefix): Doc fix. + (message-yank-cited-prefix): Ditto. + (message-delete-not-region): Keep citation prefix on first line, + if possible and appropriate. + +2001-06-19 Simon Josefsson + + * imap.el (imap-process-connection-type): New variable. + (imap-kerberos4-open, imap-gssapi-open): Use it. This makes + recent `imtest's work completely (no line length issues), while + making making old `imtest's unusable. Thanks to NAGY Andras + for his work. + +2000-12-30 NAGY Andras + + * imap.el (imap-ssl-program): Add -quiet to shut up + OpenSSL/SSLeay's internal debug talk. + +2001-06-19 Matt Armstrong + + * imap.el (imap-parse-flag-list): Workaround bug in Courier IMAP + server. + +2001-06-19 10:00:00 ShengHuo ZHU + + * nnmail.el (nnmail-article-buffer): New variable. + (nnmail-split-incoming): Use it. + +2001-06-15 Eli Zaretskii + + * qp.el (quoted-printable-decode-region): If called interactively, + use coding-system-for-read. + +2001-06-16 09:00:00 ShengHuo ZHU + + * message.el (message-check-news-header-syntax): Check Reply-To. + +2001-06-16 08:00:00 ShengHuo ZHU + + * mml.el (mml-parse-1): Use message options. + + * message.el (message-do-fcc): Don't do anything if there is no + FCC. + +2001-06-16 Simon Josefsson + + * nnimap.el (nnimap-split-articles): Support 'junk to-groups. + (nnimap-expunge-search-string): New variable. + (nnimap-request-expire-articles): Use it. + +2001-06-15 19:00:00 ShengHuo ZHU + + * message.el (message-send-mail-with-qmail): wrong exit status is + 100 not 1. Reported by Paul Jarc . + +2001-06-15 09:00:00 ShengHuo ZHU + + * gnus-art.el (article-strip-multiple-blank-lines): Use + delete-region instead of replace-match. + +2001-06-14 16:00:00 ShengHuo ZHU + + * nnweb.el (nnweb-google-parse-1): Fix Google content regexp. + (nnweb-google-wash-article): Ditto. + +2001-06-14 Ferenc Wagner + + * nnweb.el (nnweb-google-parse-1): Fix Google url regexp. + +2001-06-13 Katsumi Yamaoka + + * gnus.el (gnus-define-group-parameter): Don't quote the defcustom + specs. + +2001-06-13 15:00:00 ShengHuo ZHU + + * gnus.el (gnus-email-address): Move it here. + + * gnus-art.el (article-de-quoted-unreadable): Read charset if + requested. + (article-de-base64-unreadable): Ditto. + (article-wash-html): Ditto. + +2001-06-12 14:00:00 ShengHuo ZHU + + * message.el (message-options-set-recipient): Don't add ", " + unless necessary. Suggested by Josh Huber . + +2001-06-12 12:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-group-alist): Use |fr| instead of [fr]. + +2001-06-12 11:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-plain-save-name): Use file-relative-name. + From Marc Lefranc . + + * nnrss.el (nnrss-node-text): Node might be nil. + +2001-06-11 10:00:00 ShengHuo ZHU + + * gnus-uu.el (gnus-uu-save-article): Use mml tag instead of + part. From Katsumi Yamaoka . + + * nnrss.el (nnrss-group-alist): More items. + +2001-06-09 23:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-node-text): Use cddr instead xml-node-children. + +2001-06-03 ShengHuo ZHU + Trivial patch from Dale Hagglund + + * gnus-mlspl.el (gnus-group-split-fancy): Fix generation of split + restrict clauses. + +2001-06-07 16:00:00 ShengHuo ZHU + + From Benjamin Rutt + + * message.el (message-wide-reply-confirm-recipients): New variable. + +2001-06-06 ShengHuo ZHU + Trivial patch from Mark Thomas + + * nnmail.el (nnmail-fix-eudora-headers): Change the In-Reply-To + fix so it works with XEmacs. + +2001-06-07 16:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-retrieve-headers): Support description as extra + headers. + +2001-06-07 15:00:00 ShengHuo ZHU + + * nnrss.el: Fix a few bugs. + +2001-06-05 Simon Josefsson + + * mm-decode.el (mm-handle-set-external-undisplayer): Don't + generate compiler warnings. From Alex Schroeder . + +2001-06-04 Hrvoje Niksic + + * mm-decode.el (mm-pipe-part): Bind coding-system-for-write to + binary so that we don't transmit ISO 2022 garbage to the process. + This is needed under XEmacs. + +2001-06-03 Simon Josefsson + + * imap.el (imap-ssl-open): Require ssl. (Otherwise ssl.el is + autoloaded incorrectly below because ssl-program-* is bound.) + Thanks to Amos Gouaux for report. + +2001-06-02 Simon Josefsson + + * imap.el (imap-kerberos4-open): + (imap-gssapi-open): + (imap-ssl-open): + (imap-network-open): + (imap-shell-open): + (imap-starttls-open): Set buffer to workaround spurious + `accept-process-output' buffer changes. Thanks to Mats Lidell + for report and partial patch and Jake + Colman for report. + +2001-05-31 13:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-catchup): New argument. + (gnus-summary-catchup-from-here): New function. + +2001-05-30 Kai Gro,b_(Bjohann + + * mm-view.el (mm-inline-image-xemacs): Insert newline, then move + back, then insert glyph. (Before, the glyph was inserted first, + then the newline.) This works around a behavior in XEmacs where + 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). + + * 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 + + * 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 + + * message.el (message-yank-cited-prefix): New variable. + (message-indent-citation): Use it. + + * mml2015.el (mml2015-mailcrypt-verify): Store gpg stderr output + as details. + (mml2015-mailcrypt-clear-verify): Ditto. + +2001-05-24 Kai Gro,b_(Bjohann + From Nevin Kapur . + + * gnus-sum.el (gnus-summary-default-high-score, + gnus-summary-default-low-score): New variables. + (gnus-summary-highlight): Use them. + +2001-05-16 Didier Verna + + * message.el (message-mail): pass the 'send-actions argument to + `message-setup'. + +2001-05-16 Simon Josefsson + From Raymond Scholz + + * gnus-art.el (gnus-mime-view-part-as-charset): + (gnus-mime-internalize-part): Doc fixes. + +2001-05-11 Simon Josefsson + + * gnus-start.el (gnus-ignored-newsgroups): Also ignore NNTP type + status lines without any text ("^215$"). + +2001-05-06 21:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-check-group): Reverse. + +2001-05-07 Simon Josefsson + + * message.el (message-get-reply-headers): + (message-followup): Fix typo, suggested by David Green + + +2001-05-05 15:00:00 ShengHuo ZHU + + * nnslashdot.el (nnslashdot-request-expire-articles): Fix. + + * nnrss.el (nnrss-open-server): Read server data when it is called. + (nnrss-request-expire-articles): Fix. + +2001-05-05 09:00:00 ShengHuo ZHU + + * message.el (message-do-send-housekeeping): mail-abbrevs may + rename buffer behind Gnus. + +2001-05-04 14:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-check-group): Use nnheader-translate-file-chars. + (nnrss-group-alist): Add more resources. + (nnrss-check-group): Ignore errors. + +2001-05-04 00:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-request-expire-articles): Correct the return value. + + * nnslashdot.el (nnslashdot-request-list): Add time. + (nnslashdot-request-expire-articles): New function. + + * gnus-start.el (gnus-check-bogus-newsgroups): Remove bogus + secondary methods too. + +2001-05-03 23:00:00 ShengHuo ZHU + + * message.el (message-use-followup-to): Set default value to t. + +2001-05-03 Florian Weimer + + * message.el (message-dont-reply-to-names): Fix documentation. + (message-get-reply-headers): Use Mail-Followup-To only for wide + replies. + +2001-05-03 12:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-request-expire-articles): Calculate # of days + correctly. + (nnrss-check-group): Use time. + +2001-05-01 19:21:19 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.03 is released. + +2001-05-01 19:06:21 Lars Magne Ingebrigtsen + + * nnultimate.el (nnultimate-topic-article-to-article): Use the + group. + +2001-04-24 19:50:14 Lars Magne Ingebrigtsen + + * gnus-srvr.el (gnus-server-insert-server-line): Add a space. + +2001-04-15 14:55:03 Lars Magne Ingebrigtsen + + * nnultimate.el (nnultimate-retrieve-headers): Return all + available headers. + + * gnus-sum.el (gnus-read-all-available-headers): New variable. + (gnus-get-newsgroup-headers-xover): Use it. + +2001-04-14 15:47:26 Lars Magne Ingebrigtsen + + * nnultimate.el (nnultimate-retrieve-headers): Clean up. + +2001-04-30 17:00:00 ShengHuo ZHU + + * nntp.el (nntp-retrieve-groups): Use throw instead of error. + +2001-04-29 09:00:00 ShengHuo ZHU + + * nnrss.el (nnrss-insert-w3): Use cache before I figure out how to + disable it. + + * gnus.el (gnus-info-nodes): Remove a few The's. + +2001-04-29 08:00:00 ShengHuo ZHU + + * mail-source.el (mail-source-movemail): Call-process may return a + signal description string. + + * gnus-start.el (gnus-read-newsrc-el-file): + gnus-newsrc-file-version may be nil. + + * nnmail.el (nnmail-get-new-mail): Use the exact file only. + Suggested by Michael Sperber [Mr. Preprocessor] + . + +2001-04-25 Per Abrahamsen + + * mm-uu.el (mm-uu-configure-list): Fixed customize type. + +2001-04-24 Hrvoje Niksic + + * mm-view.el (mm-display-inline-fontify): Allow XEmacs to fully + fontify HANDLE. + +2001-04-18 Simon Josefsson + + * smime.el (smime-ask-passphrase): Rework to return value. + (smime-sign-region): Rework to bind value and use it. + (smime-decrypt-region): Ditto. + +2001-04-18 Simon Josefsson + Trivial patch from Mathias Herberts + + * smime.el (smime-ask-passphrase): New function. + (smime-sign-region): Use it. + (smime-encrypt-cipher): New variable. + (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 + + * gnus.el: Oort Gnus v0.02 is released. + +2001-04-14 00:48:42 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.01 is released. + +2001-04-13 22:01:46 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-highlight): Highlight read + undownloaded articles as read articles. + + * gnus-agent.el (gnus-agent-get-undownloaded-list): Clean up. + (gnus-agent-get-undownloaded-list): Mark all undownloaded + articles, even read ones, as such. + + * gnus-sum.el (gnus-summary-find-matching): Clean up. + (gnus-find-matching-articles): New function. + (gnus-summary-limit-include-matching-articles): New command. + (gnus-summary-limit-include-thread): Include articles that have + matching subjects. + (gnus-offer-save-summaries): Clean up. + +2001-04-13 Kai Gro,b_(Bjohann + + * nnmail.el (nnmail-split-fancy-with-parent): Add docstring. + +2001-04-12 19:00:00 ShengHuo ZHU + From 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. + +2001-04-12 19:00:00 ShengHuo ZHU + + * message.el (message-cite-prefix-regexp): Use POSIX regexp if + 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. + +2001-04-10 Simon Josefsson + + * message.el (message-options-set-recipient): Look at Cc and Bcc too. + +2001-04-10 Colin Marquardt + + * message.el (message-send-mail): Improve the interaction with the + user. + +2001-04-10 Simon Josefsson + + * imap.el (imap-message-copy): Work around buggy servers that + doesn't send TRYCREATE tags. + +2001-04-09 01:15:54 Katsumi Yamaoka + + * gnus-start.el (gnus-read-newsrc-el-file): Work with Semi-gnusae. + +2001-04-05 21:43:25 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-update-summary-mark-positions): Use a valid + date. + +2001-04-04 16:13:17 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-quit): Check that the dribble buffer + lives. + +2001-04-02 00:40:12 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-parse-news-url): New function. + (gnus-button-handle-news): New function. + (gnus-button-alist): Point to new functions. + + * gnus-group.el (gnus-group-quit): Only mark buffer in non-empty. + + * gnus-start.el (gnus-read-newsrc-el-file): Nix out + gnus-format-specs. + + * message.el (message-check-news-header-syntax): Question even + when Gnus doesn't know the group names. + (message-send-news): Clean up. + + * gnus-start.el (gnus-dribble-read-file): Say whether Gnus was + exited on purpose without saving. + + * gnus-group.el (gnus-group-quit): Mark the dribble file as `Q'. + +2001-04-01 00:37:14 Lars Magne Ingebrigtsen + + * gnus-score.el (gnus-score-orphans): Clean up. + + * gnus-win.el (gnus-remove-some-windows): Leave one Gnus window. + + * gnus-sum.el (gnus-summary-exit): Kill the summary buffer a bit + later. + + * gnus-start.el (gnus-close-all-servers): Find the right items to + close. + + * qp.el (quoted-printable-decode-region): Just message + malformation; don't quit. + +2001-03-31 21:00:00 ShengHuo ZHU + From 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 + definition. Documentation changed to match the one in + `assq-delete-all'. + +2001-04-01 00:37:14 Lars Magne Ingebrigtsen + + * gnus-start.el (gnus-close-all-servers): New function. + + * gnus-srvr.el (gnus-server-close-all-servers): Clean up. + (gnus-server-remove-denials): Clean up. + + * gnus-sum.el (gnus-summary-sort-by-original): New command and + keystroke. + +2001-03-31 02:56:55 Lars Magne Ingebrigtsen + + * message.el (message-send-news): Message where we are sending. + (message-send-mail): Ditto. + + * gnus.el (gnus-server-string): New function. + + * gnus-sum.el (gnus-summary-up-thread): Doc fix. + + * mm-decode.el (mm-default-directory): Customized. + (mm-tmp-directory): Ditto. + + * gnus-sum.el (gnus-summary-catchup-and-exit): Doc fix. + (gnus-get-newsgroup-headers): Return -1 for articles without Lines + or Chars. + (gnus-summary-line-format-alist): ?l is now a string. + (gnus-summary-prepare-threads): Output ? for unknown lines. + (gnus-summary-insert-line): Ditto. + (gnus-summary-print-article): Unbalanced parentheses. + + * gnus-msg.el (gnus-inews-do-gcc): Check group to allow it to find + out whether new stuff has arrived. + +2001-03-31 02:14:38 Alan Shutko + + * gnus-sum.el: Let printing work on ttys on Emacs. + +2001-03-31 01:11:14 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-post-news): Add an empty Newsgroups header + when forcing news. + + * gnus-sum.el (gnus-summary-mark-article-as-replied): Make into a + command. + +2001-03-31 01:04:54 Francis Litterio + + * message.el (message-set-auto-save-file-name): Don't use + asterisks under nt. + +2001-03-31 00:03:42 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-inews-insert-draft-meta-information): Allow + lists of articles. + + * gnus-uu.el (gnus-uu-digest-mail-forward): Mark as forwarded. + + * gnus-msg.el (gnus-put-message): Clean up. + (gnus-summary-reply): Mark all replied-to articles as replied to. + (gnus-inews-add-send-actions): Also mark as forwarded. + (gnus-summary-mail-forward): Mark as forwarded. + + * gnus-sum.el (gnus-summary-mark-article-as-replied): Take a list + of articles. + (gnus-summary-mark-article-as-forwarded): Ditto. + + * gnus-msg.el (gnus-summary-resend-message): Mark article as + forwarded. + (gnus-summary-mail-forward): Clean up. + + * gnus.el (gnus-article-mark-lists): Added forward. + + * gnus-sum.el (gnus-forwarded-mark): New variable. + (gnus-summary-prepare-threads): Use it. + (gnus-summary-update-secondary-mark): Ditto. + (gnus-newsgroup-forwarded): New variable. + +2001-03-30 23:13:37 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-summary-reply): Allow very wide replies. + (gnus-summary-very-wide-reply): New command and keystroke. + (gnus-summary-very-wide-reply-with-original): Ditto. + + * gnus-score.el (gnus-adaptive-word-length-limit): New variable. + (gnus-score-adaptive): Use it. + + * gnus-start.el (gnus-get-unread-articles): Clean up. + +2001-03-21 20:00:43 Lars Magne Ingebrigtsen + + * nnultimate.el (nnultimate-retrieve-headers): Work for other + boards. + +2001-03-21 Didier Verna + + * gnus-start.el (gnus-subscribe-newsgroup-hooks): New. + * gnus-start.el (gnus-subscribe-newsgroup): use it. + +2001-03-15 09:47:23 Lars Magne Ingebrigtsen + + * nnultimate.el (nnultimate-retrieve-headers): Understand + long-form month names. + +2001-03-18 23:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-show-all-headers): + gnus-article-show-all-headers is broken. Use + gnus-summary-toggle-header instead. + + * mml2015.el (mml2015-gpg-extract-from): No error. + +2001-03-18 23:00:00 ShengHuo ZHU + From Bj,Ax(Brn Mork . + + * mml2015.el (mml2015-gpg-extract-from): New function. + (mml2015-gpg-verify): Use it. + (mml2015-gpg-clear-verify): Use it. + +2001-03-17 10:00:00 ShengHuo ZHU + + * message.el (message-setup-fill-variables): Use + fill-paragraph-function. + (message-fill-paragraph): Take an argument. + (message-newline-and-reformat): Take another argument. + +2001-03-16 20:00:00 ShengHuo ZHU + + * message.el (rmail-output): It is in rmailout.el not rmail.el. + +2001-03-16 16:00:00 ShengHuo ZHU + + * message.el (message-forward): local-variable-p takes an extra + argument in XEmacs. + +2001-03-16 Simon Josefsson + + * nnimap.el (nnimap-dont-use-nov-p): Renamed from + `nnimap-use-nov-p' (it really tested the negative). + (nnimap-retrieve-headers): Use it. + +2001-03-11 Kai Gro,b_(Bjohann + + * message.el (message-generate-headers-first): Update doc. + +2001-03-10 Matthias Wiehl + Trivial patch. + + * gnus.el (gnus-summary-line-format): Typo. + +2001-03-11 Simon Josefsson + + * 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 + + * gnus-score.el (gnus-summary-lower-thread): Typo. + +2001-03-14 19:00:00 ShengHuo ZHU + + * message.el (message-forward-decoded-p): New variable. + (message-forward-subject-author-subject): Use it. + (message-make-forward-subject): Use it. + (message-forward): Use it. + + * gnus-uu.el (gnus-uu-digest-mail-forward): Use it. + + * mm-util.el, message.el, rfc2047.el, gnus-sum.el, gnus-score.el: + Sync with Emacs 21 (tag EMACS_PRETEST_21_0_100). + +;;Has been fixed -- zsh. +;;2001-03-05 Dave Love +;; +;; * mm-util.el (mm-mime-mule-charset-alist): Fix utf-8 case. +;; Move it after definition of mm-coding-system-p. +;; +2001-03-01 Dave Love + + * mm-util.el (mm-inhibit-file-name-handlers): Add + image-file-handler. + +2001-02-11 Dave Love + + * message.el (message-signature-file): Fix doc, :type. + +2001-02-08 Dave Love + + * rfc2047.el (rfc2047-fold-region): Don't forward-char at EOB. + (message-posting-charset): Defvar when compiling again. + (rfc2047-encodable-p): Require message. + + * gnus-sum.el (gnus-alter-articles-to-read-function): + * gnus-score.el (gnus-score-after-write-file-function): Fix :type. + +2001-03-08 20:00:00 ShengHuo ZHU + + * 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'. + +2001-03-07 13:00:00 ShengHuo ZHU + + * nndraft.el (nndraft-request-group): Restore auto save files if + the original files do not exist. + +2001-03-07 11:00:00 ShengHuo ZHU + + * gnus-score.el (gnus-score-find-bnews): Print messages on illegal + SCORE paths. + + * mm-decode.el (mm-dissect-buffer): Call + mail-extract-address-components only if necessary. + +2001-03-06 13:00:00 ShengHuo ZHU + + * gnus-score.el (gnus-score-find-bnews): Maybe there is no + directory part. + (gnus-score-search-global-directories): Use file-directory-p. + + * gnus-score.el (gnus-score-score-files-1): Use + gnus-kill-files-directory. + From Adrian Aichner . + +2001-03-05 08:00:00 ShengHuo ZHU + + * gnus.el (charset): Move here from gnus-sum.el. + +2001-03-04 11:00:00 ShengHuo ZHU + + * mml.el (mml-preview): Disable local map. + + * gnus-sum.el (gnus-summary-make-menu-bar): Make + gnus-article-post-menu here. + + * gnus-art.el (gnus-article-make-menu-bar): Make summary-menu bar + if it has not been made. + +2001-03-02 02:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-article-describe-key): Map key to event. + (gnus-article-describe-key-briefly): Ditto + +2001-03-01 23:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-limit-include-expunged): Fix. + +2001-03-01 22:00:00 ShengHuo ZHU + From Katsumi Yamaoka . + + * dgnushack.el (coerce, merge, subseq): defmacro. + +2001-03-01 22:00:00 ShengHuo ZHU + + * lpath.el (nndraft-request-group): Move it here from nndraft.el. + A fake defalias in nndraft.el results a not-activated bug in + uncompiled versions. + +2001-02-26 11:27:27 Paul Jarc + Committed by ShengHuo ZHU + + * gnus-util.el (gnus-split-references): Handle malformed References:. + +2001-02-26 08:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-article-mime-part-status): 1 part. + +2001-02-25 10:00:00 ShengHuo ZHU + From NAGY Andras . + + * gnus.el (gnus-parameters): Typo. + +2001-02-24 00:00:00 ShengHuo ZHU + + * gnus.el (gnus-read-method): Remove redundancy. + +2001-02-23 23:00:00 ShengHuo ZHU + + * nnslashdot.el (nnslashdot-backslash-url): New variable. + (nnslashdot-request-list): Use it. + +2001-02-23 22:00:00 ShengHuo ZHU + + * nnml.el (nnml-generate-active-info): Fix the case when there is + no file. + + * gnus-sum.el (gnus-summary-import-article): Display it. Enable edit. + (gnus-summary-create-article): New function. + + * gnus-group.el (gnus-group-mark-article-read): New function. + + * gnus-msg.el (gnus-inews-do-gcc): Use it. + + * gnus-art.el (gnus-article-edit-article): Set modified-p nil. + +2001-02-23 17:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-article-edit-done): Don't use + gnus-article-edit-exit. + (gnus-article-edit-exit): Confirm and insert original-article-buffer. + + * gnus.el (gnus-parameters): New variable. + Suggested by NAGY Andras . + (gnus-parameters-get-parameter): New function. + (gnus-group-find-parameter): Use it. + +2001-02-23 Simon Josefsson + + * gnus-msg.el (gnus-post-method): Fix documentation to reflect + change of default value to `current'. + +2001-02-23 08:00:00 ShengHuo ZHU + + * nneething.el (nneething-get-head): Insert unreadable file too. + +2001-02-22 23:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-insert-articles): Remove fetched headers. + + * webmail.el (webmail-type-definition): Deja is bought by google. + +2001-02-22 22:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-fetch-headers): New function. + (gnus-select-newsgroup): Use it. + (gnus-summary-insert-articles): New function. + (gnus-summary-insert-old-articles): New function. + (gnus-summary-insert-new-articles): New function. + + * gnus-group.el (gnus-group-prepare-flat-list-dead): Use decoded-name. + (gnus-group-list-active): Ditto. + * gnus-sum.el (gnus-set-mode-line): Ditto. + (gnus-summary-read-group-1): Ditto. + +2001-02-21 15:00:00 ShengHuo ZHU + + * gnus-topic.el (gnus-topic-get-new-news-this-topic): Redraw the + current topic. + +2001-02-21 01:00:00 ShengHuo ZHU + + * smiley.el (gnus-smiley-display): Don't do widening. + + * smiley-ems.el (gnus-smiley-display): Don't do widening. Smiley + within body. + + * gnus-msg.el (gnus-inews-do-gcc): Activate group anyway. + + * gnus-art.el (gnus-mime-display-multipart-alternative-as-mixed): + New variable. + (gnus-mime-display-multipart-related-as-mixed): New variable. + (gnus-mime-display-part): Use them. + +2001-02-20 16:00:00 ShengHuo ZHU + + * gnus-start.el (gnus-setup-news): Allow gnus-group-line-format to be + something special. + +2001-02-20 00:00:00 ShengHuo ZHU + + * nnweb.el (nnweb-request-group): Set nnweb-group anyway. + (nnweb-request-article): Call reference if exists. + (nnweb-type-definition): Dejanews is bought by google.com. + Beta! + +2001-02-19 19:00:00 ShengHuo ZHU + + * gnus-draft.el (gnus-draft-reminder): "Confirm to exit?" + +2001-02-19 Kai Gro,b_(Bjohann + + * gnus-sum.el (gnus-thread-sort-functions): Doc fix. Refer to + gnus-article-sort-functions. + (gnus-article-sort-functions): Doc fix. Refer to + gnus-thread-sort-functions. + +2001-02-18 20:00:00 ShengHuo ZHU + From 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. + +2001-02-17 13:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-configure-posting-styles): Match header in + gnus-article-copy. + +2001-02-16 22:00:00 ShengHuo ZHU + + * message.el (message-do-send-housekeeping): Rename to a better + name. + +2001-02-16 18:00:00 ShengHuo ZHU + + * message.el (message-cancel-news): Check article first, then ask + yes or no. + +2001-02-16 14:00:00 ShengHuo ZHU + + * mm-uu.el (mm-uu-type-alist): Add emacs-sources. + +2001-02-16 11:00:00 ShengHuo ZHU + + * gnus-range.el (gnus-range-normalize): New function. + +2001-02-15 NAGY Andras + + * imap.el (imap-gssapi-open): Set imap-c-l-s-first. + +2001-02-14 21:00:00 ShengHuo ZHU + + * gnus-srvr.el (gnus-server-regenerate-server): Use gnus-get-function. + + * nnagent.el (nnagent-request-regenerate): New function. + + * nnfolder.el (nnfolder-request-regenerate): New deffoo. + + * nnml.el (nnml-generate-nov-databases): Accept argument + server. Don't open server if it is opened. + (nnml-request-regenerate): Use it. Change to deffoo. + +2001-02-14 Katsumi Yamaoka + Committed by ShengHuo ZHU + + * gnus.el (gnus-define-group-parameter): Fix. + +2001-02-14 15:00:00 ShengHuo ZHU + + * gnus.el (gnus-define-group-parameter): Improved. + + * gnus-sum.el (charset): Define parameter. + (ignored-charsets): Ditto. + (gnus-summary-setup-default-charset): Use them. + + * gnus-start.el (gnus-read-descriptions-file): Use them. + + * gnus-cus.el (gnus-group-parameters): Remove them. + +2001-02-14 00:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-print-article): Redo highlight. + +2001-02-13 21:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-read-group-1): Remove + gnus-summary-set-local-parameters. + (gnus-summary-setup-buffer): Put it here. + +2001-02-13 20:00:00 ShengHuo ZHU + + * gnus.el (to-address): Define parameter. + (to-list): Ditto. + * gnus-art.el (article-hide-boring-headers): Use them. + * gnus-msg.el (gnus-post-news): Ditto. + * gnus-cus.el (gnus-group-parameters): Remove them. + +2001-02-13 19:00:00 ShengHuo ZHU + + * gnus-draft.el (gnus-draft-reminder): New function. + + * gnus-art.el (gnus-sender-save-name): New function. + +2001-02-13 18:00:00 ShengHuo ZHU + + * mm-util.el (mm-mime-charset): Error message. + +2001-02-13 11:00:00 ShengHuo ZHU + + * message.el (message-check-news-body-syntax): Don't check mml lines. + +2001-02-12 11:00:00 ShengHuo ZHU + + * gnus-topic.el (gnus-subscribe-topics): Return nil if not + subscribe. + + * gnus-start.el (gnus-call-subscribe-functions): New function. + (gnus-find-new-newsgroups): Use it. + (gnus-ask-server-for-new-groups): Use it. + (gnus-check-first-time-used): Use it. + (gnus-subscribe-newsgroup-method): Grok a list of functions. + (gnus-subscribe-options-newsgroup-method): Ditto. + (gnus-subscribe-hierarchically): Return gnus-subscribe-newsgroup's + return . + +2001-02-12 Kai Gro,b_(Bjohann + + * gnus-cus.el (gnus-score-customize): Doc fix. + +2001-02-11 Jesper Harder + + * dgnushack.el (my-getenv): Typo. + +2001-02-11 11:00:00 ShengHuo ZHU + + * dgnushack.el (dgnushack-make-load): Don't autoload smiley functions. + +2001-02-11 09:00:00 ShengHuo ZHU + + * gnus-group.el (gnus-group-suspend): Offer save summaries. + + * gnus-art.el (gnus-treat-leading-whitespace): New variable. + (gnus-treatment-function-alist): Use it. + (article-remove-leading-whitespace): New function. + (gnus-article-make-menu-bar): Use it. + + * gnus-sum.el (gnus-summary-wash-empty-map): Add + remove-leading-whitespace. + (gnus-summary-wash-map): Bind strip-headers-in-body to `W a', + because of conflict. + +2001-02-09 23:00:00 ShengHuo ZHU + + * Makefile.in: Hack generating gnus-load.el. + * dgnushack.el: Ditto. + * gnus-load.el: Remove it. + +2001-02-09 20:00:00 ShengHuo ZHU + + * dgnushack.el : Add URLDIR. + + * Makefile.in (EMACS_COMP): Ditto. + +2001-02-09 19:00:00 ShengHuo ZHU + + * gnus-cus.el (gnus-score-customize): Error on no score file. + +2001-02-09 08:00:00 ShengHuo ZHU + + * mm-decode.el (mm-merge-handles): New function. + + * mm-view.el (mm-inline-message): Use it. + (mm-view-message): Ditto. + + * mm-partial.el (mm-inline-partial): Ditto. + + * mm-extern.el (mm-inline-external-body): Ditto. + + * gnus-art.el (gnus-mime-view-part): Ditto. + (gnus-mime-view-part-as-type): Ditto. + (gnus-mime-save-part-and-strip): Prevent users to strip in some + cases. + +2001-02-08 20:00:00 ShengHuo ZHU + + * message.el (message-cancel-news): Allow to shoot foot. + (message-supersede): Ditto. + +2001-02-08 Tommi Vainikainen + Trivial patch. + + * gnus-sum.el (gnus-simplify-subject-re): Use + message-subject-re-regexp. + +2001-02-08 18:00:00 ShengHuo ZHU + + * nnmail.el (nnmail-expiry-target-group): Bind + nnmail-cache-accepted-message-ids to nil. + + * gnus-xmas.el (gnus-xmas-article-display-xface): Use binary + coding system. + +2001-02-07 23:00:00 ShengHuo ZHU + + * qp.el (quoted-printable-encode-region): Make sure characters are + between 00 and FF. Don't check charset. + + * mm-encode.el (mm-encode-content-transfer-encoding): Use unibyte + in Emacs 20. + * rfc2047.el (rfc2047-q-encode-region): Ditto. + +2001-02-07 11:00:00 ShengHuo ZHU + + * message.el (message-make-forward-subject): Argument decoded. + (message-forward): Use it when digest. + + * gnus-uu.el (gnus-uu-grab-articles): Shoot down original article + buffer. + +2001-02-07 Kai Gro,b_(Bjohann + + * message.el (message-generate-headers-first): Doc fix. + +2001-02-07 10:00:00 ShengHuo ZHU + + * gnus-art.el (article-make-date-line): Error proof. + +2001-02-06 21:00:00 ShengHuo ZHU + + * gnus-group.el (gnus-group-listing-limit): New variable. + (gnus-group-prepare-flat-list-dead): Use old trick to speed up. + + * gnus-topic.el (gnus-group-prepare-topics): Use gnus-killed-hashtb. + +2001-02-06 18:00:00 ShengHuo ZHU + + * message.el (message-newline-and-reformat): Special case for + breaking at BOL. + +2001-02-06 Per Abrahamsen + + * gnus-uu.el (gnus-uu-save-article): Make the topics summary a + message/rfc822. + +2001-02-06 09:00:00 ShengHuo ZHU + + * message.el (message-encode-message-body): Don't insert + Content-Type if it is inside a mail. + +2001-02-06 02:00:00 ShengHuo ZHU + + * gnus-xmas.el (gnus-xmas-article-menu-add): Add + gnus-article-commands-menu. + + * gnus-sum.el (gnus-summary-make-menu-bar): Don't share menu bar + in Emacs. + + * gnus-start.el (gnus-read-descriptions-file): Use + gnus-group-name-charset and gnus-group-charset-alist. + +2001-02-04 23:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-mark-as-processable): Understand + active region. + + * gnus-start.el (gnus-group-change-level): Remove from both + gnus-zombie-list and gnus-killed-list. + +2001-02-04 11:00:00 ShengHuo ZHU + + * gnus-start.el (gnus-subscribe-options-newsgroup-method): Add + gnus-subscribe-topics. + + * gnus-cus.el (gnus-extra-topic-parameters): Fix doc. + +2001-02-04 11:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-article-make-menu-bar): Make + gnus-article-post-menu. + + * gnus-xmas.el (gnus-xmas-article-menu-add): Add post menu. + + * gnus-sum.el (gnus-summary-make-menu-bar): Use t if XEmacs. + + * gnus-group.el (gnus-group-make-menu-bar): Ditto. + + * message.el (message-mode-menu): Ditto. + + * gnus-art.el (defvar): eval-when-compile. + +2001-02-02 17:00:00 ShengHuo ZHU + + * gnus-agent.el (gnus-agentize): Fix doc. + +2001-02-02 Karl Kleinpaste + + * mml.el (mml-preview): Bind `q'. + +2001-02-02 12:00:00 ShengHuo ZHU + + * mm-util.el (mm-mime-mule-charset-alist): non-Mule case. + +2001-01-31 Dave Love + + * mm-util.el (mm-mime-mule-charset-alist) + (mm-find-mime-charset-region): Consider mule-utf-8. + +2001-01-31 Dave Love + + * gnus-art.el (gnus-article-x-face-command) + (gnus-treat-display-xface, gnus-treat-display-smileys): Add + :version. + +2001-01-26 Dave Love + + * mm-util.el (mm-multibyte-string-p): New. + +;; * qp.el: Remove un-logged bogus changes from 2000-12-20. +;; (quoted-printable-encode-region): Doc fix. Don't call +;; string-as-multibyte on class. Clarify line-folding. + (quoted-printable-encode-string): Make temp buffer inherit + string's multibyteness. + +2001-01-23 Gerd Moellmann + + * nnheader.el (toplevel): Don't require `gnus-util' at + compile-time; this creates a circular dependency, and prevents + a bootstrap. + +2001-01-22 Andreas Schwab + + * nnheader.el (gnus-delete-line): Autoload it as a macro. + +2001-01-31 18:00:00 ShengHuo ZHU + + * nnmail.el (nnmail-remove-list-identifiers): Use consp. + + * gnus-art.el (article-hide-list-identifiers): Ditto. + + * gnus-sum.el (gnus-summary-remove-list-identifiers): Ditto. + +2001-01-31 15:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-remove-list-identifiers): Similar. + + * gnus-art.el (article-hide-list-identifiers): Similar. + +2001-01-31 Karl Kleinpaste + + * nnmail.el (nnmail-remove-list-identifiers): Improved. + +2001-01-31 09:00:00 ShengHuo ZHU + + * gnus-score.el (gnus-summary-score-entry): match may be an integer. + +2001-01-30 10:00:00 ShengHuo ZHU + + * gnus-util.el (gnus-string-equal): New function. + + * gnus-art.el (article-hide-boring-headers): Use it. + +2001-01-27 Karl Kleinpaste + + * gnus-art.el (gnus-article-banner-alist): eGroups new banner. + +2001-01-27 00:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-msg-mail): Support switch-action. + +2001-01-26 08:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-summary-save-in-pipe): Prompt for saving + command if there is not last-saver. + +2001-01-24 19:00:00 ShengHuo ZHU + + * nntp.el (nntp-open-connection): 201 is possible. + +2001-01-24 18:00:00 ShengHuo ZHU + + * rfc2047.el (rfc2047-encode): MIME charset is not coding system. + (rfc2047-charset-encoding-alist): Add big5. + +2001-01-24 17:00:00 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-add-server): Redraw the line. + (gnus-agent-remove-server): Ditto. + (autoload): gnus-server-update-server. + + * gnus-srvr.el (gnus-server-line-format): Add %a. + (gnus-server-line-format-alist): Add gnus-tmp-agent. + (gnus-server-insert-server-line): Use it. + +2001-01-24 09:00:00 ShengHuo ZHU + + * mm-util.el (mm-mime-mule-charset-alist): Preferred MIME names + GB2312 and Big5. + +2001-01-24 Simon Josefsson + + * mail-source.el (mail-sources): Add :program specifier to IMAP + mail source. + (mail-source-fetch-imap): Map :program to `imap-shell-program'. + +2001-01-24 08:00:00 ShengHuo ZHU + + * gnus-score.el (gnus-score-lower-thread): Fix a doc typo. + +2001-01-24 12:22:47 Lars Magne Ingebrigtsen + + * nntp.el (nntp-wait-for): Return the success code. + (nntp-open-connection): Use it. + +2001-01-11 11:49:02 Lars Magne Ingebrigtsen + + * gnus-int.el (gnus-check-server): Allow breaking the opening. + +2001-01-23 11:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-print-article): Remove process mark. + +2001-01-22 17:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-print-article): Take one prefix + argument. Allow to print several articles in one file. + +2001-01-21 12:00:00 ShengHuo ZHU + + * webmail.el (webmail-type-definition): netaddress changes. + +2001-01-21 00:00:00 ShengHuo ZHU + + * gnus.el: Fix copyright. Remove trailing spaces. + + * message.el (message-forward): Use mule4. + +2001-01-20 09:00:00 ShengHuo ZHU + + * mm-util.el (mm-string-as-unibyte): New function. + + * message.el (message-forward): Use it. + +2001-01-19 23:00:00 ShengHuo ZHU + + * message.el (message-cite-original-without-signature): Don't peel + off the blank line. + (message-get-reply-headers): Add Cc if it is not in follow-to. + +2001-01-20 Simon Josefsson + + * mm-decode.el (mm-handle-multipart-from): Add. + (mm-dissect-buffer): Save From: header value. + (mm-security-from): Remove. + (mm-possibly-verify-or-decrypt): Don't set mm-security-from. + + * mml-smime.el (mml-smime-verify): Use `mm-handle-multipart-from' + instead of `mml-security-from'. Protect null from value. + +2001-01-20 Simon Josefsson + + * mailcap.el (mailcap-mime-data): Run `gnumeric' on + application/vnd.ms-excel attachments. + +2001-01-19 Simon Josefsson + + * gnus-art.el (gnus-button-alist): Add `?=' to mailto URL regexp. + +2001-01-19 13:00:00 ShengHuo ZHU + + * message.el (message-ignored-mail-headers): Ditto. + +2001-01-19 Simon Josefsson + + * message.el (message-ignored-news-headers): Only search beginning + of line. + +2001-01-19 ShengHuo Zhu + Trivial patch from Alberto Lusiani + + * message.el (message-send-mail): Content-Type may not be there. + +2001-01-18 23:00:00 ShengHuo ZHU + + * gnus-ems.el (gnus-article-display-xface): Add BUFFER. + * gnus-xmas.el (gnus-xmas-article-display-xface): Ditto. + + * gnus-art.el (article-display-x-face): Insert X-Face if there is + not. + +2001-01-18 19:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-read-group-1): Don't test dead + non-native groups. + +2001-01-18 18:00:00 ShengHuo ZHU + + * message.el (message-yank-original): Understand + universal-argument. + +2001-01-18 16:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-boring-article-headers): Add to-address. + (article-hide-boring-headers): Ditto. + + * mm-view.el (mm-inline-message): Insert a newline unless bolp. + +2001-01-18 08:00:00 ShengHuo ZHU + + * rfc2047.el (rfc2047-fold-region): Don't insert LWSP if there is + one. + +2001-01-16 Simon Josefsson + + * message.el (message-make-in-reply-to): Add comment to message-id + (old syntax, see 2000-08-02 change). + +2001-01-16 13:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-url-mailto): Use gnus-msg-mail. + (gnus-button-mailto): Setup message. Moved to gnus-msg.el. + (gnus-button-reply): Ditto. + +2001-01-16 Katsumi Yamaoka + + * gnus-art.el (article-display-x-face): Fix. + +2001-01-15 16:00:00 ShengHuo ZHU + + * gnus-art.el (article-display-x-face): Use + gnus-original-article-buffer. + +2001-01-15 Jack Twilley + + * message.el (message-add-header): Move to point-max. + +2001-01-15 Simon Josefsson + + * smime.el (smime-CA-directory, smime-CA-file): Change default to + nil, improve documentation. + (smime-certificate-directory): Comment out false hints (until it + is implemented). + + * mml-smime.el (mml-smime-sign): Place user in customize buffer if + there aren't any keys. + (mml-smime-verify): If smime-CA-{file,directory} set, also try to + verify certificate. Default is changed to only check integrity. + Improved security status texts. If a certificate doesn't contain + a email address, don't fail. + + * smime.el (smime-noverify-region): + (smime-noverify-buffer): New functions. Verifies integrity only. + +2001-01-12 22:00:00 ShengHuo ZHU + + * gnus-group.el (gnus-group-sort-by-score): Reverse order. + +2001-01-12 17:00:00 ShengHuo ZHU + + * gnus-win.el (gnus-configure-windows): switch-to-buffer in XEmacs. + (gnus-remove-some-windows): Ditto. + +2001-01-12 14:00:00 ShengHuo ZHU + + * gnus-art.el (article-make-date-line): 11th. + +2001-01-11 23:00:00 ShengHuo ZHU + + * mml2015.el (mml2015-gpg-encrypt): Remove CR. + (mml2015-gpg-sign): Ditto. + +2001-01-10 14:00:00 ShengHuo ZHU + + * gnus.el: Sync with EMACS_PRETEST_21_0_95. + * gnus.el (gnus-default-posting-charset): Bogus. Removed. + +2001-01-08 Dave Love + + * mm-encode.el (mm-qp-or-base64): Don't base64 for the sake of a + single character. + + * mm-util.el (mm-mime-mule-charset-alist): Add Latin-{8,9}. + + * message.el: Doc and message fixes. + (message-send-rename-function) + (message-make-forward-subject-function) + (message-send-mail-function, message-reply-to-function) + (message-wide-reply-to-function, message-followup-to-function) + (message-distribution-function, message-auto-save-directory): Fix + :type. + + * gnus/mml.el (mml-parse-1): Frob mml-confirmation-set when + proceeding after warnings. Amend multipart warning message. + +2001-01-04 Dave Love + + * gnus-util.el (nnmail-pathname-coding-system): Defvar when + compiling. + (gnus-make-directory): Require nnmail. + + * mm-decode.el (mm-inline-media-tests): Add + image/x-portable-bitmap. + (mm-get-image): Grok pbm. + +2001-01-10 Paul Stevenson + + * nnvirtual.el (nnvirtual-request-expire-articles): delq nil. + +2001-01-09 Didier Verna + + * dgnushack.el (dgnushack-compile): give a dummy value to + `gnus-xmas-glyph-directory' for the time of compilation. + * gnus-agent.el: moved some XEmacs specific hook add-ons from + `gnus-xmas-[re]define' to avoid loosing user custom settings. + * gnus-art.el: ditto. + * gnus-group.el: ditto. + * gnus-salt.el: ditto. + * gnus-sum.el: ditto. + * gnus-topic.el: ditto. + * gnus-xmas.el (gnus-xmas-define): see above. + * gnus-xmas.el (gnus-xmas-redefine): see above. + * gnus-xmas.el (gnus-xmas-glyph-directory): generate a + non-continuable error when the directory can't be found. + +2001-01-09 01:00:00 ShengHuo ZHU + + * mm-decode.el (mm-interactively-view-part): Don't copy-sequence + handle. + * gnus-art.el (gnus-mime-view-part): Copy it. + (gnus-mime-view-part-as-type): Add into gnus-article-mime-handles. + +2001-01-09 Michael Downes + + * gnus-sum.el (gnus-summary-read-group-1): More useful message. + +2001-01-08 23:00:00 ShengHuo ZHU + + * nnmail.el (nnmail-get-new-mail): Find group only if file is not + orig-file. Use ',source. + +2001-01-08 22:00:00 ShengHuo ZHU + + * gnus-xmas.el (gnus-xmas-modeline-glyph): + (gnus-xmas-group-startup-message): + Detect gnus-xmas-glyph-directory when it is nil. + +2001-01-08 09:00:00 ShengHuo ZHU + + * pop3.el (pop3-get-message-count): Andrew Innes + 's patch of 1999-12-01 was not fully committed. + +2001-01-05 06:49:37 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-fetch-session): Say what we quit. + + * time-date.el (time-to-number-of-days): New function. + +2001-01-04 11:06:14 Gregory Chernov + Trivial patch. + + * nnslashdot.el (nnslashdot-request-list): Always get the right + sid. + +2001-01-05 00:00:00 ShengHuo ZHU + + * message.el (message-minibuffer-local-map): New keymap. + (message-read-from-minibuffer): Use it. + * gnus-msg.el (gnus-summary-resend-message): Use it + +2001-01-04 22:00:00 ShengHuo ZHU + + * gnus-start.el (gnus-display-time-event-handler): New function. + (gnus-after-getting-new-news-hook): Use it. + +2001-01-03 07:26:58 Lars Magne Ingebrigtsen + + * message.el (message-ignored-mail-headers): Add draft header. + +2001-01-02 06:28:28 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-expire-articles): Don't save + excursion. + + * nnslashdot.el (nnslashdot-request-list): Get the right year. + +2001-01-01 00:52:44 Ed L. Cashin + A revoked patch. + + * gnus-sum.el (gnus-summary-expire-articles): Save excursion. + +2000-12-31 11:00:00 ShengHuo ZHU + + * qp.el (quoted-printable-decode-region): Don't backward-char. + +2000-12-31 03:57:31 Lars Magne Ingebrigtsen + + * gnus-draft.el: Mark articles as replied. + + * gnus-sum.el (gnus-summary-add-mark): New function. + + * gnus-group.el (gnus-add-mark): New function. + + * gnus-sum.el (gnus-summary-buffer-name): New function. + (gnus-summary-setup-buffer): Use it. + + * gnus-draft.el: Set things up with the right post method and + stuff. + + * message.el (message-ignored-news-headers): Remove X-Draft-From. + + * gnus-msg.el (gnus-inews-insert-draft-meta-information): New function. + + * gnus.el (gnus-draft-meta-information-header): New variable. + +2000-12-30 00:17:38 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-treatment-function-alist): Move the date + functions before the header sorting functions. + + * mm-uu.el (mm-uu-pgp-signed-extract-1): Unquote "- " quotes. + + * dgnushack.el (dgnushack-compile): Message whether there is w3. + Don't (push "/usr/share/emacs/site-lisp" load-path). + + * gnus-cite.el (gnus-article-fill-cited-article): Don't add space + to empty fill prefixes. + +2000-12-30 10:00:00 ShengHuo ZHU + + * nntp.el (nntp-open-connection): Kill pbuffer if process is nil. + Suggested by Christoph Conrad . + +2000-12-30 09:00:00 ShengHuo ZHU + + * nnheader.el (autoload): Autoload gnus-sorted-intersection. + + * nnml.el (autoload): Move to nnheader.el. + + * nnfolder.el (nnfolder-existing-articles): Reversed, i.e. sorted. + (nnfolder-request-expire-articles): Use gnus-sorted-intersection. + (nnfolder-retrieve-headers): Use intersection. Suggested by Jonas + Kvarnstr,Av(Bm . + +2000-12-30 00:17:38 Lars Magne Ingebrigtsen + + * gnus-art.el (article-make-date-line): Get the hours right. + (gnus-ignored-headers): More hiding. + + * nnmail.el (nnmail-expiry-wait): Not an integer. + + * message.el (message-goto-body): Only expand abbrev when called + interactively. + (message-make-lines): Use it. + +2000-12-29 20:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-inews-yank-articles): Reparse headers. + +2000-12-30 00:17:38 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-limit-include-expunged): Really + include the expunged articles. + + * gnus-group.el (gnus-group-sort-by-server): New function. + + * gnus.el (gnus-method-to-server-name): New function. + (gnus-group-prefixed-name): Use it. + + * gnus-group.el (gnus-group-sort-function): Doc fix. + (gnus-group-sort-groups-by-server): New command. + +2000-12-29 13:25:10 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-treat-date-english): New variable. + (article-date-english): New command. + (gnus-english-month-names): New variable. + (article-make-date-line): Do 'english. + + * gnus-cite.el (gnus-article-fill-cited-article): Add a space + after the fill prefix. + + * gnus-sum.el (gnus-summary-make-menu-bar): Removed "Enter + score...". + + * gnus-art.el (gnus-ignored-headers): Hide more headers. + + * message.el (message-mode-map): Bind comment-region. + + * gnus-art.el (gnus-mime-display-part): Let w3 display + multipart/related. + + * mm-bodies.el (mm-long-lines-p): New function. + (mm-body-encoding): Use it. + (mm-body-encoding): Encode articles with lines longer than 1000 + characters. + +2000-12-29 01:00:00 ShengHuo ZHU + + * mm-util.el (mm-enable-multibyte): Use + default-enable-multibyte-characters. + (mm-enable-multibyte-mule4): Ditto. + (mm-disable-multibyte): Test XEmacs. + (mm-disable-multibyte-mule4): Ditto. + (mm-with-unibyte-current-buffer): Simplified. + (mm-with-unibyte-current-buffer-mule4): Ditto. + +2000-12-28 19:44:56 Lars Magne Ingebrigtsen + + * nnheaderxm.el (nnheader-string-as-multibyte): New alias. + + * nnheader.el (nnheader-string-as-multibyte): New alias. + + * mm-view.el (mm-inline-text): Warn when bugging out in w3. + + * gnus-uu.el (gnus-message-process-mark): New function. + (gnus-uu-mark-by-regexp): Use it. + (gnus-new-processable): New function. + +2000-12-28 19:21:57 Inge Frick + Trivial patch. + + * gnus-sum.el (gnus-no-mark): New variable. + +2000-11-01 01:12:29 Lars Magne Ingebrigtsen + + * nnwfm.el (nnwfm-create-mapping): Remove quote marks and + backslashes. + +2000-12-26 Katsumi Yamaoka + + * gnus-art.el (gnus-article-banner-alist): Remove duplicate + definition. + +2000-12-25 00:00:00 ShengHuo ZHU + + * dgnushack.el (dgnushack-compile): elc is in the current directory. + + * qp.el (quoted-printable-encode-region): Don't check multibyte in + XEmacs. + +2000-12-25 Lloyd Zusman + Trivial patch. + + * mml.el (mml-read-tag): Save tag location. + +2000-12-25 Simon Josefsson + + * starttls.el: Sync with Emacs 21. + +2000-12-24 11:00:00 ShengHuo ZHU + + * message.el (message-mail): Support yank-action. + + * message.el (message-setup): Revoke the last change. + +2000-12-24 01:00:00 ShengHuo ZHU + + * message.el (message-setup): Use cons. Suggested by Johan Vromans + . + +2000-12-24 Simon Josefsson + + * mm-bodies.el (mm-decode-content-transfer-encoding): Preserve + mailing list junk at end of part. + +2000-12-23 Simon Josefsson + + * nnimap.el (nnimap-expiry-target): New function. + (nnimap-request-expire-articles): Use it. + +2000-12-22 21:00:00 ShengHuo ZHU + + * gnus.el (gnus-group-parameters-more): New variable. + * gnus-cus.el (gnus-group-customize): Use it. + + * gnus.el (gnus-define-group-parameter): New macro. + (auto-expire): Use it + (total-expire): Use it. + * gnus-art.el (banner): Use it. + + * mml.el (mml-parse): save-excursion. Suggested by Lloyd Zusman + . + +2000-12-22 12:00:00 ShengHuo ZHU + + * gnus-topic.el (gnus-topic-create-topic): Use list. + + * gnus-vm.el (gnus-summary-save-article-vm): Require gnus-art + before binding gnus-default-article-saver. + + * gnus-sum.el (gnus-summary-save-article): + (gnus-summary-pipe-output): + (gnus-summary-save-article-mail): + (gnus-summary-save-article-rmail): + (gnus-summary-save-article-file): + (gnus-summary-write-article-file): + (gnus-summary-save-article-body-file): Ditto. + + * gnus-mh.el (gnus-summary-save-article-folder): Ditto. + +2000-12-22 10:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-mime-security-button-map): + (gnus-mime-button-map): Add parent. + +2000-12-22 09:00:00 ShengHuo ZHU + + * messagexmas.el (message-xmas-redefine): New function. + + * message.el: Use it. + + * gnus-art.el (gnus-article-check-hidden-text): Return t. + + * gnus-util.el (gnus-remove-text-properties-when): Return t. + +2000-12-22 03:00:00 ShengHuo ZHU + + * mm-decode.el (mm-dissect-multipart): Avoid errors owing to + malformatted messages. + +2000-12-22 02:00:00 ShengHuo ZHU + + * mm-util.el (mm-image-load-path): New function. + + * gnus-group.el (gnus-group-make-tool-bar): Use it. + + * gnus-sum.el (gnus-summary-make-tool-bar): Use it. + + * message.el (message-tool-bar-map): Use it. + + * Makefile.in (install-el): New rule. + +2000-12-21 Katsumi Yamaoka + + * gnus-art.el (article-treat-dumbquotes): Quote \. + +2000-12-21 22:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-treat-emphasize): Don't treat emphasis if + Emacs 20 runs on a terminal. + +2000-12-21 14:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-bug): Revert to save-excursion. + + * mml.el (gnus-add-minor-mode): Autoload. + + * message.el (message-forward): Save-restriction. + +2000-12-21 Kai Gro,b_(Bjohann + + * gnus-art.el (article-treat-dumbquotes): More doc, provided by + Paul Stevenson + +2000-12-21 10:00:00 ShengHuo ZHU + + * gnus-ml.el (gnus-mailing-list-mode-map): Use C-c C-n prefix. + + * mml.el (gnus-ems): Don't require. + + * gnus.el (gnus-decode-rfc1522): Removed. + (gnus-set-text-properties): Define. + +2000-12-21 09:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-mime-*): handle may be nil. + + * gnus-sum.el (gnus-summary-mode): Turn on gnus-mailing-list-mode. + + * gnus.el (gnus-group-remove-excess-properties): Not defined + in gnus-xmas. + +2000-12-20 21:00:00 ShengHuo ZHU + + * message.el (message-mail-user-agent): Add :version. + +2000-12-21 Miles Bader + + * message.el (message-mode): Set `comment-start' to the yank prefix. + +2000-12-20 17:00:00 ShengHuo ZHU + + * message.el (message-mail-user-agent): New variable. + (message-setup): Renamed to message-setup-1. Support + mail-user-agent. + (message-mail-user-agent): New function. + (message-mail): Use it. + (message-reply): Use it. + (message-resend): Use it. + (message-mail-other-window): Use it. + (message-mail-other-frame): Use it. + + * gnus-msg.el (gnus-bug): Support mail-user-agent. + +2000-12-20 15:00:00 ShengHuo ZHU + + * message.el (message-tool-bar-map): Simplify. + (message-narrow-to-head-1): New function. + (message-narrow-to-head): Use it. + (message-reply): Ditto. + (message-cancel-news): Ditto. + (message-supersede): Ditto. + (message-make-forward-subject): Ditto. + (message-bounce): Ditto. + +2000-12-20 11:00:00 ShengHuo ZHU + + * uudecode.el (uudecode-decode-region-external): make-temp-file + may not be defined. + + * binhex.el (defalias): eval-and-compile. + + * message.el (message-tool-bar-map): New function. + (message-mode): Use it. + +2000-12-20 09:00:00 ShengHuo ZHU + + * nntp.el (nntp-find-connection): Remove the entry. + (nntp-retrieve-groups): (gnus-buffer-live-p buf). + +2000-12-20 05:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-summary-mail-forward): Use original buffer. + + * message.el (message-forward): Copy buffer in unibyte mode. + +2000-12-20 04:00:00 ShengHuo ZHU + + * message.el (message-make-forward-subject): Don't widen. Decode. + (message-forward): Don't decode subject. + +2000-12-20 Christoph Conrad + + * qp.el (quoted-printable-encode-region): Upcase QP. + +2000-12-20 03:00:00 ShengHuo ZHU + + * mm-decode.el (mm-possibly-verify-or-decrypt): Use + mail-extract-a-c instead. Don't depend on Gnus. + + * mml.el (gnus-ems): Require it. + + * gnus-msg.el (gnus-summary-mail-forward): + + * message.el (message-forward): Move mime-to-mml here. + +2000-12-20 02:00:00 ShengHuo ZHU + + * gnus-group.el, gnus-sum.el, message.el: Add :help unless Emacs. + * gnus-art.el (gnus-insert-mime-button): Simplify. + (gnus-mime-display-alternative): Ditto. + (gnus-insert-mime-security-button): Ditto. + +2000-12-20 01:00:00 ShengHuo ZHU + + * gnus-util.el (gnus-add-text-properties-when): In XEmacs, + text-property-not-all doesn't return nil when start=mark(end). + (gnus-remove-text-properties-when): Ditto. + +2000-12-20 00:00:00 ShengHuo ZHU + + * gnus-start.el (gnus-group-change-level): Remove group from + gnus-active-hashtb if real killed. + +2000-12-19 22:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-insert-mime-button): Emacs20 needs local-map. + (gnus-mime-display-alternative): Ditto. + (gnus-insert-mime-security-button): Ditto. + +2000-12-19 21:00:00 ShengHuo ZHU + + * gnus-start.el (gnus-group-change-level): Don't add it into + killed-list if it was killed. + +2000-12-19 19:00:00 ShengHuo ZHU + + * nnmbox.el (nnmbox-file-coding-system): Use binary. + (nnmbox-active-file-coding-system): Ditto. + + * gnus-cus.el (gnus-group-parameters): Add posting-style. + +2000-12-19 18:00:00 ShengHuo ZHU + + * gnus.el (gnus-version): + (gnus-version-number): Set to Oort Gnus 0.01. + + * gnus-art.el (gnus-mime-security-button-map): + (gnus-insert-mime-security-button): Fix for Emacs21. + +2000-12-19 17:00:00 ShengHuo ZHU + + * gnus-group.el, gnus-sum.el, message.el: Comment out :help in + easymenu, because XEmacs doesn't understand :help. + + * mm-uu.el: Require binhex. + +2000-12-19 16:00:00 ShengHuo ZHU + + * gnus.el: Merged. Emacs21 CVS tag is zsh-merge-ognus-1. + +2000-12-19 ShengHuo ZHU + + * mm-util.el (mm-charset-synonym-alist): Fix a typo. + +2000-12-18 Gerd Moellmann + + * *.xpm, *.pbm: Convert icons icons to size 24x24. + +2000-12-18 Dave Love + + * gnus-msg.el (news-setup, news-reply-mode): Don't autoload + (unused). + +2000-12-13 Miles Bader + + * smiley-ems.el (smiley-region): Bind `inhibit-point-motion-hooks' + to t, so that we don't get stuck while trying to smilefy + intangible text. + +2000-12-12 Gerd Moellmann + + * smiley-ems.el (smiley-regexp-alist): Make regexps match + at the end of the buffer. + (smiley-region): In the loop, move to the end of the submatch + matching the smiley instead of using the end of the match + of the whole regexp. + +2000-12-12 Eli Zaretskii + + * message.el (message-mode): Doc fix. + +2000-12-12 Gerd Moellmann + + * smiley-ems.el (smiley-region): Doc fix. + +2000-12-11 Miles Bader + + * gnus-sum.el (gnus-summary-recenter): When trying to keep the + bottom line visible, check to see if it's partially obscured, and + if so, either scroll one more line to make it fully visible, or + revert to showing the second line from the top. + +2000-12-07 Dave Love + + * mailcap.el (mailcap-download-directory) + * gnus-audio.el (gnus-audio-directory) + * smiley-ems.el (smiley-data-directory): Fix :type. + +2000-11-30 Dave Love + + * message.el (message-auto-save-directory): Use + file-name-as-directory. + (message-set-auto-save-file-name): Create + message-auto-save-directory if necessary. + (message-replace-chars-in-string): Removed -- unused. + (message-mail-alias-type): Customize. + (message-headers): Remove duplicate defgroup. + +2000-11-29 Dave Love + + * qp.el (quoted-printable-decode-region): Use error, not message + to report malformed text (like base64). Amend message. + +2000-11-29 Miles Bader + + * message.el (message-header-lines): Fontify tag. + +2000-11-27 Dave Love + + * nnlistserv.el: Ignore errors when requiring nnweb and avoid a + compiler warning. + +;2000-11-26 Dave Love +; +; * mm-uu.el (mm-uu-configure-list): Fix typo in :type. +; +2000-11-23 Dave Love + + * uu-post.pbm, uu-decode.pbm: new files from XPMs. + + * mm-uu.el (uudecode): Require. + (uudecode-decode-region, uudecode-decode-region-external): Don't + autoload. + (mm-uu-copy-to-buffer): Doc fix. + (mm-uu-decode-function, mm-uu-binhex-decode-function): Doc, custom + type fix. + + * mailcap.el: Doc fixes. + (mailcap-mime-data): Various adjustments. + (mailcap): New group. + (mailcap-download-directory): Customize. + (mailcap-generate-unique-filename, mailcap-binary-suffixes) + (mailcap-temporary-directory): Deleted (unused). + (mailcap-unescape-mime-test): Simplify slightly. + (mailcap-viewer-passes-test): Use functionp. + (mailcap-command-p): Aliased to executable-find. + + * rfc2047.el (rfc2047-encode-message-header): Don't encode if + default-enable-multibyte-characters is nil. + +2000-11-22 Gerd Moellmann + + * gnus-group.el (gnus-group-make-tool-bar): Fix a paren typo. + +2000-11-21 Dave Love + + * gnus-art.el (gnus-mime-button-map): Don't inherit from + gnus-article-mode-map. +; (gnus-mime-button-menu): Use mouse-set-point. + (gnus-insert-mime-button, gnus-mime-display-alternative) + (gnus-mime-display-alternative): Don't use local-map property. + +2000-11-17 Dave Love + + * uudecode.el (uudecode-insert-char): Fix bogus feature test. + (uudecode-decode-region-external): Doc fix. Use with-temp-buffer + and make-temp-file. + (uudecode-decode-region): Doc fix. + +2000-11-14 Dave Love + + * cu-exit.pbm, exit-summ.pbm, followup.pbm, fuwo.pbm: + * mail-reply.pbm, next-ur.pbm, post.pbm, prev-ur.pbm: + * reply-wo.pbm, reply.pbm, rot13.pbm, save-aif.pbm, save-art.pbm: + New files, derived from the XPMs. + +2000-11-10 Dave Love + + * gnus-agent.el (gnus-agent-confirmation-function): Add :version. + (gnus-agent-lib-file, gnus-agent-load-alist) + (gnus-agent-save-alist, gnus-agent-article-name): Use + expand-file-name. + + * gnus-group.el (gnus-group-name-charset-method-alist): Add + :version. + (nnkiboze-score-file): Defvar when compiling. + + * gnus-start.el (gnus-read-newsrc-file): Add :version. + + * gnus-art.el (gnus-article-banner-alist) + (gnus-emphasize-whitespace-regexp, gnus-ignored-mime-types) + (gnus-article-date-lapsed-new-header) + (gnus-article-mime-match-handle-function, gnus-mime-action-alist) + (gnus-treat-strip-list-identifiers, gnus-treat-date-iso8601) + (gnus-treat-strip-headers-in-body) + (gnus-treat-capitalize-sentences, gnus-treat-play-sounds) + (gnus-treat-translate): Add :version. + (gnus-article-mime-part-function): Fix defcustom. + + * nnmail.el (nnmail-expiry-target) + (nnmail-scan-directory-mail-source-once, nnmail-extra-headers) + (nnmail-split-header-length-limit): Add :version. + + * gnus-sum.el (gnus-auto-expirable-marks) + (gnus-inhibit-user-auto-expire, gnus-list-identifiers) + (gnus-extra-headers, gnus-ignored-from-addresses) + (gnus-newsgroup-ignored-charsets) + (gnus-group-highlight-words-alist) + (gnus-summary-show-article-charset-alist): Add :version. + + * catchup.pbm, describe-group.pbm, exit-gnus.pbm, get-news.pbm: + gnntg.pbm, kill-group.pbm, subscribe.pbm, unsubscribe.pbm: New + files, converted from the XPMs. + + * gnus-cache.el (gnus-cache-active-file): Don't use + file-name-as-directory on directory. + (gnus-cache-file-name): Use expand-file-name, not concat. Don't + use file-name-as-directory on directory. + + * time-date.el (timezone-make-date-arpa-standard): Autoload. + (date-to-time): Use it. + +; * message.el (message-mode) : +; : Use [:alnum:] in regexp range. +; (message-newline-and-reformat): Likewise. + (message-forward-as-mime, message-forward-ignored-headers) + (message-buffer-naming-style, message-default-charset) + (message-dont-reply-to-names, message-send-mail-partially-limit): + Add :version. + + * mm-util.el: Doc fixes. + (mm-mime-charset): Don't use the raw result of + mm-preferred-coding-system. + (mm-with-unibyte-buffer, mm-with-unibyte-current-buffer) + (mm-with-unibyte): Simplify. + + * gnus-int.el (gnus-start-news-server): Use expand-file-name, not + concat. + + * pop3.el (pop3-version): Deleted. + (pop3-make-date): New function, avoiding message-make-date. + (pop3-munge-message-separator): Use it. + +2000-11-09 Dave Love + + * gnus-group.el (gnus-group-make-directory-group) + (gnus-group-fetch-faq): Use expand-file-name. + (gnus-group-fetch-faq): Simplify completing-read form. + + * mm-bodies.el (mm-encode-body): Use mm-multibyte-p, don't just + test for Mule. + + * message.el (tool-bar-map): Defvar when compiling. + + * gnus-setup.el (running-xemacs, gnus-use-installed-tm) + (gnus-tm-lisp-directory): Deleted. + (gnus-use-installed-mailcrypt, gnus-emacs-lisp-directory): Use + (featurep 'xemacs). + (gnus-gnus-lisp-directory, gnus-mailcrypt-lisp-directory) + (gnus-mailcrypt-lisp-directory, gnus-bbdb-lisp-directory): Remove + version numbers from file names. + +2000-11-08 Dave Love + + * mm-view.el: Use featurep for XEmacs test. + (mm-inline-message): Test for `remove-specifier'; don't use + condition-case. + + * mm-bodies.el (mm-encode-body): Use mm-multibyte-p. + + * gnus-score.el (gnus-score-load-file): Use expand-file-name. + (gnus-score-find-bnews): Don't concat "". + + * cu-exit.xpm, prev-ur.xpm, next-ur.xpm, post.xpm, fuwo.xpm: + * followup.xpm, uu-post.xpm, uu-decode.xpm, mail-reply.xpm: + * reply.xpm, reply-wo.xpm, rot13.xpm, save-aif.xpm, save-art.xpm: + * exit-summ.xpm: New files, renamed from icons by Luis Fernandes. + + * gnus-sum.el: Put some defvars in eval-when-compile. + (gnus-summary-mode-hook): Add :options. + (gnus-summary-make-menu-bar): Add some :help, used by tool bar. + (gnus-summary-tool-bar-map): New variable. + (gnus-summary-make-tool-bar): New function. + (gnus-summary-mode): Put kill-all-local-variables first. + + * gnus-group.el (gnus-group-toolbar-map): New variable. + (gnus-group-make-tool-bar): Rewritten. + (gnus-group-mode): Put kill-all-local-variables first. + + * rfc2047.el: Require gnus-util. + + * nnml.el (gnus-sorted-intersection): Autoload. + + * nnheader.el: Wrap subst-char-in-string def in eval-and-compile. + Put some defvars in eval-when-compile. + (gnus-intersection, gnus-sorted-complement): Autoload. + + * imap.el (imap-point-at-eol): New, replacing gnus-point-at-eol. + + * mm-encode.el (mm-body-7-or-8): Autoload. + + * mm-decode.el (mm-insert-inline): Autoload. + + * mml.el: + * message.el: Put some defvars in eval-when-compile. + + * gnus-msg.el: Put some defvars in eval-when-compile. + (gnus-msg-mail): Move after gnus-setup-message. + + * smiley-ems.el (smiley-data-directory, smiley-regexp-alist): Doc fix. + +2000-11-07 Dave Love + + * gnus-util.el (nnheader): Don't require message (recursive + autoload). + + * uudecode.el: Avoid compiler warnings. + + * rfc2047.el: (rfc2047-fold-region): Use gnus-point-at-bol. + (rfc2047-charset-encoding-alist): Add iso-8859-1[45]. + +2000-11-06 Dave Love + + * gnus-salt.el (gnus-binary-mode): Fix call to gnus-add-minor-mode. + + * uudecode.el: Use (featurep 'xemacs). Require cl when compiling. + (uudecode-char-int): New alias, replacing char-int. + (uudecode-decode-region): Don't call buffer-disable-undo. + +; * mm-uu.el (mm-uu-configure): Unquote lambda. +; (mm-uu-configure-list): Doc fix. +; +; * earcon.el (running-xemacs): Don't define. +; +;2000-11-03 Stefan Monnier +; +; * message.el (message-font-lock-keywords): Match a final newline +; to help font-lock's multiline support. +; +2000-11-03 Dave Love + + * gnus-nocem.el (gnus-nocem-check-article-limit): Default to 500. + + * mm-partial.el (mm-inline-partial): Space-prefix temp buffer + name. + + * gnus-cus.el (gnus-group-parameters) : Fix custom type. + : Fix custom type, doc. + + * mm-decode.el (mm-display-external): Space-prefix temp buffer + name. Don't disable undo explicitly. + +;2000-11-02 Dave Love +; +; * message.el (message-font-lock-keywords): Use [:alpha:] for +; cite-prefix. + +2000-11-01 Dave Love + + * rfc2047.el (base64): Require unconditionally. + (message-posting-charset): Defvar when compiling. + (rfc2047-encode-message-header, rfc2047-encodable-p): Require + message. + + * gnus-sum.el (nnoo): Require. + (mm-uu-dissect): Autoload. + + * mml.el (mml-parse-1): Clarify message. + (mml-minibuffer-read-type): Use mailcap-mime-types. + +2000-11-01 Stefan Monnier + + * mml.el: Fix a typo in the requiring of CL. + +2000-11-01 Dave Love + + * utf7.el: Require cl when compiling. + + * binhex.el: Use (featurep 'xemacs). + (binhex-char-int): New alias, replacing char-int. Change callers. + (binhex-decode-region): Simplify work buffer code. + (binhex-decode-region-external): Use expand-file-name, not concat. + +2000-10-30 Dave Love + + * gnus-art.el: Fix 2000-10-27 change properly. + +2000-10-28 Miles Bader + + * gnus-art.el (gnus-read-save-file-name): Remove extraneous paren. + +2000-10-27 Dave Love + + * gnus-group.el (gnus-group-make-menu-bar): Add some :help + strings. + (gnus-group-make-tool-bar): New function. + (gnus-group-mode): Use it. + + * message.el (message-mode-menu): Add some :help strings. + (message-mode) [message-tool-bar-map]: Define tool-bar-map. + (featurep): Use (featurep 'xemacs). Install tool bar for Emacs. + + * catchup.xpm, exit-gnus.xpm, gnntg.xpm, subscribe.xpm: + * describe-group.xpm, get-news.xpm, kill-group.xpm: + * unsubscribe.xpm: New files. Renamed icons from Luis Fernandes. + + * mm-decode.el (mm-valid-and-fit-image-p): Don't test + display-graphic-p here. + +2000-10-27 Miles Bader + + * gnus-ems.el (gnus-ems-redefine): Use (featurep 'xemacs) instead + of the `gnus-xemacs' variable, as the latter has been removed. + * gnus-start.el (gnus-1, gnus-read-descriptions-file): Likewise. + * gnus-art.el (gnus-treat-display-xface) + (gnus-treat-display-smileys, gnus-treat-display-picons) + (gnus-article-read-summary-keys): Likewise. + +2000-10-26 Dave Love + + (defvar): Use rmail-spool-directory unconditionally. + +2000-10-18 Dave Love + + * mm-bodies.el (mm-uu-decode-function) + (mm-uu-binhex-decode-function): Defvar when compiling. + + * gnus-nocem.el (gnus-nocem-issuers): Update. + (gnus-nocem-check-from): New option. + (gnus-nocem-scan-groups): Use it. + (gnus-nocem-check-article): Bind gnus-newsgroup-name. + (gnus-nocem-check-article-limit): Add :version. + +2000-10-16 Stefan Monnier + + * ietf-drums.el (mm-util): Require CL when compiling. + +2000-10-15 Dave Love + + * qp.el: Require mm-util. + +2000-10-13 Dave Love + + * qp.el (quoted-printable-decode-region): Avoid invalid + coding-systems. + +2000-10-12 Gerd Moellmann + + * mm-bodies.el: Don't require `mm-uu' at compile-time; it leads + to a recursive load. + +2000-10-12 Dave Love + + * mm-util.el (mm-charset-synonym-alist): Add windows-1252. + + * gnus.el (gnus-group-startup-message): Check for PBM image. + +2000-10-09 Dave Love + + * mail-source.el (mail-source-fetch-imap): Bind + default-enable-multibyte-characters rather than using + mm-disable-multibyte. + +2000-10-05 Dave Love + + * qp.el (mm-decode-coding-region, mm-encode-coding-region): + Autoload. + (quoted-printable-decode-region): Rename arg which confused + charset with coding-system. Don't use nonascii-insert-offset. + Coding-system encode the region initially. Don't recognize `==' + as valid QP. Coding-system decode the region finally. + (quoted-printable-decode-string): Rename arg which confused + charset with coding-system. + + * mm-bodies.el: Require mm-uu, Don't require qp, uudecode. + (mm-encode-body): Apply mm-charset-to-coding-system to arg of + mm-encode-coding-region. + (mm-decode-body, mm-decode-string): Rename variables which + confused charset with coding-system. + (binhex-decode-region): Don't autoload. + (mm-body-encoding): Require message. + (mm-decode-content-transfer-encoding): Require mm-uu in relevant + cond branches. + + * gnus-art.el (article-de-quoted-unreadable) + (article-de-base64-unreadable): Fold search case + rather than downcasing string. Apply mm-charset-to-coding-system + to arg of quoted-printable-decode-region. + +2000-10-04 Dave Love + + * gnus-ems.el: Don't turn off compiler warnings in local vars. + Require ring when compiling. + (gnus-article-compface-xbm): New variable. + +2000-10-04 Dave Love + + * smiley-ems.el (smiley-regexp-alist, smiley-update-cache): Use + pbm images. + + * frown.pbm, smile.pbm, wry.pbm: New files. + + * frown.xbm, smile.xbm, wry.xbm: Deleted. + +2000-10-03 Dave Love + + * mail-source.el (mail-sources): Revert to nil. + + * nnmail.el (nnmail-spool-file): Revert to `((file))'. + + * qp.el: Don't require mm-util. + (quoted-printable-decode-region): Rewritten. + (quoted-printable-decode-string, quoted-printable-encode-region): + Doc fix. + (quoted-printable-encode-region): Barf on multibyte characters. + Maybe make the class multibyte. Upcase chars, not formatted + strings. Allow mm-use-ultra-safe-encoding to be unbound. + (quoted-printable-encode-string): Don't use + mm-with-unibyte-buffer. + +2000-09-29 Gerd Moellmann + + * smiley-ems.el (smiley-update-cache): Use `:ascent center'. + +2000-09-21 Dave Love + + * smiley-ems.el (smiley-region): Test if display-graphic-p bound + (for Emacs 20). Tidy somewhat. + +2000-09-21 Dave Love + + * gnus-ems.el (gnus-article-display-xface): Use unibyte for the + image processing. Rationalize logic somewhat. + +2000-09-20 Dave Love + + * gnus-start.el (gnus-1) : Don't test for X + specifically. + + * gnus.el (gnus-version-number): Avoid some redundant + autoloads. + +2000-09-20 Gerd Moellmann + + * gnus-ems.el (gnus-article-display-xface): Don't convert PBM + to XBM; we always have PBM support. + +2000-09-14 Dave Love + + * gnus.el (gnus-charset): + * mm-decode.el (mime-display): + * imap.el (imap) : Add :version. + +2000-09-13 Gerd Moellmann + + * parse-time.el: Fix author's mail address. + + * earcon.el, flow-fill.el, gnus-cite.el, gnus-gl.el, gnus-ml.el: + * gnus-mlspl.el, gnus-nocem.el, gnus-range.el, gnus-salt.el: + * gnus-setup.el, gnus-soup.el, gnus-undo.el, gnus-vm.el: + * messcompat.el, nnbabyl.el, nndir.el, nneething.el: + * nngateway.el, nnheaderxm.el, nnkiboze.el, nnlistserv.el: + * nnmbox.el, nnmh.el, nnoo.el, nnsoup.el, nnspool.el, rfc2045.el: + * rfc2231.el, uudecode.el: Fix copyright notice. + + * nnweb.el (toplevel): To make the file bootstrap in Emacs, + require `w3' at load-time only if not running in batch mode. + +2000-12-19 16:00:00 ShengHuo ZHU + + * gnus.el: Before merge with Emacs21. + +2000-12-19 Raymond Scholz + + * gnus-art.el (gnus-article-dumbquotes-map): Add EUR symbol. + +2000-12-19 Per Abrahamsen + + * mml.el (mml-mode-map): Change mml prefix from `M-m' to `C-c C-m' + to avoid conflict with the standard `back-to-indentation' + binding. + +2000-12-17 10:00:00 ShengHuo ZHU + + * mm-extern.el (mm-inline-external-body): g-a-m-h may be a handle. + + * mm-util.el (mm-enable-multibyte-mule4): Test charsetp. + (mm-disable-multibyte-mule4): Ditto. + (mm-with-unibyte-current-buffer-mule4): Ditto. + +2000-12-15 10:00:00 ShengHuo ZHU + + * pop3.el (pop3-movemail): Use binary. + (pop3-movemail-file-coding-system): Removed. + +2000-12-14 13:00:00 ShengHuo ZHU + + * mm-util.el (mm-charset-synonym-alist): Add cn-gb. + +2000-12-13 21:00:00 ShengHuo ZHU + + * nnspool.el (nnspool-lib-dir): Check whether /usr/lib/news/active + exists. + +2000-12-13 13:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-post-method): Use backend name when the + address is "". + +2000-12-08 10:00:00 ShengHuo ZHU + + * gnus-art.el (article-verify-x-pgp-sig): Don't test + mm-verify-option. + (gnus-treat-x-pgp-sig): Default value. + (gnus-ignored-headers): Redundant. + +2000-12-04 22:00:00 ShengHuo ZHU + + * gnus-win.el (gnus-configure-frame): Save selected window. + +2000-02-15 Andrew Innes + + * nnmbox.el: Require gnus-range. + (nnmbox-group-building-active-articles): New variable. + (nnmbox-group-active-articles): New variable; this is a cache of + all active articles by group and number. + (nnmbox-in-header-p): New function. + (nnmbox-find-article): New function. + (nnmbox-record-active-article): New function. + (nnmbox-record-deleted-article): New function. + (nnmbox-is-article-active-p): New function. + (nnmbox-retrieve-headers): Use nnmbox-find-article. + (nnmbox-request-article): Ditto. Also supply extra arg to + nnmbox-article-group-number. + (nnmbox-request-expire-articles): Ditto. + (nnmbox-request-move-article): Ditto. + (nnmbox-request-replace-article): Ditto. + (nnmbox-request-rename-group): Rename group entry in active + article cache. + (nnmbox-delete-mail): Update active article cache, unless article + is being replaced. + (nnmbox-possibly-change-newsgroup): Call nnmbox-read-mbox, rather + than partially duplicating it. + (nnmbox-article-group-number): Add extra `this-line' arg, to + handle articles belonging to multiple groups. + (nnmbox-save-mail): Update active article cache. + (nnmbox-read-mbox): Build active article cache when loading mbox. + Also do some repair work, if we find articles that are missing the + appropriate X-Gnus-Newsgroup lines in the header. We can usually + reconstruct these from Xref info. + +2000-12-04 18:00:00 ShengHuo ZHU + + * mail-source.el (mail-source-report-new-mail): Use + nnheader-run-at-time. + +2000-02-15 Andrew Innes + + * mail-source.el (mail-source-fetch-pop): Clear pop password when + an error is thrown, and then rethrow the error. + (mail-source-check-pop): Ditto. + (mail-source-start-idle-timer): Prevent multiple pop checks + running if the check takes a long time. + +2000-12-04 14:00:00 ShengHuo ZHU + + * gnus-msg.el (gnus-msg-mail): COMPOSEFUNC should return t if + succeed. + +2000-12-04 13:00:00 ShengHuo ZHU + + * gnus-win.el (gnus-configure-windows): Make sure + nntp-server-buffer is live. + (gnus-remove-some-windows): switch-to-buffer -> set-buffer. + +2000-11-21 Stefan Monnier + + * gnus-win.el (gnus-configure-windows): switch-to-buffer -> set-buffer. + +2000-12-04 Andreas Jaeger + + * gnus-msg.el (gnus-summary-mail-forward): Fix typos in description. + +2000-12-03 12:00:00 ShengHuo ZHU + + * mml2015.el (mml2015-fix-micalg): Alg might be nil. + +2000-12-01 ShengHuo ZHU + Trivial patch from Christopher Splinter + + * gnus-sum.el (gnus-summary-limit-to-age): Fix typo. + +2000-12-01 Simon Josefsson + + * mml-smime.el (mml-smime-verify): Fix address parsing. + +2000-12-01 Simon Josefsson + + * mml-smime.el (mml-smime-verify): Don't modify MM buffer. Handle + more than one certificate inside PKCS#7 blob. Better security + information (clamed / actual sender, openssl output, certificates + inside message). + + * smime.el (smime-verify-region): Output to /dev/null. + (smime-buffer-as-string-region): Don't parse empty lines. + +2000-11-30 23:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-mime-security-button-line-format-alist): Add + ?d and ?D. + (gnus-mime-security-show-details-inline): New variable. + (gnus-mime-security-show-details): Use them. + (gnus-insert-mime-security-button): Ditto. + + * mml2015.el (mml2015-gpg-verify): Set details when succeed. + Suggest by Michael Duggan (md5i@cs.cmu.edu). + (mml2015-gpg-clear-verify): Ditto. + (mml2015-gpg-decrypt-1): Ditto. + (mml2015-use): Prefer 'gpg. + +2000-11-30 19:00:00 ShengHuo ZHU + + * gnus-util.el (gnus-add-text-properties-when): New function. + (gnus-remove-text-properties-when): Ditto. + + * gnus-cite.el (gnus-article-hide-citation): Use them. + (gnus-article-toggle-cited-text): Use them. + + * gnus-art.el (gnus-signature-toggle): Use them. + (gnus-article-show-hidden-text): Ditto. + (gnus-article-hide-text): Ditto. + +2000-11-30 14:00:00 ShengHuo ZHU + + * mm-util.el (mm-find-charset-region): Remove eight-bit-*. + +2000-11-30 Simon Josefsson + + * smime.el (smime-point-at-eol): New alias. + (smime-buffer-as-string-region): Use it. + +2000-11-29 21:00:00 ShengHuo ZHU + + * nndraft.el (nndraft-request-restore-buffer): Remove Date field. + +2000-11-29 20:00:00 ShengHuo ZHU + + * nnfolder.el (nnfolder-request-expire-articles): expiry-target. + + * nnbabyl.el (nnbabyl-request-expire-articles): Ditto. + + * nnmbox.el (nnmbox-request-expire-articles): Ditto. + +2000-11-22 Jan Nieuwenhuizen + + * nnmh.el (nnmh-request-expire-articles): Implemented + expiry-target for nnmh backend. + +2000-11-30 Simon Josefsson + + * mm-decode.el (mm-security-from): New variable. + (mm-possibly-verify-or-decrypt): Use it rather than `from'. + + * mml-smime.el (mml-smime-verify): Use `mm-security-from' rather + than `from'. + +2000-11-30 Simon Josefsson + + * mml-smime.el (mml-smime-verify): Verify that certificate mail + address match sender address. + + * mm-decode.el (mm-possibly-verify-or-decrypt): Bind sender address. + + * smime.el (smime-verify-region): Don't copy buffer. + (smime-decrypt-buffer): Use expand-file-name on keyfile. + (smime-pkcs7-region): New function. + (smime-pkcs7-certificates-region): Ditto. + (smime-pkcs7-email-region): Ditto. + (smime-buffer-as-string-region): Ditto. + + * gnus-art.el (gnus-mime-security-show-details): Goto beginning of + buffer. + +2000-11-23 Jens Krinke + + * smime.el (smime-decrypt-region): Fix keyfile argument. + +2000-11-29 00:00:00 ShengHuo ZHU + + * nnmail.el (nnmail-cache-accepted-message-ids): Add doc. + +2000-11-28 17:00:00 ShengHuo ZHU + + * message.el (message-shoot-gnksa-feet): New variable. + (message-gnksa-enable-p): New function. + (message-send): Use it. + (message-check-news-body-syntax): Ditto. + +2000-11-28 Katsumi Yamaoka + + * message.el (message-make-message-id): Remove the redundancy. + +2000-11-22 17:00:00 ShengHuo ZHU + + * message.el (message-setup): Discourage using mc-install-*-mode. + + * gnus-setup.el (gnus-use-mailcrypt): Don't hook mail-crypt. + +2000-11-22 16:00:00 ShengHuo ZHU + + * gnus-cite.el (gnus-cite-parse): Guess citation length. + +2000-11-22 14:00:00 ShengHuo ZHU + + * gnus-ml.el (gnus-mailing-list-insinuate): New function. + +2000-11-22 13:00:00 ShengHuo ZHU + + * gnus-ml.el (gnus-mailing-list-archive): Find the real url. + +2000-11-22 11:00:00 ShengHuo ZHU + + * gnus-xmas.el (gnus-xmas-article-display-xface): Use + insert-buffer-substring. + + * message.el (message-send-mail): Use buffer-substring-no-properties. + (message-send-news): Ditto. + +2000-11-22 David Edmondson + + * imap.el (imap-wait-for-tag): Message read info. + +2000-11-21 20:00:00 ShengHuo ZHU + + * mml2015.el (mml2015-mailcrypt-encrypt): Ensure the part is encrypted. + (mml2015-mailcrypt-encrypt): Use unibyte-buffer. + (mml2015-gpg-encrypt): Ditto. + +2000-11-21 09:00:00 ShengHuo ZHU + + * mm-decode.el (mm-verify-option): Default value. + + * mml-sec.el (mml-secure-part): Error message. + +2000-11-20 18:00:00 ShengHuo ZHU + + * gnus-ml.el (gnus-mailing-list-archive): Use browse-url. + +2000-11-20 17:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-article-make-menu-bar): Use easy-menu-add. + +2000-11-20 16:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-article-describe-key): Use prompt. + (gnus-article-describe-key-briefly): Ditto. + +2000-11-20 15:00:00 ShengHuo ZHU + + * gnus-agent.el (gnus-agent-expire): Ignore corrupted history. + +2000-11-20 10:00:00 ShengHuo ZHU + + * gnus-art.el (gnus-article-describe-key): New function. + (gnus-article-describe-key-briefly): New function. + +2000-11-19 23:00:00 ShengHuo ZHU + + * mm-decode.el (mm-decrypt-option): Doc typo. + + * gnus-art.el (gnus-article-read-summary-keys): lookup-key may + return a number. + +2000-11-19 21:00:00 ShengHuo ZHU + + * message.el (message-newline-and-reformat): Typo. + +2000-11-19 12:00:00 ShengHuo ZHU + + * gnus-art.el (article-verify-x-pgp-sig): Check whether + original-article-buffer exists. + + * rfc2047.el (rfc2047-q-encoding-alist): Match Resent-. + (rfc2047-header-encoding-alist): Addresses are different from text. + (rfc2047-encode-message-header): Ditto. + (rfc2047-dissect-region): Extra parameter. + (rfc2047-encode-region): Ditto. + (rfc2047-encode-string): Ditto. + +2000-11-19 00:00:00 ShengHuo ZHU + + * mm-uu.el (mm-uu-pgp-encrypted-extract-1): New function. + (mm-uu-pgp-encrypted-extract): Use it. + (mm-uu-pgp-signed-extract-1): New function. + (mm-uu-pgp-signed-extract): Use it. + + * gnus-art.el (gnus-mime-display-security): New function. + (gnus-mime-display-part): Use it. + (gnus-mime-security-verify-or-decrypt): New function. + (gnus-mime-security-press-button): New function. + (gnus-insert-mime-security-button): Use it. + + * mm-decode.el (mm-possibly-verify-or-decrypt): Use mm-h-m-c-p. + (mm-find-raw-part-by-type): Ditto. + (mm-verify-function-alist): Add x-gnus-pgp-signature handle. + (mm-decrypt-function-alist): Add x-gnus-pgp-encrypted handle. + (mm-destroy-parts): Kill nested multibyte buffer. + + * mml2015.el (mml2015-mailcrypt-verify): Use mm-h-m-c-p. + (mml2015-gpg-verify): Ditto. + +2000-11-18 Simon Josefsson + + * mml2015.el (mml2015-mailcrypt-clear-verify): New function. + (mml2015-function-alist): Use it. + + * mml-sec.el (mml-sign-alist): Update names. + (mml-encrypt-alist): Ditto. + (mml-secure-part-smime-sign): Moved to mml-smime.el + as `mml-smime-sign-query'. + (mml-secure-part-smime-encrypt-by-file): Moved to mml-smime.el as + `mml-smime-get-file-cert'. + (mml-secure-part-smime-encrypt-by-dns): Moved to mml-smime.el as + `mml-smime-get-dns-cert'. + (mml-secure-part-smime-encrypt): Moved to mml-smime.el as + `mml-smime-encrypt-query'. + (mml-smime-sign-buffer): Use mml-smime-sign. + (mml-smime-encrypt-buffer): Use mml-smime-encrypt. + + * mml-smime.el (mml-smime-sign): New function. + (mml-smime-encrypt): + (mml-smime-sign-query): + (mml-smime-get-file-cert): + (mml-smime-get-dns-cert): + (mml-smime-encrypt-query): Moved from mml-sec.el. + +2000-11-16 Simon Josefsson + + * mml2015.el (mml2015-gpg-clear-verify): New function. + (mml2015-function-alist): Add it. + +2000-11-17 14:21 ShengHuo ZHU + + * message.el (message-setup-fill-variables): Use + message-cite-prefix-regexp. + (message-newline-and-reformat): Check the end of citation, leading + WSP, break in the cite prefix. + (message-fill-paragraph): New function. + +2000-11-17 13:44 ShengHuo ZHU + + * lpath.el: Shut up. + +2000-11-17 Per Abrahamsen + + * gnus-msg.el (gnus-group-posting-charset-alist): No longer allow + raw 8-bit in headers in dk.* newsgroups. + +2000-11-17 08:02 ShengHuo ZHU + + * message.el (message-newline-and-reformat): Match extra WSPs. + +2000-11-16 23:31 ShengHuo ZHU + + * mml.el (mml-generate-mime-1): Ignore ascii. + +2000-11-16 Justin Sheehy + + * gnus-sum.el (gnus-summary-make-menu-bar): Fix menu items. + +2000-11-16 17:00 ShengHuo ZHU + + * message.el (message-cite-prefix-regexp): Prefix should not end + at space. + +2000-11-15 18:09 ShengHuo ZHU + + * message.el (message-mode-syntax-table): Add - as a word + constituent as in articles. + (message-setup-fill-variables): Add -_. as supercite-style prefix. + * gnus-art.el (gnus-article-mode-syntax-table): Remove ?-. + * gnus-cite.el (gnus-cite-parse): Match from the beginning of line. + +2000-11-15 13:21 ShengHuo ZHU + + * gnus-msg.el (gnus-inews-do-gcc): Expire the article. + +2000-11-12 David Edmondson + + * message.el (message-font-lock-keywords): use + message-cite-prefix-regexp. + +2000-11-15 Kai Gro,b_(Bjohann + + * gnus-group.el (gnus-group-jump-to-group-prompt): New variable by + Stein Arild Str,Ax(Bmme. + (gnus-group-jump-to-group): Use it. + (gnus-group-jump-to-group-prompt): Customize. + +2000-11-14 10:32:42 ShengHuo ZHU + + * mailcap.el (mailcap-possible-viewers): Match the entire string. + +2000-11-14 10:20:56 ShengHuo ZHU + + * mml2015.el (mml2015-mailcrypt-verify): replace-match is + incompatible. + (mml2015-mailcrypt-sign): Ditto. + +2000-11-14 10:12:05 ShengHuo ZHU + + * gnus-msg.el (gnus-inews-do-gcc): Update summary data when the + group is open. + +2000-11-14 00:48:52 ShengHuo ZHU + + * gnus-bcklg.el (gnus-backlog-enter-article): Don't enter + nnvirtual articles. + (gnus-backlog-request-article): Don't request nnvirtual articles. + +2000-11-13 22:08:09 ShengHuo ZHU + + * mml2015.el (mml2015-mailcrypt-sign): Remove "-" escape. + * mml.el (mml-generate-mime-1): Save cont. skip multipart attributes. + +2000-11-13 20:43:37 ShengHuo ZHU + + * mm-decode.el (mm-get-part): Don't call mm-insert-part. + * mml.el (mml-generate-mime-1): Use charset attribute. + * mm-bodies.el (mm-encode-body): Add parameter charset. + * mm-util.el (mm-mime-charset): Show error when find 8-bit characters. + +2000-11-13 16:09:09 ShengHuo ZHU + + * mml2015.el (mml2015-mailcrypt-decrypt): Handle quit. + (mml2015-mailcrypt-clear-decrypt): Ditto. + (mml2015-mailcrypt-verify): Ditto. + (mml2015-mailcrypt-clear-verify): Ditto. + (mml2015-gpg-verify): Ditto. + +2000-11-13 15:29:58 ShengHuo ZHU + + * smime.el (smime-openssl-program): Test the existence of openssl. + * mml-smime.el: Require mm-decode. + (mml-smime-verify-test): New function. + * mm-decode.el (mm-verify-function-alist): Use it. + +2000-11-13 09:50:29 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-repair-multipart): Fix Mime-Version + anyway. + +2000-11-13 Simon Josefsson + + * mm-uu.el (mm-uu-pgp-signed-extract): Explain why clear + verification doesn't work. + +2000-11-12 23:36:45 ShengHuo ZHU + + * gnus-msg.el (gnus-inews-mark-gcc-as-read): New variable. + (gnus-inews-do-gcc): Use it. + +2000-11-12 21:35:04 ShengHuo ZHU + + * rfc2231.el (rfc2231-encode-string): Insert semi-colon and + leading space. + * mm-extern.el (mm-inline-external-body): Report error when no + access-type. + +2000-11-12 19:48:30 ShengHuo ZHU + + * gnus-sum.el (gnus-select-newsgroup): Change the error message. + +2000-11-12 11:53:18 ShengHuo ZHU + + * gnus-art.el (gnus-mime-button-menu): Use select-window. + +2000-11-12 09:47:54 ShengHuo ZHU + + * gnus-art.el (gnus-mime-display-part): Display multipart/related + as multipart/mixed. + +2000-11-12 David Edmondson + + * message.el (message-cite-prefix-regexp): moved from gnus-cite.el + and replace `.' with `\w' to allow for different syntax tables + (from Vladimir Volovich). + * message.el (message-newline-and-reformat): use + `message-cite-prefix-regexp'. + * gnus-cite.el (gnus-supercite-regexp): use + `message-cite-prefix-regexp'. + * gnus-cite.el (gnus-cite-parse): use + `message-cite-prefix-regexp'. + +2000-11-12 08:52:46 ShengHuo ZHU + + * mml2015.el (mml2015-mailcrypt-verify): Replace armors with + PGP SIGNATURE. Escape leading "-"'s. + (mml2015-mailcrypt-sign): Replace armors with PGP MESSAGE. + +2000-11-11 15:55:35 ShengHuo ZHU + + * mm-uu.el (mm-uu-type-alist): Stricter shar regexp. + +2000-11-11 Simon Josefsson + + * mml2015.el (mml2015-gpg-verify): Set "OK" security status. + + * smime.el (smime-details-buffer): New variable. + (smime-sign-region): + (smime-encrypt-region): + (smime-verify-region): + (smime-decrypt-region): Copy OpenSSL output to the buffer. + + * mml-smime.el (mml-smime-verify): Support security info. + +2000-11-10 17:11:22 ShengHuo ZHU + + * mm-decode.el (mm-verify-option): Set default to nil. + (mm-decrypt-option): Ditto. + * gnus-art.el (article-verify-x-pgp-sig): New function. + +2000-11-10 09:01:25 ShengHuo ZHU + + * gnus-art.el (gnus-mime-display-alternative): Show button if no + preferred part. + +2000-11-07 Kai Gro,b_(Bjohann + + * gnus-sum.el (gnus-move-split-methods): Say that + `gnus-split-methods' uses file names, whereas this uses group + names. (Report from Nevin Kapur) + +2000-11-10 01:23:20 ShengHuo ZHU + + * mm-partial.el (mm-inline-partial): Insert MIME-Version. + +2000-11-09 17:02:50 ShengHuo ZHU + + * nnheader.el (nnheader-directory-files-is-safe): New variable. + (nnheader-directory-articles): Use it. + (nnheader-article-to-file-alist): Ditto. + +2000-11-09 16:20:37 ShengHuo ZHU + + * rfc2047.el (rfc2047-pad-base64): New function. + (rfc2047-decode): Use it. + +2000-11-09 08:53:04 ShengHuo ZHU + + * gnus-srvr.el (gnus-browse-foreign-server): Bind the original + select method. + +2000-11-08 19:58:58 ShengHuo ZHU + + * mml2015.el (mml2015-gpg-decrypt-1): + (mml2015-gpg-verify): buffer-string has no argument in Emacs. + +2000-11-08 16:37:02 ShengHuo ZHU + + * gnus-cache.el (gnus-cache-generate-nov-databases): Reopen cache. + +2000-11-08 08:38:30 ShengHuo ZHU + + * pop3.el (pop3-munge-message-separator): A message may have an + empty body. + +2000-11-07 18:02:26 ShengHuo ZHU + + * mm-uu.el (mm-uu-type-alist): Don't test pgp stuff. + (mm-uu-pgp-encrypted-extract): Clean mml2015 buffer. + (mm-uu-pgp-signed-extract): Use coding-system. + +2000-11-07 14:33:19 ShengHuo ZHU + + * gnus-art.el (gnus-mime-display-part): Show MIME security button. + (gnus-insert-mime-security-button): New function. + * mm-decode.el (mm-possibly-verify-or-decrypt): Add security info. + * mml2015.el: Add security info when verify or decrypt. + * mm-uu.el (mm-uu-pgp-signed-extract): Use multipart. + (mm-uu-pgp-encrypted-extract): Ditto. + +2000-11-07 08:49:36 ShengHuo ZHU + + * mm-decode.el (mm-display-parts): New function. + * gnus-art.el (gnus-mime-view-all-parts): Use it. Remove parts first. + +2000-02-02 Alexandre Oliva + + * gnus-mlspl.el: Documentation tweaks. + +2000-11-06 22:06:44 ShengHuo ZHU + + * mm-decode.el (mm-possibly-verify-or-decrypt): Fix. + * gnus-art.el (gnus-article-encrypt-body): Rename and support prefix + argument. + +2000-11-06 19:10:14 ShengHuo ZHU + + * rfc2231.el (rfc2231-encode-string): Use us-ascii if charset is nil. + +2000-11-06 18:17:53 ShengHuo ZHU + + * gnus-art.el (gnus-article-encrypt): New function. + (gnus-article-encrypt-protocol-alist): New variable. + (gnus-article-encrypt-protocol): New variable. + * mml2015.el (mml2015-self-encrypt): New function. + (mml2015-mailcrypt-encrypt): Set mc-pgp-always-sign. + +2000-11-06 16:02:52 ShengHuo ZHU + + * mm-uu.el (mm-uu-gpg-key-skip-to-last): New function. + (mm-uu-pgp-key-extract): Use application/pgp-keys, don't snarf, + let mailcap do it. + * mml2015.el: Remove snarf code. + * mm-decode.el: Remove snarf code. + +2000-11-06 14:03:10 ShengHuo ZHU + + * mml.el (mml-insert-mml-markup): Ignore internal stuff. + (mml-insert-mime): Understand gnus-decoded. + (mime-to-mml): New parameter handles. + * gnus-art.el (gnus-mime-save-part-and-strip): Use it. + * gnus-sum.el (gnus-summary-edit-article): Add argument `3'. + +2000-11-06 13:51:37 ShengHuo ZHU + + * mm-decode.el (mime-security): New group. + (mm-verify-function-alist): Add test function. + (mm-decrypt-function-alist): Ditto. + (mm-snarf-option): Set default value as nil. + (mm-find-part-by-type): Recursive parameter. + (mm-possibly-verify-or-decrypt): Support draft-ietf-openpgp-multsig. + * mml2015.el: Support draft-ietf-openpgp-multsig. + +2000-11-06 13:01:27 ShengHuo ZHU + + * gnus-art.el (gnus-mime-view-part-as-charset): New function. + (gnus-article-view-part-as-charset): New function. + +2000-11-05 22:34:07 ShengHuo ZHU + + * mm-decode.el (mm-verify-option): Default value. + (mm-possibly-verify-or-decrypt): Dealing with broken messages. + +2000-11-05 15:06:05 ShengHuo ZHU + + * nnvirtual.el (nnvirtual-request-expire-articles): Uncompress range. + +2000-11-05 Simon Josefsson + + * mml-smime.el (mml-smime-verify): Work in original multipart + buffert. + + * mm-decode.el (mm-handle-multipart-original-buffer): New macro. + (mm-handle-multipart-ctl-parameter): Ditto. + (mm-alist-to-plist): New function. + (mm-dissect-buffer): Store CTL parameters and copy original buffer + for multiparts. + (mm-destroy-parts): Destroy multipart buffert. + (mm-remove-part): Ditto. + + * mml-smime.el (mml-smime-sign): Not used. + (mml-smime-encrypt): Ditto. + + * mm-decode.el (mml-smime-verify): Autoload mml-smime. + + Verify S/MIME signature support. + + * mm-decode.el (mm-inline-media-tests): Add + application/{x-,}pkcs7-signature. + (mm-inlined-types): Ditto. + (mm-automatic-display): Ditto. + (mm-verify-function-alist): Ditto. Add name of method. + (mm-decrypt-function-alist): Add name of method. + (mm-find-part-by-type): Add documentation. + (mm-possibly-verify-or-decrypt): Use new format of + mm-{verify,decrypt}-function-alist. Use method names. + + * mml-smime.el (mml-smime-verify): New function. + +2000-11-04 20:38:50 ShengHuo ZHU + + * mm-view.el (mm-inline-text): Move point to the end of inserted text. + +2000-11-04 19:07:08 ShengHuo ZHU + + * mml2015.el (mml2015-function-alist): Clear verify and decrypt. + * mm-uu.el: Reorganized. Add gnatsweb, pgp-signed, pgp-encrypted. + * mm-decode.el (mm-snarf-option): New variable. + +2000-11-04 13:08:02 ShengHuo ZHU + + * mm-util.el (mm-subst-char-in-string): New function. + (mm-replace-chars-in-string): Use it. + * message.el (message-replace-chars-in-string): Use it. + * nnheader.el (nnheader-replace-chars-in-string): Use it. + * gnus-mh.el (mh-lib-progs): Shut up. + +2000-11-04 ShengHuo Zhu + + * base64.el, md5.el: Moved to contrib directory. + +2000-11-04 11:13:56 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-search-article-forward): Don't move + the last article when search. + +2000-11-04 10:34:29 ShengHuo ZHU + + * nnheader.el (nnheader-pathname-coding-system): Default iso-8859-1. + * nnmail.el (nnmail-pathname-coding-system): Ditto. + +2000-09-29 David Edmondson + + * message.el (message-newline-and-reformat): Typo. + +2000-11-04 10:11:05 ShengHuo ZHU + + * rfc2231.el (rfc2231-decode-encoded-string): Test mm-multibyte-p. + +2000-11-04 09:53:42 ShengHuo ZHU + + * nntp.el (nntp-decode-text): Delete bogus status lines. + +2000-11-03 Stefan Monnier + + * message.el (message-font-lock-keywords): Match a final newline + to help font-lock's multiline support. + +2000-11-04 09:11:44 ShengHuo ZHU + + * nnoo.el (nnoo-set): New function. + +2000-11-04 ShengHuo Zhu + + * gpg.el, gpg-ring.el: Moved to contrib directory. + +2000-11-04 Simon Josefsson + + * nnimap.el (nnimap-split-inbox): Typo. + +2000-11-03 10:46:44 ShengHuo ZHU + + * gnus-msg.el (gnus-msg-mail): Move it backwards. + +2000-11-03 Simon Josefsson + + * rfc2231.el (rfc2231-parse-qp-string): New function. + (require): rfc2047. + + * mail-parse.el (mail-header-parse-content-type): + (mail-header-parse-content-disposition): Support invalid QP + encoded strings, by using `rfc2231-parse-qp-string'. + +2000-11-03 08:58:08 ShengHuo ZHU + + * rfc2231.el (rfc2231-parse-string): Decode when there is no number. + (rfc2231-decode-encoded-string): Typo "> X 1". + (rfc2231-encode-string): Insert the name of charset. + * mail-parse.el (mail-header-encode-parameter): Use RFC2231. + +2000-11-02 23:35:50 ShengHuo ZHU + + * mm-decode.el (mm-save-part): Return the filename. + * gnus-sum.el (gnus-summary-edit-article): Remove a hack. + * gnus-art.el (gnus-mime-save-part-and-strip): New function. + (gnus-mime-action-alist): Use it. + (gnus-mime-button-commands): Use it. + * mm-extern.el (mm-extern-local-file): Error when the file is gone. + (mm-inline-external-body): unwind-protect. + +2000-11-02 21:08:49 ShengHuo ZHU + + * gnus-art.el (gnus-insert-mime-button): Show url. + +2000-11-02 19:51:19 ShengHuo ZHU + + * mml.el (mml-generate-mime-1): Support external url. + * nnwarchive.el (nnwarchive-mail-archive-article): Use external url. + +2000-11-02 16:53:32 ShengHuo ZHU + + * mm-partial.el (mm-inline-partial): Buffer name with a leading space. + * mm-decode.el (mm-display-external): Ditto. + * mm-extern.el: New file. + * mm-decode.el (mm-inline-media-tests): Hook it up. + (mm-inlined-types): Inline message/external-body. + +2000-11-02 Simon Josefsson + + * gnus-art.el (gnus-visible-headers): Add Mail-Followup-To. + + * message.el (message-get-reply-headers): Better handling when + Mail-Followup-To is very large. + +2000-11-02 13:27:56 ShengHuo ZHU + + * gnus-uu.el (gnus-uu-post-news): Comment out the redundancy. + * gnus-art.el (gnus-article-edit-done): + * gnus-sum.el (gnus-summary-edit-article-done): Move line + counting code here. + * gnus-msg.el (gnus-setup-message): Remove a hack. + +2000-11-02 09:33:01 ShengHuo ZHU + + * gnus-sum.el (gnus-newsgroup-variables): New variable. + (gnus-summary-mode): Make them local variables. + (gnus-set-global-variables): Globalize them. + (gnus-summary-exit): Kill them. + +2000-11-02 Hrvoje Niksic + + * rfc2047.el (rfc2047-encoded-word-regexp): Allow empty encoded + word. + +2000-11-01 10:07:13 ShengHuo ZHU + + * gnus-art.el (gnus-mime-display-part): Add to signed or encrypted. + gnus-article-wash-types. + * gnus-art.el (gnus-article-wash-status): Use them. + +2000-11-01 08:54:11 ShengHuo ZHU + + * mml.el (mml-read-tag): Remove spaces and LF. + +2000-11-01 08:01:03 ShengHuo ZHU + + * mml2015.el (mml2015-mailcrypt-encrypt): Use from and sign parameters. + * mml.el (mml-generate-mime-1): Add sender and recipients attributes. + +2000-11-01 07:39:24 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-force-verify-and-decrypt): New function. + +2000-10-31 22:06:13 ShengHuo ZHU + + * gnus-sum.el (gnus-article-charset): New variable. + (gnus-summary-display-article): Set it. + * gnus-msg.el (gnus-copy-article-buffer): Use it. + * gnus-art.el (gnus-article-mode): Make it local variable. + +2000-11-01 01:12:29 Lars Magne Ingebrigtsen + + * nnultimate.el (nnultimate-create-mapping): Use nreverse. + +2000-10-31 23:45:31 Lars Magne Ingebrigtsen + + * nnwfm.el: New file. + + * nnweb.el (nnweb-replace-in-string): New function. + +2000-10-31 17:32:02 ShengHuo ZHU + + * mml2015.el: Wrap gpg.el. + * gpg.el (gpg-verify): The last argument of apply is a list. + (gpg-encrypt): Add passphrase as a parameter. + +2000-10-31 17:28:45 ShengHuo ZHU + + * gpg.el: New file. + * gpg-ring.el: New file. + +2000-10-31 11:44:29 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-show-article): Fix the summary line. + +2000-10-31 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-insert-line): Work with quoted + double-quote characters. + (gnus-summary-prepare-threads): Ditto. + +2000-10-31 08:36:03 ShengHuo ZHU + + * gnus-art.el (gnus-mime-display-single): Forward line -1. + * mml.el (mml-read-tag): Don't skip the leading space. + * lpath.el (font-lock-set-defaults): Shut up. + +2000-10-31 00:04:35 ShengHuo ZHU + + * mml2015.el: Fix doc. Remove bogus mml2015-setup. + +2000-10-30 23:37:07 ShengHuo ZHU + + * qp.el (quoted-printable-encode-region): Replace leading - when + ultra safe. + * mml.el (mml-generate-mime-postprocess-function): Removed. + (mml-postprocess-alist): Removed. + (mml-generate-mime-1): Use ultra-safe when sign. + * mml2015.el (mml2015-fix-micalg): Uppercase. + (mml2015-verify): Insert LF. + (mml2015-mailcrypt-sign): Downcase; search backward. + +2000-10-16 11:36:52 Lars Magne Ingebrigtsen + + * nnultimate.el (nnultimate-forum-table-p): Be a bit more + restrictive. + (nnultimate-table-regexp): New variable. + (nnultimate-forum-table-p): Use it. + +2000-10-30 Ed L Cashin + Trivial patch. + + * gnus-sum.el (gnus-summary-expire-articles): Save point. + +2000-10-30 08:52:50 ShengHuo ZHU + + * mml-sec.el (mml-pgpmime-sign-buffer): Use mml2015-sign. + (mml-pgpmime-encrypt-buffer): Use mml2015-encrypt. + +2000-10-30 08:38:12 ShengHuo ZHU + + * mml2015.el: Shut up. + +2000-10-30 08:17:46 ShengHuo ZHU + + * gnus.el (gnus-server-browse-hashtb): Removed. + * gnus-group.el (gnus-group-prepare-flat-list-dead): Use gnus-active. + (gnus-group-insert-group-line-info): Use simplified method. + * gnus-srvr.el (gnus-browse-foreign-server): Use gnus-set-active. + +2000-10-30 01:52:40 ShengHuo ZHU + + * gnus-util.el (gnus-union): Renamed from gnus-agent-union, and + moved here. + * gnus-agent.el (gnus-agent-fetch-headers): Use it. + * gnus-group.el (gnus-group-prepare-flat): Use it. + * gnus-topic.el (gnus-group-prepare-topics): Use it. + +2000-10-30 01:23:49 ShengHuo ZHU + + * mml.el (mml-mode): Show menu in XEmacs. + +2000-10-30 00:49:33 ShengHuo ZHU + + * gnus-srvr.el (gnus-server-browse-in-group-buffer): New variable. + (gnus-server-read-server-in-server-buffer): New function. + (gnus-browse-foreign-server): Browse in group buffer. + * gnus-group.el (gnus-group-prepare-flat): List group not in list. + (gnus-group-prepare-flat-list-dead): Use gnus-group-insert-group-line. + * gnus-topic.el (gnus-group-prepare-topics): Ditto. + * gnus.el (gnus-server-browse-hashtb): New variable. + +2000-10-29 22:31:40 ShengHuo ZHU + + * nnfolder.el (nnfolder-open-nov): Use group. + +2000-10-29 17:23:15 ShengHuo ZHU + + * nnfolder.el: Add NOV. Set version to 2.0. + (nnfolder-nov-is-evil): If non-nil, nnfolder acts like 1.0. + +2000-10-29 10:35:08 ShengHuo ZHU + + * mml2015.el (mml2015-mailcrypt-sign): Use mc-sign-generic. + +2000-10-29 09:42:05 ShengHuo ZHU + + * gnus-srvr.el (gnus-browse-foreign-server): Show level mark. + (gnus-browse-unsubscribe-group): Unsubscribed is not killed. + +2000-10-29 08:28:58 ShengHuo ZHU + + * nnfolder.el (nnfolder-read-folder): Don't goto point-min. + +2000-10-28 19:11:01 ShengHuo ZHU + + * mm-decode.el (mm-verify-function-alist): New variable. + (mm-verify-option): New variable. + (mm-decrypt-function-alist): Ditto. + (mm-decrypt-option): Ditto. + (mm-find-raw-part-by-type): New function. + (mm-possibly-verify-or-decrypt): New function. + (mm-dissect-multipart): Use it. + * mml2015.el (mml2015-fix-micalg): New function. + (mml2015-decrypt): Use new interface. + (mml2015-verify): Use new interface. + (mml2015-setup): Make it bogus. + +2000-10-28 16:54:45 ShengHuo ZHU + + * mml.el (mml-generate-mime-postprocess-function): Set to + mml-postprocess. + (autoload): Autoload mml2015 and mml-smime. + (mml-postprocess-alist): Use mml2015-sign and mml2015-encrypt. + * mml2015.el (mml2015-encrypt): New function. + (mml2015-sign): New function. + (mml2015-encrypt-function): New variable. + (mml2015-sign-function): New variable. + (mml2015-mailcrypt-encrypt): Use message-recipients. + (mml2015-setup): Don't set mml-generate-mime-postprocess-function. + * mml-smime.el (mml-smime-setup): Ditto. + +2000-10-28 Simon Josefsson + + * imap.el (imap-parse-resp-text-code): Workaround bug in Stalker + Communigate Pro 3.3.1 server. + + * mml-sec.el (mml-smime-encrypt-buffer): Support certfiles stored + in buffers. + (mml-secure-dns-server): Removed. + (mml-secure-part-smime-encrypt-by-dns): Use DIG interface. Don't + write certificates to files. + + * smime.el (smime-dns-server): New variable. + (smime-mail-to-domain): + (smime-cert-by-dns): New functions. + + * dig.el: New file. + +2000-10-28 10:09:41 ShengHuo ZHU + + * message.el (message-options): New variable. + (message-options-set-recipient): New function. + (message-send): Use them. + * gnus-int.el (gnus-request-replace-article): Use them. + (gnus-request-accept-article): Ditto. + * mml.el (mml-preview): Use them. + * gnus-sum.el (gnus-summary-edit-article): Use them. + + * message.el (message-options-get): New function. + (message-options-get): New function. + * rfc2047.el (rfc2047-encode-message-header): Use them. + * mm-bodies.el (mm-encode-body): Use them. + +2000-10-28 Simon Josefsson + + * nnimap.el (nnimap-retrieve-which-headers): + (nnimap-request-article-part): Quote message-id. + + * smime.el (smime-CA-directory): Rename from `smime-CAs'. + (smime-CA-file): New variable. + (smime-call-openssl-region): Don't error. + (smime-sign-region): Return result value. + (smime-encrypt-region): Ditto. + (smime-verify-region): New function. + (smime-decrypt-region): Ditto. + (smime-verify-buffer): Ditto. + (smime-decrypt-buffer): Ditto. + + * mml.el: Require mml-sec. + (mml-generate-mime-1): Support "sign" and "encrypt" MML tags. + (mml-mode-map): Add "sign" and "encrypt" maps. + (mml-menu): Add security menu. + (mml-preview): Use generate-new-buffer. + + * mml-sec.el: New file. + +2000-10-28 03:43:03 ShengHuo ZHU + + * mm-decode.el (mm-find-part-by-type): Move it here. + * mml.el (mml-postprocess): Move it here. + (mml-postprocess-alist): Move it here. Merge them. + +2000-10-28 03:38:39 ShengHuo ZHU + + * rfc2047.el (rfc2047-encode-message-header): Make sure no + unencoded stuff in the header. + +2000-10-28 02:40:46 ShengHuo ZHU + + * gnus-group.el (gnus-group-listed-groups): New variable. + (gnus-group-list-option): New variable. + (gnus-group-list-limit-map): New keymap. + (gnus-group-list-flush-map): New keymap. + (gnus-group-list-plus-map): New keymap. + (gnus-group-prepare-logic): New function. + (gnus-group-prepare-flat): Merge with + gnus-group-prepare-flat-predicate. Use gnus-group-listed-groups. + (gnus-group-prepare-flat-list-dead): Ditto. + (gnus-group-list-matching): Use gnus-group-prepare-function. + (gnus-group-list-dormant): Ditto. + (gnus-group-list-cached): Ditto. + (gnus-group-listed-groups): New function. + (gnus-group-list-limit): New function. + (gnus-group-list-flush): New function. + (gnus-group-list-plus): New function. + * gnus-topic.el (gnus-group-prepare-topics): Accept predicate. + (gnus-topic-prepare-topic): Ditto. + +2000-10-27 Paul Jarc + + * message.el (message-insert-to, message-get-reply-headers): + (message-reply, message-followup): Mail-{Followup,Reply}-To. + +2000-10-27 19:45:58 ShengHuo ZHU + + * mml2015.el: New file. + * smime.el: New file. + * mml-smime.el: New file. + +2000-10-27 19:42:12 ShengHuo ZHU + + * ChangeLog: Moved to ChangeLog.1. + +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. + +;; Local Variables: +;; coding: iso-2022-7bit +;; End: + +;; arch-tag: 956fd310-042f-4fca-8dca-a01dbe06acff diff --git a/lisp/assistant.el b/lisp/assistant.el new file mode 100644 index 0000000..79f83d5 --- /dev/null +++ b/lisp/assistant.el @@ -0,0 +1,480 @@ +;;; assistant.el --- guiding users through Emacs setup +;; Copyright (C) 2004 Free Software Foundation, Inc. + +;; Author: Lars Magne Ingebrigtsen +;; Keywords: util + +;; 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., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;;; Code: + +(eval-when-compile + (require 'cl)) + +(require 'widget) +(require 'wid-edit) + +(defvar assistant-readers + '(("variable" assistant-variable-reader) + ("validate" assistant-sexp-reader) + ("result" assistant-list-reader) + ("next" assistant-list-reader) + ("text" assistant-text-reader))) + +(defface assistant-field-face '((t (:bold t))) + "Face used for editable fields." + :group 'gnus-article-emphasis) + +;;; Internal variables + +(defvar assistant-data nil) +(defvar assistant-current-node nil) +(defvar assistant-previous-nodes nil) +(defvar assistant-widgets nil) + +(defun assistant-parse-buffer () + (let (results command value) + (goto-char (point-min)) + (while (search-forward "@" nil t) + (if (not (looking-at "[^ \t\n]+")) + (error "Dangling @") + (setq command (downcase (match-string 0))) + (goto-char (match-end 0))) + (setq value + (if (looking-at "[ \t]*\n") + (let (start) + (forward-line 1) + (setq start (point)) + (unless (re-search-forward (concat "^@end " command) nil t) + (error "No @end %s found" command)) + (beginning-of-line) + (prog1 + (buffer-substring start (point)) + (forward-line 1))) + (skip-chars-forward " \t") + (prog1 + (buffer-substring (point) (line-end-position)) + (forward-line 1)))) + (push (list command (assistant-reader command value)) + results)) + (assistant-segment (nreverse results)))) + +(defun assistant-text-reader (text) + (with-temp-buffer + (insert text) + (goto-char (point-min)) + (let ((start (point)) + (sections nil)) + (while (re-search-forward "@\\([^{]+\\){\\([^}]+\\)}" nil t) + (push (buffer-substring start (match-beginning 0)) + sections) + (push (list (match-string 1) (match-string 2)) + sections) + (setq start (point))) + (push (buffer-substring start (point-max)) + sections) + (nreverse sections)))) + +;; Segment the raw assistant data into a list of nodes. +(defun assistant-segment (list) + (let ((ast nil) + (node nil) + (title (pop list))) + (dolist (elem list) + (when (and (equal (car elem) "node") + node) + (push (list "save" nil) node) + (push (nreverse node) ast) + (setq node nil)) + (push elem node)) + (when node + (push (list "save" nil) node) + (push (nreverse node) ast)) + (cons title (nreverse ast)))) + +(defun assistant-reader (command value) + (let ((formatter (cadr (assoc command assistant-readers)))) + (if (not formatter) + value + (funcall formatter value)))) + +(defun assistant-list-reader (value) + (car (read-from-string (concat "(" value ")")))) + +(defun assistant-variable-reader (value) + (let ((section (car (read-from-string (concat "(" value ")"))))) + (append section (list 'default)))) + +(defun assistant-sexp-reader (value) + (if (zerop (length value)) + nil + (car (read-from-string value)))) + +(defun assistant-buffer-name (title) + (format "*Assistant %s*" title)) + +(defun assistant-get (ast command) + (cadr (assoc command ast))) + +(defun assistant-set (ast command value) + (let ((elem (assoc command ast))) + (when elem + (setcar (cdr elem) value)))) + +(defun assistant-get-list (ast command) + (let ((result nil)) + (dolist (elem ast) + (when (equal (car elem) command) + (push elem result))) + (nreverse result))) + +;;;###autoload +(defun assistant (file) + "Assist setting up Emacs based on FILE." + (interactive "fAssistant file name: ") + (let ((ast + (with-temp-buffer + (insert-file-contents file) + (assistant-parse-buffer)))) + (pop-to-buffer (assistant-buffer-name (assistant-get ast "title"))) + (assistant-render ast))) + +(defun assistant-render (ast) + (let ((first-node (assistant-get (nth 1 ast) "node"))) + (set (make-local-variable 'assistant-data) ast) + (set (make-local-variable 'assistant-current-node) nil) + (set (make-local-variable 'assistant-previous-nodes) nil) + (assistant-render-node first-node))) + +(defun assistant-find-node (node-name) + (let ((ast (cdr assistant-data))) + (while (and ast + (not (string= node-name (assistant-get (car ast) "node")))) + (pop ast)) + (car ast))) + +(defun assistant-node-name (node) + (assistant-get node "node")) + +(defun assistant-previous-node-text (node) + (format "<< Go back to %s" node)) + +(defun assistant-next-node-text (node) + (if (and node + (not (eq node 'finish))) + (format "Proceed to %s >>" node) + "Finish")) + +(defun assistant-set-defaults (node &optional forcep) + (dolist (variable (assistant-get-list node "variable")) + (setq variable (cadr variable)) + (when (or (eq (nth 3 variable) 'default) + forcep) + (setcar (nthcdr 3 variable) + (assistant-eval (nth 2 variable)))))) + +(defun assistant-get-variable (node variable &optional type raw) + (let ((variables (assistant-get-list node "variable")) + (result nil) + elem) + (while (and (setq elem (pop variables)) + (not result)) + (setq elem (cadr elem)) + (when (eq (intern variable) (car elem)) + (if type + (setq result (nth 1 elem)) + (setq result (if raw (nth 3 elem) + (format "%s" (nth 3 elem))))))) + result)) + +(defun assistant-set-variable (node variable value) + (let ((variables (assistant-get-list node "variable")) + elem) + (while (setq elem (pop variables)) + (setq elem (cadr elem)) + (when (eq (intern variable) (car elem)) + (setcar (nthcdr 3 elem) value))))) + +(defun assistant-render-text (text node) + (unless (and text node) + (gnus-error + 5 + "The assistant was asked to render invalid text or node data")) + (dolist (elem text) + (if (stringp elem) + ;; Ordinary text + (insert elem) + ;; A variable to be inserted as a widget. + (let* ((start (point)) + (variable (cadr elem)) + (type (assistant-get-variable node variable 'type))) + (cond + ((eq (car-safe type) :radio) + (push + (apply + #'widget-create + 'radio-button-choice + :assistant-variable variable + :assistant-node node + :value (assistant-get-variable node variable) + :notify (lambda (widget &rest ignore) + (assistant-set-variable + (widget-get widget :assistant-node) + (widget-get widget :assistant-variable) + (widget-value widget)) + (assistant-render-node + (assistant-get + (widget-get widget :assistant-node) + "node"))) + (cadr type)) + assistant-widgets)) + ((eq (car-safe type) :set) + (push + (apply + #'widget-create + 'set + :assistant-variable variable + :assistant-node node + :value (assistant-get-variable node variable nil t) + :notify (lambda (widget &rest ignore) + (assistant-set-variable + (widget-get widget :assistant-node) + (widget-get widget :assistant-variable) + (widget-value widget)) + (assistant-render-node + (assistant-get + (widget-get widget :assistant-node) + "node"))) + (cadr type)) + assistant-widgets)) + (t + (push + (widget-create + 'editable-field + :value-face 'assistant-field-face + :assistant-variable variable + (assistant-get-variable node variable)) + assistant-widgets) + ;; The editable-field widget apparently inserts a newline; + ;; remove it. + (delete-char -1) + (add-text-properties start (point) + (list + 'bold t + 'face 'assistant-field-face + 'not-read-only t)))))))) + +(defun assistant-render-node (node-name) + (let ((node (assistant-find-node node-name)) + (inhibit-read-only t) + (previous assistant-current-node) + (buffer-read-only nil)) + (unless node + (gnus-error 5 "The node for %s could not be found" node-name)) + (set (make-local-variable 'assistant-widgets) nil) + (assistant-set-defaults node) + (if (equal (assistant-get node "type") "interstitial") + (assistant-render-node (nth 0 (assistant-find-next-nodes node-name))) + (setq assistant-current-node node-name) + (when previous + (push previous assistant-previous-nodes)) + (erase-buffer) + (insert (cadar assistant-data) "\n\n") + (insert node-name "\n\n") + (assistant-render-text (assistant-get node "text") node) + (insert "\n\n") + (when assistant-previous-nodes + (assistant-node-button 'previous (car assistant-previous-nodes))) + (widget-create + 'push-button + :assistant-node node-name + :notify (lambda (widget &rest ignore) + (let* ((node (widget-get widget :assistant-node))) + (assistant-set-defaults (assistant-find-node node) 'force) + (assistant-render-node node))) + "Reset") + (insert "\n") + (dolist (nnode (assistant-find-next-nodes)) + (assistant-node-button 'next nnode) + (insert "\n")) + + (goto-char (point-min)) + (assistant-make-read-only)))) + +(defun assistant-make-read-only () + (let ((start (point-min)) + end) + (while (setq end (text-property-any start (point-max) 'not-read-only t)) + (put-text-property start end 'read-only t) + (put-text-property start end 'rear-nonsticky t) + (while (get-text-property end 'not-read-only) + (incf end)) + (setq start end)) + (put-text-property start (point-max) 'read-only t))) + +(defun assistant-node-button (type node) + (let ((text (if (eq type 'next) + (assistant-next-node-text node) + (assistant-previous-node-text node)))) + (widget-create + 'push-button + :assistant-node node + :assistant-type type + :notify (lambda (widget &rest ignore) + (let* ((node (widget-get widget :assistant-node)) + (type (widget-get widget :assistant-type))) + (if (eq type 'previous) + (progn + (setq assistant-current-node nil) + (pop assistant-previous-nodes)) + (assistant-get-widget-values) + (assistant-validate)) + (if (null node) + (assistant-finish) + (assistant-render-node node)))) + text) + (use-local-map widget-keymap))) + +(defun assistant-validate-types (node) + (dolist (variable (assistant-get-list node "variable")) + (setq variable (cadr variable)) + (let ((type (nth 1 variable)) + (value (nth 3 variable))) + (when + (cond + ((eq type :number) + (string-match "[^0-9]" value)) + (t + nil)) + (error "%s is not of type %s: %s" + (car variable) type value))))) + +(defun assistant-get-widget-values () + (let ((node (assistant-find-node assistant-current-node))) + (dolist (widget assistant-widgets) + (assistant-set-variable + node (widget-get widget :assistant-variable) + (widget-value widget))))) + +(defun assistant-validate () + (let* ((node (assistant-find-node assistant-current-node)) + (validation (assistant-get node "validate")) + result) + (assistant-validate-types node) + (when validation + (when (setq result (assistant-eval validation)) + (unless (y-or-n-p (format "Error: %s. Continue? " result)) + (error "%s" result)))) + (assistant-set node "save" t))) + +;; (defun assistant-find-next-node (&optional node) +;; (let* ((node (assistant-find-node (or node assistant-current-node))) +;; (node-name (assistant-node-name node)) +;; (nexts (assistant-get-list node "next")) +;; next elem applicable) + +;; (while (setq elem (pop nexts)) +;; (when (assistant-eval (car (cadr elem))) +;; (setq applicable (cons elem applicable)))) + +;; ;; return the first thing we can +;; (cadr (cadr (pop applicable))))) + +(defun assistant-find-next-nodes (&optional node) + (let* ((node (assistant-find-node (or node assistant-current-node))) + (nexts (assistant-get-list node "next")) + next elem applicable return) + + (while (setq elem (pop nexts)) + (when (assistant-eval (car (cadr elem))) + (setq applicable (cons elem applicable)))) + + ;; return the first thing we can + + (while (setq elem (pop applicable)) + (push (cadr (cadr elem)) return)) + + return)) + +(defun assistant-get-all-variables () + (let ((variables nil)) + (dolist (node (cdr assistant-data)) + (setq variables + (append (assistant-get-list node "variable") + variables))) + variables)) + +(defun assistant-eval (form) + (let ((bindings nil)) + (dolist (variable (assistant-get-all-variables)) + (setq variable (cadr variable)) + (push (list (car variable) + (if (eq (nth 3 variable) 'default) + nil + (if (listp (nth 3 variable)) + `(list ,@(nth 3 variable)) + (nth 3 variable)))) + bindings)) + (eval + `(let ,bindings + ,form)))) + +(defun assistant-finish () + (let ((results nil) + result) + (dolist (node (cdr assistant-data)) + (when (assistant-get node "save") + (setq result (assistant-get node "result")) + (push (list (car result) + (assistant-eval (cadr result))) + results))) + (message "Results: %s" + (nreverse results)))) + +;;; Validation functions. + +(defun assistant-validate-connect-to-server (server port) + (let* ((error nil) + (stream + (condition-case err + (open-network-stream "nntpd" nil server port) + (error (setq error err))))) + (if (and (processp stream) + (memq (process-status stream) '(open run))) + (progn + (delete-process stream) + nil) + error))) + +(defun assistant-authinfo-data (server port type) + (when (file-exists-p "~/.authinfo") + (netrc-get (netrc-machine (netrc-parse "~/.authinfo") + server port) + (if (eq type 'user) + "login" + "password")))) + +(defun assistant-password-required-p () + nil) + +(provide 'assistant) + +;;; arch-tag: 0404bfa2-9226-4611-8d3f-335c2416175b +;;; assistant.el ends here diff --git a/lisp/binhex.el b/lisp/binhex.el index 5141a74..9af2d46 100644 --- a/lisp/binhex.el +++ b/lisp/binhex.el @@ -49,6 +49,7 @@ input and write the converted data to its standard output." (defcustom binhex-use-external (executable-find binhex-decoder-program) "*Use external binhex program." + :version "22.1" :group 'gnus-extract :type 'boolean) @@ -322,4 +323,5 @@ If HEADER-ONLY is non-nil only decode header and return filename." (provide 'binhex) +;;; arch-tag: 8476badd-1e76-4f1d-a640-f9a38c72eed8 ;;; binhex.el ends here diff --git a/lisp/canlock.el b/lisp/canlock.el index 00de92f..71c7dbe 100644 --- a/lisp/canlock.el +++ b/lisp/canlock.el @@ -44,7 +44,7 @@ (eval-when-compile (require 'cl)) -(require 'sha1-el) +(require 'sha1) (defvar mail-header-separator) @@ -55,13 +55,13 @@ (defcustom canlock-password nil "Password to use when signing a Cancel-Lock or a Cancel-Key header." :type '(radio (const :format "Not specified " nil) - (string :tag "Password" :size 0)) + (string :tag "Password")) :group 'canlock) (defcustom canlock-password-for-verify canlock-password "Password to use when verifying a Cancel-Lock or a Cancel-Key header." :type '(radio (const :format "Not specified " nil) - (string :tag "Password" :size 0)) + (string :tag "Password")) :group 'canlock) (defcustom canlock-force-insert-header nil @@ -247,4 +247,5 @@ it fails." (provide 'canlock) +;;; arch-tag: 033c4f09-b9f1-459d-bd0d-254430283f78 ;;; canlock.el ends here diff --git a/lisp/compface.el b/lisp/compface.el index 3a6f101..fc2ac46 100644 --- a/lisp/compface.el +++ b/lisp/compface.el @@ -1,8 +1,7 @@ ;;; compface.el --- functions for converting X-Face headers -;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +;; Copyright (C) 2002 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen -;; TAKAI Kousuke ;; Keywords: news ;; This file is part of GNU Emacs. @@ -26,721 +25,34 @@ ;;; Code: -(defgroup compface nil - "X-Face image conversion." - :group 'extensions) - -(defcustom uncompface-use-external (and (not noninteractive) - (executable-find "uncompface") - (executable-find "icontopbm") - 'undecided) - "*Specify which of the internal or the external decoder should be used. -nil means to use the internal ELisp-based uncompface program. t means -to use the external decoder. In the later case, you need to have the -external `uncompface' and `icontopbm' programs installed. The default -value is nil if those external programs aren't available, otherwise -`undecided' which means to determine it by checking whether the host -machine is slow. See also `uncompface-use-external-threshold'. You -can skip that check by setting this value as nil or t explicitly." - :type '(choice (const :tag "Use the internal decoder" nil) - (const :tag "Use the external decoder" t) - (const :tag "Autodetection" undecided)) - :group 'compface) - -(defcustom uncompface-use-external-threshold 0.1 - "*Number of seconds to check whether the host machine is slow. -If the host takes time larger than this value for decoding an X-Face -using the internal ELisp-based uncompface program, it will be changed -to using the external `uncompface' and `icontopbm' programs if they -are available. Note that the measurement may never be exact." - :type 'number - :group 'compface) - -(eval-when-compile - (defmacro uncompface-float-time (&optional specified-time) - (if (fboundp 'float-time) - `(float-time ,specified-time) - `(let ((time (or ,specified-time (current-time)))) - (+ (* (car time) 65536.0) - (cadr time) - (cond ((consp (setq time (cddr time))) - (/ (car time) 1000000.0)) - (time - (/ time 1000000.0)) - (t - 0))))))) - +;;;### (defun uncompface (face) "Convert FACE to pbm. -If `uncompface-use-external' is t, it requires the external programs -`uncompface', and `icontopbm'. On a GNU/Linux system these might be -in packages with names like `compface' or `faces-xface' and `netpbm' -or `libgr-progs', for instance." - (cond ((eq uncompface-use-external nil) - (uncompface-internal face)) - ((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)))) - (t - (let* ((gc-cons-threshold (eval '(lsh -1 -1))) - (start (current-time))) - (prog1 - (uncompface-internal face) - (setq uncompface-use-external - (and (> (- (uncompface-float-time (current-time)) - (uncompface-float-time start)) - uncompface-use-external-threshold) - (executable-find "uncompface") - (executable-find "icontopbm") - t))))))) - -;; The following section is a bug-for-bug compatible version of -;; `uncompface' program entirely implemented in Emacs-Lisp. - -(eval-when-compile - ;; The size of 48x48 is actually hard-coded into the code itself, - ;; so you cannot simply change those values. So we hard-code - ;; them into the compiled code. - (defconst uncompface-width 48 - "Width of X-Face bitmap image.") - (defconst uncompface-height 48 - "Height of X-Face bitmap image.") - - ;; Again, this is also hard-coded into the compiled code. - (defconst uncompface-guesses - (mapcar (lambda (x) - (mapcar (lambda (x) - (let ((vector (make-vector (length x) nil)) - (i 0)) - (while x - (or (zerop (car x)) - (aset vector i t)) - (setq x (cdr x) - i (1+ i))) - vector)) - x)) - '((;; g_00 - (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 - 0 0 0 0 0 1 0 1 0 0 0 1 0 1 1 1 - 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 - 0 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 - 0 1 0 0 0 1 0 1 0 0 1 0 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 - 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 - 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 - 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1 - 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 1 0 1 1 0 0 0 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 0 0 1 1 1 1 0 1 0 1 0 1 0 0 - 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 - 0 1 0 1 0 1 1 1 0 1 0 0 0 1 1 1 - 1 1 0 1 0 1 1 1 0 0 1 1 1 1 0 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 0 1 1 1 1 1 0 0 0 1 1 1 1 1 - 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 - 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 - 0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 - 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 - 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 0 1 1 1 1 1 0 0 0 1 1 1 0 1 - 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 - 0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 - 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1 - 0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1 - 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 - 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 - 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 - 1 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 - 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 - 0 1 0 1 0 1 1 0 0 0 1 0 0 1 0 1 - 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 - 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 - 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 - 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 - 0 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 - 0 0 0 0 1 0 0 1 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 - 0 0 0 1 1 0 0 0 1 1 0 1 0 1 1 1 - 1 0 0 1 0 1 0 0 0 1 1 1 0 0 0 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 - 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 1 - 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 - 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 - 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 - 1 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 - 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 1 - 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 - 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 1 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 - 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 - 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 1 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 - 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 - 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 - 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 - 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 - 1 1 0 1 0 1 1 1 0 1 0 1 1 1 1 1 - 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 - 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 - 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 - 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 - 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 0 0 1 1 0 1 0 0 0 0 1 1 1 1 - 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 - 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 - 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 - 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 - 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 1 - 1 0 1 0 1 1 1 1 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 1 1 1 0 0 0 1 0 1 0 1 - 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 - 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 - 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 - 0 1 0 0 1 1 1 1 0 0 1 1 1 1 1 0 - 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 - 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 - 1 0 0 1 0 1 0 1 0 1 0 0 1 1 1 1 - 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 - 0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1 - 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 - 0 0 1 0 0 1 0 1 0 0 0 0 1 1 1 0 - 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 1 - 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 - 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 - 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 - 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1 - 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 - 0 1 0 0 0 1 1 1 1 1 1 0 1 1 0 1 - 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 0 0 1 1 1 1 0 1 1 0 1 1 1 1 - 1 1 0 1 1 0 0 0 0 1 0 1 1 1 1 1 - 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 - 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 - 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 - 1 0 0 1 0 1 0 0 0 0 0 0 1 1 0 1 - 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 - 0 1 0 0 0 1 1 0 0 1 0 1 0 1 1 1 - 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 - 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 - 0 1 0 0 0 1 1 1 0 1 1 0 1 1 0 0 - 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 1 1 0 1 0 0 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 - 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 1 - 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 - 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 - 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 - 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 - 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 0 - 1 1 0 0 1 1 1 1 0 0 0 0 0 1 0 1 - 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 - 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 1 1 1 0 1 0 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 1 - 0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1 - 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 - 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 - 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 1 - 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 - 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 - 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 0 1 1 1 0 0 1 1 0 - 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 1 1 1 0 1 1 0 0 - 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 - 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 - 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 - 1 0 0 1 1 1 0 1 0 0 0 0 1 1 1 1 - 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) - ;; g_10 - (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 - 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 - 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1 - 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 - 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 - 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 - 0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 1 - 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 - 0 1 0 1 1 1 1 1 0 0 1 1 1 1 1 1 - 0 0 0 1 0 1 1 1 0 0 1 1 0 0 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 - 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 1 0 1 0 1 0 1 1 1 - 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 1 - 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 - 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1 1 - 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 1 1 1 0 1 1 0 1 1 1 1 - 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 - 1 1 1 1 1 0 1 0 1 1 1 0 1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 - 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 - 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) - ;; g_20 - (0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 - 0 1 0 0 0 0 1 1 0 0 1 0 1 1 1 0 - 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1) - ;; g_40 - (0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 - 1 1 1 0 0 1 0 0 0 0 0 0 1 1 0 1 - 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 - 0 1 0 0 0 1 0 0 0 1 0 0 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 - 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 - 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 1 - 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 - 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 - 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - 0 0 0 1 1 1 0 0 1 1 0 1 1 1 0 1 - 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 - 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 - 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 - 0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1 - 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 - 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 - 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 - 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 - 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 - 0 1 0 0 0 0 0 1 0 1 0 1 0 1 1 1 - 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 1 0 1 0 1 1 1 0 1 1 1 - 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 1 - 0 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 - 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 - 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 - 0 0 0 0 0 1 0 1 0 1 1 1 1 1 0 1 - 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 1 - 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 - 0 0 0 0 1 1 0 1 1 1 1 1 1 1 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 1 - 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 - 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 - 0 0 0 0 1 1 0 1 0 1 1 1 1 1 1 1 - 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 - 0 1 0 0 1 1 0 1 0 1 1 1 1 1 0 1 - 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1)) - (;; g_01 - (0 0 1 1 0 1 1 1 0 1 1 1 0 0 1 1 - 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 - 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 - 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1 1 - 0 1 1 1 0 0 0 0 0 0 1 1 0 0 1 1 - 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 1 - 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) - ;; g_11 - (0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 1 - 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1) - ;; g_21 - (0 0 0 1 0 1 1 1) - ;; g_41 - (0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 - 0 0 0 0 0 0 0 1 0 0 0 1 1 1 1 1 - 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1 - 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) - (;; g_02 - (0 1 0 1) - ;; g_12 - (0 1) - ;; g_22 - (0) - ;; g_42 - (0 0 0 1)))) - "Static prediction table for X-Face image compression algorithm.") - - ;; Macros for inlining critical values. - (defmacro uncompface-width () (list 'quote uncompface-width)) - (defmacro uncompface-height () (list 'quote uncompface-height)) - (defmacro uncompface-guesses () (list 'quote uncompface-guesses)) - - (defmacro uncompface-loop (&rest body) - "Eval BODY and repeat if last expression of BODY yields non-nil." - (list 'while (cons 'progn body)))) - -;; (defun uncompface-print-bignum (bignum &optional prefix) -;; (princ (format (concat prefix "<%s>\n") -;; (mapconcat (lambda (x) (format "%02x" x)) -;; (reverse bignum) " ")))) - -;; Shut up the byte-compiler. -;; These variables are once bound in `uncompface' and all subfunctions -;; accesses them directly rather than creating their own bindings. -(eval-when-compile - (defvar bignum) - (defvar face)) - -;; Big-number facilities. -;; These functions were used to be implemented with `lsh' and `logand', -;; but rewritten to use `/' and `%'. The last two are mapped into -;; byte-code directly, but the formers are normal functions even in -;; compiled code which involve expensive `funcall' operations. -(eval-when-compile - (defsubst uncompface-big-mul-add (multiplier adder) - "Multiply BIGNUM by MULTIPLIER and add ADDER and put result in `bignum'." - (setq bignum (if (= multiplier 0) - (cons 0 bignum) - (prog1 bignum - (while (progn - (setcar bignum (% (setq adder (+ (* (car bignum) - multiplier) - adder)) - 256)) - (setq adder (/ adder 256)) - (cdr bignum)) - (setq bignum (cdr bignum))) - (or (= adder 0) - (setcdr bignum (list adder)))))))) - -;; This trick is for XEmacs 21.4 which doesn't allow inlining a function -;; using `defsubst' into another function also defined with `defsubst'. -(eval-when-compile - (when (featurep 'xemacs) - (defvar uncompface-big-mul-add (symbol-function 'uncompface-big-mul-add)) - (defmacro uncompface-big-mul-add (multiplier adder) - `(,uncompface-big-mul-add ,multiplier ,adder)))) - -;; Separate `eval-when-compile' for the byte compiler -;; to properly define `uncompface-big-mul-add' before `uncompface-big-pop'. -(eval-when-compile - (defsubst uncompface-big-pop (prob) - (let ((n (car bignum)) (i 0)) - (if (cdr bignum) - (setq bignum (cdr bignum)) - (setcar bignum 0)) - (while (or (< n (cdr (car prob))) - (>= n (+ (cdr (car prob)) (car (car prob))))) - (setq prob (cdr prob) - i (1+ i))) - (uncompface-big-mul-add (car (car prob)) (- n (cdr (car prob)))) - i))) - -;; This function cannot be inlined due to recursive calls. -(defun uncompface-pop-grays (offset size) - (if (<= size 3) - (let ((bits (uncompface-big-pop - ;; This is freqs[16] in compface_private.h. - '(( 0 . 0) (38 . 0) (38 . 38) (13 . 152) - (38 . 76) (13 . 165) (13 . 178) ( 6 . 230) - (38 . 114) (13 . 191) (13 . 204) ( 6 . 236) - (13 . 217) ( 6 . 242) ( 5 . 248) ( 3 . 253))))) -;; (if (/= (logand bits 1) 0) -;; (aset face offset t)) -;; (if (/= (logand bits 2) 0) -;; (aset face (1+ offset) t)) -;; (if (/= (logand bits 4) 0) -;; (aset face (+ offset (uncompface-width)) t)) -;; (if (/= (logand bits 8) 0) -;; (aset face (+ offset (uncompface-width) 1) t)) - (when (>= bits 8) - (aset face (+ offset (uncompface-width) 1) t) - (setq bits (- bits 8))) - (when (>= bits 4) - (aset face (+ offset (uncompface-width)) t) - (setq bits (- bits 4))) - (or (eq (if (< bits 2) - bits - (aset face (1+ offset) t) - (- bits 2)) - 0) - (aset face offset t)) - ) - (setq size (/ size 2)) - (uncompface-pop-grays offset size) - (uncompface-pop-grays (+ offset size) size) - (uncompface-pop-grays (+ offset (* (uncompface-width) size)) size) - (uncompface-pop-grays (+ offset (* (uncompface-width) size) size) size))) - -;; Again, this function call itself recursively. -(defun uncompface-uncompress (offset size level) - ;; This used to be (funcall (aref [(lambda ...) ...] (u-big-pop ...))) - ;; but this was slow due to function call. - (let ((i (uncompface-big-pop (car level)))) - (cond ((eq i 0) ; black - (uncompface-pop-grays offset size)) - ((eq i 1) ; gray - (setq size (/ size 2) - level (cdr level)) - (uncompface-uncompress offset size level) - (uncompface-uncompress (+ offset size) size level) - (uncompface-uncompress (+ offset (* size (uncompface-width))) - size level) - (uncompface-uncompress (+ offset (* size (uncompface-width)) size) - size level)) - ;; ((eq i 2) nil) - ;; (t (error "Cannot happen")) - ))) - -(eval-when-compile - (defmacro uncompface-shift-in (k dy dx) - `(+ k k (if (aref face (+ i (* ,dy (uncompface-width)) ,dx)) 1 0)))) - -(defun uncompface-internal (string &optional raw) - "Decode X-Face data STRING and return an image in the pbm format. -If the optional RAW is non-nil, return a raw bitmap as a vector." - (let (;; `bignum' and `face' are semi-global variables. - ;; Do not use '(0) below, because BIGNUM is modified in-place. - (bignum (list 0)) - (face (make-vector (* (uncompface-width) (uncompface-height)) nil)) - ;;(uncompface-big-shift -16) - ;;(uncompface-big-mask 65535) - (y 0) x) - (mapc (lambda (c) - (and (>= c ?!) (<= c ?~) - (uncompface-big-mul-add (1+ (- ?~ ?!)) (- c ?!)))) - string) - ;;(uncompface-print-bignum bignum) - ;;(setq y 0) - (uncompface-loop - (setq x 0) - (uncompface-loop - (uncompface-uncompress (+ (* (uncompface-width) y) x) 16 - ;; This is levels[4][3] in compface_private.h. - '(;; Top of tree almost always grey - (( 1 . 255) (251 . 0) ( 4 . 251)) - (( 1 . 255) (200 . 0) ( 55 . 200)) - (( 33 . 223) (159 . 0) ( 64 . 159)) - ;; Grey disallowed at bottom - ((131 . 0) ( 0 . 0) (125 . 131)))) - (< (setq x (+ x 16)) (uncompface-width))) - (< (setq y (+ y 16)) (uncompface-height))) - (setq y 0) - (let ((i 0) guesses k) - (uncompface-loop - (setq guesses (cond ((= y 1) (nth 2 (uncompface-guesses))) - ((= y 2) (nth 1 (uncompface-guesses))) - (t (nth 0 (uncompface-guesses)))) - x 0) - (uncompface-loop - (setq k 0) - (when (>= x 1) - (when (>= x 2) - (when (>= x 3) - (when (>= y 1) - (when (>= y 2) - (when (>= y 3) - (setq k (uncompface-shift-in k -2 -2))) - (setq k (uncompface-shift-in k -1 -2))) - (setq k (uncompface-shift-in k 0 -2)))) - (when (>= y 1) - (when (>= y 2) - (when (>= y 3) - (setq k (uncompface-shift-in k -2 -1))) - (setq k (uncompface-shift-in k -1 -1))) - (setq k (uncompface-shift-in k 0 -1)))) - (when (>= y 2) - (when (>= y 3) - (setq k (uncompface-shift-in k -2 0))) - (setq k (uncompface-shift-in k -1 0))) - (when (>= y 2) - (when (>= y 3) - (setq k (uncompface-shift-in k -2 1))) - (setq k (uncompface-shift-in k -1 1))) - (when (<= x (- (uncompface-width) 2)) - (when (>= y 2) - (when (>= y 3) - (setq k (uncompface-shift-in k -2 2))) - (setq k (uncompface-shift-in k -1 2))))) - (if (aref (car (cond ((= x 1) - (cdr (cdr guesses))) - ((= x 2) - (cdr guesses)) - ((= x (1- (uncompface-width))) - (cdr (cdr (cdr guesses)))) - (t - guesses))) k) - (aset face i (not (aref face i)))) - (setq i (1+ i)) - (< (setq x (1+ x)) (uncompface-width))) - (< (setq y (1+ y)) (uncompface-height)))) - (if raw - face - (concat (eval-when-compile - (format "P1\n%d %d\n" uncompface-width uncompface-height)) - (mapconcat (lambda (bit) (if bit "1" "0")) face " ") - "\n")))) +Requires the external programs `uncompface', and `icontopbm'. On a +GNU/Linux system these might be in packages with names like `compface' +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)))) (provide 'compface) -;; Local variables: -;; eval: (put 'uncompface-loop 'lisp-indent-hook 0) -;; End: - +;;; arch-tag: f9c78e84-98c0-4142-9682-8ba4cf4c3441 ;;; compface.el ends here diff --git a/lisp/deuglify.el b/lisp/deuglify.el index 989a438..7140ab6 100644 --- a/lisp/deuglify.el +++ b/lisp/deuglify.el @@ -1,6 +1,6 @@ ;;; deuglify.el --- deuglify broken Outlook (Express) articles -;; Copyright (C) 2002, 2003 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. ;; Copyright (C) 2001, 2002 Raymond Scholz ;; Author: Raymond Scholz @@ -146,7 +146,7 @@ ;; Hey, John. There's no in all your sentences! ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; +;; ;; Usage ;; ----- ;; @@ -230,51 +230,60 @@ ;;; User Customizable Variables: (defgroup gnus-outlook-deuglify nil - "Deuglify articles generated by broken user agents like MS Outlook (Express).") + "Deuglify articles generated by broken user agents like MS Outlook (Express)." + :version "22.1") ;;;###autoload (defcustom gnus-outlook-deuglify-unwrap-min 45 "Minimum length of the cited line above the (possibly) wrapped line." + :version "22.1" :type 'integer :group 'gnus-outlook-deuglify) ;;;###autoload (defcustom gnus-outlook-deuglify-unwrap-max 95 "Maximum length of the cited line after unwrapping." + :version "22.1" :type 'integer :group 'gnus-outlook-deuglify) (defcustom gnus-outlook-deuglify-cite-marks ">|#%" "Characters that indicate cited lines." + :version "22.1" :type 'string :group 'gnus-outlook-deuglify) (defcustom gnus-outlook-deuglify-unwrap-stop-chars nil ;; ".?!" or nil "Characters that inhibit unwrapping if they are the last one on the cited line above the possible wrapped line." + :version "22.1" :type '(radio (const :format "None " nil) - (string :size 0 :value ".?!")) + (string :value ".?!")) :group 'gnus-outlook-deuglify) (defcustom gnus-outlook-deuglify-no-wrap-chars "`" "Characters that inhibit unwrapping if they are the first one in the possibly wrapped line." + :version "22.1" :type 'string :group 'gnus-outlook-deuglify) (defcustom gnus-outlook-deuglify-attrib-cut-regexp "\\(On \\|Am \\)?\\(Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\|Sun\\),[^,]+, " "Regular expression matching the beginning of an attribution line that should be cut off." + :version "22.1" :type 'string :group 'gnus-outlook-deuglify) (defcustom gnus-outlook-deuglify-attrib-verb-regexp "wrote\\|writes\\|says\\|schrieb\\|schreibt\\|meinte\\|skrev\\|a écrit\\|schreef\\|escribió" "Regular expression matching the verb used in an attribution line." + :version "22.1" :type 'string :group 'gnus-outlook-deuglify) (defcustom gnus-outlook-deuglify-attrib-end-regexp ": *\\|\\.\\.\\." "Regular expression matching the end of an attribution line." + :version "22.1" :type 'string :group 'gnus-outlook-deuglify) @@ -282,6 +291,7 @@ (defcustom gnus-outlook-display-hook nil "A hook called after an deuglified article has been prepared. It is run after `gnus-article-prepare-hook'." + :version "22.1" :type 'hook :group 'gnus-outlook-deuglify) @@ -459,4 +469,5 @@ NODISPLAY is non-nil, don't redisplay the article buffer." ;; coding: iso-8859-1 ;; End: +;;; arch-tag: 5f895cc9-51a9-487c-b42e-28844d79eb73 ;;; deuglify.el ends here diff --git a/lisp/dgnushack.el b/lisp/dgnushack.el index fb64339..261f38d 100644 --- a/lisp/dgnushack.el +++ b/lisp/dgnushack.el @@ -190,6 +190,7 @@ fixed in Emacs after 21.3." (autoload 'c-mode "cc-mode" nil t) (autoload 'customize-apropos "cus-edit" nil t) (autoload 'customize-save-variable "cus-edit" nil t) + (autoload 'customize-set-variable "cus-edit" nil t) (autoload 'customize-variable "cus-edit" nil t) (autoload 'delete-annotation "annotations") (autoload 'dolist "cl-macs" nil nil 'macro) @@ -197,6 +198,7 @@ fixed in Emacs after 21.3." (autoload 'executable-find "executable") (autoload 'font-lock-fontify-buffer "font-lock" nil t) (autoload 'info "info" nil t) + (autoload 'mail-fetch-field "mail-utils") (autoload 'make-annotation "annotations") (autoload 'make-display-table "disp-table") (autoload 'pp "pp") @@ -206,7 +208,8 @@ fixed in Emacs after 21.3." (autoload 'read-passwd "passwd") (autoload 'regexp-opt "regexp-opt") (autoload 'reporter-submit-bug-report "reporter") - (if (emacs-version>= 21 5) + (if (and (emacs-version>= 21 5) + (not (featurep 'sxemacs))) (autoload 'setenv "process" nil t) (autoload 'setenv "env" nil t)) (autoload 'sgml-mode "psgml" nil t) @@ -228,7 +231,6 @@ fixed in Emacs after 21.3." (defalias 'overlays-in 'ignore) (defalias 'replace-dehighlight 'ignore) (defalias 'replace-highlight 'ignore) - (defalias 'run-with-idle-timer 'ignore) (defalias 'w3-coding-system-for-mime-charset 'ignore))) (defun dgnushack-compile-verbosely () @@ -273,8 +275,7 @@ dgnushack-compile." (dolist (file (if (featurep 'xemacs) '("md5.el") - '("gnus-xmas.el" "messagexmas.el" "nnheaderxm.el" - "run-at-time.el"))) + '("gnus-xmas.el" "messagexmas.el" "nnheaderxm.el"))) (setq files (delete file files))) (dolist (file files) @@ -408,5 +409,6 @@ dgnushack-compile." ;;; End: ;;; gnus-load.el ends here")))) - ;;; dgnushack.el ends here + +;;; arch-tag: 579f585a-24eb-4e1c-8d34-4808e11b68f2 diff --git a/lisp/dig.el b/lisp/dig.el index e71d6db..08070e9 100644 --- a/lisp/dig.el +++ b/lisp/dig.el @@ -185,4 +185,5 @@ nil for domain/class/type queries that results in no data." (provide 'dig) +;;; arch-tag: 1d61726e-9400-4013-9ae7-4035e0c7f7d6 ;;; dig.el ends here diff --git a/lisp/dns-mode.el b/lisp/dns-mode.el new file mode 100644 index 0000000..400f872 --- /dev/null +++ b/lisp/dns-mode.el @@ -0,0 +1,198 @@ +;;; dns-mode.el --- a mode for viewing/editing Domain Name System master files +;; Copyright (c) 2000, 2001, 2003, 2004 Free Software Foundation, Inc. + +;; Author: Simon Josefsson +;; Keywords: DNS master zone file SOA + +;; 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., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; Use M-x dns-mode RET to invoke in master files. +;; +;; C-c C-s Increment SOA serial. +;; Understands YYYYMMDDNN, Unix time, and serial number formats, +;; and complains if it fail to find SOA serial. +;; +;; Put something similar to the following in your ~/.emacs to use this file: +;; +;; (load "~/path/to/dns-mode.el") +;; (setq auto-mode-alist (cons '("\\.soa\\'" . dns-mode) auto-mode-alist)) + +;;; References: + +;; RFC 1034, "DOMAIN NAMES - CONCEPTS AND FACILITIES", P. Mockapetris. +;; RFC 1035, "DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION", P. Mockapetris. + +;;; Release history: + +;; 2004-09-11 Posted on gnu.emacs.sources. +;; 2004-09-13 Ported to XEmacs. +;; 2004-09-14 Installed in Emacs CVS. + +;;; Code: + +(defgroup dns-mode nil + "DNS master file mode configuration.") + +(defconst dns-mode-classes '("IN" "CS" "CH" "HS") + "List of strings with known DNS classes.") + +(defconst dns-mode-types '("A" "NS" "MD" "MF" "CNAME" "SOA" "MB" "MG" "MR" + "NULL" "WKS" "PTR" "HINFO" "MINFO" "MX" "TXT" + "RP" "AFSDB" "X25" "ISDN" "RT" "NSAP" "NSAP" + "SIG" "KEY" "PX" "GPOS" "AAAA" "LOC" "NXT" + "EID" "NIMLOC" "SRV" "ATMA" "NAPTR" "KX" "CERT" + "A6" "DNAME" "SINK" "OPT" "APL" "DS" "SSHFP" + "RRSIG" "NSEC" "DNSKEY" "UINFO" "UID" "GID" + "UNSPEC" "TKEY" "TSIG" "IXFR" "AXFR" "MAILB" + "MAILA") + "List of strings with known DNS types.") + +;; Font lock. + +(defvar dns-mode-control-entity-face 'font-lock-keyword-face + "Name of face used for control entities, e.g. $ORIGIN.") + +(defvar dns-mode-bad-control-entity-face 'font-lock-warning-face + "Name of face used for non-standard control entities, e.g. $FOO.") + +(defvar dns-mode-type-face 'font-lock-type-face + "Name of face used for DNS types, e.g., SOA.") + +(defvar dns-mode-class-face 'font-lock-constant-face + "Name of face used for DNS classes, e.g., IN.") + +(defcustom dns-mode-font-lock-keywords + `(("^$ORIGIN" 0 ,dns-mode-control-entity-face) + ("^$INCLUDE" 0 ,dns-mode-control-entity-face) + ("^$[a-z0-9A-Z]+" 0 ,dns-mode-bad-control-entity-face) + (,(regexp-opt dns-mode-classes) 0 ,dns-mode-class-face) + (,(regexp-opt dns-mode-types) 0 ,dns-mode-type-face)) + "Font lock keywords used to highlight text in DNS master file mode." + :type 'sexp + :group 'dns-mode) + +;; Syntax table. + +(defvar dns-mode-syntax-table + (let ((table (make-syntax-table))) + (modify-syntax-entry ?\; "< " table) + (modify-syntax-entry ?\n "> " table) + table) + "Syntax table in use in DNS master file buffers.") + +;; Keymap. + +(defvar dns-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-c\C-s" 'dns-mode-soa-increment-serial) + map) + "Keymap for DNS master file mode.") + +;; Menu. + +(defvar dns-mode-menu nil + "Menubar used in DNS master file mode.") + +(easy-menu-define dns-mode-menu dns-mode-map + "DNS Menu." + '("DNS" + ["Increment SOA serial" dns-mode-soa-increment-serial t])) + +;; Mode. + +;;;###autoload +(define-derived-mode dns-mode text-mode "DNS" + "Major mode for viewing and editing DNS master files. +This mode is inherited from text mode. It add syntax +highlighting, and some commands for handling DNS master files. +Its keymap inherits from `text-mode' and it has the same +variables for customizing indentation. It has its own abbrev +table and its own syntax table. + +Turning on DNS mode runs `dns-mode-hook'." + (set (make-local-variable 'comment-start) ";") + (set (make-local-variable 'comment-end) "") + (set (make-local-variable 'comment-start-skip) ";+ *") + (unless (featurep 'xemacs) + (set (make-local-variable 'font-lock-defaults) + '(dns-mode-font-lock-keywords nil nil ((?_ . "w"))))) + (easy-menu-add dns-mode-menu dns-mode-map)) + +;; Tools. + +;;;###autoload +(defun dns-mode-soa-increment-serial () + "Locate SOA record and increment the serial field." + (interactive) + (save-excursion + (goto-char (point-min)) + (unless (re-search-forward + (concat "^\\(\\(\\([^ \t]+[ \t]+\\)?[^ \t]+" + "[ \t]+\\)?[^ \t]+[ \t]+\\)?SOA") nil t) + (error "Cannot locate SOA record")) + (if (re-search-forward (concat "\\<\\(" + ;; year + "\\(198\\|199\\|20[0-9]\\)[0-9]" + ;; month + "\\(0[0-9]\\|10\\|11\\|12\\)" + ;; day + "\\([012][0-9]\\|30\\|31\\)" + ;; counter + "\\([0-9]\\{1,3\\}\\)" + "\\)\\>") + nil t) + ;; YYYYMMDDIII format, one to three I's. + (let* ((serial (match-string 1)) + (counterstr (match-string 5)) + (counter (string-to-number counterstr)) + (now (format-time-string "%Y%m%d")) + (nowandoldserial (concat now counterstr))) + (if (string< serial nowandoldserial) + (let ((new (format "%s00" now))) + (replace-match new nil nil nil 1) + (message "Replaced old serial %s with %s" serial new)) + (if (string= serial nowandoldserial) + (let ((new (format (format "%%s%%0%dd" (length counterstr)) + now (1+ counter)))) + (replace-match new nil nil nil 1) + (message "Replaced old serial %s with %s" serial new)) + (error "Current SOA serial is in the future")))) + (if (re-search-forward "\\<\\([0-9]\\{9,10\\}\\)\\>" nil t) + ;; Unix time + (let* ((serial (match-string 1)) + (new (format-time-string "%s"))) + (if (not (string< serial new)) + (error "Current SOA serial is in the future") + (replace-match new nil nil nil 1) + (message "Replaced old serial %s with %s" serial new))) + (if (re-search-forward "\\<\\([0-9]+\\)\\>" nil t) + ;; Just any serial number. + (let* ((serial (match-string 1)) + (new (format "%d" (1+ (string-to-number serial))))) + (replace-match new nil nil nil 1) + (message "Replaced old serial %s with %s" serial new)) + (error "Cannot locate serial number in SOA record")))))) + +;;;###autoload(add-to-list 'auto-mode-alist '("\\.soa\\'" . dns-mode)) + +(provide 'dns-mode) + +;; arch-tag: 6a179f0a-072f-49db-8b01-37b8f23998c0 +;;; dns-mode.el ends here diff --git a/lisp/dns.el b/lisp/dns.el index d573d89..b2001b1 100644 --- a/lisp/dns.el +++ b/lisp/dns.el @@ -1,5 +1,5 @@ ;;; dns.el --- Domain Name Service lookups -;; Copyright (C) 2002, 2003 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: network @@ -56,6 +56,7 @@ If nil, /etc/resolv.conf will be consulted.") (MX 15) (TXT 16) (AAAA 28) ; RFC3596 + (SRV 33) ; RFC2782 (AXFR 252) (MAILB 253) (MAILA 254) @@ -284,6 +285,11 @@ If TCP-P, the first two bytes of the package with be the length field." (list 'retry (dns-read-int32)) (list 'expire (dns-read-int32)) (list 'minimum (dns-read-int32)))) + ((eq type 'SRV) + (list (list 'priority (dns-read-bytes 2)) + (list 'weight (dns-read-bytes 2)) + (list 'port (dns-read-bytes 2)) + (list 'target (dns-read-name buffer)))) ((eq type 'MX) (cons (dns-read-bytes 2) (dns-read-name buffer))) ((or (eq type 'CNAME) (eq type 'NS) (eq type 'PTR)) @@ -300,6 +306,25 @@ If TCP-P, the first two bytes of the package with be the length field." (push (match-string 1) dns-servers)) (setq dns-servers (nreverse dns-servers))))) +(defun dns-read-txt (string) + (if (> (length string) 1) + (substring string 1) + string)) + +(defun dns-get-txt-answer (answers) + (let ((result "") + (do-next nil)) + (dolist (answer answers) + (dolist (elem answer) + (when (consp elem) + (cond + ((eq (car elem) 'type) + (setq do-next (eq (cadr elem) 'TXT))) + ((eq (car elem) 'data) + (when do-next + (setq result (concat result (dns-read-txt (cadr elem)))))))))) + result)) + ;;; Interface functions. (defmacro dns-make-network-process (server) (if (featurep 'xemacs) @@ -323,13 +348,20 @@ If TCP-P, the first two bytes of the package with be the length field." ;; connection to the DNS server. (open-network-stream "dns" (current-buffer) server "domain"))))) -(defun query-dns (name &optional type fullp) +(defun query-dns (name &optional type fullp reversep) "Query a DNS server for NAME of TYPE. -If FULLP, return the entire record returned." +If FULLP, return the entire record returned. +If REVERSEP, look up an IP address." (setq type (or type 'A)) (unless dns-servers (dns-parse-resolv-conf)) + (when reversep + (setq name (concat + (mapconcat 'identity (nreverse (split-string name "\\.")) ".") + ".in-addr.arpa") + type 'PTR)) + (if (not dns-servers) (message "No DNS server configuration found") (mm-with-unibyte-buffer @@ -354,6 +386,7 @@ If FULLP, return the entire record returned." tcp-p)) (while (and (zerop (buffer-size)) (> times 0)) + (sit-for (/ step 1000.0)) (accept-process-output process 0 step) (decf times step)) (ignore-errors @@ -367,8 +400,11 @@ If FULLP, return the entire record returned." result (let ((answer (car (dns-get 'answers result)))) (when (eq type (dns-get 'type answer)) - (dns-get 'data answer))))))))))) + (if (eq type 'TXT) + (dns-get-txt-answer (dns-get 'answers result)) + (dns-get 'data answer)))))))))))) (provide 'dns) +;;; arch-tag: d0edd0c4-4cce-4538-ae92-06c3356ee80a ;;; dns.el ends here diff --git a/lisp/earcon.el b/lisp/earcon.el index e9691e1..c595de0 100644 --- a/lisp/earcon.el +++ b/lisp/earcon.el @@ -230,4 +230,5 @@ If N is negative, move backward instead." (run-hooks 'earcon-load-hook) +;;; arch-tag: 844dfeea-980c-4ed0-907f-a30bf139691c ;;; earcon.el ends here diff --git a/lisp/encrypt.el b/lisp/encrypt.el new file mode 100644 index 0000000..0e14ca9 --- /dev/null +++ b/lisp/encrypt.el @@ -0,0 +1,272 @@ +;;; encrypt.el --- file encryption routines +;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +;; Author: Teodor Zlatanov +;; Created: 2003/01/24 +;; Keywords: files + +;; 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., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;;; This module addresses data encryption. Page breaks are used for +;;; grouping declarations and documentation relating to each +;;; particular aspect. + +;;; Code: + +;; autoload password +(eval-and-compile + (autoload 'password-read "password")) + +(defgroup encrypt '((password-cache custom-variable) + (password-cache-expiry custom-variable)) + "File encryption configuration.") + +(defcustom encrypt-file-alist nil + "List of file names or regexes matched with encryptions. +Format example: + '((\"beta\" + (gpg \"AES\")) + (\"/home/tzz/alpha\" + (encrypt-xor \"Semi-Secret\")))" + + :type '(repeat + (list :tag "Encryption entry" + (radio :tag "What to encrypt" + (file :tag "Filename") + (regexp :tag "Regular expression match")) + (radio :tag "How to encrypt it" + (list + :tag "GPG Encryption" + (const :tag "GPG Program" gpg) + (radio :tag "Choose a cipher" + (const :tag "3DES Encryption" "3DES") + (const :tag "CAST5 Encryption" "CAST5") + (const :tag "Blowfish Encryption" "BLOWFISH") + (const :tag "AES Encryption" "AES") + (const :tag "AES192 Encryption" "AES192") + (const :tag "AES256 Encryption" "AES256") + (const :tag "Twofish Encryption" "TWOFISH") + (string :tag "Cipher Name"))) + (list + :tag "Built-in simple XOR" + (const :tag "XOR Encryption" encrypt-xor) + (string :tag "XOR Cipher Value (seed value)"))))) + :group 'encrypt) + +;; TODO: now, load gencrypt.el and if successful, modify the +;; custom-type of encrypt-file-alist to add the gencrypt.el options + +;; (plist-get (symbol-plist 'encrypt-file-alist) 'custom-type) +;; then use plist-put + +(defcustom encrypt-gpg-path (executable-find "gpg") + "Path to the GPG program." + :type '(radio + (file :tag "Location of the GPG executable") + (const :tag "GPG is not installed" nil)) + :group 'encrypt) + +(defvar encrypt-temp-prefix "encrypt" + "Prefix for temporary filenames") + +;;;###autoload +(defun encrypt-find-model (filename) + "Given a filename, find a encrypt-file-alist entry" + (dolist (entry encrypt-file-alist) + (let ((match (nth 0 entry)) + (model (nth 1 entry))) + (when (or (eq match filename) + (string-match match filename)) + (return model))))) + +;;;###autoload +(defun encrypt-insert-file-contents (file &optional model) + "Decrypt FILE into the current buffer." + (interactive "fFile to insert: ") + (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-and-add + (format "%s password for cipher %s? " + (symbol-name method) cipher) + password-key)) + (buffer-file-coding-system 'binary) + (coding-system-for-read 'binary) + outdata) + + ;; note we only insert-file-contents if the method is known to be valid + (cond + ((eq method 'gpg) + (insert-file-contents file) + (setq outdata (encrypt-gpg-decode-buffer passphrase cipher))) + ((eq method 'encrypt-xor) + (insert-file-contents file) + (setq outdata (encrypt-xor-decode-buffer passphrase cipher)))) + + (if outdata + (progn + (gnus-message 9 "%s was decrypted with %s (cipher %s)" + file (symbol-name method) cipher) + (delete-region (point-min) (point-max)) + (goto-char (point-min)) + (insert outdata)) + ;; the decryption failed, alas + (password-cache-remove password-key) + (gnus-error 5 "%s was NOT decrypted with %s (cipher %s)" + file (symbol-name method) cipher)))) + +(defun encrypt-get-file-contents (file &optional model) + "Decrypt FILE and return the contents." + (interactive "fFile to decrypt: ") + (with-temp-buffer + (encrypt-insert-file-contents file model) + (buffer-string))) + +(defun encrypt-put-file-contents (file data &optional model) + "Encrypt the DATA to FILE, then continue normally." + (with-temp-buffer + (insert data) + (encrypt-write-file-contents file model))) + +(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 + (gnus-message 9 "%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)))) + +(defun encrypt-xor-encode-buffer (passphrase cipher) + (encrypt-xor-process-buffer passphrase cipher t)) + +(defun encrypt-xor-decode-buffer (passphrase cipher) + (encrypt-xor-process-buffer passphrase cipher nil)) + +(defun encrypt-xor-process-buffer (passphrase + cipher + &optional encode) + "Given PASSPHRASE, xor-encode or decode the contents of the current buffer." + (let* ((bs (buffer-substring-no-properties (point-min) (point-max))) + ;; passphrase-sum is a simple additive checksum of the + ;; passphrase and the cipher + (passphrase-sum + (when (stringp passphrase) + (apply '+ (append cipher passphrase nil)))) + new-list) + + (with-temp-buffer + (if encode + (progn + (dolist (x (append bs nil)) + (setq new-list (cons (logxor x passphrase-sum) new-list))) + + (dolist (x new-list) + (insert (format "%d " x)))) + (progn + (setq new-list (reverse (split-string bs))) + (dolist (x new-list) + (setq x (string-to-int x)) + (insert (format "%c" (logxor x passphrase-sum)))))) + (buffer-substring-no-properties (point-min) (point-max))))) + +(defun encrypt-gpg-encode-buffer (passphrase cipher) + (encrypt-gpg-process-buffer passphrase cipher t)) + +(defun encrypt-gpg-decode-buffer (passphrase cipher) + (encrypt-gpg-process-buffer passphrase cipher nil)) + +(defun encrypt-gpg-process-buffer (passphrase + cipher + &optional encode) + "With PASSPHRASE, use GPG to encode or decode the current buffer." + (let* ((program encrypt-gpg-path) + (input (buffer-substring-no-properties (point-min) (point-max))) + (temp-maker (if (fboundp 'make-temp-file) + 'make-temp-file + 'make-temp-name)) + (temp-file (funcall temp-maker encrypt-temp-prefix)) + (default-enable-multibyte-characters nil) + (args `("--cipher-algo" ,cipher + "--status-fd" "2" + "--logger-fd" "2" + "--passphrase-fd" "0" + "--no-tty")) + exit-status exit-data) + + (when encode + (setq args + (append args + '("--symmetric" + "--armor")))) + + (if program + (with-temp-buffer + (when passphrase + (insert passphrase "\n")) + (insert input) + (setq exit-status + (apply #'call-process-region (point-min) (point-max) program + t `(t ,temp-file) nil args)) + (if (equal exit-status 0) + (setq exit-data + (buffer-substring-no-properties (point-min) (point-max))) + (with-temp-buffer + (when (file-exists-p temp-file) + (insert-file-contents temp-file)) + (gnus-error 5 (format "%s exited abnormally: '%s' [%s]" + program exit-status (buffer-string))))) + (delete-file temp-file)) + (gnus-error 5 "GPG is not installed.")) + exit-data)) + +(provide 'encrypt) +;;; encrypt.el ends here + +;; arch-tag: d907e4f1-71b5-42b1-a180-fc7b84ff0648 diff --git a/lisp/flow-fill.el b/lisp/flow-fill.el index c800699..2feb48d 100644 --- a/lisp/flow-fill.el +++ b/lisp/flow-fill.el @@ -56,6 +56,8 @@ (defcustom fill-flowed-display-column 'fill-column "Column beyond which format=flowed lines are wrapped, when displayed. This can be a Lisp expression or an integer." + :version "22.1" + :group 'mime-display :type '(choice (const :tag "Standard `fill-column'" fill-column) (const :tag "Fit Window" (- (window-width) 5)) (sexp) @@ -65,6 +67,8 @@ This can be a Lisp expression or an integer." "Column beyond which format=flowed lines are wrapped, in outgoing messages. This can be a Lisp expression or an integer. RFC 2646 suggests 66 characters for readability." + :version "22.1" + :group 'mime-display :type '(choice (const :tag "Standard fill-column" fill-column) (const :tag "RFC 2646 default (66)" 66) (sexp) @@ -97,10 +101,15 @@ RFC 2646 suggests 66 characters for readability." (save-excursion (set-buffer (or (current-buffer) buffer)) (goto-char (point-min)) + ;; Remove space stuffing. + (while (re-search-forward "^ " nil t) + (delete-char -1) + (forward-line 1)) + (goto-char (point-min)) (while (re-search-forward " $" nil t) (when (save-excursion (beginning-of-line) - (looking-at "^\\(>*\\)\\( ?\\)")) + (looking-at "^\\(>+\\)\\( ?\\)")) (let ((quote (match-string 1)) sig) (if (string= quote "") @@ -148,19 +157,19 @@ RFC 2646 suggests 66 characters for readability." '( ;; The syntax of each list element is: ;; (INPUT . EXPECTED-OUTPUT) - ("> Thou villainous ill-breeding spongy dizzy-eyed -> reeky elf-skinned pigeon-egg! ->> Thou artless swag-bellied milk-livered + ("> Thou villainous ill-breeding spongy dizzy-eyed +> reeky elf-skinned pigeon-egg! +>> Thou artless swag-bellied milk-livered >> dismal-dreaming idle-headed scut! ->>> Thou errant folly-fallen spleeny reeling-ripe +>>> Thou errant folly-fallen spleeny reeling-ripe >>> unmuzzled ratsbane! ->>>> Henceforth, the coding style is to be strictly +>>>> Henceforth, the coding style is to be strictly >>>> enforced, including the use of only upper case. ->>>>> I've noticed a lack of adherence to the coding +>>>>> I've noticed a lack of adherence to the coding >>>>> styles, of late. >>>>>> Any complaints? " . "> Thou villainous ill-breeding spongy dizzy-eyed reeky elf-skinned -> pigeon-egg! +> pigeon-egg! >> Thou artless swag-bellied milk-livered dismal-dreaming idle-headed >> scut! >>> Thou errant folly-fallen spleeny reeling-ripe unmuzzled ratsbane! @@ -171,8 +180,8 @@ RFC 2646 suggests 66 characters for readability." ") ; (" ;> foo -;> -;> +;> +;> ;> bar ;" . " ;> foo bar @@ -206,4 +215,5 @@ RFC 2646 suggests 66 characters for readability." (provide 'flow-fill) +;;; arch-tag: addc0040-bc53-4f17-b4bc-1eb44eed6f0b ;;; flow-fill.el ends here diff --git a/lisp/format-spec.el b/lisp/format-spec.el index 6cd39ed..1ffab56 100644 --- a/lisp/format-spec.el +++ b/lisp/format-spec.el @@ -47,7 +47,7 @@ to values." (val (cdr (assq spec specification)))) (delete-region (1- (match-beginning 0)) (match-end 0)) (unless val - (error "Invalid format character: %s" spec)) + (error "Invalid format character: `%%%c'" spec)) (insert (format (concat "%" num "s") val)))) ;; Signal an error on bogus format strings. (t @@ -68,4 +68,5 @@ starting with a character." (provide 'format-spec) +;;; arch-tag: c22d49cf-d167-445d-b7f1-2504d4173f53 ;;; format-spec.el ends here diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index 66bc357..c33fac7 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -1,5 +1,5 @@ ;;; gnus-agent.el --- unplugged support for Gnus -;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -60,6 +60,7 @@ (defcustom gnus-agent-fetched-hook nil "Hook run when finished fetching articles." + :version "22.1" :group 'gnus-agent :type 'hook) @@ -113,7 +114,7 @@ If nil, only read articles will be expired." :group 'gnus-agent :type 'function) -(defcustom gnus-agent-synchronize-flags 'ask +(defcustom gnus-agent-synchronize-flags nil "Indicate if flags are synchronized when you plug in. If this is `ask' the hook will query the user." :version "21.1" @@ -125,7 +126,7 @@ If this is `ask' the hook will query the user." (defcustom gnus-agent-go-online 'ask "Indicate if offline servers go online when you plug in. If this is `ask' the hook will query the user." - :version "21.1" + :version "21.3" :type '(choice (const :tag "Always" t) (const :tag "Never" nil) (const :tag "Ask" ask)) @@ -151,7 +152,7 @@ whether unread articles are downloaded or not. If you enable this, groups with large active ranges may open slower and you may also want to look into the agent expiry settings to block the expiration of read articles as they would just be downloaded again." - :version "21.4" + :version "22.1" :type 'boolean :group 'gnus-agent) @@ -159,6 +160,7 @@ read articles as they would just be downloaded again." "Chunk size for `gnus-agent-fetch-session'. The function will split its article fetches into chunks smaller than this limit." + :version "22.1" :group 'gnus-agent :type 'integer) @@ -169,6 +171,7 @@ contents from a group's local storage. This value may be overridden to disable expiration in specific categories, topics, and groups. Of course, you could change gnus-agent-enable-expiration to DISABLE then enable expiration per categories, topics, and groups." + :version "22.1" :group 'gnus-agent :type '(radio (const :format "Enable " ENABLE) (const :format "Disable " DISABLE))) @@ -178,6 +181,7 @@ enable expiration per categories, topics, and groups." Have gnus-agent-expire scan the directories under \(gnus-agent-directory) for groups that are no longer agentized. When found, offer to remove them." + :version "22.1" :type 'boolean :group 'gnus-agent) @@ -185,6 +189,7 @@ When found, offer to remove them." "Initially, all servers from these methods are agentized. The user may remove or add servers using the Server buffer. See Info node `(gnus)Server Buffer'." + :version "22.1" :type '(repeat symbol) :group 'gnus-agent) @@ -192,6 +197,7 @@ See Info node `(gnus)Server Buffer'." "Whether and when outgoing mail should be queued by the agent. When `always', always queue outgoing mail. When nil, never queue. Otherwise, queue if and only if unplugged." + :version "22.1" :group 'gnus-agent :type '(radio (const :format "Always" always) (const :format "Never" nil) @@ -200,6 +206,7 @@ queue. Otherwise, queue if and only if unplugged." (defcustom gnus-agent-prompt-send-queue nil "If non-nil, `gnus-group-send-queue' will prompt if called when unplugged." + :version "22.1" :group 'gnus-agent :type 'boolean) @@ -208,13 +215,13 @@ unplugged." (defvar gnus-agent-history-buffers nil) (defvar gnus-agent-buffer-alist nil) (defvar gnus-agent-article-alist nil - "An assoc list identifying the articles whose headers have been fetched. + "An assoc list identifying the articles whose headers have been fetched. If successfully fetched, these headers will be stored in the group's overview file. The key of each assoc pair is the article ID, the value of each assoc pair is a flag indicating whether the identified article has been downloaded \(gnus-agent-fetch-articles sets the value to the day of the download). NOTES: -1) The last element of this list can not be expired as some +1) The last element of this list can not be expired as some routines (for example, get-agent-fetch-headers) use the last value to track which articles have had their headers retrieved. 2) The function `gnus-agent-regenerate' may destructively modify the value.") @@ -337,8 +344,8 @@ manipulated as follows: (let* ((--category--temp-- (make-symbol "--category--")) (--value--temp-- (make-symbol "--value--"))) (list (list --category--temp--) ; temporary-variables - (list category) ; value-forms - (list --value--temp--) ; store-variables + (list category) ; value-forms + (list --value--temp--) ; store-variables (let* ((category --category--temp--) ; store-form (value --value--temp--)) (list (quote gnus-agent-cat-set-property) @@ -361,21 +368,35 @@ manipulated as follows: (gnus-agent-cat-defaccessor gnus-agent-cat-high-score agent-high-score) (gnus-agent-cat-defaccessor - gnus-agent-cat-length-when-long agent-length-when-long) + gnus-agent-cat-length-when-long agent-long-article) (gnus-agent-cat-defaccessor - gnus-agent-cat-length-when-short agent-length-when-short) + gnus-agent-cat-length-when-short agent-short-article) (gnus-agent-cat-defaccessor gnus-agent-cat-low-score agent-low-score) (gnus-agent-cat-defaccessor gnus-agent-cat-predicate agent-predicate) (gnus-agent-cat-defaccessor - gnus-agent-cat-score-file agent-score-file) + gnus-agent-cat-score-file agent-score) (gnus-agent-cat-defaccessor - gnus-agent-cat-enable-undownloaded-faces agent-enable-undownloaded-faces) + gnus-agent-cat-enable-undownloaded-faces agent-enable-undownloaded-faces) + + +;; This form is equivalent to defsetf except that it calls make-symbol +;; whereas defsetf calls gensym (Using gensym creates a run-time +;; dependency on the CL library). (eval-and-compile - (defsetf gnus-agent-cat-groups (category) (groups) - (list 'gnus-agent-set-cat-groups category groups))) + (define-setf-method gnus-agent-cat-groups (category) + (let* ((--category--temp-- (make-symbol "--category--")) + (--groups--temp-- (make-symbol "--groups--"))) + (list (list --category--temp--) + (list category) + (list --groups--temp--) + (let* ((category --category--temp--) + (groups --groups--temp--)) + (list (quote gnus-agent-set-cat-groups) category groups)) + (list (quote gnus-agent-cat-groups) --category--temp--)))) + ) (defun gnus-agent-set-cat-groups (category groups) (unless (eq groups 'ignore) @@ -696,7 +717,8 @@ be a select method." "Restore GCC field from saved header." (save-excursion (goto-char (point-min)) - (while (re-search-forward (concat gnus-agent-gcc-header ":") nil t) + (while (re-search-forward + (concat "^" (regexp-quote gnus-agent-gcc-header) ":") nil t) (replace-match "Gcc:" 'fixedcase)))) (defun gnus-agent-any-covered-gcc () @@ -800,25 +822,39 @@ be a select method." (interactive) (save-excursion (dolist (gnus-command-method (gnus-agent-covered-methods)) - (when (file-exists-p (gnus-agent-lib-file "flags")) + (when (and (file-exists-p (gnus-agent-lib-file "flags")) + (not (eq (gnus-server-status gnus-command-method) 'offline))) (gnus-agent-possibly-synchronize-flags-server gnus-command-method))))) (defun gnus-agent-synchronize-flags-server (method) "Synchronize flags set when unplugged for server." - (let ((gnus-command-method method)) + (let ((gnus-command-method method) + (gnus-agent nil)) (when (file-exists-p (gnus-agent-lib-file "flags")) (set-buffer (get-buffer-create " *Gnus Agent flag synchronize*")) (erase-buffer) (nnheader-insert-file-contents (gnus-agent-lib-file "flags")) - (if (null (gnus-check-server gnus-command-method)) - (gnus-message 1 "Couldn't open server %s" (nth 1 gnus-command-method)) - (while (not (eobp)) - (if (null (eval (read (current-buffer)))) - (gnus-delete-line) - (write-file (gnus-agent-lib-file "flags")) - (error "Couldn't set flags from file %s" - (gnus-agent-lib-file "flags")))) - (delete-file (gnus-agent-lib-file "flags"))) + (cond ((null gnus-plugged) + (gnus-message + 1 "You must be plugged to synchronize flags with server %s" + (nth 1 gnus-command-method))) + ((null (gnus-check-server gnus-command-method)) + (gnus-message + 1 "Couldn't open server %s" (nth 1 gnus-command-method))) + (t + (condition-case err + (while t + (let ((bgn (point))) + (eval (read (current-buffer))) + (delete-region bgn (point)))) + (end-of-file + (delete-file (gnus-agent-lib-file "flags"))) + (error + (let ((file (gnus-agent-lib-file "flags"))) + (write-region (point-min) (point-max) + (gnus-agent-lib-file "flags") nil 'silent) + (error "Couldn't set flags from file %s due to %s" + file (error-message-string err))))))) (kill-buffer nil)))) (defun gnus-agent-possibly-synchronize-flags-server (method) @@ -851,7 +887,7 @@ next enabled. Depends upon the caller to determine whether group renaming is sup (gnus-agent-save-group-info old-command-method old-real-group nil) (gnus-agent-save-group-info new-command-method new-real-group old-active) - (let ((old-local (gnus-agent-get-local old-group + (let ((old-local (gnus-agent-get-local old-group old-real-group old-command-method))) (gnus-agent-set-local old-group nil nil @@ -869,12 +905,12 @@ next enabled. Depends upon the caller to determine whether group deletion is sup (path (directory-file-name (let (gnus-command-method command-method) (gnus-agent-group-pathname group))))) - (gnus-delete-file path) + (gnus-delete-directory path) (let* ((real-group (gnus-group-real-name group))) (gnus-agent-save-group-info command-method real-group nil) - (let ((local (gnus-agent-get-local group + (let ((local (gnus-agent-get-local group real-group command-method))) (gnus-agent-set-local group nil nil @@ -915,7 +951,7 @@ next enabled. Depends upon the caller to determine whether group deletion is sup (unless (member named-server gnus-agent-covered-methods) (error "Server not in the agent program")) - (setq gnus-agent-covered-methods + (setq gnus-agent-covered-methods (delete named-server gnus-agent-covered-methods) gnus-agent-method-p-cache nil) @@ -925,7 +961,7 @@ next enabled. Depends upon the caller to determine whether group deletion is sup (defun gnus-agent-read-servers () "Read the alist of covered servers." - (setq gnus-agent-covered-methods + (setq gnus-agent-covered-methods (gnus-agent-read-file (nnheader-concat gnus-agent-directory "lib/servers")) gnus-agent-method-p-cache nil) @@ -1029,6 +1065,7 @@ article's mark is toggled." gnus-downloadable-mark) 'unread)))) +;;;###autoload (defun gnus-agent-get-undownloaded-list () "Construct list of articles that have not been downloaded." (let ((gnus-command-method (gnus-find-method-for-group gnus-newsgroup-name))) @@ -1056,7 +1093,7 @@ article's mark is toggled." ;; imply that this article isn't in the agent. (gnus-agent-append-to-list tail-undownloaded h) (gnus-agent-append-to-list tail-unfetched h) - (setq headers (cdr headers))) + (setq headers (cdr headers))) ((cdar alist) (setq alist (cdr alist)) (setq headers (cdr headers)) @@ -1065,7 +1102,7 @@ article's mark is toggled." (t (setq alist (cdr alist)) (setq headers (cdr headers)) - + ;; This article isn't in the agent. Check to see ;; if it is in the cache. If it is, it's been ;; downloaded. @@ -1107,20 +1144,22 @@ downloadable." (when gnus-newsgroup-processable (setq gnus-newsgroup-downloadable (let* ((dl gnus-newsgroup-downloadable) - (gnus-newsgroup-downloadable - (sort (gnus-copy-sequence gnus-newsgroup-processable) '<)) - (fetched-articles (gnus-agent-summary-fetch-group))) - ;; The preceeding call to (gnus-agent-summary-fetch-group) - ;; updated gnus-newsgroup-downloadable to remove each - ;; article successfully fetched. + (processable (sort (gnus-copy-sequence gnus-newsgroup-processable) '<)) + (gnus-newsgroup-downloadable processable)) + (gnus-agent-summary-fetch-group) + + ;; For each article that I processed that is no longer + ;; undownloaded, remove its processable mark. - ;; For each article that I processed, remove its - ;; processable mark IF the article is no longer - ;; downloadable (i.e. it's already downloaded) - (dolist (article gnus-newsgroup-processable) - (unless (memq article gnus-newsgroup-downloadable) - (gnus-summary-remove-process-mark article))) - (gnus-sorted-ndifference dl fetched-articles))))) + (mapc #'gnus-summary-remove-process-mark + (gnus-sorted-ndifference gnus-newsgroup-processable gnus-newsgroup-undownloaded)) + + ;; The preceeding call to (gnus-agent-summary-fetch-group) + ;; updated the temporary gnus-newsgroup-downloadable to + ;; remove each article successfully fetched. Now, I + ;; update the real gnus-newsgroup-downloadable to only + ;; include undownloaded articles. + (gnus-sorted-ndifference dl (gnus-sorted-ndifference processable gnus-newsgroup-undownloaded)))))) (defun gnus-agent-summary-fetch-group (&optional all) "Fetch the downloadable articles in the group. @@ -1143,7 +1182,7 @@ Optional arg ALL, if non-nil, means to fetch all articles." gnus-newsgroup-name articles))))) (save-excursion (dolist (article articles) - (let ((was-marked-downloadable + (let ((was-marked-downloadable (memq article gnus-newsgroup-downloadable))) (cond (gnus-agent-mark-unread-after-downloaded (setq gnus-newsgroup-downloadable @@ -1173,6 +1212,55 @@ This can be added to `gnus-select-article-hook' or ;;; Internal functions ;;; +(defun gnus-agent-synchronize-group-flags (group actions server) +"Update a plugged group by performing the indicated actions." + (let* ((gnus-command-method (gnus-server-to-method server)) + (info + ;; This initializer is required as gnus-request-set-mark + ;; calls gnus-group-real-name to strip off the host name + ;; before calling the backend. Now that the backend is + ;; trying to call gnus-request-set-mark, I have to + ;; reconstruct the original group name. + (or (gnus-get-info group) + (gnus-get-info + (setq group (gnus-group-full-name + group gnus-command-method)))))) + (gnus-request-set-mark group actions) + + (when info + (dolist (action actions) + (let ((range (nth 0 action)) + (what (nth 1 action)) + (marks (nth 2 action))) + (dolist (mark marks) + (cond ((eq mark 'read) + (gnus-info-set-read + info + (funcall (if (eq what 'add) + 'gnus-range-add + 'gnus-remove-from-range) + (gnus-info-read info) + range)) + (gnus-get-unread-articles-in-group + info + (gnus-active (gnus-info-group info)))) + ((memq mark '(tick)) + (let ((info-marks (assoc mark (gnus-info-marks info)))) + (unless info-marks + (gnus-info-set-marks info (cons (setq info-marks (list mark)) (gnus-info-marks info)))) + (setcdr info-marks (funcall (if (eq what 'add) + 'gnus-range-add + 'gnus-remove-from-range) + (cdr info-marks) + range)))))))) + + ;;Marks can be synchronized at any time by simply toggling from + ;;unplugged to plugged. If that is what is happening right now, make + ;;sure that the group buffer is up to date. + (when (gnus-buffer-live-p gnus-group-buffer) + (gnus-group-update-group group t))) + nil)) + (defun gnus-agent-save-active (method) (when (gnus-agent-method-p method) (let* ((gnus-command-method method) @@ -1191,6 +1279,7 @@ This can be added to `gnus-select-article-hook' or ;; will add it while reading the file. (gnus-write-active-file file new nil))) +;;;###autoload (defun gnus-agent-possibly-alter-active (group active &optional info) "Possibly expand a group's active range to include articles downloaded into the agent." @@ -1226,11 +1315,11 @@ downloaded into the agent." ;; file. (let ((read (gnus-info-read info))) - (gnus-info-set-read - info - (gnus-range-add - read - (list (cons (1+ agent-max) + (gnus-info-set-read + info + (gnus-range-add + read + (list (cons (1+ agent-max) (1- active-min)))))) ;; Lie about the agent's local range for this group to @@ -1303,8 +1392,8 @@ downloaded into the agent." (setq group (nnheader-translate-file-chars (nnheader-replace-duplicate-chars-in-string - (nnheader-replace-chars-in-string - (gnus-group-real-name group) + (nnheader-replace-chars-in-string + (gnus-group-real-name (gnus-group-decoded-name group)) ?/ ?_) ?. ?_))) (if (or nnmail-use-long-file-names @@ -1321,7 +1410,9 @@ downloaded into the agent." ;; while plugged. (let ((gnus-command-method (or gnus-command-method (gnus-find-method-for-group group)))) - (nnmail-group-pathname (gnus-group-real-name group) (gnus-agent-directory)))) + (nnmail-group-pathname (gnus-group-real-name + (gnus-group-decoded-name group)) + (gnus-agent-directory)))) (defun gnus-agent-get-function (method) (if (gnus-online method) @@ -1384,7 +1475,7 @@ downloaded into the agent." (unless (and (eq article (caar alist)) (cdar alist)) ;; Skip headers preceeding this article - (while (> article + (while (> article (setq header-number (let* ((header (car headers))) (if header @@ -1499,6 +1590,37 @@ downloaded into the agent." (gnus-message 7 "")) (cdr fetched-articles)))))) +(defun gnus-agent-unfetch-articles (group articles) + "Delete ARTICLES that were fetched from GROUP into the agent." + (when articles + (gnus-agent-with-refreshed-group + group + (gnus-agent-load-alist group) + (let* ((alist (cons nil gnus-agent-article-alist)) + (articles (sort articles #'<)) + (next-possibility alist) + (delete-this (pop articles))) + (while (and (cdr next-possibility) delete-this) + (let ((have-this (caar (cdr next-possibility)))) + (cond ((< delete-this have-this) + (setq delete-this (pop articles))) + ((= delete-this have-this) + (let ((timestamp (cdar (cdr next-possibility)))) + (when timestamp + (let* ((file-name (concat (gnus-agent-group-pathname group) + (number-to-string have-this))) + (size-file (float (or (and gnus-agent-total-fetched-hashtb + (nth 7 (file-attributes file-name))) + 0)))) + (delete-file file-name) + (gnus-agent-update-files-total-fetched-for group (- size-file))))) + + (setcdr next-possibility (cddr next-possibility))) + (t + (setq next-possibility (cdr next-possibility)))))) + (setq gnus-agent-article-alist (cdr alist)) + (gnus-agent-save-alist group))))) + (defun gnus-agent-crosspost (crosses article &optional date) (setq date (or date t)) @@ -1573,7 +1695,7 @@ and that there are no duplicates." (setq backed-up (gnus-agent-backup-overview-buffer))) (gnus-message 1 "Duplicate overview line for %d" cur) - (delete-region (point) (progn (forward-line 1) (point)))) + (delete-region p (progn (forward-line 1) (point)))) ((< cur prev-num) (or backed-up (setq backed-up (gnus-agent-backup-overview-buffer))) @@ -1605,6 +1727,7 @@ and that there are no duplicates." (insert "\n")) (setq gnus-agent-group-alist (cdr gnus-agent-group-alist))))) +;;;###autoload (defun gnus-agent-find-parameter (group symbol) "Search for GROUPs SYMBOL in the group's parameters, the group's topic parameters, the group's category, or the customizable @@ -1709,8 +1832,10 @@ article numbers will be returned." ;; of FILE. (copy-to-buffer gnus-agent-overview-buffer (point-min) (point-max)) - (when (file-exists-p file) - (gnus-agent-braid-nov group articles file)) + ;; NOTE: Call g-a-brand-nov even when the file does not + ;; exist. As a minimum, it will validate the article + ;; numbers already in the buffer. + (gnus-agent-braid-nov group articles file) (let ((coding-system-for-write gnus-agent-file-coding-system)) (gnus-agent-check-overview-buffer) @@ -1723,11 +1848,32 @@ article numbers will be returned." (nnheader-insert-file-contents file))))) articles)) +(defsubst gnus-agent-read-article-number () + "Reads the article number at point. Returns nil when a valid article number can not be read." + + ;; It is unfortunite but the read function quietly overflows + ;; integer. As a result, I have to use string operations to test + ;; for overflow BEFORE calling read. + (when (looking-at "[0-9]+\t") + (let ((len (- (match-end 0) (match-beginning 0)))) + (cond ((< len 9) + (read (current-buffer))) + ((= len 9) + ;; Many 9 digit base-10 numbers can be represented in a 27-bit int + ;; Back convert from int to string to ensure that this is one of them. + (let* ((str1 (buffer-substring (match-beginning 0) (1- (match-end 0)))) + (num (read (current-buffer))) + (str2 (int-to-string num))) + (when (equal str1 str2) + num))))))) + (defsubst gnus-agent-copy-nov-line (article) + "Copy the indicated ARTICLE from the overview buffer to the nntp server buffer." (let (art b e) (set-buffer gnus-agent-overview-buffer) (while (and (not (eobp)) - (< (setq art (read (current-buffer))) article)) + (or (not (setq art (gnus-agent-read-article-number))) + (< art article))) (forward-line 1)) (beginning-of-line) (if (or (eobp) @@ -1740,64 +1886,77 @@ article numbers will be returned." (defun gnus-agent-braid-nov (group articles file) "Merge agent overview data with given file. -Takes headers for ARTICLES from `gnus-agent-overview-buffer' and the given -FILE and places the combined headers into `nntp-server-buffer'." +Takes unvalidated headers for ARTICLES from +`gnus-agent-overview-buffer' and validated headers from the given +FILE and places the combined valid headers into +`nntp-server-buffer'. This function can be used, when file +doesn't exist, to valid the overview buffer." (let (start last) (set-buffer gnus-agent-overview-buffer) (goto-char (point-min)) (set-buffer nntp-server-buffer) (erase-buffer) - (nnheader-insert-file-contents file) + (when (file-exists-p file) + (nnheader-insert-file-contents file)) (goto-char (point-max)) (forward-line -1) - (unless (looking-at "[0-9]+\t") - ;; Remove corrupted lines - (gnus-message - 1 "Overview %s is corrupted. Removing corrupted lines..." file) - (goto-char (point-min)) - (while (not (eobp)) - (if (looking-at "[0-9]+\t") - (forward-line 1) - (delete-region (point) (progn (forward-line 1) (point))))) - (forward-line -1)) + (unless (or (= (point-min) (point-max)) (< (setq last (read (current-buffer))) (car articles))) - ;; We do it the hard way. + ;; Old and new overlap -- We do it the hard way. (when (nnheader-find-nov-line (car articles)) ;; Replacing existing NOV entry (delete-region (point) (progn (forward-line 1) (point)))) (gnus-agent-copy-nov-line (pop articles)) (ignore-errors - (while articles - (while (let ((art (read (current-buffer)))) - (cond ((< art (car articles)) - (forward-line 1) - t) - ((= art (car articles)) - (beginning-of-line) - (delete-region - (point) (progn (forward-line 1) (point))) - nil) - (t - (beginning-of-line) - nil)))) - - (gnus-agent-copy-nov-line (pop articles))))) - - ;; Copy the rest lines - (set-buffer nntp-server-buffer) + (while articles + (while (let ((art (read (current-buffer)))) + (cond ((< art (car articles)) + (forward-line 1) + t) + ((= art (car articles)) + (beginning-of-line) + (delete-region + (point) (progn (forward-line 1) (point))) + nil) + (t + (beginning-of-line) + nil)))) + + (gnus-agent-copy-nov-line (pop articles))))) + (goto-char (point-max)) + + ;; Append the remaining lines (when articles (when last (set-buffer gnus-agent-overview-buffer) - (ignore-errors - (while (<= (read (current-buffer)) last) - (forward-line 1))) - (beginning-of-line) (setq start (point)) (set-buffer nntp-server-buffer)) - (insert-buffer-substring gnus-agent-overview-buffer start)))) + + (let ((p (point))) + (insert-buffer-substring gnus-agent-overview-buffer start) + (goto-char p)) + + (setq last (or last -134217728)) + (let (sort art) + (while (not (eobp)) + (setq art (gnus-agent-read-article-number)) + (cond ((not art) + ;; Bad art num - delete this line + (beginning-of-line) + (delete-region (point) (progn (forward-line 1) (point)))) + ((< art last) + ;; Art num out of order - enable sort + (setq sort t) + (forward-line 1)) + (t + ;; Good art num + (setq last art) + (forward-line 1)))) + (when sort + (sort-numeric-fields 1 (point-min) (point-max))))))) ;; Keeps the compiler from warning about the free variable in ;; gnus-agent-read-agentview. @@ -1891,8 +2050,8 @@ FILE and places the combined headers into `nntp-server-buffer'." (setq prev (cdr prev))) (setq gnus-agent-article-alist (cdr all)) - (gnus-agent-set-local group - (caar gnus-agent-article-alist) + (gnus-agent-set-local group + (caar gnus-agent-article-alist) (caar (last gnus-agent-article-alist))) (gnus-make-directory (gnus-agent-article-name "" group)) @@ -1949,7 +2108,7 @@ modified) original contents, they are first saved to their own file." (defun gnus-agent-read-local (file) "Load FILE and do a `read' there." - (let ((my-obarray (gnus-make-hashtable (count-lines (point-min) + (let ((my-obarray (gnus-make-hashtable (count-lines (point-min) (point-max)))) (line 1)) (with-temp-buffer @@ -1966,7 +2125,7 @@ modified) original contents, they are first saved to their own file." (while (not (eobp)) (condition-case err - (let (group + (let (group min max (cur (current-buffer))) @@ -1984,7 +2143,7 @@ modified) original contents, they are first saved to their own file." file line (error-message-string err)))) (forward-line 1) (setq line (1+ line)))) - + (set (intern "+dirty" my-obarray) nil) (set (intern "+method" my-obarray) gnus-command-method) my-obarray)) @@ -2017,7 +2176,7 @@ modified) original contents, they are first saved to their own file." (princ (car range)) (princ " ") (princ (cdr range)) - (princ "\n"))))) + (princ "\n"))))) my-obarray)))))))) (defun gnus-agent-get-local (group &optional gmane method) @@ -2036,7 +2195,7 @@ modified) original contents, they are first saved to their own file." (setq minmax (cons (caar alist) (caar (last alist)))) - (gnus-agent-set-local group (car minmax) (cdr minmax) + (gnus-agent-set-local group (car minmax) (cdr minmax) gmane gnus-command-method local)))) minmax)) @@ -2046,7 +2205,7 @@ modified) original contents, they are first saved to their own file." (local (or local (gnus-agent-load-local))) (symb (intern gmane local)) (minmax (and (boundp symb) (symbol-value symb)))) - + (if (cond ((and minmax (or (not (eq min (car minmax))) (not (eq max (cdr minmax))))) @@ -2272,9 +2431,11 @@ modified) original contents, they are first saved to their own file." (dolist (article marked-articles) (gnus-summary-set-agent-mark article t)) (dolist (article fetched-articles) - (if gnus-agent-mark-unread-after-downloaded - (gnus-summary-mark-article - article gnus-unread-mark)) + (when gnus-agent-mark-unread-after-downloaded + (setq gnus-newsgroup-downloadable + (delq article gnus-newsgroup-downloadable)) + (gnus-summary-mark-article + article gnus-unread-mark)) (when (gnus-summary-goto-subject article nil t) (gnus-summary-update-download-mark article))) (dolist (article unfetched-articles) @@ -2712,7 +2873,7 @@ The following commands are available: It is okay to miss some cases, but there must be no false positives. That is, if this predicate returns true, then indeed the predicate must return only unread articles." - (eq t (gnus-function-implies-unread-1 + (eq t (gnus-function-implies-unread-1 (gnus-category-make-function-1 predicate)))) (defun gnus-function-implies-unread-1 (function) @@ -2832,15 +2993,15 @@ FORCE is equivalent to setting the expiration predicates to true." ;; provided a non-nil active (let ((dir (gnus-agent-group-pathname group))) - (gnus-agent-with-refreshed-group + (gnus-agent-with-refreshed-group group (when (boundp 'gnus-agent-expire-current-dirs) - (set 'gnus-agent-expire-current-dirs - (cons dir + (set 'gnus-agent-expire-current-dirs + (cons dir (symbol-value 'gnus-agent-expire-current-dirs)))) (if (and (not force) - (eq 'DISABLE (gnus-agent-find-parameter group + (eq 'DISABLE (gnus-agent-find-parameter group 'agent-enable-expiration))) (gnus-message 5 "Expiry skipping over %s" group) (gnus-message 5 "Expiring articles in %s" group) @@ -2923,7 +3084,7 @@ FORCE is equivalent to setting the expiration predicates to true." ;; information with this list. For example, a flag indicating ;; that a particular article MUST BE KEPT. To do this, I'm ;; going to transform the elements to look like (article# - ;; fetch_date keep_flag NOV_entry_marker) Later, I'll reverse + ;; fetch_date keep_flag NOV_entry_position) Later, I'll reverse ;; the process to generate the expired article alist. ;; Convert the alist elements to (article# fetch_date nil @@ -2955,15 +3116,15 @@ FORCE is equivalent to setting the expiration predicates to true." (gnus-message 7 "gnus-agent-expire: Loading overview...") (nnheader-insert-file-contents nov-file) (goto-char (point-min)) - + (let (p) (while (< (setq p (point)) (point-max)) (condition-case nil ;; If I successfully read an integer (the plus zero - ;; ensures a numeric type), prepend a marker entry + ;; ensures a numeric type), append the position ;; to the list (push (list (+ 0 (read (current-buffer))) nil nil - (set-marker (make-marker) p)) + p) dlist) (error (gnus-message 1 "gnus-agent-expire: read error \ @@ -3015,15 +3176,39 @@ line." (point) nov-file))) (setq first (cdr first) secnd (cdr secnd)) (setcar first (or (car first) - (car secnd))) ; NOV_entry_marker + (car secnd))) ; NOV_entry_position (setcdr dlist (cddr dlist))) (setq dlist (cdr dlist))))) + + ;; Check the order of the entry positions. They should be in + ;; ascending order. If they aren't, the positions must be + ;; converted to markers. + (when (let ((dlist dlist) + (prev-pos -1) + pos) + (while dlist + (if (setq pos (nth 3 (pop dlist))) + (if (< pos prev-pos) + (throw 'sort-results 'unsorted) + (setq prev-pos pos))))) + (gnus-message 7 "gnus-agent-expire: Unsorted overview; inserting markers to compensate.") + (mapcar (lambda (entry) + (let ((pos (nth 3 entry))) + (if pos + (setf (nth 3 entry) + (set-marker (make-marker) + pos))))) + dlist)) + (gnus-message 7 "gnus-agent-expire: Merging entries... Done") (let* ((len (float (length dlist))) (alist (list nil)) - (tail-alist alist)) + (tail-alist alist) + (position-offset 0) + ) + (while dlist (let ((new-completed (truncate (* 100.0 (/ (setq cnt (1+ cnt)) @@ -3100,13 +3285,18 @@ missing NOV entry. Run gnus-agent-regenerate-group to restore it."))) (when marker (push "NOV entry removed" actions) - (goto-char marker) + + (goto-char (if (markerp marker) + marker + (- marker position-offset))) (incf nov-entries-deleted) - (let ((from (point-at-bol)) - (to (progn (forward-line 1) (point)))) - (incf bytes-freed (- to from)) + (let* ((from (point-at-bol)) + (to (progn (forward-line 1) (point))) + (freed (- to from))) + (incf bytes-freed freed) + (incf position-offset freed) (delete-region from to))) ;; If considering all articles is set, I can only @@ -3133,9 +3323,9 @@ expiration tests failed." group article-number) tail-alist (cons article-number fetch-date))) ) - ;; Clean up markers as I want to recycle this buffer - ;; over several groups. - (when marker + ;; Remove markers as I intend to reuse this buffer again. + (when (and marker + (markerp marker)) (set-marker marker nil)) (setq dlist (cdr dlist)))) @@ -3181,7 +3371,7 @@ The articles on which the expiration process runs are selected as follows: Setting GROUP will limit expiration to that group. FORCE is equivalent to setting the expiration predicates to true." (interactive) - + (if group (gnus-agent-expire-group group articles force) (if (or (not (eq articles t)) @@ -3210,7 +3400,7 @@ articles in every agentized group.")) gnus-command-method)) (let* ((active (gnus-gethash-safe expiring-group orig))) - + (when active (save-excursion (gnus-agent-expire-group-1 @@ -3231,9 +3421,9 @@ articles in every agentized group.")) units (cdr units))) (format "Expiry recovered %d NOV entries, deleted %d files,\ - and freed %f %s." - (nth 0 stats) - (nth 1 stats) + and freed %f %s." + (nth 0 stats) + (nth 1 stats) size (car units))) "Expiry...done")) @@ -3261,9 +3451,9 @@ articles in every agentized group.")) (checker (function (lambda (d) - "Given a directory, check it and its subdirectories for - membership in the keep hash. If it isn't found, add - it to to-remove." + "Given a directory, check it and its subdirectories for + membership in the keep hash. If it isn't found, add + it to to-remove." (let ((files (directory-files d)) file) (while (setq file (pop files)) @@ -3271,7 +3461,7 @@ articles in every agentized group.")) nil) ((equal file "..") ; Ignore parent nil) - ((equal file ".overview") + ((equal file ".overview") ;; Directory must contain .overview to be ;; agent's cache of a group. (let ((d (file-name-as-directory d)) @@ -3284,7 +3474,7 @@ articles in every agentized group.")) d (directory-file-name d))) ;; if ANY ancestor was NOT in keep hash and ;; it it's already in to-remove, add it to - ;; to-remove. + ;; to-remove. (if (and r (not (member r to-remove))) (push r to-remove)))) @@ -3358,7 +3548,7 @@ articles in every agentized group.")) (defun gnus-agent-uncached-articles (articles group &optional cached-header) "Restrict ARTICLES to numbers already fetched. -Returns a sublist of ARTICLES that excludes thos article ids in GROUP +Returns a sublist of ARTICLES that excludes those article ids in GROUP that have already been fetched. If CACHED-HEADER is nil, articles are only excluded if the article itself has been fetched." @@ -3448,12 +3638,11 @@ has been fetched." ;; Get the list of articles that were fetched (goto-char (point-min)) - (let ((pm (point-max))) + (let ((pm (point-max)) + art) (while (< (point) pm) - (when (looking-at "[0-9]+\t") - (gnus-agent-append-to-list - tail-fetched-articles - (read (current-buffer)))) + (when (setq art (gnus-agent-read-article-number)) + (gnus-agent-append-to-list tail-fetched-articles art)) (forward-line 1))) ;; Clip this list to the headers that will @@ -3492,7 +3681,7 @@ has been fetched." ;; Merge the temp buffer with the known headers (found on ;; disk in FILE) into the nntp-server-buffer - (when (and uncached-articles (file-exists-p file)) + (when uncached-articles (gnus-agent-braid-nov group uncached-articles file)) ;; Save the new set of known headers to FILE @@ -3617,7 +3806,7 @@ If REREAD is not nil, downloaded articles are marked as unread." (gnus-delete-line) (setq nov-arts (cdr nov-arts)) (gnus-message 4 "gnus-agent-regenerate-group: NOV\ -entry of article %s deleted." l1)) + entry of article %s deleted." l1)) ((not l2) nil) ((< l1 l2) @@ -3739,7 +3928,7 @@ entry of article %s deleted." l1)) (when regenerated (gnus-agent-save-alist group) - + ;; I have to alter the group's active range NOW as ;; gnus-make-ascending-articles-unread will use it to ;; recalculate the number of unread articles in the group @@ -3750,21 +3939,24 @@ entry of article %s deleted." l1)) (gnus-agent-possibly-alter-active group group-active))))) (when (and reread gnus-agent-article-alist) - (gnus-make-ascending-articles-unread - group - (if (listp reread) - reread - (delq nil (mapcar (function (lambda (c) - (cond ((eq reread t) - (car c)) - ((cdr c) - (car c))))) - gnus-agent-article-alist)))) + (gnus-agent-synchronize-group-flags + group + (list (list + (if (listp reread) + reread + (delq nil (mapcar (function (lambda (c) + (cond ((eq reread t) + (car c)) + ((cdr c) + (car c))))) + gnus-agent-article-alist))) + 'del '(read))) + gnus-command-method) (when regenerated - (gnus-agent-update-files-total-fetched-for group nil))) + (gnus-agent-update-files-total-fetched-for group nil))) - (gnus-message 5 nil) + (gnus-message 5 "") regenerated))) ;;;###autoload @@ -3810,7 +4002,17 @@ If CLEAN, obsolete (ignore)." (defun gnus-agent-group-covered-p (group) (gnus-agent-method-p (gnus-group-method group))) -(defun gnus-agent-update-files-total-fetched-for +;; 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 agent has fetched." @@ -3818,30 +4020,34 @@ agent has fetched." (gnus-agent-with-refreshed-group group ;; if null, gnus-agent-group-pathname will calc method. - (let* ((gnus-command-method method) + (let* ((gnus-command-method method) (path (or path (gnus-agent-group-pathname group))) (entry (or (gnus-gethash path gnus-agent-total-fetched-hashtb) - (gnus-sethash path (make-list 3 0) + (gnus-sethash path (make-list 3 0) gnus-agent-total-fetched-hashtb)))) (when (listp delta) - (unless delta - (setq delta (directory-files path nil "^-?[0-9]+$" t))) - - (let ((sum 0.0) - file) - (while (setq file (pop delta)) - (incf sum (float (or (nth 7 (file-attributes - (nnheader-concat - path - (if (numberp file) - (number-to-string file) - file)))) 0)))) - (setq delta sum))) + (if delta + (let ((sum 0.0) + file) + (while (setq file (pop delta)) + (incf sum (float (or (nth 7 (file-attributes + (nnheader-concat + path + (if (numberp file) + (number-to-string file) + file)))) 0)))) + (setq delta sum)) + (let ((sum (- (nth 2 entry))) + (info (directory-files-and-attributes path nil "^-?[0-9]+$" t)) + file) + (while (setq file (pop info)) + (incf sum (float (or (nth 8 file) 0)))) + (setq delta sum)))) (setq gnus-agent-need-update-total-fetched-for t) (incf (nth 2 entry) delta))))) -(defun gnus-agent-update-view-total-fetched-for +(defun gnus-agent-update-view-total-fetched-for (group agent-over &optional method path) "Update, or set, the total disk space used by the .agentview and .overview files. These files are calculated separately as they can be @@ -3850,14 +4056,14 @@ modified." (gnus-agent-with-refreshed-group group ;; if null, gnus-agent-group-pathname will calc method. - (let* ((gnus-command-method method) + (let* ((gnus-command-method method) (path (or path (gnus-agent-group-pathname group))) (entry (or (gnus-gethash path gnus-agent-total-fetched-hashtb) - (gnus-sethash path (make-list 3 0) + (gnus-sethash path (make-list 3 0) gnus-agent-total-fetched-hashtb))) - (size (or (nth 7 (file-attributes + (size (or (nth 7 (file-attributes (nnheader-concat - path (if agent-over + path (if agent-over ".overview" ".agentview")))) 0))) @@ -3870,17 +4076,18 @@ modified." (setq gnus-agent-total-fetched-hashtb (gnus-make-hashtable 1024))) ;; if null, gnus-agent-group-pathname will calc method. - (let* ((gnus-command-method 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) +;;; arch-tag: b0ba4afc-5229-4cee-ad25-9956daa4e91e ;;; gnus-agent.el ends here diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index f776b0d..c5a4e54 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -1,5 +1,5 @@ ;;; gnus-art.el --- article mode commands for Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -31,7 +31,10 @@ (defvar tool-bar-map)) (require 'gnus) -(require 'gnus-sum) +;; Avoid the "Recursive load suspected" error in Emacs 21.1. +(eval-and-compile + (let ((recursive-load-depth-limit 100)) + (require 'gnus-sum))) (require 'gnus-spec) (require 'gnus-int) (require 'gnus-win) @@ -46,6 +49,7 @@ (autoload 'gnus-msg-mail "gnus-msg" nil t) (autoload 'gnus-button-mailto "gnus-msg") (autoload 'gnus-button-reply "gnus-msg" nil t) +(autoload 'parse-time-string "parse-time" nil nil) (autoload 'ansi-color-apply-on-region "ansi-color") (defgroup gnus-article nil @@ -214,6 +218,7 @@ By default, if you set this t, then Gnus will display citations and signatures, but will never scroll down to show you a page consisting only of boring text. Boring text is controlled by `gnus-article-boring-faces'." + :version "22.1" :type 'boolean :group 'gnus-article-hiding) @@ -232,7 +237,9 @@ that number. If it is a floating point number, no signature may be longer (in lines) than that number. If it is a function, the function will be called without any parameters, and if it returns nil, there is no signature in the buffer. If it is a string, it will be used as a -regexp. If it matches, the text in question is not a signature." +regexp. If it matches, the text in question is not a signature. + +This can also be a list of the above values." :type '(choice (integer :value 200) (number :value 4.0) (function :value fun) @@ -318,29 +325,56 @@ advertisements. For example: (symbol :tag "Item in `gnus-article-banner-alist'" none) regexp (const :tag "None" nil)))) + :version "22.1" :group 'gnus-article-washing) +(defmacro gnus-emphasis-custom-with-format (&rest body) + `(let ((format "\ +\\(\\s-\\|^\\|\\=\\|[-\"]\\|\\s(\\)\\(%s\\(\\w+\\(\\s-+\\w+\\)*[.,]?\\)%s\\)\ +\\(\\([-,.;:!?\"]\\|\\s)\\)+\\s-\\|[?!.]\\s-\\|\\s)\\|\\s-\\)")) + ,@body)) + +(defun gnus-emphasis-custom-value-to-external (value) + (gnus-emphasis-custom-with-format + (if (consp (car value)) + (list (format format (car (car value)) (cdr (car value))) + 2 + (if (nth 1 value) 2 3) + (nth 2 value)) + value))) + +(defun gnus-emphasis-custom-value-to-internal (value) + (gnus-emphasis-custom-with-format + (let ((regexp (concat "\\`" + (format (regexp-quote format) + "\\([^()]+\\)" "\\([^()]+\\)") + "\\'")) + pattern) + (if (string-match regexp (setq pattern (car value))) + (list (cons (match-string 1 pattern) (match-string 2 pattern)) + (= (nth 2 value) 2) + (nth 3 value)) + value)))) + (defcustom gnus-emphasis-alist - (let ((format - "\\(\\s-\\|^\\|\\=\\|[-\"]\\|\\s(\\)\\(%s\\(\\w+\\(\\s-+\\w+\\)*[.,]?\\)%s\\)\\(\\([-,.;:!?\"]\\|\\s)\\)+\\s-\\|[?!.]\\s-\\|\\s)\\|\\s-\\)") - (types - '(("\\*" "\\*" bold) + (let ((types + '(("\\*" "\\*" bold nil 2) ("_" "_" underline) ("/" "/" italic) ("_/" "/_" underline-italic) ("_\\*" "\\*_" underline-bold) ("\\*/" "/\\*" bold-italic) ("_\\*/" "/\\*_" underline-bold-italic)))) - `(,@(mapcar - (lambda (spec) - (list - (format format (car spec) (cadr spec)) - 2 3 (intern (format "gnus-emphasis-%s" (nth 2 spec))))) - types) - ("\\(\\s-\\|^\\)\\(-\\(\\(\\w\\|-[^-]\\)+\\)-\\)\\(\\s-\\|[?!.,;]\\)" - 2 3 gnus-emphasis-strikethru) - ("\\(\\s-\\|^\\)\\(_\\(\\(\\w\\|_[^_]\\)+\\)_\\)\\(\\s-\\|[?!.,;]\\)" - 2 3 gnus-emphasis-underline))) + (nconc + (gnus-emphasis-custom-with-format + (mapcar (lambda (spec) + (list (format format (car spec) (cadr spec)) + (or (nth 3 spec) 2) + (or (nth 4 spec) 3) + (intern (format "gnus-emphasis-%s" (nth 2 spec))))) + types)) + '(("\\(\\s-\\|^\\)\\(_\\(\\(\\w\\|_[^_]\\)+\\)_\\)\\(\\s-\\|[?!.,;]\\)" + 2 3 gnus-emphasis-underline)))) "*Alist that says how to fontify certain phrases. Each item looks like this: @@ -351,11 +385,43 @@ is a number that says what regular expression grouping used to find the entire emphasized word. The third is a number that says what regexp grouping should be displayed and highlighted. The fourth is the face used for highlighting." - :type '(repeat (list :value ("" 0 0 default) - regexp - (integer :tag "Match group") - (integer :tag "Emphasize group") - face)) + :type + '(repeat + (menu-choice + :format "%[Customizing Style%]\n%v" + :indent 2 + (group :tag "Default" + :value ("" 0 0 default) + :value-create + (lambda (widget) + (let ((value (widget-get + (cadr (widget-get (widget-get widget :parent) + :args)) + :value))) + (if (not (eq (nth 2 value) 'default)) + (widget-put + widget + :value + (gnus-emphasis-custom-value-to-external value)))) + (widget-group-value-create widget)) + regexp + (integer :format "Match group: %v") + (integer :format "Emphasize group: %v") + face) + (group :tag "Simple" + :value (("_" . "_") nil default) + (cons :format "%v" + (regexp :format "Start regexp: %v") + (regexp :format "End regexp: %v")) + (boolean :format "Show start and end patterns: %[%v%]\n" + :on " On " :off " Off ") + face))) + :get (lambda (symbol) + (mapcar 'gnus-emphasis-custom-value-to-internal + (default-value symbol))) + :set (lambda (symbol value) + (set-default symbol (mapcar 'gnus-emphasis-custom-value-to-external + value))) :group 'gnus-article-emphasis) (defcustom gnus-emphasize-whitespace-regexp "^[ \t]+\\|[ \t]*\n" @@ -408,14 +474,14 @@ Example: (_/*word*/_)." "Face used for displaying highlighted words." :group 'gnus-article-emphasis) -(defcustom gnus-article-time-format "%a, %b %d %Y %T %Z" +(defcustom gnus-article-time-format "%a, %d %b %Y %T %Z" "Format for display of Date headers in article bodies. See `format-time-string' for the possible values. The variable can also be function, which should return a complete Date header. The function is called with one argument, the time, which can be fed to `format-time-string'." - :type '(choice string symbol) + :type '(choice string function) :link '(custom-manual "(gnus)Article Date") :group 'gnus-article-washing) @@ -507,17 +573,19 @@ you could set this variable to something like: '((\"^Subject:.*gnus\\|^Newsgroups:.*gnus\" \"gnus-stuff\") (\"^Subject:.*vm\\|^Xref:.*vm\" \"vm-stuff\")) -This variable is an alist where the where the key is the match and the -value is a list of possible files to save in if the match is non-nil. +This variable is an alist where the key is the match and the +value is a list of possible files to save in if the match is +non-nil. If the match is a string, it is used as a regexp match on the article. If the match is a symbol, that symbol will be funcalled -from the buffer of the article to be saved with the newsgroup as the -parameter. If it is a list, it will be evaled in the same buffer. +from the buffer of the article to be saved with the newsgroup as +the parameter. If it is a list, it will be evaled in the same +buffer. -If this form or function returns a string, this string will be used as -a possible file name; and if it returns a non-nil list, that list will -be used as possible file names." +If this form or function returns a string, this string will be +used as a possible file name; and if it returns a non-nil list, +that list will be used as possible file names." :group 'gnus-article-saving :type '(repeat (choice (list :value (fun) function) (cons :value ("" "") regexp (repeat string)) @@ -563,6 +631,13 @@ The following additional specs are available: :type 'hook :group 'gnus-article-various) +(defcustom gnus-copy-article-ignored-headers nil + "List of headers to be removed when copying an article. +Each element is a regular expression." + :version "23.0" ;; No Gnus + :type '(repeat regexp) + :group 'gnus-article-various) + (make-obsolete-variable 'gnus-article-hide-pgp-hook "This variable is obsolete in Gnus 5.10.") @@ -745,7 +820,7 @@ If set, this variable overrides `gnus-unbuttonized-mime-types'. To see e.g. security buttons you could set this to `(\"multipart/signed\")'. This variable is only used when `gnus-inhibit-mime-unbuttonizing' is nil." - :version "21.1" + :version "22.1" :group 'gnus-article-mime :type '(repeat regexp)) @@ -754,7 +829,7 @@ This variable is only used when `gnus-inhibit-mime-unbuttonizing' is nil." When nil (the default value), then some MIME parts do not get buttons, as described by the variables `gnus-buttonized-mime-types' and `gnus-unbuttonized-mime-types'." - :version "21.3" + :version "22.1" :group 'gnus-article-mime :type 'boolean) @@ -762,14 +837,17 @@ as described by the variables `gnus-buttonized-mime-types' and "String used to delimit header and body. This variable is used by `gnus-article-treat-body-boundary' which can be controlled by `gnus-treat-body-boundary'." + :version "22.1" :group 'gnus-article-various :type '(choice (item :tag "None" :value nil) string)) -(defcustom gnus-picon-databases '("/usr/lib/picon" "/usr/local/faces") +(defcustom gnus-picon-databases '("/usr/lib/picon" "/usr/local/faces" + "/usr/share/picons") "Defines the location of the faces database. For information on obtaining this database of pretty pictures, please see http://www.cs.indiana.edu/picons/ftp/index.html" + :version "22.1" :type '(repeat directory) :link '(url-link :tag "download" "http://www.cs.indiana.edu/picons/ftp/index.html") @@ -909,6 +987,7 @@ See Info node `(gnus)Customizing Articles' for details." "Remove carriage returns. Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' for details." + :version "22.1" :group 'gnus-article-treat :link '(custom-manual "(gnus)Customizing Articles") :type gnus-article-treat-custom) @@ -917,6 +996,7 @@ See Info node `(gnus)Customizing Articles' for details." "Remove newlines from within URLs. Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' for details." + :version "22.1" :group 'gnus-article-treat :link '(custom-manual "(gnus)Customizing Articles") :type gnus-article-treat-custom) @@ -925,6 +1005,7 @@ See Info node `(gnus)Customizing Articles' for details." "Remove leading whitespace in headers. Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' for details." + :version "22.1" :group 'gnus-article-treat :link '(custom-manual "(gnus)Customizing Articles") :type gnus-article-treat-custom) @@ -1044,6 +1125,7 @@ See Info node `(gnus)Customizing Articles' for details." "Display the Date in a format that can be read aloud in English. Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' for details." + :version "22.1" :group 'gnus-article-treat :link '(custom-manual "(gnus)Customizing Articles") :type gnus-article-treat-head-custom) @@ -1119,6 +1201,7 @@ See Info node `(gnus)Customizing Articles' for details." "Unfold folded header lines. Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' for details." + :version "22.1" :group 'gnus-article-treat :link '(custom-manual "(gnus)Customizing Articles") :type gnus-article-treat-custom) @@ -1127,6 +1210,7 @@ See Info node `(gnus)Customizing Articles' for details." "Fold headers. Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' for details." + :version "22.1" :group 'gnus-article-treat :link '(custom-manual "(gnus)Customizing Articles") :type gnus-article-treat-custom) @@ -1135,6 +1219,7 @@ See Info node `(gnus)Customizing Articles' for details." "Fold the Newsgroups and Followup-To headers. Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' for details." + :version "22.1" :group 'gnus-article-treat :link '(custom-manual "(gnus)Customizing Articles") :type gnus-article-treat-custom) @@ -1208,7 +1293,7 @@ Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' and Info node `(gnus)X-Face' for details." :group 'gnus-article-treat - :version "21.1" + :version "22.1" :link '(custom-manual "(gnus)Customizing Articles") :link '(custom-manual "(gnus)X-Face") :type gnus-article-treat-head-custom) @@ -1239,6 +1324,7 @@ See Info node `(gnus)Customizing Articles' and Info node Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' and Info node `(gnus)Picons' for details." + :version "22.1" :group 'gnus-article-treat :group 'gnus-picon :link '(custom-manual "(gnus)Customizing Articles") @@ -1254,6 +1340,7 @@ See Info node `(gnus)Customizing Articles' and Info node Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' and Info node `(gnus)Picons' for details." + :version "22.1" :group 'gnus-article-treat :group 'gnus-picon :link '(custom-manual "(gnus)Customizing Articles") @@ -1269,6 +1356,7 @@ See Info node `(gnus)Customizing Articles' and Info node Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' and Info node `(gnus)Picons' for details." + :version "22.1" :group 'gnus-article-treat :group 'gnus-picon :link '(custom-manual "(gnus)Customizing Articles") @@ -1277,14 +1365,15 @@ See Info node `(gnus)Customizing Articles' and Info node (put 'gnus-treat-newsgroups-picon 'highlight t) (defcustom gnus-treat-body-boundary - (if (or gnus-treat-newsgroups-picon - gnus-treat-mail-picon - gnus-treat-from-picon) + (if (and (eq window-system 'x) + (or gnus-treat-newsgroups-picon + gnus-treat-mail-picon + gnus-treat-from-picon)) 'head nil) "Draw a boundary at the end of the headers. Valid values are nil and `head'. See Info node `(gnus)Customizing Articles' for details." - :version "21.1" + :version "22.1" :group 'gnus-article-treat :link '(custom-manual "(gnus)Customizing Articles") :type gnus-article-treat-head-custom) @@ -1302,6 +1391,7 @@ See Info node `(gnus)Customizing Articles' for details." "Format as HTML. Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' for details." + :version "22.1" :group 'gnus-article-treat :link '(custom-manual "(gnus)Customizing Articles") :type gnus-article-treat-custom) @@ -1337,6 +1427,7 @@ See Info node `(gnus)Customizing Articles' for details." To automatically treat X-PGP-Sig, set it to head. Valid values are nil, t, `head', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' for details." + :version "22.1" :group 'gnus-article-treat :group 'mime-security :link '(custom-manual "(gnus)Customizing Articles") @@ -1350,6 +1441,7 @@ See Info node `(gnus)Customizing Articles' for details." (defcustom gnus-article-encrypt-protocol "PGP" "The protocol used for encrypt articles. It is a string, such as \"PGP\". If nil, ask user." + :version "22.1" :type 'string :group 'mime-security) @@ -1361,11 +1453,13 @@ It is a string, such as \"PGP\". If nil, ask user." (executable-find idna-program)) "Whether IDNA decoding of headers is used when viewing messages. This requires GNU Libidn, and by default only enabled if it is found." + :version "22.1" :group 'gnus-article-headers :type 'boolean) (defcustom gnus-article-over-scroll nil "If non-nil, allow scrolling the article buffer even when there no more text." + :version "22.1" :group 'gnus-article :type 'boolean) @@ -1476,7 +1570,7 @@ Initialized from `text-mode-syntax-table.") `(save-excursion (set-buffer gnus-article-buffer) (save-restriction - (let ((buffer-read-only nil) + (let ((inhibit-read-only t) (inhibit-point-motion-hooks t) (case-fold-search t)) (article-narrow-to-head) @@ -1488,7 +1582,7 @@ Initialized from `text-mode-syntax-table.") (defmacro gnus-with-article-buffer (&rest forms) `(save-excursion (set-buffer gnus-article-buffer) - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) ,@forms))) (put 'gnus-with-article-buffer 'lisp-indent-function 0) @@ -1574,25 +1668,35 @@ Initialized from `text-mode-syntax-table.") (interactive) ;; This function might be inhibited. (unless gnus-inhibit-hiding - (save-excursion - (save-restriction - (let ((buffer-read-only nil) - (case-fold-search t) - (max (1+ (length gnus-sorted-header-list))) - (ignored (when (not gnus-visible-headers) - (cond ((stringp gnus-ignored-headers) - gnus-ignored-headers) - ((listp gnus-ignored-headers) - (mapconcat 'identity gnus-ignored-headers - "\\|"))))) - (visible - (cond ((stringp gnus-visible-headers) - gnus-visible-headers) - ((and gnus-visible-headers - (listp gnus-visible-headers)) - (mapconcat 'identity gnus-visible-headers "\\|")))) - (inhibit-point-motion-hooks t) - beg) + (let ((inhibit-read-only nil) + (case-fold-search t) + (max (1+ (length gnus-sorted-header-list))) + (inhibit-point-motion-hooks t) + (cur (current-buffer)) + ignored visible beg) + (save-excursion + ;; `gnus-ignored-headers' and `gnus-visible-headers' may be + ;; group parameters, so we should go to the summary buffer. + (when (prog1 + (condition-case nil + (progn (set-buffer gnus-summary-buffer) t) + (error nil)) + (setq ignored (when (not gnus-visible-headers) + (cond ((stringp gnus-ignored-headers) + gnus-ignored-headers) + ((listp gnus-ignored-headers) + (mapconcat 'identity + gnus-ignored-headers + "\\|")))) + visible (cond ((stringp gnus-visible-headers) + gnus-visible-headers) + ((and gnus-visible-headers + (listp gnus-visible-headers)) + (mapconcat 'identity + gnus-visible-headers + "\\|"))))) + (set-buffer cur)) + (save-restriction ;; First we narrow to just the headers. (article-narrow-to-head) ;; Hide any "From " lines at the beginning of (mail) articles. @@ -1634,13 +1738,10 @@ always hide." (not gnus-show-all-headers)) (save-excursion (save-restriction - (let ((buffer-read-only nil) - (list gnus-boring-article-headers) - (inhibit-point-motion-hooks t) - elem) + (let ((inhibit-read-only t) + (inhibit-point-motion-hooks t)) (article-narrow-to-head) - (while list - (setq elem (pop list)) + (dolist (elem gnus-boring-article-headers) (goto-char (point-min)) (cond ;; Hide empty headers. @@ -1788,7 +1889,7 @@ always hide." (defun article-normalize-headers () "Make all header lines 40 characters long." (interactive) - (let ((buffer-read-only nil) + (let ((inhibit-read-only t) column) (save-excursion (save-restriction @@ -1832,7 +1933,7 @@ FROM is a string of characters to translate from; to is a string of characters to translate to." (save-excursion (when (article-goto-body) - (let ((buffer-read-only nil) + (let ((inhibit-read-only t) (x (make-string 225 ?x)) (i -1)) (while (< (incf i) (length x)) @@ -1848,9 +1949,8 @@ characters to translate to." MAP is an alist where the elements are on the form (\"from\" \"to\")." (save-excursion (when (article-goto-body) - (let ((buffer-read-only nil) - elem) - (while (setq elem (pop map)) + (let ((inhibit-read-only t)) + (dolist (elem map) (save-excursion (while (search-forward (car elem) nil t) (replace-match (cadr elem))))))))) @@ -1860,7 +1960,7 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")." (interactive) (save-excursion (when (article-goto-body) - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) (while (search-forward "\b" nil t) (let ((next (char-after)) (previous (char-after (- (point) 2)))) @@ -1886,7 +1986,7 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")." (interactive) (save-excursion (when (article-goto-body) - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) (ansi-color-apply-on-region (point) (point-max)))))) (defun gnus-article-treat-unfold-headers () @@ -1976,7 +2076,7 @@ unfolded." "Fill lines that are wider than the window width." (interactive) (save-excursion - (let ((buffer-read-only nil) + (let ((inhibit-read-only t) (width (window-width (get-buffer-window (current-buffer))))) (save-restriction (article-goto-body) @@ -1996,7 +2096,7 @@ unfolded." "Capitalize the first word in each sentence." (interactive) (save-excursion - (let ((buffer-read-only nil) + (let ((inhibit-read-only t) (paragraph-start "^[\n\^L]")) (article-goto-body) (while (not (eobp)) @@ -2007,7 +2107,7 @@ unfolded." "Remove trailing CRs and then translate remaining CRs into LFs." (interactive) (save-excursion - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) (goto-char (point-min)) (while (re-search-forward "\r+$" nil t) (replace-match "" t t)) @@ -2019,7 +2119,7 @@ unfolded." "Remove all trailing blank lines from the article." (interactive) (save-excursion - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) (goto-char (point-max)) (delete-region (point) @@ -2059,7 +2159,7 @@ unfolded." (mail-narrow-to-head) (while (gnus-article-goto-header "Face") (setq faces (nconc faces (list (mail-header-field-value))))))) - (while (setq face (pop faces)) + (dolist (face faces) (let ((png (gnus-convert-face-to-png face)) image) (when png @@ -2155,7 +2255,7 @@ unfolded." If PROMPT (the prefix), prompt for a coding system to use." (interactive "P") (let ((inhibit-point-motion-hooks t) (case-fold-search t) - buffer-read-only + (inhibit-read-only t) (mail-parse-charset gnus-newsgroup-charset) (mail-parse-ignored-charsets (save-excursion (condition-case nil @@ -2205,7 +2305,7 @@ If PROMPT (the prefix), prompt for a coding system to use." (set-buffer gnus-summary-buffer) (error)) gnus-newsgroup-ignored-charsets)) - buffer-read-only) + (inhibit-read-only t)) (save-restriction (article-narrow-to-head) (funcall gnus-decode-header-function (point-min) (point-max))))) @@ -2213,7 +2313,7 @@ If PROMPT (the prefix), prompt for a coding system to use." (defun article-decode-group-name () "Decode group names in `Newsgroups:'." (let ((inhibit-point-motion-hooks t) - buffer-read-only + (inhibit-read-only t) (method (gnus-find-method-for-group gnus-newsgroup-name))) (when (and (or gnus-group-name-charset-method-alist gnus-group-name-charset-group-alist) @@ -2257,18 +2357,16 @@ If PROMPT (the prefix), prompt for a coding system to use." (when gnus-use-idna (save-restriction (let ((inhibit-point-motion-hooks t) - buffer-read-only) + (inhibit-read-only t)) (article-narrow-to-head) (goto-char (point-min)) - (while (re-search-forward "\\(xn--[-A-Za-z0-9.]*\\)[ \t\n\r,>]" nil t) + (while (re-search-forward "@.*\\(xn--[-A-Za-z0-9.]*\\)[ \t\n\r,>]" nil t) (let (ace unicode) (when (save-match-data (and (setq ace (match-string 1)) (save-excursion (and (re-search-backward "^[^ \t]" nil t) (looking-at "From\\|To\\|Cc"))) - (save-excursion (backward-char) - (message-idna-inside-rhs-p)) (setq unicode (idna-to-unicode ace)))) (unless (string= ace unicode) (replace-match unicode nil nil nil 1))))))))) @@ -2280,7 +2378,7 @@ or not. If READ-CHARSET, ask for a coding system." (interactive (list 'force current-prefix-arg)) (save-excursion - (let ((buffer-read-only nil) type charset) + (let ((inhibit-read-only t) type charset) (if (gnus-buffer-live-p gnus-original-article-buffer) (with-current-buffer gnus-original-article-buffer (setq type @@ -2310,7 +2408,7 @@ If FORCE, decode the article whether it is marked as base64 not. If READ-CHARSET, ask for a coding system." (interactive (list 'force current-prefix-arg)) (save-excursion - (let ((buffer-read-only nil) type charset) + (let ((inhibit-read-only t) type charset) (if (gnus-buffer-live-p gnus-original-article-buffer) (with-current-buffer gnus-original-article-buffer (setq type @@ -2345,17 +2443,17 @@ If READ-CHARSET, ask for a coding system." (interactive) (require 'rfc1843) (save-excursion - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) (rfc1843-decode-region (point-min) (point-max))))) (defun article-unsplit-urls () "Remove the newlines that some other mailers insert into URLs." (interactive) (save-excursion - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) (goto-char (point-min)) (while (re-search-forward - "^\\(\\(https?\\|ftp\\)://\\S-+\\) *\n\\(\\S-+\\)" nil t) + "\\(\\(https?\\|ftp\\)://\\S-+\\) *\n\\(\\S-+\\)" nil t) (replace-match "\\1\\3" t))) (when (interactive-p) (gnus-treat-article nil)))) @@ -2366,7 +2464,7 @@ If READ-CHARSET, ask for a coding system." If READ-CHARSET, ask for a coding system." (interactive "P") (save-excursion - (let ((buffer-read-only nil) + (let ((inhibit-read-only t) charset) (when (gnus-buffer-live-p gnus-original-article-buffer) (with-current-buffer gnus-original-article-buffer @@ -2432,7 +2530,7 @@ The `gnus-list-identifiers' variable specifies what to do." (regexp (if (consp gnus-list-identifiers) (mapconcat 'identity gnus-list-identifiers " *\\|") gnus-list-identifiers)) - buffer-read-only) + (inhibit-read-only t)) (when regexp (save-excursion (save-restriction @@ -2454,7 +2552,7 @@ always hide." (interactive (gnus-article-hidden-arg)) (unless (gnus-article-check-hidden-text 'pem arg) (save-excursion - (let (buffer-read-only end) + (let ((inhibit-read-only t) end) (goto-char (point-min)) ;; Hide the horrendously ugly "header". (when (and (search-forward @@ -2485,18 +2583,25 @@ always hide." (article-really-strip-banner (gnus-parameter-banner gnus-newsgroup-name))) (when gnus-article-address-banner-alist - (article-really-strip-banner - (let ((from (save-restriction - (widen) - (article-narrow-to-head) - (mail-fetch-field "from")))) - (when (and from - (setq from - (caar (mail-header-parse-addresses from)))) - (catch 'found - (dolist (pair gnus-article-address-banner-alist) - (when (string-match (car pair) from) - (throw 'found (cdr pair))))))))))))) + ;; It is necessary to encode from fields before checking, + ;; because `mail-header-parse-addresses' does not work + ;; (reliably) on decoded headers. And more, it is + ;; impossible to use `gnus-fetch-original-field' here, + ;; because `article-strip-banner' may be called in draft + ;; buffers to preview them. + (let ((from (save-restriction + (widen) + (article-narrow-to-head) + (mail-fetch-field "from")))) + (when (and from + (setq from + (caar (mail-header-parse-addresses + (mail-encode-encoded-word-string from))))) + (catch 'found + (dolist (pair gnus-article-address-banner-alist) + (when (string-match (car pair) from) + (throw 'found + (article-really-strip-banner (cdr pair))))))))))))) (defun article-really-strip-banner (banner) "Strip the banner specified by the argument." @@ -2504,7 +2609,7 @@ always hide." (save-restriction (let ((inhibit-point-motion-hooks t) (gnus-signature-limit nil) - buffer-read-only) + (inhibit-read-only t)) (article-goto-body) (cond ((eq banner 'signature) @@ -2543,7 +2648,7 @@ always hide." (unless (gnus-article-check-hidden-text 'signature arg) (save-excursion (save-restriction - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) (when (gnus-article-narrow-to-signature) (gnus-article-hide-text-type (point-min) (point-max) 'signature)))))) @@ -2563,7 +2668,7 @@ always hide." (interactive) (save-excursion (let ((inhibit-point-motion-hooks t) - buffer-read-only) + (inhibit-read-only t)) (when (article-goto-body) (while (and (not (eobp)) (looking-at "[ \t]*$")) @@ -2598,7 +2703,7 @@ Point is left at the beginning of the narrowed-to region." (interactive) (save-excursion (let ((inhibit-point-motion-hooks t) - buffer-read-only) + (inhibit-read-only t)) ;; First make all blank lines empty. (article-goto-body) (while (re-search-forward "^[ \t]+$" nil t) @@ -2617,7 +2722,7 @@ Point is left at the beginning of the narrowed-to region." (interactive) (save-excursion (let ((inhibit-point-motion-hooks t) - buffer-read-only) + (inhibit-read-only t)) (article-goto-body) (while (re-search-forward "^[ \t]+" nil t) (replace-match "" t t))))) @@ -2627,7 +2732,7 @@ Point is left at the beginning of the narrowed-to region." (interactive) (save-excursion (let ((inhibit-point-motion-hooks t) - buffer-read-only) + (inhibit-read-only t)) (article-goto-body) (while (re-search-forward "[ \t]+$" nil t) (replace-match "" t t))))) @@ -2644,7 +2749,7 @@ Point is left at the beginning of the narrowed-to region." (interactive) (save-excursion (let ((inhibit-point-motion-hooks t) - buffer-read-only) + (inhibit-read-only t)) (article-goto-body) (while (re-search-forward "^[ \t]*\n" nil t) (replace-match "" t t))))) @@ -2733,7 +2838,7 @@ means show, 0 means toggle." (defun gnus-article-show-hidden-text (type &optional dummy) "Show all hidden text of type TYPE. Originally it is hide instead of DUMMY." - (let ((buffer-read-only nil) + (let ((inhibit-read-only t) (inhibit-point-motion-hooks t)) (gnus-remove-text-properties-when 'article-type type @@ -2762,71 +2867,74 @@ lines forward." (forward-line 1) (setq ended t))))) -(defun article-date-ut (&optional type highlight header) +(defun article-date-ut (&optional type highlight) "Convert DATE date to universal time in the current article. If TYPE is `local', convert to local time; if it is `lapsed', output how much time has lapsed since DATE. For `lapsed', the value of `gnus-article-date-lapsed-new-header' says whether the \"X-Sent:\" header should replace the \"Date:\" one, or should be added below it." (interactive (list 'ut t)) - (let* ((header (or header - (message-fetch-field "date") - "")) - (tdate-regexp "^Date:[ \t]\\|^X-Sent:[ \t]") - (date-regexp - (cond - ((not gnus-article-date-lapsed-new-header) - tdate-regexp) - ((eq type 'lapsed) - "^X-Sent:[ \t]") - (t - "^Date:[ \t]"))) - (date (if (vectorp header) (mail-header-date header) - header)) + (let* ((tdate-regexp "^Date:[ \t]\\|^X-Sent:[ \t]") + (date-regexp (cond ((not gnus-article-date-lapsed-new-header) + tdate-regexp) + ((eq type 'lapsed) + "^X-Sent:[ \t]") + (article-lapsed-timer + "^Date:[ \t]") + (t + tdate-regexp))) + (case-fold-search t) + (inhibit-read-only t) (inhibit-point-motion-hooks t) - pos - bface eface) + pos date bface eface) (save-excursion (save-restriction - (article-narrow-to-head) - (when (re-search-forward tdate-regexp nil t) - (setq bface (get-text-property (point-at-bol) 'face) - date (or (get-text-property (point-at-bol) - 'original-date) - date) - eface (get-text-property (1- (point-at-eol)) 'face)) - (forward-line 1)) - (when (and date (not (string= date ""))) + (widen) + (goto-char (point-min)) + (while (or (setq date (get-text-property (setq pos (point)) + 'original-date)) + (when (setq pos (next-single-property-change + (point) 'original-date)) + (setq date (get-text-property pos 'original-date)) + t)) + (narrow-to-region pos (or (text-property-any pos (point-max) + 'original-date nil) + (point-max))) (goto-char (point-min)) - (let ((buffer-read-only nil)) - ;; Delete any old Date headers. - (while (re-search-forward date-regexp nil t) - (if pos - (delete-region (point-at-bol) - (progn (gnus-article-forward-header) - (point))) - (delete-region (point-at-bol) - (progn (gnus-article-forward-header) - (forward-char -1) - (point))) - (setq pos (point)))) - (when (and (not pos) - (re-search-forward tdate-regexp nil t)) - (forward-line 1)) - (gnus-goto-char pos) - (insert (article-make-date-line date (or type 'ut))) - (unless pos - (insert "\n") - (forward-line -1)) - ;; Do highlighting. - (beginning-of-line) - (when (looking-at "\\([^:]+\\): *\\(.*\\)$") - (put-text-property (match-beginning 1) (1+ (match-end 1)) - 'original-date date) - (put-text-property (match-beginning 1) (1+ (match-end 1)) - 'face bface) - (put-text-property (match-beginning 2) (match-end 2) - 'face eface)))))))) + (when (re-search-forward tdate-regexp nil t) + (setq bface (get-text-property (point-at-bol) 'face) + eface (get-text-property (1- (point-at-eol)) 'face))) + (goto-char (point-min)) + (setq pos nil) + ;; Delete any old Date headers. + (while (re-search-forward date-regexp nil t) + (if pos + (delete-region (point-at-bol) (progn + (gnus-article-forward-header) + (point))) + (delete-region (point-at-bol) (progn + (gnus-article-forward-header) + (forward-char -1) + (point))) + (setq pos (point)))) + (when (and (not pos) + (re-search-forward tdate-regexp nil t)) + (forward-line 1)) + (gnus-goto-char pos) + (insert (article-make-date-line date (or type 'ut))) + (unless pos + (insert "\n") + (forward-line -1)) + ;; Do highlighting. + (beginning-of-line) + (when (looking-at "\\([^:]+\\): *\\(.*\\)$") + (put-text-property (match-beginning 1) (1+ (match-end 1)) + 'face bface) + (put-text-property (match-beginning 2) (match-end 2) + 'face eface)) + (put-text-property (point-min) (1- (point-max)) 'original-date date) + (goto-char (point-max)) + (widen)))))) (defun article-make-date-line (date type) "Return a DATE line of TYPE." @@ -2837,22 +2945,21 @@ should replace the \"Date:\" one, or should be added below it." (cond ;; Convert to the local timezone. ((eq type 'local) - (let ((tz (car (current-time-zone time)))) - (format "Date: %s %s%02d%02d" (current-time-string time) - (if (> tz 0) "+" "-") (/ (abs tz) 3600) - (/ (% (abs tz) 3600) 60)))) + (concat "Date: " (message-make-date time))) ;; Convert to Universal Time. ((eq type 'ut) (concat "Date: " - (current-time-string - (let* ((e (parse-time-string date)) - (tm (apply 'encode-time e)) - (ms (car tm)) - (ls (- (cadr tm) (car (current-time-zone time))))) - (cond ((< ls 0) (list (1- ms) (+ ls 65536))) - ((> ls 65535) (list (1+ ms) (- ls 65536))) - (t (list ms ls))))) - " UT")) + (substring + (message-make-date + (let* ((e (parse-time-string date)) + (tm (apply 'encode-time e)) + (ms (car tm)) + (ls (- (cadr tm) (car (current-time-zone time))))) + (cond ((< ls 0) (list (1- ms) (+ ls 65536))) + ((> ls 65535) (list (1+ ms) (- ls 65536))) + (t (list ms ls))))) + 0 -5) + "UT")) ;; Get the original date from the article. ((eq type 'original) (concat "Date: " (if (string-match "\n+$" date) @@ -3012,11 +3119,32 @@ This format is defined by the `gnus-article-time-format' variable." (interactive (list t)) (article-date-ut 'iso8601 highlight)) +(defmacro gnus-article-save-original-date (&rest forms) + "Save the original date as a text property and evaluate FORMS." + `(let* ((case-fold-search t) + (start (progn + (goto-char (point-min)) + (when (and (re-search-forward "^date:[\t\n ]+" nil t) + (not (bolp))) + (match-end 0)))) + (date (when (and start + (re-search-forward "[\t ]*\n\\(?:[^\t ]\\|\\'\\)" + nil t)) + (buffer-substring-no-properties start + (match-beginning 0))))) + (goto-char (point-max)) + (skip-chars-backward "\n") + (put-text-property (point-min) (point) 'original-date date) + ,@forms + (goto-char (point-max)) + (skip-chars-backward "\n") + (put-text-property (point-min) (point) 'original-date date))) + ;; (defun article-show-all () ;; "Show all hidden text in the article buffer." ;; (interactive) ;; (save-excursion -;; (let ((buffer-read-only nil)) +;; (let ((inhibit-read-only t)) ;; (gnus-article-unhide-text (point-min) (point-max))))) (defun article-remove-leading-whitespace () @@ -3024,7 +3152,7 @@ This format is defined by the `gnus-article-time-format' variable." (interactive) (save-excursion (save-restriction - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) (article-narrow-to-head) (goto-char (point-min)) (while (re-search-forward "^[^ :]+: \\([ \t]+\\)" nil t) @@ -3041,7 +3169,7 @@ This format is defined by the `gnus-article-time-format' variable." gnus-article-emphasis-alist) (error)) gnus-emphasis-alist)) - (buffer-read-only nil) + (inhibit-read-only t) (props (append '(article-type emphasis) gnus-hidden-properties)) regexp elem beg invisible visible face) @@ -3433,7 +3561,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is (mm-handle-multipart-ctl-parameter mm-security-handle 'gnus-info))))) (when info - (let (buffer-read-only bface eface) + (let ((inhibit-read-only t) bface eface) (save-restriction (message-narrow-to-head) (goto-char (point-max)) @@ -3643,9 +3771,12 @@ commands: (make-local-variable 'gnus-article-image-alist) (make-local-variable 'gnus-article-charset) (make-local-variable 'gnus-article-ignored-charsets) + ;; Prevent recent Emacsen from displaying non-break space as "\ ". + (set (make-local-variable 'show-nonbreak-escape) nil) (gnus-set-default-directory) (buffer-disable-undo) - (setq buffer-read-only t) + (setq buffer-read-only t + show-trailing-whitespace nil) (set-syntax-table gnus-article-mode-syntax-table) (mm-enable-multibyte) (gnus-run-hooks 'gnus-article-mode-hook)) @@ -3675,14 +3806,19 @@ commands: (mm-enable-multibyte) (setq major-mode 'gnus-original-article-mode) (make-local-variable 'gnus-original-article)) - (if (get-buffer name) + (if (and (get-buffer name) + (with-current-buffer name + (if gnus-article-edit-mode + (if (y-or-n-p "Article mode edit in progress; discard? ") + (progn + (set-buffer-modified-p nil) + (gnus-kill-buffer name) + (message "") + nil) + (error "Action aborted")) + t))) (save-excursion (set-buffer name) - (when (and gnus-article-edit-mode - (buffer-modified-p) - (not - (y-or-n-p "Article mode edit in progress; discard? "))) - (error "Action aborted")) (set (make-local-variable 'gnus-article-edit-mode) nil) (when gnus-article-mime-handles (mm-destroy-parts gnus-article-mime-handles) @@ -3740,7 +3876,7 @@ If ALL-HEADERS is non-nil, no headers are hidden." (when (and (boundp 'transient-mark-mode) transient-mark-mode) (setq mark-active nil)) - (if (not (setq result (let ((buffer-read-only nil)) + (if (not (setq result (let ((inhibit-read-only t)) (gnus-request-article-this-buffer article group)))) ;; There is no such article. @@ -3835,7 +3971,8 @@ If ALL-HEADERS is non-nil, no headers are hidden." ;; Hooks for getting information from the article. ;; This hook must be called before being narrowed. (let ((gnus-article-buffer (current-buffer)) - buffer-read-only) + buffer-read-only + (inhibit-read-only t)) (unless (eq major-mode 'gnus-article-mode) (gnus-article-mode)) (setq buffer-read-only nil @@ -3935,7 +4072,7 @@ General format specifiers can also be used. See Info node (mm-remove-parts handles) (goto-char (point-min)) (or (search-forward "\n\n") (goto-char (point-max))) - (let (buffer-read-only) + (let ((inhibit-read-only t)) (delete-region (point) (point-max)) (mm-display-parts handles)))))) @@ -3946,6 +4083,7 @@ This function is exclusively used by `gnus-mime-save-part-and-strip' and `gnus-mime-delete-part', and not provided at run-time normally." (gnus-article-edit-article `(lambda () + (buffer-disable-undo) (erase-buffer) (let ((mail-parse-charset (or gnus-article-charset ',gnus-newsgroup-charset)) @@ -4039,6 +4177,8 @@ Deleting parts may malfunction or destroy the article; continue? ") (or (mail-content-type-get (mm-handle-disposition data) 'filename) none)) (type (mm-handle-media-type data))) + (unless data + (error "No MIME part under point")) (with-current-buffer (mm-handle-buffer data) (let ((bsize (format "%s" (buffer-size)))) (erase-buffer) @@ -4120,60 +4260,63 @@ Deleting parts may malfunction or destroy the article; continue? ") (mm-merge-handles gnus-article-mime-handles handle)) (gnus-mm-display-part handle)))) -(eval-when-compile - (require 'jka-compr)) - -;; jka-compr.el uses a "sh -c" to direct stderr to err-file, but these days -;; emacs can do that itself. -;; -(defun gnus-mime-jka-compr-maybe-uncompress () - "Uncompress the current buffer if `auto-compression-mode' is enabled. -The uncompress method used is derived from `buffer-file-name'." - (when (and (fboundp 'jka-compr-installed-p) - (jka-compr-installed-p)) - (let ((info (jka-compr-get-compression-info buffer-file-name))) - (when info - (let ((basename (file-name-nondirectory buffer-file-name)) - (args (jka-compr-info-uncompress-args info)) - (prog (jka-compr-info-uncompress-program info)) - (message (jka-compr-info-uncompress-message info)) - (err-file (jka-compr-make-temp-name))) - (if message - (message "%s %s..." message basename)) - (unwind-protect - (unless (memq (apply 'call-process-region - (point-min) (point-max) - prog - t (list t err-file) nil - args) - jka-compr-acceptable-retval-list) - (jka-compr-error prog args basename message err-file)) - (jka-compr-delete-temp-file err-file))))))) - -(defun gnus-mime-copy-part (&optional handle) +(defun gnus-mime-copy-part (&optional handle arg) "Put the MIME part under point into a new buffer. If `auto-compression-mode' is enabled, compressed files like .gz and .bz2 are decompressed." - (interactive) + (interactive (list nil current-prefix-arg)) (gnus-article-check-buffer) - (let* ((handle (or handle (get-text-property (point) 'gnus-data))) - (contents (and handle (mm-get-part handle))) - (base (and handle - (file-name-nondirectory - (or - (mail-content-type-get (mm-handle-type handle) 'name) - (mail-content-type-get (mm-handle-disposition handle) - 'filename) - "*decoded*")))) - (buffer (and base (generate-new-buffer base)))) - (when contents - (switch-to-buffer buffer) - (insert contents) + (unless handle + (setq handle (get-text-property (point) 'gnus-data))) + (when handle + (let ((filename (or (mail-content-type-get (mm-handle-disposition handle) + 'name) + (mail-content-type-get (mm-handle-disposition handle) + 'filename))) + contents dont-decode charset coding-system) + (mm-with-unibyte-buffer + (mm-insert-part handle) + (setq contents (or (condition-case nil + (mm-decompress-buffer filename nil 'sig) + (error + (setq dont-decode t) + nil)) + (buffer-string)))) + (setq filename (cond (filename (file-name-nondirectory filename)) + (dont-decode "*raw data*") + (t "*decoded*"))) + (cond + (dont-decode) + ((not arg) + (unless (setq charset (mail-content-type-get + (mm-handle-type handle) 'charset)) + (unless (setq coding-system (mm-with-unibyte-buffer + (insert contents) + (mm-find-buffer-file-coding-system))) + (setq charset gnus-newsgroup-charset)))) + ((numberp arg) + (setq charset (or (cdr (assq arg + gnus-summary-show-article-charset-alist)) + (mm-read-coding-system "Charset: "))))) + (switch-to-buffer (generate-new-buffer filename)) + (if (or coding-system + (and charset + (setq coding-system (mm-charset-to-coding-system charset)) + (not (eq charset 'ascii)))) + (progn + (mm-enable-multibyte) + (insert (mm-decode-coding-string contents coding-system)) + (setq buffer-file-coding-system + (if (boundp 'last-coding-system-used) + (symbol-value 'last-coding-system-used) + coding-system))) + (mm-disable-multibyte) + (insert contents) + (setq buffer-file-coding-system mm-binary-coding-system)) ;; We do it this way to make `normal-mode' set the appropriate mode. (unwind-protect (progn - (setq buffer-file-name (expand-file-name base)) - (gnus-mime-jka-compr-maybe-uncompress) + (setq buffer-file-name (expand-file-name filename)) (normal-mode)) (setq buffer-file-name nil)) (goto-char (point-min))))) @@ -4204,37 +4347,57 @@ are decompressed." (ps-despool filename))))) (defun gnus-mime-inline-part (&optional handle arg) - "Insert the MIME part under point into the current buffer." + "Insert the MIME part under point into the current buffer. +Compressed files like .gz and .bz2 are decompressed." (interactive (list nil current-prefix-arg)) (gnus-article-check-buffer) - (let* ((handle (or handle (get-text-property (point) 'gnus-data))) - contents charset - (b (point)) - buffer-read-only) - (when handle + (unless handle + (setq handle (get-text-property (point) 'gnus-data))) + (when handle + (let ((b (point)) + (inhibit-read-only t) + contents charset coding-system) (if (and (not arg) (mm-handle-undisplayer handle)) (mm-remove-part handle) - (setq contents (mm-get-part handle)) + (mm-with-unibyte-buffer + (mm-insert-part handle) + (setq contents + (or (mm-decompress-buffer + (or (mail-content-type-get (mm-handle-disposition handle) + 'name) + (mail-content-type-get (mm-handle-disposition handle) + 'filename)) + nil t) + (buffer-string)))) (cond ((not arg) - (setq charset (or (mail-content-type-get - (mm-handle-type handle) 'charset) - gnus-newsgroup-charset))) + (unless (setq charset (mail-content-type-get + (mm-handle-type handle) 'charset)) + (unless (setq coding-system + (mm-with-unibyte-buffer + (insert contents) + (mm-find-buffer-file-coding-system))) + (setq charset gnus-newsgroup-charset)))) ((numberp arg) (if (mm-handle-undisplayer handle) (mm-remove-part handle)) (setq charset (or (cdr (assq arg gnus-summary-show-article-charset-alist)) - (mm-read-coding-system "Charset: "))))) + (mm-read-coding-system "Charset: ")))) + (t + (if (mm-handle-undisplayer handle) + (mm-remove-part handle)))) (forward-line 2) - (mm-insert-inline handle - (if (and charset - (setq charset (mm-charset-to-coding-system - charset)) - (not (eq charset 'ascii))) - (mm-decode-coding-string contents charset) - contents)) + (mm-insert-inline + handle + (if (or coding-system + (and charset + (setq coding-system + (mm-charset-to-coding-system charset)) + (not (eq charset 'ascii)))) + (mm-decode-coding-string contents coding-system) + (mm-string-to-multibyte contents))) (goto-char b))))) (defun gnus-mime-view-part-as-charset (&optional handle arg) @@ -4245,7 +4408,7 @@ specified charset." (let* ((handle (or handle (get-text-property (point) 'gnus-data))) contents charset (b (point)) - buffer-read-only) + (inhibit-read-only t)) (when handle (if (mm-handle-undisplayer handle) (mm-remove-part handle)) @@ -4284,7 +4447,7 @@ If no internal viewer is available, use an external viewer." (mail-parse-ignored-charsets (with-current-buffer gnus-summary-buffer gnus-newsgroup-ignored-charsets)) - buffer-read-only) + (inhibit-read-only t)) (when handle (if (mm-handle-undisplayer handle) (mm-remove-part handle) @@ -4345,8 +4508,8 @@ N is the numerical prefix." (defun gnus-article-mime-match-handle-first (condition) (if condition - (let ((alist gnus-article-mime-handle-alist) ihandle n) - (while (setq ihandle (pop alist)) + (let (n) + (dolist (ihandle gnus-article-mime-handle-alist) (if (and (cond ((functionp condition) (funcall condition (cdr ihandle))) @@ -4387,7 +4550,7 @@ N is the numerical prefix." "Display HANDLE and fix MIME button." (let ((id (get-text-property (point) 'gnus-part)) (point (point)) - buffer-read-only) + (inhibit-read-only t)) (forward-line 1) (prog1 (let ((window (selected-window)) @@ -4513,11 +4676,15 @@ N is the numerical prefix." ;; We have to do this since selecting the window ;; may change the point. So we set the window point. (set-window-point window point))) - (let* ((handles (or ihandles - (mm-dissect-buffer nil gnus-article-loose-mime) - (and gnus-article-emulate-mime - (mm-uu-dissect)))) - buffer-read-only handle name type b e display) + (let ((handles ihandles) + (inhibit-read-only t) + handle) + (cond (handles) + ((setq handles (mm-dissect-buffer nil gnus-article-loose-mime)) + (when gnus-article-emulate-mime + (mm-uu-dissect-text-parts handles))) + (gnus-article-emulate-mime + (setq handles (mm-uu-dissect)))) (when (and (not ihandles) (not gnus-displaying-mime)) ;; Top-level call; we clean up. @@ -4550,7 +4717,8 @@ N is the numerical prefix." (save-restriction (article-goto-body) (narrow-to-region (point-min) (point)) - (gnus-treat-article 'head)))))))) + (gnus-article-save-original-date + (gnus-treat-article 'head))))))))) (defcustom gnus-mime-display-multipart-as-mixed nil "Display \"multipart\" parts as \"multipart/mixed\". @@ -4563,6 +4731,7 @@ If t, it overrides nil values of (defcustom gnus-mime-display-multipart-alternative-as-mixed nil "Display \"multipart/alternative\" parts as \"multipart/mixed\"." + :version "22.1" :group 'gnus-article-mime :type 'boolean) @@ -4572,6 +4741,7 @@ If t, it overrides nil values of If displaying \"text/html\" is discouraged \(see `mm-discouraged-alternatives'\) images or other material inside a \"multipart/related\" part might be overlooked when this variable is nil." + :version "22.1" :group 'gnus-article-mime :type 'boolean) @@ -4676,7 +4846,7 @@ If displaying \"text/html\" is discouraged \(see (forward-line -1) (setq beg (point))) (gnus-article-insert-newline) - (mm-insert-inline handle (mm-get-part handle)) + (mm-display-inline handle) (goto-char (point-max)))) ;; Do highlighting. (save-excursion @@ -4710,7 +4880,7 @@ If displaying \"text/html\" is discouraged \(see (let* ((preferred (or preferred (mm-preferred-alternative handles))) (ihandles handles) (point (point)) - handle buffer-read-only from props begend not-pref) + handle (inhibit-read-only t) from props begend not-pref) (save-window-excursion (save-restriction (when ibegend @@ -4912,7 +5082,7 @@ If given a numerical ARG, move forward ARG pages." (widen) ;; Remove any old next/prev buttons. (when (gnus-visual-p 'page-marker) - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) (gnus-remove-text-with-property 'gnus-prev) (gnus-remove-text-with-property 'gnus-next))) (if @@ -4932,12 +5102,12 @@ If given a numerical ARG, move forward ARG pages." (match-beginning 0) (point))) (when (and (gnus-visual-p 'page-marker) - (not (= (point-min) 1))) + (> (point-min) (save-restriction (widen) (point-min)))) (save-excursion (goto-char (point-min)) (gnus-insert-prev-page-button))) (when (and (gnus-visual-p 'page-marker) - (< (+ (point-max) 2) (buffer-size))) + (< (point-max) (save-restriction (widen) (point-max)))) (save-excursion (goto-char (point-max)) (gnus-insert-next-page-button)))))) @@ -4988,6 +5158,7 @@ Argument LINES specifies lines to be scrolled up." (save-excursion (save-restriction (widen) + (forward-line) (eobp)))) ;Real end-of-buffer? (progn (when gnus-article-over-scroll @@ -5162,7 +5333,7 @@ not have a face in `gnus-article-boring-faces'." (when (eq win (selected-window)) (setq new-sum-point (point) new-sum-start (window-start win) - new-sum-hscroll (window-hscroll win)) + new-sum-hscroll (window-hscroll win))) (when (eq in-buffer (current-buffer)) (setq selected (gnus-summary-select-article)) (set-buffer obuf) @@ -5178,7 +5349,7 @@ not have a face in `gnus-article-boring-faces'." new-sum-point) (set-window-point win new-sum-point) (set-window-start win new-sum-start) - (set-window-hscroll win new-sum-hscroll))))) + (set-window-hscroll win new-sum-hscroll)))) (set-window-configuration owin) (ding)))))) @@ -5231,7 +5402,7 @@ the entire article will be yanked." (interactive "P") (let ((article (cdr gnus-article-current)) contents) - (if (not (gnus-mark-active-p)) + (if (not (gnus-region-active-p)) (with-current-buffer gnus-summary-buffer (gnus-summary-reply (list (list article)) wide)) (setq contents (buffer-substring (point) (mark t))) @@ -5250,7 +5421,7 @@ the entire article will be yanked." (interactive) (let ((article (cdr gnus-article-current)) contents) - (if (not (gnus-mark-active-p)) + (if (not (gnus-region-active-p)) (with-current-buffer gnus-summary-buffer (gnus-summary-followup (list (list article)))) (setq contents (buffer-substring (point) (mark t))) @@ -5389,7 +5560,7 @@ If given a prefix, show the hidden text instead." (backend (car (gnus-find-method-for-group gnus-newsgroup-name))) result - (buffer-read-only nil)) + (inhibit-read-only t)) (if (or (not (listp methods)) (and (symbolp (car methods)) (assq (car methods) nnoo-definition-alist))) @@ -5441,7 +5612,7 @@ If given a prefix, show the hidden text instead." (buffer-disable-undo) (setq major-mode 'gnus-original-article-mode) (setq buffer-read-only t)) - (let (buffer-read-only) + (let ((inhibit-read-only t)) (erase-buffer) (insert-buffer-substring gnus-article-buffer)) (setq gnus-original-article (cons group article))) @@ -5539,7 +5710,7 @@ If given a prefix, show the hidden text instead." ["Body" message-goto-body t] ["Signature" message-goto-signature t])) -(define-derived-mode gnus-article-edit-mode text-mode "Article Edit" +(define-derived-mode gnus-article-edit-mode message-mode "Article Edit" "Major mode for editing articles. This is an extended text-mode. @@ -5578,7 +5749,10 @@ groups." "Start editing the contents of the current article buffer." (let ((winconf (current-window-configuration))) (set-buffer gnus-article-buffer) - (gnus-article-edit-mode) + (let ((message-auto-save-directory + ;; Don't associate the article buffer with a draft file. + nil)) + (gnus-article-edit-mode)) (funcall start-func) (set-buffer-modified-p nil) (gnus-configure-windows 'edit-article) @@ -5669,6 +5843,7 @@ groups." (defcustom gnus-button-valid-fqdn-regexp message-valid-fqdn-regexp "Regular expression that matches a valid FQDN." + :version "22.1" :group 'gnus-article-buttons :type 'regexp) @@ -5676,6 +5851,7 @@ groups." "Function to use for displaying man pages. The function must take at least one argument with a string naming the man page." + :version "22.1" :type '(choice (function-item :tag "Man" manual-entry) (function-item :tag "Woman" woman) (function :tag "Other")) @@ -5686,6 +5862,7 @@ man page." If the default site is too slow, try to find a CTAN mirror, see . See also the variable `gnus-button-handle-ctan'." + :version "22.1" :group 'gnus-article-buttons :link '(custom-manual "(gnus)Group Parameters") :type '(choice (const "http://www.tex.ac.uk/tex-archive/") @@ -5696,12 +5873,14 @@ the variable `gnus-button-handle-ctan'." (defcustom gnus-button-ctan-handler 'browse-url "Function to use for displaying CTAN links. The function must take one argument, the string naming the URL." + :version "22.1" :type '(choice (function-item :tag "Browse Url" browse-url) (function :tag "Other")) :group 'gnus-article-buttons) (defcustom gnus-button-handle-ctan-bogus-regexp "^/?tex-archive/\\|^/" "Bogus strings removed from CTAN URLs." + :version "22.1" :group 'gnus-article-buttons :type '(choice (const "^/?tex-archive/\\|/") (regexp :tag "Other"))) @@ -5715,6 +5894,7 @@ The function must take one argument, the string naming the URL." "\\)") "Regular expression for ctan directories. It should match all directories in the top level of `gnus-ctan-url'." + :version "22.1" :group 'gnus-article-buttons :type 'regexp) @@ -5724,6 +5904,7 @@ It should match all directories in the top level of `gnus-ctan-url'." gnus-button-valid-fqdn-regexp ">?\\)\\b") "Regular expression that matches a message ID or a mail address." + :version "22.1" :group 'gnus-article-buttons :type 'regexp) @@ -5735,6 +5916,7 @@ 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 must return `mid', `mail', `invalid' or `ask'." + :version "22.1" :group 'gnus-article-buttons :type '(choice (function-item :tag "Heuristic function" gnus-button-mid-or-mail-heuristic) @@ -5798,6 +5980,7 @@ must return `mid', `mail', `invalid' or `ask'." A negative RATE indicates a message IDs, whereas a positive indicates a mail address. The REGEXP is processed with `case-fold-search' set to nil." + :version "22.1" :group 'gnus-article-buttons :type '(repeat (cons (number :tag "Rate") (regexp :tag "Regexp")))) @@ -5982,6 +6165,7 @@ positives are possible. Note that you can set this variable local to specific groups. Setting it higher in TeX groups is probably a good idea. See Info node `(gnus)Group Parameters' and the variable `gnus-parameters' on how to set variables in specific groups." + :version "22.1" :group 'gnus-article-buttons :link '(custom-manual "(gnus)Group Parameters") :type 'integer) @@ -5993,6 +6177,7 @@ positives are possible. Note that you can set this variable local to specific groups. Setting it higher in Unix groups is probably a good idea. See Info node `(gnus)Group Parameters' and the variable `gnus-parameters' on how to set variables in specific groups." + :version "22.1" :group 'gnus-article-buttons :link '(custom-manual "(gnus)Group Parameters") :type 'integer) @@ -6004,6 +6189,7 @@ positives are possible. Note that you can set this variable local to specific groups. Setting it higher in Emacs or Gnus related groups is probably a good idea. See Info node `(gnus)Group Parameters' and the variable `gnus-parameters' on how to set variables in specific groups." + :version "22.1" :group 'gnus-article-buttons :link '(custom-manual "(gnus)Group Parameters") :type 'integer) @@ -6013,6 +6199,7 @@ probably a good idea. See Info node `(gnus)Group Parameters' and the variable The higher the number, the more buttons will appear and the more false positives are possible." ;; mail addresses, MIDs, URLs for news, ... + :version "22.1" :group 'gnus-article-buttons :type 'integer) @@ -6021,6 +6208,7 @@ positives are possible." The higher the number, the more buttons will appear and the more false positives are possible." ;; stuff handled by `browse-url' or `gnus-button-embedded-url' + :version "22.1" :group 'gnus-article-buttons :type 'integer) @@ -6089,8 +6277,9 @@ positives are possible." ("M-x[ \t\n]+apropos-documentation[ \t\n]+RET[ \t\n]+\\([^ \t\n]+\\)[ \t\n]+RET" 0 (>= gnus-button-emacs-level 1) gnus-button-handle-apropos-documentation 1) ;; The following entries may lead to many false positives so don't enable - ;; them by default (use a high button level): - ("/\\([a-z][-a-z0-9]+\\.el\\)\\>" + ;; them by default (use a high button level). + ("/\\([a-z][-a-z0-9]+\\.el\\)\\>[^.?]" + ;; Exclude [.?] for URLs in gmane.emacs.cvs 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) @@ -6123,16 +6312,16 @@ positives are possible." (gnus-button-url-regexp 0 (>= gnus-button-browse-level 0) browse-url 0) ;; man pages - ("\\b\\([a-z][a-z]+\\)([1-9])\\W" + ("\\b\\([a-z][a-z]+([1-9])\\)\\W" 0 (and (>= gnus-button-man-level 1) (< gnus-button-man-level 3)) gnus-button-handle-man 1) ;; more man pages: resolv.conf(5), iso_8859-1(7), xterm(1x) - ("\\b\\([a-z][-_.a-z0-9]+\\)([1-9])\\W" + ("\\b\\([a-z][-_.a-z0-9]+([1-9])\\)\\W" 0 (and (>= gnus-button-man-level 3) (< gnus-button-man-level 5)) gnus-button-handle-man 1) ;; even more: Apache::PerlRun(3pm), PDL::IO::FastRaw(3pm), ;; SoWWWAnchor(3iv), XSelectInput(3X11), X(1), X(7) - ("\\b\\([a-z][-+_.:a-z0-9]+\\)([1-9][X1a-z]*)\\W\\|\\b\\(X\\)([1-9])\\W" + ("\\b\\(\\(?:[a-z][-+_.:a-z0-9]+([1-9][X1a-z]*)\\)\\|\\b\\(?:X([1-9])\\)\\)\\W" 0 (>= gnus-button-man-level 5) gnus-button-handle-man 1) ;; MID or mail: To avoid too many false positives we don't try to catch ;; all kind of allowed MIDs or mail addresses. Domain part must contain @@ -6169,13 +6358,15 @@ variable it the real callback function." ("^\\(From\\|Reply-To\\):" ": *\\(.+\\)$" 1 (>= gnus-button-message-level 0) gnus-button-reply 1) ("^\\(Cc\\|To\\):" "[^ \t\n<>,()\"]+@[^ \t\n<>,()\"]+" - 0 (>= gnus-button-message-level 0) gnus-button-mailto 0) + 0 (>= gnus-button-message-level 0) gnus-msg-mail 0) ("^X-[Uu][Rr][Ll]:" gnus-button-url-regexp 0 (>= gnus-button-browse-level 0) browse-url 0) ("^Subject:" gnus-button-url-regexp 0 (>= gnus-button-browse-level 0) browse-url 0) ("^[^:]+:" gnus-button-url-regexp 0 (>= gnus-button-browse-level 0) browse-url 0) + ("^OpenPGP:.*url=" gnus-button-url-regexp + 0 (>= gnus-button-browse-level 0) gnus-button-openpgp 0) ("^[^:]+:" "\\bmailto:\\([-a-z.@_+0-9%=?&/]+\\)" 0 (>= gnus-button-message-level 0) gnus-url-mailto 1) ("^[^:]+:" "\\(<\\(url: \\)?\\(nntp\\|news\\):\\([^>\n ]*\\)>\\)" @@ -6252,9 +6443,8 @@ do the highlighting. See the documentation for those functions." "Highlight article headers as specified by `gnus-header-face-alist'." (interactive) (gnus-with-article-headers - (let ((alist gnus-header-face-alist) - entry regexp header-face field-face from hpoints fpoints) - (while (setq entry (pop alist)) + (let (regexp header-face field-face from hpoints fpoints) + (dolist (entry gnus-header-face-alist) (goto-char (point-min)) (setq regexp (concat "^\\(" (if (string-equal "" (nth 0 entry)) @@ -6352,11 +6542,9 @@ specified by `gnus-button-alist'." "Add buttons to the head of the article." (interactive) (gnus-with-article-headers - (let ((alist gnus-header-button-alist) - entry beg end) - (while alist + (let (beg end) + (dolist (entry gnus-header-button-alist) ;; Each alist entry. - (setq entry (pop alist)) (goto-char (point-min)) (while (re-search-forward (car entry) nil t) ;; Each header matching the entry. @@ -6454,15 +6642,18 @@ specified by `gnus-button-alist'." (cons fun args))))))) (defun gnus-parse-news-url (url) - (let (scheme server group message-id articles) + (let (scheme server port group message-id articles) (with-temp-buffer (insert url) (goto-char (point-min)) (when (looking-at "\\([A-Za-z]+\\):") (setq scheme (match-string 1)) (goto-char (match-end 0))) - (when (looking-at "//\\([^/]+\\)/") + (when (looking-at "//\\([^:/]+\\)\\(:?\\)\\([0-9]+\\)?/") (setq server (match-string 1)) + (setq port (if (stringp (match-string 3)) + (string-to-number (match-string 3)) + (match-string 3))) (goto-char (match-end 0))) (cond @@ -6475,18 +6666,23 @@ specified by `gnus-button-alist'." (setq group (match-string 1))) (t (error "Unknown news URL syntax")))) - (list scheme server group message-id articles))) + (list scheme server port group message-id articles))) (defun gnus-button-handle-news (url) "Fetch a news URL." - (destructuring-bind (scheme server group message-id articles) + (destructuring-bind (scheme server port group message-id articles) (gnus-parse-news-url url) (cond (message-id (save-excursion (set-buffer gnus-summary-buffer) (if server - (let ((gnus-refer-article-method (list (list 'nntp server)))) + (let ((gnus-refer-article-method + (nconc (list (list 'nntp server)) + gnus-refer-article-method)) + (nntp-port-number (or port "nntp"))) + (gnus-message 7 "Fetching %s with %s" + message-id gnus-refer-article-method) (gnus-summary-refer-article message-id)) (gnus-summary-refer-article message-id)))) (group @@ -6494,6 +6690,10 @@ specified by `gnus-button-alist'." (defun gnus-button-handle-man (url) "Fetch a man page." + (gnus-message 9 "`%s' `%s'" gnus-button-man-handler url) + (when (eq gnus-button-man-handler 'woman) + (setq url (gnus-replace-in-string url "([1-9][X1a-z]*).*\\'" ""))) + (gnus-message 9 "`%s' `%s'" gnus-button-man-handler url) (funcall gnus-button-man-handler url)) (defun gnus-button-handle-info-url (url) @@ -6518,10 +6718,10 @@ specified by `gnus-button-alist'." (if (string-match "\\([^#]+\\)#?\\(.*\\)" url) (gnus-info-find-node (concat "(" - (gnus-url-unhex-string + (gnus-url-unhex-string (match-string 1 url)) ")" - (or (gnus-url-unhex-string + (or (gnus-url-unhex-string (match-string 2 url)) "Top"))) (error "Can't parse %s" url))) @@ -6537,6 +6737,13 @@ specified by `gnus-button-alist'." (Info-directory) (Info-menu url)) +(defun gnus-button-openpgp (url) + "Retrieve and add an OpenPGP key given URL from an OpenPGP header." + (with-temp-buffer + (mm-url-insert-file-contents-external url) + (pgg-snarf-keys-region (point-min) (point-max)) + (pgg-display-output-buffer nil nil nil))) + (defun gnus-button-message-id (message-id) "Fetch MESSAGE-ID." (with-current-buffer gnus-summary-buffer @@ -6625,13 +6832,16 @@ specified by `gnus-button-alist'." (defvar gnus-next-page-map (let ((map (make-sparse-keymap))) + (unless (>= emacs-major-version 21) + ;; XEmacs doesn't care. + (set-keymap-parent map gnus-article-mode-map)) (define-key map gnus-mouse-2 'gnus-button-next-page) (define-key map "\r" 'gnus-button-next-page) map)) (defun gnus-insert-prev-page-button () (let ((b (point)) - (buffer-read-only nil)) + (inhibit-read-only t)) (gnus-eval-format gnus-prev-page-line-format nil `(keymap ,gnus-prev-page-map @@ -6664,7 +6874,7 @@ specified by `gnus-button-alist'." (defun gnus-insert-next-page-button () (let ((b (point)) - (buffer-read-only nil)) + (inhibit-read-only t)) (gnus-eval-format gnus-next-page-line-format nil `(keymap ,gnus-next-page-map gnus-next t @@ -6699,7 +6909,7 @@ specified by `gnus-button-alist'." "List of methods used to decode headers. This variable is a list of FUNCTION or (REGEXP . FUNCTION). If item -is FUNCTION, FUNCTION will be apply to all newsgroups. If item is a +is FUNCTION, FUNCTION will be applied to all newsgroups. If item is a \(REGEXP . FUNCTION), FUNCTION will be only apply to the newsgroups whose names match REGEXP. @@ -6838,7 +7048,7 @@ For example: (setq references (or (mail-header-references gnus-current-headers) "")) (set-buffer gnus-article-buffer) - (let* ((buffer-read-only nil) + (let* ((inhibit-read-only t) (headers (mapcar (lambda (field) (and (save-restriction @@ -6916,7 +7126,7 @@ For example: (defun gnus-mime-security-verify-or-decrypt (handle) (mm-remove-parts (cdr handle)) (let ((region (mm-handle-multipart-ctl-parameter handle 'gnus-region)) - point buffer-read-only) + point (inhibit-read-only t)) (if region (goto-char (car region))) (save-restriction @@ -6946,7 +7156,7 @@ For example: (not (get-text-property (point) 'gnus-mime-details))) (gnus-mime-security-button-line-format (get-text-property (point) 'gnus-line-format)) - buffer-read-only) + (inhibit-read-only t)) (forward-char -1) (while (eq (get-text-property (point) 'gnus-line-format) gnus-mime-security-button-line-format) @@ -7056,4 +7266,5 @@ For example: (run-hooks 'gnus-art-load-hook) +;;; arch-tag: 2654516f-6279-48f9-a83b-05c1fa450c33 ;;; gnus-art.el ends here diff --git a/lisp/gnus-async.el b/lisp/gnus-async.el index f3a43c9..1b0074d 100644 --- a/lisp/gnus-async.el +++ b/lisp/gnus-async.el @@ -32,6 +32,10 @@ (require 'gnus-sum) (require 'nntp) +(eval-when-compile + (when (featurep 'xemacs) + (require 'timer-funcs))) + (defgroup gnus-asynchronous nil "Support for asynchronous operations." :group 'gnus) @@ -269,28 +273,29 @@ It should return non-nil if the article is to be prefetched." (nntp-server-buffer (current-buffer)) (nntp-have-messaged nil) (tries 0)) - (condition-case nil - ;; FIXME: we could stop waiting after some - ;; timeout, but this is the wrong place to do it. - ;; rather than checking time-spent-waiting, we - ;; should check time-since-last-output, which - ;; needs to be done in nntp.el. - (while (eq article gnus-async-current-prefetch-article) - (incf tries) - (when (nntp-accept-process-output proc) - (setq tries 0)) - (when (and (not nntp-have-messaged) - (= tries 3)) - (gnus-message 5 "Waiting for async article...") - (setq nntp-have-messaged t))) - (quit - ;; if the user interrupted on a slow/hung connection, - ;; do something friendly. - (when (> tries 3) - (setq gnus-async-current-prefetch-article nil)) - (signal 'quit nil))) - (when nntp-have-messaged - (gnus-message 5 ""))))) + (when proc + (condition-case nil + ;; FIXME: we could stop waiting after some + ;; timeout, but this is the wrong place to do it. + ;; rather than checking time-spent-waiting, we + ;; should check time-since-last-output, which + ;; needs to be done in nntp.el. + (while (eq article gnus-async-current-prefetch-article) + (incf tries) + (when (nntp-accept-process-output proc) + (setq tries 0)) + (when (and (not nntp-have-messaged) + (= tries 3)) + (gnus-message 5 "Waiting for async article...") + (setq nntp-have-messaged t))) + (quit + ;; if the user interrupted on a slow/hung connection, + ;; do something friendly. + (when (> tries 3) + (setq gnus-async-current-prefetch-article nil)) + (signal 'quit nil))) + (when nntp-have-messaged + (gnus-message 5 "")))))) (defun gnus-async-delete-prefetched-entry (entry) "Delete ENTRY from buffer and alist." @@ -306,13 +311,11 @@ It should return non-nil if the article is to be prefetched." "Remove all articles belonging to GROUP from the prefetch buffer." (when (and (gnus-group-asynchronous-p group) (memq 'exit gnus-prefetched-article-deletion-strategy)) - (let ((alist gnus-async-article-alist)) - (save-excursion - (gnus-async-set-buffer) - (while alist - (when (equal group (nth 3 (car alist))) - (gnus-async-delete-prefetched-entry (car alist))) - (pop alist)))))) + (save-excursion + (gnus-async-set-buffer) + (dolist (entry gnus-async-article-alist) + (when (equal group (nth 3 entry)) + (gnus-async-delete-prefetched-entry entry)))))) (defun gnus-async-prefetched-article-entry (group article) "Return the entry for ARTICLE in GROUP iff it has been prefetched." @@ -374,4 +377,5 @@ It should return non-nil if the article is to be prefetched." (provide 'gnus-async) +;;; arch-tag: fee61de5-3ea2-4de6-8578-2f90ce89391d ;;; gnus-async.el ends here diff --git a/lisp/gnus-audio.el b/lisp/gnus-audio.el index 785a936..1171713 100644 --- a/lisp/gnus-audio.el +++ b/lisp/gnus-audio.el @@ -146,4 +146,5 @@ (run-hooks 'gnus-audio-load-hook) +;;; arch-tag: 6f129e78-3416-4fc9-973f-6cf5ac8d654b ;;; gnus-audio.el ends here diff --git a/lisp/gnus-bcklg.el b/lisp/gnus-bcklg.el index 458bd2d..e6564c4 100644 --- a/lisp/gnus-bcklg.el +++ b/lisp/gnus-bcklg.el @@ -160,4 +160,5 @@ (provide 'gnus-bcklg) +;;; arch-tag: 66259e56-505a-4bba-8a0d-3552c5b94e39 ;;; gnus-bcklg.el ends here diff --git a/lisp/gnus-cache.el b/lisp/gnus-cache.el index d3e417d..f54236a 100644 --- a/lisp/gnus-cache.el +++ b/lisp/gnus-cache.el @@ -1,6 +1,6 @@ ;;; gnus-cache.el --- cache interface for Gnus -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 -;; Free Software Foundation, Inc. +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, +;; 2004, 2005 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -141,8 +141,8 @@ it's not cached." (delete-directory (file-name-directory overview-file)) (error))) - (gnus-cache-update-overview-total-fetched-for (car gnus-cache-buffer) - overview-file))) + (gnus-cache-update-overview-total-fetched-for + (car gnus-cache-buffer) overview-file))) ;; Kill the buffer -- it's either unmodified or saved. (gnus-kill-buffer buffer) (setq gnus-cache-buffer nil)))) @@ -152,7 +152,8 @@ it's not cached." (when (and (or force (not (eq gnus-use-cache 'passive))) (numberp article) (> article 0)) ; This might be a dummy article. - (let ((number article) file headers) + (let ((number article) + file headers lines-chars) ;; If this is a virtual group, we find the real group. (when (gnus-virtual-group-p group) (let ((result (nnvirtual-find-group-art @@ -182,9 +183,12 @@ it's not cached." (let ((coding-system-for-write gnus-cache-coding-system)) (gnus-write-buffer file) (gnus-cache-update-file-total-fetched-for group file)) + (setq lines-chars (nnheader-get-lines-and-char)) (nnheader-remove-body) (setq headers (nnheader-parse-naked-head)) (mail-header-set-number headers number) + (mail-header-set-lines headers (car lines-chars)) + (mail-header-set-chars headers (cadr lines-chars)) (gnus-cache-change-buffer group) (set-buffer (cdr gnus-cache-buffer)) (goto-char (point-max)) @@ -237,12 +241,10 @@ it's not cached." (defun gnus-cache-possibly-remove-articles-1 () "Possibly remove some of the removable articles." (when (gnus-cache-fully-p gnus-newsgroup-name) - (let ((articles gnus-cache-removable-articles) - (cache-articles gnus-newsgroup-cached) - article) + (let ((cache-articles gnus-newsgroup-cached)) (gnus-cache-change-buffer gnus-newsgroup-name) - (while articles - (when (memq (setq article (pop articles)) cache-articles) + (dolist (article gnus-cache-removable-articles) + (when (memq article cache-articles) ;; The article was in the cache, so we see whether we are ;; supposed to remove it from the cache. (gnus-cache-possibly-remove-article @@ -326,9 +328,8 @@ it's not cached." If not given a prefix, use the process marked articles instead. Returns the list of articles entered." (interactive "P") - (let ((articles (gnus-summary-work-articles n)) - article out) - (while (setq article (pop articles)) + (let (out) + (dolist (article (gnus-summary-work-articles n)) (gnus-summary-remove-process-mark article) (if (natnump article) (when (gnus-cache-possibly-enter-article @@ -349,10 +350,8 @@ If not given a prefix, use the process marked articles instead. Returns the list of articles removed." (interactive "P") (gnus-cache-change-buffer gnus-newsgroup-name) - (let ((articles (gnus-summary-work-articles n)) - article out) - (while articles - (setq article (pop articles)) + (let (out) + (dolist (article (gnus-summary-work-articles n)) (gnus-summary-remove-process-mark article) (when (gnus-cache-possibly-remove-article article nil nil nil t) (when gnus-newsgroup-agentized @@ -423,6 +422,7 @@ Returns the list of articles removed." (and (not unread) (not ticked) (not dormant) (memq 'read class)))) (defun gnus-cache-file-name (group article) + (setq group (gnus-group-decoded-name group)) (expand-file-name (if (stringp article) article (int-to-string article)) (file-name-as-directory @@ -539,24 +539,23 @@ Returns the list of articles removed." (defun gnus-cache-braid-heads (group cached) (let ((cache-buf (gnus-get-buffer-create " *gnus-cache*"))) - (save-excursion - (set-buffer cache-buf) + (with-current-buffer cache-buf (erase-buffer)) (set-buffer nntp-server-buffer) (goto-char (point-min)) - (while cached + (dolist (entry cached) (while (and (not (eobp)) (looking-at "2.. +\\([0-9]+\\) ") (< (progn (goto-char (match-beginning 1)) (read (current-buffer))) - (car cached))) + entry)) (search-forward "\n.\n" nil 'move)) (beginning-of-line) (set-buffer cache-buf) (erase-buffer) (let ((coding-system-for-read gnus-cache-coding-system)) - (insert-file-contents (gnus-cache-file-name group (car cached)))) + (insert-file-contents (gnus-cache-file-name group entry))) (goto-char (point-min)) (insert "220 ") (princ (car cached) (current-buffer)) @@ -566,8 +565,7 @@ Returns the list of articles removed." (forward-char -1) (insert ".") (set-buffer nntp-server-buffer) - (insert-buffer-substring cache-buf) - (setq cached (cdr cached))) + (insert-buffer-substring cache-buf)) (kill-buffer cache-buf))) ;;;###autoload @@ -691,13 +689,12 @@ If LOW, update the lower bound instead." (gnus-sethash group (cons (car nums) (gnus-last-element nums)) gnus-cache-active-hashtb)) ;; Go through all the other files. - (while alphs - (when (and (file-directory-p (car alphs)) + (dolist (file alphs) + (when (and (file-directory-p file) (not (string-match "^\\." - (file-name-nondirectory (car alphs))))) + (file-name-nondirectory file)))) ;; We descend directories. - (gnus-cache-generate-active (car alphs))) - (setq alphs (cdr alphs))) + (gnus-cache-generate-active file))) ;; Write the new active file. (when top (gnus-cache-write-active t) @@ -763,7 +760,7 @@ next enabled. Depends upon the caller to determine whether group renaming is sup disabled, as the old cache files would corrupt gnus when the cache was next enabled. Depends upon the caller to determine whether group deletion is supported." (let ((dir (gnus-cache-file-name group ""))) - (gnus-delete-file dir)) + (gnus-delete-directory dir)) (gnus-cache-delete-group-total-fetched-for group) @@ -855,4 +852,5 @@ next enabled. Depends upon the caller to determine whether group deletion is sup (provide 'gnus-cache) +;;; arch-tag: 05a79442-8c58-4e65-bd0a-3cbb1b89a33a ;;; gnus-cache.el ends here diff --git a/lisp/gnus-cite.el b/lisp/gnus-cite.el index 56aa1a8..f25d816 100644 --- a/lisp/gnus-cite.el +++ b/lisp/gnus-cite.el @@ -1,6 +1,6 @@ ;;; gnus-cite.el --- parse citations in articles for Gnus -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Per Abhiddenware @@ -124,9 +124,18 @@ The text matching the first grouping will be used as a button." (defcustom gnus-cite-unsightly-citation-regexp "^-----Original Message-----\nFrom: \\(.+\n\\)+\n" "Regexp matching Microsoft-type rest-of-message citations." + :version "22.1" :group 'gnus-cite :type 'regexp) +(defcustom gnus-cite-ignore-quoted-from t + "Non-nil means don't regard lines beginning with \">From \" as cited text. +Those lines may have been quoted by MTAs in order not to mix up with +the envelope From line." + :version "22.1" + :group 'gnus-cite + :type 'boolean) + (defface gnus-cite-attribution-face '((t (:italic t))) "Face used for attribution lines.") @@ -134,6 +143,7 @@ The text matching the first grouping will be used as a button." (defcustom gnus-cite-attribution-face 'gnus-cite-attribution-face "Face used for attribution lines. It is merged with the face for the cited text belonging to the attribution." + :version "22.1" :group 'gnus-cite :type 'face) @@ -739,6 +749,13 @@ See also the documentation for `gnus-article-highlight-citation'." ;; Ignore very long prefixes. (when (> end (+ begin gnus-cite-max-prefix)) (setq end (+ begin gnus-cite-max-prefix))) + ;; Ignore quoted envelope From_. + (when (and gnus-cite-ignore-quoted-from + (prog2 + (setq case-fold-search nil) + (looking-at ">From ") + (setq case-fold-search t))) + (setq end (1+ begin))) (while (re-search-forward prefix-regexp (1- end) t) ;; Each prefix. (setq end (match-end 0) @@ -1057,4 +1074,5 @@ See also the documentation for `gnus-article-highlight-citation'." ;; coding: iso-8859-1 ;; End: +;;; arch-tag: 1997b044-6067-471e-8c8f-dc903093098a ;;; gnus-cite.el ends here diff --git a/lisp/gnus-cus.el b/lisp/gnus-cus.el index 21086de..a5e09ca 100644 --- a/lisp/gnus-cus.el +++ b/lisp/gnus-cus.el @@ -1,6 +1,6 @@ ;;; gnus-cus.el --- customization commands for Gnus ;; -;; Copyright (C) 1996, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1996, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Per Abrahamsen @@ -915,7 +915,8 @@ articles in the thread. (val (,field info)) (deflt (if (,field defaults) (concat " [" (gnus-trim-whitespace - (pp-to-string (,field defaults))) "]"))) + (gnus-pp-to-string (,field defaults))) + "]"))) symb) (if (eq (car type) 'radio) @@ -1057,4 +1058,5 @@ articles in the thread. (provide 'gnus-cus) +;;; arch-tag: a37c285a-49bc-4235-8244-804536effeaf ;;; gnus-cus.el ends here diff --git a/lisp/gnus-delay.el b/lisp/gnus-delay.el index 67f74ce..371d9e0 100644 --- a/lisp/gnus-delay.el +++ b/lisp/gnus-delay.el @@ -37,10 +37,12 @@ (require 'nndraft) (require 'gnus-draft) +(autoload 'parse-time-string "parse-time" nil nil) ;;;###autoload (defgroup gnus-delay nil "Arrange for sending postings later." + :version "22.1" :group 'gnus) (defcustom gnus-delay-group "delayed" @@ -60,6 +62,7 @@ (defcustom gnus-delay-default-hour 8 "*If deadline is given as date, then assume this time of day." + :version "22.1" :type 'integer :group 'gnus-delay) @@ -192,4 +195,5 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil." ;; coding: iso-8859-1 ;; End: +;;; arch-tag: fb2ad634-a897-4142-a503-f5991ec2349d ;;; gnus-delay.el ends here diff --git a/lisp/gnus-demon.el b/lisp/gnus-demon.el index a8515b8..86ba34e 100644 --- a/lisp/gnus-demon.el +++ b/lisp/gnus-demon.el @@ -37,9 +37,11 @@ (require 'gnus-util) (eval-and-compile (if (featurep 'xemacs) - (require 'itimer) + (require 'timer-funcs) (require 'timer))) +(autoload 'parse-time-string "parse-time" nil nil) + (defgroup gnus-demon nil "Demonic behaviour." :group 'gnus) @@ -322,4 +324,5 @@ minutes, the connection is closed." (provide 'gnus-demon) +;;; arch-tag: 8dd5cd3d-6ae4-46b4-9b15-f5fca09fd392 ;;; gnus-demon.el ends here diff --git a/lisp/gnus-diary.el b/lisp/gnus-diary.el index 5a0d1c0..ef83122 100644 --- a/lisp/gnus-diary.el +++ b/lisp/gnus-diary.el @@ -102,7 +102,8 @@ (require 'gnus-art) (defgroup gnus-diary nil - "Utilities on top of the nndiary backend for Gnus.") + "Utilities on top of the nndiary backend for Gnus." + :version "22.1") (defcustom gnus-diary-summary-line-format "%U%R%z %uD: %(%s%) (%ud)\n" "*Summary line format for nndiary groups." @@ -457,4 +458,5 @@ If ARG (or prefix) is non-nil, force prompting for all fields." (provide 'gnus-diary) +;;; arch-tag: 98467e70-337e-4ddc-b92d-45d403ff1b4b ;;; gnus-diary.el ends here diff --git a/lisp/gnus-dired.el b/lisp/gnus-dired.el index 3937874..3423cf6 100644 --- a/lisp/gnus-dired.el +++ b/lisp/gnus-dired.el @@ -203,4 +203,5 @@ file to save in." (provide 'gnus-dired) +;;; arch-tag: 44737731-e445-4638-a31e-713c7590ec76 ;;; gnus-dired.el ends here diff --git a/lisp/gnus-draft.el b/lisp/gnus-draft.el index 12fa9c2..2eca0ff 100644 --- a/lisp/gnus-draft.el +++ b/lisp/gnus-draft.el @@ -145,6 +145,7 @@ message-setup-hook)) (gnus-agent-queue-mail (and (not is-queue) gnus-agent-queue-mail)) + (rfc2047-encode-encoded-words nil) type method move-to) (gnus-draft-setup article (or group "nndraft:queue")) ;; We read the meta-information that says how and where @@ -271,12 +272,13 @@ `(lambda (arg) (gnus-post-method arg ,(car ga)))) (unless (equal (cadr ga) "") - (message-add-action - `(progn - (gnus-add-mark ,(car ga) 'replied ,(cadr ga)) - (gnus-request-set-mark ,(car ga) (list (list (list ,(cadr ga)) - 'add '(reply))))) - 'send)))))) + (dolist (article (cdr ga)) + (message-add-action + `(progn + (gnus-add-mark ,(car ga) 'replied ,article) + (gnus-request-set-mark ,(car ga) (list (list (list ,article) + 'add '(reply))))) + 'send))))))) (defun gnus-draft-article-sendable-p (article) "Say whether ARTICLE is sendable." @@ -284,4 +286,5 @@ (provide 'gnus-draft) +;;; arch-tag: 3d92af58-8c97-4a5c-9db4-a98e85198022 ;;; gnus-draft.el ends here diff --git a/lisp/gnus-dup.el b/lisp/gnus-dup.el index a2b5544..98d20a6 100644 --- a/lisp/gnus-dup.el +++ b/lisp/gnus-dup.el @@ -1,5 +1,5 @@ ;;; gnus-dup.el --- suppression of duplicate articles in Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -84,10 +84,8 @@ seen in the same session." (setq gnus-dup-list nil)) (setq gnus-dup-hashtb (gnus-make-hashtable gnus-duplicate-list-length)) ;; Enter all Message-IDs into the hash table. - (let ((list gnus-dup-list) - (obarray gnus-dup-hashtb)) - (while list - (intern (pop list))))) + (let ((obarray gnus-dup-hashtb)) + (mapc 'intern gnus-dup-list))) (defun gnus-dup-read () "Read the duplicate suppression list." @@ -112,11 +110,10 @@ seen in the same session." (unless gnus-dup-list (gnus-dup-open)) (setq gnus-dup-list-dirty t) ; mark list for saving - (let ((data gnus-newsgroup-data) - datum msgid) + (let (msgid) ;; Enter the Message-IDs of all read articles into the list ;; and hash table. - (while (setq datum (pop data)) + (dolist (datum gnus-newsgroup-data) (when (and (not (gnus-data-pseudo-p datum)) (> (gnus-data-number datum) 0) (not (memq (gnus-data-number datum) gnus-newsgroup-unreads)) @@ -129,6 +126,7 @@ seen in the same session." ;; Chop off excess Message-IDs from the list. (let ((end (nthcdr gnus-duplicate-list-length gnus-dup-list))) (when end + (mapc (lambda (id) (unintern id gnus-dup-hashtb)) (cdr end)) (setcdr end nil)))) (defun gnus-dup-suppress-articles () @@ -136,11 +134,10 @@ seen in the same session." (unless gnus-dup-list (gnus-dup-open)) (gnus-message 6 "Suppressing duplicates...") - (let ((headers gnus-newsgroup-headers) - (auto (and gnus-newsgroup-auto-expire + (let ((auto (and gnus-newsgroup-auto-expire (memq gnus-duplicate-mark gnus-auto-expirable-marks))) - number header) - (while (setq header (pop headers)) + number) + (dolist (header gnus-newsgroup-headers) (when (and (intern-soft (mail-header-id header) gnus-dup-hashtb) (gnus-summary-article-unread-p (mail-header-number header))) (setq gnus-newsgroup-unreads @@ -154,7 +151,8 @@ seen in the same session." (defun gnus-dup-unsuppress-article (article) "Stop suppression of ARTICLE." - (let ((id (mail-header-id (gnus-data-header (gnus-data-find article))))) + (let* ((header (gnus-data-header (gnus-data-find article))) + (id (when header (mail-header-id header)))) (when id (setq gnus-dup-list-dirty t) (setq gnus-dup-list (delete id gnus-dup-list)) @@ -162,4 +160,5 @@ seen in the same session." (provide 'gnus-dup) +;;; arch-tag: 903e94db-7b00-4d19-83ee-cf34a81fa5fb ;;; gnus-dup.el ends here diff --git a/lisp/gnus-eform.el b/lisp/gnus-eform.el index 042f8c3..ae5deba 100644 --- a/lisp/gnus-eform.el +++ b/lisp/gnus-eform.el @@ -1,5 +1,5 @@ ;;; gnus-eform.el --- a mode for editing forms for Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -106,7 +106,7 @@ of the buffer." (insert ";; Type `C-c C-c' after you've finished editing.\n") (insert "\n") (let ((p (point))) - (pp form (current-buffer)) + (gnus-pp form) (insert "\n") (goto-char p)))) @@ -130,4 +130,5 @@ of the buffer." (provide 'gnus-eform) +;;; arch-tag: ef50678c-2c28-49ef-affc-e53b3b2c0bf6 ;;; gnus-eform.el ends here diff --git a/lisp/gnus-ems.el b/lisp/gnus-ems.el index 6d0a617..296a4ca 100644 --- a/lisp/gnus-ems.el +++ b/lisp/gnus-ems.el @@ -44,13 +44,10 @@ (eval-and-compile (autoload 'gnus-xmas-define "gnus-xmas") (autoload 'gnus-xmas-redefine "gnus-xmas") - (autoload 'appt-select-lowest-window "appt") (autoload 'gnus-get-buffer-create "gnus") (autoload 'nnheader-find-etc-directory "nnheader")) (autoload 'smiley-region "smiley") -;; Fixme: shouldn't require message -(autoload 'message-text-with-property "message") (defun gnus-kill-all-overlays () "Delete all overlays in the current buffer." @@ -141,6 +138,18 @@ gnus-mouse-face-prop gnus-mouse-face) (insert " " gnus-tmp-subject-or-nil "\n"))))) +;; Clone of `appt-select-lowest-window' in appt.el. +(defun gnus-select-lowest-window () +"Select the lowest window on the frame." + (let ((lowest-window (selected-window)) + (bottom-edge (nth 3 (window-edges)))) + (walk-windows (lambda (w) + (let ((next-bottom-edge (nth 3 (window-edges w)))) + (when (< bottom-edge next-bottom-edge) + (setq bottom-edge next-bottom-edge + lowest-window w))))) + (select-window lowest-window))) + (defun gnus-region-active-p () "Say whether the region is active." (and (boundp 'transient-mark-mode) @@ -212,14 +221,28 @@ glyph)) (defun gnus-remove-image (image &optional category) - (dolist (position (message-text-with-property 'display)) - (when (and (equal (get-text-property position 'display) image) - (equal (get-text-property position 'gnus-image-category) + "Remove the image matching IMAGE and CATEGORY found first." + (let ((start (point-min)) + val end) + (while (and (not end) + (or (setq val (get-text-property start 'display)) + (and (setq start + (next-single-property-change start 'display)) + (setq val (get-text-property start 'display))))) + (setq end (or (next-single-property-change start 'display) + (point-max))) + (if (and (equal val image) + (equal (get-text-property start 'gnus-image-category) category)) - (put-text-property position (1+ position) 'display nil) - (when (get-text-property position 'gnus-image-text-deletable) - (delete-region position (1+ position)))))) + (progn + (put-text-property start end 'display nil) + (when (get-text-property start 'gnus-image-text-deletable) + (delete-region start end))) + (unless (= end (point-max)) + (setq start end + end nil)))))) (provide 'gnus-ems) +;;; arch-tag: e7360b45-14b5-4171-aa39-69a44aed3cdb ;;; gnus-ems.el ends here diff --git a/lisp/gnus-fun.el b/lisp/gnus-fun.el index 1892e6a..5dc28c6 100644 --- a/lisp/gnus-fun.el +++ b/lisp/gnus-fun.el @@ -34,11 +34,13 @@ (defcustom gnus-x-face-directory (expand-file-name "x-faces" gnus-directory) "*Directory where X-Face PBM files are stored." + :version "22.1" :group 'gnus-fun :type 'directory) (defcustom gnus-convert-pbm-to-x-face-command "pbmtoxbm %s | compface" "Command for converting a PBM to an X-Face." + :version "22.1" :group 'gnus-fun :type 'string) @@ -46,6 +48,7 @@ "Command for converting an image to an X-Face. By default it takes a GIF filename and output the X-Face header data on stdout." + :version "22.1" :group 'gnus-fun :type 'string) @@ -53,6 +56,7 @@ on stdout." "Command for converting an image to an Face. By default it takes a JPEG filename and output the Face header data on stdout." + :version "22.1" :group 'gnus-fun :type 'string) @@ -275,4 +279,5 @@ colors of the displayed X-Faces." (provide 'gnus-fun) +;;; arch-tag: 9d000a69-15cc-4491-9dc0-4627484f50c1 ;;; gnus-fun.el ends here diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index 1a2140e..c3a51b1 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -440,12 +440,20 @@ For example: (defcustom gnus-group-jump-to-group-prompt nil "Default prompt for `gnus-group-jump-to-group'. -If non-nil, the value should be a string, e.g. \"nnml:\", -in which case `gnus-group-jump-to-group' offers \"Group: nnml:\" -in the minibuffer prompt." + +If non-nil, the value should be a string or an alist. If it is a string, +e.g. \"nnml:\", in which case `gnus-group-jump-to-group' offers \"Group: +nnml:\" in the minibuffer prompt. + +If it is an alist, it must consist of \(NUMBER . PROMPT\) pairs, for example: +\((1 . \"\") (2 . \"nnfolder+archive:\")). The element with number 0 is +used when no prefix argument is given to `gnus-group-jump-to-group'." + :version "22.1" :group 'gnus-group-various :type '(choice (string :tag "Prompt string") - (const :tag "Empty" nil))) + (const :tag "Empty" nil) + (repeat (cons (integer :tag "Argument") + (string :tag "Prompt string"))))) (defvar gnus-group-listing-limit 1000 "*A limit of the number of groups when listing. @@ -489,16 +497,25 @@ simple manner.") (?T (gnus-range-length (cdr (assq 'tick gnus-tmp-marked))) ?d) (?i (+ (gnus-range-length (cdr (assq 'dormant gnus-tmp-marked))) (gnus-range-length (cdr (assq 'tick gnus-tmp-marked)))) ?d) - (?g gnus-tmp-group ?s) + (?g (if (boundp 'gnus-tmp-decoded-group) + gnus-tmp-decoded-group + gnus-tmp-group) + ?s) (?G gnus-tmp-qualified-group ?s) - (?c (gnus-short-group-name gnus-tmp-group) ?s) + (?c (gnus-short-group-name (if (boundp 'gnus-tmp-decoded-group) + gnus-tmp-decoded-group + gnus-tmp-group)) + ?s) (?C gnus-tmp-comment ?s) (?D gnus-tmp-newsgroup-description ?s) (?o gnus-tmp-moderated ?c) (?O gnus-tmp-moderated-string ?s) (?p gnus-tmp-process-marked ?c) (?s gnus-tmp-news-server ?s) - (?n gnus-tmp-news-method ?s) + (?n ,(if (featurep 'xemacs) + '(symbol-name gnus-tmp-news-method) + 'gnus-tmp-news-method) + ?s) (?P gnus-group-indentation ?s) (?E gnus-tmp-group-icon ?s) (?B gnus-tmp-summary-live ?c) @@ -596,6 +613,7 @@ simple manner.") "\M-e" gnus-group-edit-group-method "^" gnus-group-enter-server-mode gnus-mouse-2 gnus-mouse-pick-group + [follow-link] mouse-face "<" beginning-of-buffer ">" end-of-buffer "\C-c\C-b" gnus-bug @@ -1033,7 +1051,8 @@ The following commands are available: (use-local-map gnus-group-mode-map) (buffer-disable-undo) (setq truncate-lines t) - (setq buffer-read-only t) + (setq buffer-read-only t + show-trailing-whitespace nil) (gnus-set-default-directory) (gnus-update-format-specifications nil 'group 'group-mode) (gnus-update-group-mark-positions) @@ -1055,7 +1074,8 @@ The following commands are available: (gnus-group-insert-group-line "dummy.group" 0 nil 0 nil) (goto-char (point-min)) (setq gnus-group-mark-positions - (list (cons 'process (and (search-forward "\200" nil t) + (list (cons 'process (and (search-forward + (mm-string-as-multibyte "\200") nil t) (- (point) 2)))))))) (defun gnus-mouse-pick-group (e) @@ -1441,8 +1461,8 @@ if it is a string, only list groups matching REGEXP." (point) (prog1 (1+ (point)) ;; Insert the text. - (let ((gnus-tmp-group (gnus-group-name-decode - gnus-tmp-group group-name-charset))) + (let ((gnus-tmp-decoded-group (gnus-group-name-decode + gnus-tmp-group group-name-charset))) (eval gnus-group-line-format-spec))) `(gnus-group ,(gnus-intern-safe gnus-tmp-group gnus-active-hashtb) gnus-unread ,(if (numberp number) @@ -1729,10 +1749,8 @@ If FIRST-TOO, the current line is also eligible as a target." (defun gnus-group-unmark-all-groups () "Unmark all groups." (interactive) - (let ((groups gnus-group-marked)) - (save-excursion - (while groups - (gnus-group-remove-mark (pop groups))))) + (save-excursion + (mapc 'gnus-group-remove-mark gnus-group-marked)) (gnus-group-position-point)) (defun gnus-group-mark-region (unmark beg end) @@ -1899,7 +1917,10 @@ group." No article is selected automatically. If the group is opened, just switch the summary buffer. If ALL is non-nil, already read articles become readable. -If ALL is a number, fetch this number of articles." +If ALL is a positive number, fetch this number of the latest +articles in the group. +If ALL is a negative number, fetch this number of the earliest +articles in the group." (interactive "P") (when (and (eobp) (not (gnus-group-group-name))) (forward-line -1)) @@ -1975,12 +1996,14 @@ Same as `gnus-large-newsgroup', but only used for ephemeral newsgroups. If the number of articles in a newsgroup is greater than this value, confirmation is required for selecting the newsgroup. If it is nil, no confirmation is required." + :version "22.1" :group 'gnus-group-select :type '(choice (const :tag "No limit" nil) integer)) (defcustom gnus-fetch-old-ephemeral-headers nil "Same as `gnus-fetch-old-headers', but only used for ephemeral newsgroups." + :version "22.1" :group 'gnus-thread :type '(choice (const :tag "off" nil) (const some) @@ -1992,7 +2015,8 @@ confirmation is required." (defun gnus-group-read-ephemeral-group (group method &optional activate quit-config request-only select-articles - parameters) + parameters + number) "Read GROUP from METHOD as an ephemeral group. If ACTIVATE, request the group first. If QUIT-CONFIG, use that window configuration when exiting from the @@ -2000,6 +2024,7 @@ ephemeral group. If REQUEST-ONLY, don't actually read the group; just request it. If SELECT-ARTICLES, only select those articles. If PARAMETERS, use those as the group parameters. +If NUMBER, fetch this number of articles. Return the name of the group if selection was successful." (interactive @@ -2047,21 +2072,29 @@ Return the name of the group if selection was successful." (when (let ((gnus-large-newsgroup gnus-large-ephemeral-newsgroup) (gnus-fetch-old-headers gnus-fetch-old-ephemeral-headers)) - (gnus-group-read-group t t group select-articles)) + (gnus-group-read-group (or number t) t group select-articles)) group) ;;(error nil) (quit (message "Quit reading the ephemeral group") nil))))) -(defun gnus-group-jump-to-group (group) - "Jump to newsgroup GROUP." +(defun gnus-group-jump-to-group (group &optional prompt) + "Jump to newsgroup GROUP. + +If PROMPT (the prefix) is a number, use the prompt specified in +`gnus-group-jump-to-group-prompt'." (interactive (list (mm-string-make-unibyte (completing-read "Group: " gnus-active-hashtb nil (gnus-read-active-file-p) - gnus-group-jump-to-group-prompt + (if current-prefix-arg + (cdr (assq current-prefix-arg gnus-group-jump-to-group-prompt)) + (or (and (stringp gnus-group-jump-to-group-prompt) + gnus-group-jump-to-group-prompt) + (let ((p (cdr (assq 0 gnus-group-jump-to-group-prompt)))) + (and (stringp p) p)))) 'gnus-group-history)))) (when (equal group "") @@ -2231,6 +2264,16 @@ If EXCLUDE-GROUP, do not go to that group." (interactive) (gnus-enter-server-buffer)) +(defun gnus-group-make-group-simple (&optional group) + "Add a new newsgroup. +The user will be prompted for GROUP." + (interactive + (list (completing-read "Group: " gnus-active-hashtb + nil nil nil 'gnus-group-history))) + (gnus-group-make-group + (gnus-group-real-name group) + (gnus-group-server group))) + (defun gnus-group-make-group (name &optional method address args) "Add a new newsgroup. The user will be prompted for a NAME, for a select METHOD, and an @@ -2250,7 +2293,7 @@ ADDRESS." (nname (if method (gnus-group-prefixed-name name meth) name)) backend info) (when (gnus-group-entry nname) - (error "Group %s already exists" nname)) + (error "Group %s already exists" (gnus-group-decoded-name nname))) ;; Subscribe to the new group. (gnus-group-change-level (setq info (list t nname gnus-level-default-subscribed nil nil meth)) @@ -2298,7 +2341,7 @@ ADDRESS." "Delete the current group. Only meaningful with editable groups. If FORCE (the prefix) is non-nil, all the articles in the group will be deleted. This is \"deleted\" as in \"removed forever from the face -of the Earth\". There is no undo. The user will be prompted before +of the Earth\". There is no undo. The user will be prompted before doing the deletion. Note that you also have to specify FORCE if you want the group to be removed from the server, even when it's empty." @@ -2310,20 +2353,21 @@ be removed from the server, even when it's empty." (unless (gnus-check-backend-function 'request-delete-group group) (error "This back end does not support group deletion")) (prog1 - (if (and (not no-prompt) - (not (gnus-yes-or-no-p - (format - "Do you really want to delete %s%s? " - group (if force " and all its contents" ""))))) - () ; Whew! - (gnus-message 6 "Deleting group %s..." group) - (if (not (gnus-request-delete-group group force)) - (gnus-error 3 "Couldn't delete group %s" group) - (gnus-message 6 "Deleting group %s...done" group) - (gnus-group-goto-group group) - (gnus-group-kill-group 1 t) - (gnus-set-active group nil) - t)) + (let ((group-decoded (gnus-group-decoded-name group))) + (if (and (not no-prompt) + (not (gnus-yes-or-no-p + (format + "Do you really want to delete %s%s? " + group-decoded (if force " and all its contents" ""))))) + () ; Whew! + (gnus-message 6 "Deleting group %s..." group-decoded) + (if (not (gnus-request-delete-group group force)) + (gnus-error 3 "Couldn't delete group %s" group-decoded) + (gnus-message 6 "Deleting group %s...done" group-decoded) + (gnus-group-goto-group group) + (gnus-group-kill-group 1 t) + (gnus-set-active group nil) + t))) (gnus-group-position-point))) (defun gnus-group-rename-group (group new-name) @@ -2509,7 +2553,9 @@ group already exists: (gnus-group-position-point)) (defun gnus-group-make-doc-group (file type) - "Create a group that uses a single file as the source." + "Create a group that uses a single file as the source. + +If called with a prefix argument, ask for the file type." (interactive (list (read-file-name "File name: ") (and current-prefix-arg 'ask))) @@ -2518,7 +2564,7 @@ group already exists: char found) (while (not found) (message - "%sFile type (mbox, babyl, digest, forward, mmdf, guess) [mbdfag]: " + "%sFile type (mbox, babyl, digest, forward, mmdf, guess) [m, b, d, f, a, g]: " err) (setq found (cond ((= (setq char (read-char)) ?m) 'mbox) ((= char ?b) 'babyl) @@ -2591,17 +2637,26 @@ If there is, use Gnus to create an nnrss group" (setq url (read-from-minibuffer "URL to Search for RSS: "))) (let ((feedinfo (nnrss-discover-feed url))) (if feedinfo - (let ((title (read-from-minibuffer "Title: " - (cdr (assoc 'title - feedinfo)))) + (let ((title (gnus-newsgroup-savable-name + (read-from-minibuffer "Title: " + (gnus-newsgroup-savable-name + (or (cdr (assoc 'title + feedinfo)) + ""))))) (desc (read-from-minibuffer "Description: " (cdr (assoc 'description feedinfo)))) - (href (cdr (assoc 'href feedinfo)))) - (push (list title href desc) - nnrss-group-alist) - (gnus-group-unsubscribe-group - (concat "nnrss:" title)) + (href (cdr (assoc 'href feedinfo))) + (encodable (mm-coding-system-p 'utf-8))) + (when encodable + ;; Unify non-ASCII text. + (setq title (mm-decode-coding-string + (mm-encode-coding-string title 'utf-8) 'utf-8))) + (gnus-group-make-group (if encodable + (mm-encode-coding-string title 'utf-8) + title) + '(nnrss "")) + (push (list title href desc) nnrss-group-alist) (nnrss-save-server-data nil)) (error "No feeds found for %s" url)))) @@ -2712,7 +2767,7 @@ score file entries for articles to include in the group." (make-directory score-dir)) (with-temp-file score-file (let (emacs-lisp-mode-hook) - (pp scores (current-buffer)))))) + (gnus-pp scores))))) (defun gnus-group-add-to-virtual (n vgroup) "Add the current group to a virtual group." @@ -3034,7 +3089,8 @@ sort in reverse order." ;;; Clearing data (defun gnus-group-clear-data (&optional arg) - "Clear all marks and read ranges from the current group." + "Clear all marks and read ranges from the current group. +Obeys the process/prefix convention." (interactive "P") (gnus-group-iterate arg (lambda (group) @@ -3104,7 +3160,7 @@ up is returned." "Do you really want to mark all articles in %s as read? " "Mark all unread articles in %s as read? ") (if (= (length groups) 1) - (car groups) + (gnus-group-decoded-name (car groups)) (format "these %d groups" (length groups))))))) n (while (setq group (pop groups)) @@ -3182,7 +3238,8 @@ Uses the process/prefix convention." (defun gnus-group-expire-articles-1 (group) (when (gnus-check-backend-function 'request-expire-articles group) - (gnus-message 6 "Expiring articles in %s..." group) + (gnus-message 6 "Expiring articles in %s..." + (gnus-group-decoded-name group)) (let* ((info (gnus-get-info group)) (expirable (if (gnus-group-total-expirable-p group) (cons nil (gnus-list-of-read-articles group)) @@ -3207,7 +3264,8 @@ Uses the process/prefix convention." (gnus-request-expire-articles (gnus-uncompress-sequence (cdr expirable)) group)))) (gnus-close-group group)) - (gnus-message 6 "Expiring articles in %s...done" group) + (gnus-message 6 "Expiring articles in %s...done" + (gnus-group-decoded-name group)) ;; Return the list of un-expired articles. (cdr expirable)))) @@ -3241,16 +3299,15 @@ Uses the process/prefix convention." s)))))) (unless (and (>= level 1) (<= level gnus-level-killed)) (error "Invalid level: %d" level)) - (let ((groups (gnus-group-process-prefix n)) - group) - (while (setq group (pop groups)) - (gnus-group-remove-mark group) - (gnus-message 6 "Changed level of %s from %d to %d" - group (or (gnus-group-group-level) gnus-level-killed) - level) - (gnus-group-change-level - group level (or (gnus-group-group-level) gnus-level-killed)) - (gnus-group-update-group-line))) + (dolist (group (gnus-group-process-prefix n)) + (gnus-group-remove-mark group) + (gnus-message 6 "Changed level of %s from %d to %d" + (gnus-group-decoded-name group) + (or (gnus-group-group-level) gnus-level-killed) + level) + (gnus-group-change-level + group level (or (gnus-group-group-level) gnus-level-killed)) + (gnus-group-update-group-line)) (gnus-group-position-point)) (defun gnus-group-unsubscribe (&optional n) @@ -3393,7 +3450,7 @@ of groups killed." gnus-list-of-killed-groups)) (gnus-group-change-level (if entry entry group) gnus-level-killed (if entry nil level)) - (message "Killed group %s" group)) + (message "Killed group %s" (gnus-group-decoded-name group))) ;; If there are lots and lots of groups to be killed, we use ;; this thing instead. (dolist (group (nreverse groups)) @@ -3596,6 +3653,7 @@ re-scanning. If ARG is non-nil and not a number, this will force (gnus-get-unread-articles arg)) (let ((gnus-read-active-file (if arg nil gnus-read-active-file))) (gnus-get-unread-articles arg))) + (gnus-check-reasonable-setup) (gnus-run-hooks 'gnus-after-getting-new-news-hook) (gnus-group-list-groups (and (numberp arg) (max (car gnus-group-list-mode) arg))))) @@ -3603,7 +3661,8 @@ re-scanning. If ARG is non-nil and not a number, this will force (defun gnus-group-get-new-news-this-group (&optional n dont-scan) "Check for newly arrived news in the current group (and the N-1 next groups). The difference between N and the number of newsgroup checked is returned. -If N is negative, this group and the N-1 previous groups will be checked." +If N is negative, this group and the N-1 previous groups will be checked. +If DONT-SCAN is non-nil, scan non-activated groups as well." (interactive "P") (let* ((groups (gnus-group-process-prefix n)) (ret (if (numberp n) (- n (length groups)) 0)) @@ -3619,15 +3678,17 @@ If N is negative, this group and the N-1 previous groups will be checked." (gnus-group-remove-mark group) ;; Bypass any previous denials from the server. (gnus-remove-denial (setq method (gnus-find-method-for-group group))) - (if (gnus-activate-group group (if dont-scan nil 'scan)) - (progn - (gnus-get-unread-articles-in-group - (gnus-get-info group) (gnus-active group) t) + (if (gnus-activate-group group (if dont-scan nil 'scan) nil method) + (let ((info (gnus-get-info group)) + (active (gnus-active group))) + (when info + (gnus-request-update-info info method)) + (gnus-get-unread-articles-in-group info active) (unless (gnus-virtual-group-p group) (gnus-close-group group)) (when gnus-agent (gnus-agent-save-group-info - method (gnus-group-real-name group) (gnus-active group))) + method (gnus-group-real-name group) active)) (gnus-group-update-group group)) (if (eq (gnus-server-status (gnus-find-method-for-group group)) 'denied) @@ -4279,4 +4340,5 @@ This command may read the active file." (provide 'gnus-group) +;;; arch-tag: 2eb5440f-0bca-4091-814c-e37817536af6 ;;; gnus-group.el ends here diff --git a/lisp/gnus-int.el b/lisp/gnus-int.el index 41344cc..8d47064 100644 --- a/lisp/gnus-int.el +++ b/lisp/gnus-int.el @@ -47,6 +47,7 @@ If the server is covered by Gnus agent, the possible values are `denied', set the server denied; `offline', set the server offline; nil, ask user. If the server is not covered by Gnus agent, set the server denied." + :version "22.1" :group 'gnus-start :type '(choice (const :tag "Ask" nil) (const :tag "Deny server" denied) @@ -561,17 +562,17 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned." not-deleted)) (defun gnus-request-move-article (article group server accept-function - &optional last) + &optional last move-is-internal) (let* ((gnus-command-method (gnus-find-method-for-group group)) (result (funcall (gnus-get-function gnus-command-method 'request-move-article) article (gnus-group-real-name group) - (nth 1 gnus-command-method) accept-function last))) + (nth 1 gnus-command-method) accept-function last move-is-internal))) (when (and result gnus-agent (gnus-agent-method-p gnus-command-method)) - (gnus-agent-expire (list article) group 'force)) + (gnus-agent-unfetch-articles group (list article))) result)) - + (defun gnus-request-accept-article (group &optional gnus-command-method last no-encode) ;; Make sure there's a newline at the end of the article. @@ -594,8 +595,8 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned." (message-encode-message-body))) (let ((gnus-command-method (or gnus-command-method (gnus-find-method-for-group group))) - (result - (funcall + (result + (funcall (gnus-get-function gnus-command-method 'request-accept-article) (if (stringp group) (gnus-group-real-name group) group) (cadr gnus-command-method) @@ -689,4 +690,5 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned." (provide 'gnus-int) +;;; arch-tag: bbc90087-9b7f-4017-a92c-3abf180ac86d ;;; gnus-int.el ends here diff --git a/lisp/gnus-kill.el b/lisp/gnus-kill.el index d634dfe..68146b3 100644 --- a/lisp/gnus-kill.el +++ b/lisp/gnus-kill.el @@ -717,4 +717,5 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score" (provide 'gnus-kill) +;;; arch-tag: b30c0f53-df1a-490b-b81e-17b13474f395 ;;; gnus-kill.el ends here diff --git a/lisp/gnus-logic.el b/lisp/gnus-logic.el index c6bc031..0baf705 100644 --- a/lisp/gnus-logic.el +++ b/lisp/gnus-logic.el @@ -227,4 +227,5 @@ (provide 'gnus-logic) +;;; arch-tag: 9651a100-4a59-4b69-a55b-e511e67c0f8d ;;; gnus-logic.el ends here diff --git a/lisp/gnus-mh.el b/lisp/gnus-mh.el index 35ee140..75ccab4 100644 --- a/lisp/gnus-mh.el +++ b/lisp/gnus-mh.el @@ -111,4 +111,5 @@ Otherwise, it is like +news/group." (provide 'gnus-mh) +;;; arch-tag: 2d5696d3-b363-48e5-8749-c256be56acca ;;; gnus-mh.el ends here diff --git a/lisp/gnus-ml.el b/lisp/gnus-ml.el index f102fb2..87d645b 100644 --- a/lisp/gnus-ml.el +++ b/lisp/gnus-ml.el @@ -198,4 +198,5 @@ If FORCE is non-nil, replace the old ones." (provide 'gnus-ml) +;;; arch-tag: 936c0fe6-acce-4c16-87d0-eded88078896 ;;; gnus-ml.el ends here diff --git a/lisp/gnus-mlspl.el b/lisp/gnus-mlspl.el index f1f939e..4a6809e 100644 --- a/lisp/gnus-mlspl.el +++ b/lisp/gnus-mlspl.el @@ -1,6 +1,6 @@ ;;; gnus-mlspl.el --- a group params-based mail splitting mechanism -;; Copyright (C) 1998, 1999, 2000, 2001, 2002 +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 ;; Free Software Foundation, Inc. ;; Author: Alexandre Oliva @@ -74,8 +74,9 @@ match any of the group-specified splitting rules. See ;;;###autoload (defun gnus-group-split-update (&optional catch-all) - "Computes `nnmail-split-fancy' from group params and CATCH-ALL, by -calling (gnus-group-split-fancy nil nil CATCH-ALL). + "Computes nnmail-split-fancy from group params and CATCH-ALL. +It does this by calling by calling (gnus-group-split-fancy nil +nil CATCH-ALL). If CATCH-ALL is nil, `gnus-group-split-default-catch-all-group' is used instead. This variable is set by `gnus-group-split-setup'." @@ -228,4 +229,5 @@ Calling (gnus-group-split-fancy nil nil \"mail.others\") returns: (provide 'gnus-mlspl) +;;; arch-tag: 62b3381f-1e45-4b61-be1a-29fb27703322 ;;; gnus-mlspl.el ends here diff --git a/lisp/gnus-move.el b/lisp/gnus-move.el index 3e06945..26f8305 100644 --- a/lisp/gnus-move.el +++ b/lisp/gnus-move.el @@ -52,10 +52,8 @@ Update the .newsrc.eld file to reflect the change of nntp server." (save-excursion ;; Go through all groups and translate. - (let ((newsrc gnus-newsrc-alist) - (nntp-nov-gap nil) - info) - (while (setq info (pop newsrc)) + (let ((nntp-nov-gap nil)) + (dolist (info gnus-newsrc-alist) (when (gnus-group-native-p (gnus-info-group info)) (gnus-move-group-to-server info from-server to-server)))))) @@ -181,4 +179,5 @@ Update the .newsrc.eld file to reflect the change of nntp server." (provide 'gnus-move) +;;; arch-tag: 503742b8-7d66-4d79-bb31-4a698070707b ;;; gnus-move.el ends here diff --git a/lisp/gnus-msg.el b/lisp/gnus-msg.el index a098d06..da7916d 100644 --- a/lisp/gnus-msg.el +++ b/lisp/gnus-msg.el @@ -1,6 +1,6 @@ ;;; gnus-msg.el --- mail and post interface for Gnus -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -;; Free Software Foundation, Inc. +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen @@ -142,7 +142,7 @@ See Info node `(gnus)Posting Styles'." (defcustom gnus-gcc-mark-as-read nil "If non-nil, automatically mark Gcc articles as read." - :version "21.1" + :version "22.1" :group 'gnus-message :type 'boolean) @@ -154,7 +154,7 @@ See Info node `(gnus)Posting Styles'." If it is `all', attach files as external parts; if a regexp and matches the Gcc group name, attach files as external parts; if nil, attach files as normal parts." - :version "21.1" + :version "22.1" :group 'gnus-message :type '(choice (const nil :tag "None") (const all :tag "Any") @@ -212,7 +212,7 @@ List of charsets that are permitted to be unencoded.") "gnus-agent.el" "gnus-cache.el" "gnus-srvr.el" "mm-util.el" "mm-decode.el" "nnmail.el" "message.el") "Files whose variables will be reported in `gnus-bug'." - :version "21.1" + :version "22.1" :group 'gnus-message :type '(repeat (string :tag "File"))) @@ -220,7 +220,7 @@ List of charsets that are permitted to be unencoded.") '(mm-mime-mule-charset-alist nnmail-split-fancy message-minibuffer-local-map) "Variables that should not be reported in `gnus-bug'." - :version "21.1" + :version "22.1" :group 'gnus-message :type '(repeat (symbol :tag "Variable"))) @@ -228,7 +228,7 @@ List of charsets that are permitted to be unencoded.") '(nndraft nnml nnimap nnmaildir nnmh nnfolder nndir) "A list of back ends that are not used in \"real\" newsgroups. This variable is used only when `gnus-post-method' is `current'." - :version "21.3" + :version "22.1" :group 'gnus-group-foreign :type '(repeat (symbol :tag "Back end"))) @@ -252,7 +252,8 @@ See also the `mml-default-encrypt-method' variable." :group 'gnus-message :type 'boolean) -(defcustom gnus-confirm-mail-reply-to-news nil +(defcustom gnus-confirm-mail-reply-to-news (and gnus-novice-user + (not gnus-expert-user)) "If non-nil, Gnus requests confirmation when replying to news. This is done because new users often reply by mistake when reading news. @@ -260,6 +261,7 @@ This can also be a function receiving the group name as the only parameter which should return non-nil iff a confirmation is needed, or a regexp, in which case a confirmation is asked for iff the group name matches the regexp." + :version "22.1" :group 'gnus-message :type '(choice (const :tag "No" nil) (const :tag "Yes" t) @@ -272,6 +274,7 @@ matches the regexp." when replying by mail. See the `gnus-confirm-mail-reply-to-news' variable for fine-tuning this. If nil, Gnus will never ask for confirmation if replying to mail." + :version "22.1" :group 'gnus-message :type 'boolean) @@ -279,6 +282,7 @@ If nil, Gnus will never ask for confirmation if replying to mail." "If non-nil, Gnus tries to suggest a default address to resend to. If nil, the address field will always be empty after invoking `gnus-summary-resend-message'." + :version "22.1" :group 'gnus-message :type 'boolean) @@ -359,10 +363,10 @@ Thank you for your help in stamping out bugs. ;;; Internal functions. -(defun gnus-inews-make-draft () +(defun gnus-inews-make-draft (articles) `(lambda () (gnus-inews-make-draft-meta-information - ,gnus-newsgroup-name ',gnus-article-reply))) + ,gnus-newsgroup-name ',articles))) (defvar gnus-article-reply nil) (defmacro gnus-setup-message (config &rest forms) @@ -404,7 +408,7 @@ Thank you for your help in stamping out bugs. (not (string= ,group ""))) (push (cons (intern gnus-draft-meta-information-header) - (gnus-inews-make-draft)) + (gnus-inews-make-draft (or ,yanked ,article))) message-required-headers)) (unwind-protect (progn @@ -432,12 +436,20 @@ Thank you for your help in stamping out bugs. (run-hooks 'post-command-hook) (set-buffer-modified-p nil)))) -(defun gnus-inews-make-draft-meta-information (group article) - (concat "(\"" group "\" " - (if article (number-to-string - (if (listp article) - (car article) - article)) "\"\"") +(defun gnus-inews-make-draft-meta-information (group articles) + (when (numberp articles) + (setq articles (list articles))) + (concat "(\"" group "\"" + (if articles + (concat " " + (mapconcat + (lambda (elem) + (number-to-string + (if (consp elem) + (car elem) + elem))) + articles " ")) + "") ")")) ;;;###autoload @@ -725,7 +737,9 @@ article number, and the cdr is the string to be yanked." (gnus-summary-handle-replysign))) (defun gnus-summary-followup-with-original (n &optional force-news) - "Compose a followup to an article and include the original article." + "Compose a followup to an article and include the original article. +The text in the region will be yanked. If the region isn't +active, the entire article will be yanked." (interactive "P") (gnus-summary-followup (gnus-summary-work-articles n) force-news)) @@ -773,12 +787,10 @@ Uses the process-prefix convention. If given the symbolic prefix `a', cancel using the standard posting method; if not post using the current select method." (interactive (gnus-interactive "P\ny")) - (let ((articles (gnus-summary-work-articles n)) - (message-post-method + (let ((message-post-method `(lambda (arg) - (gnus-post-method (eq ',symp 'a) ,gnus-newsgroup-name))) - article) - (while (setq article (pop articles)) + (gnus-post-method (eq ',symp 'a) ,gnus-newsgroup-name)))) + (dolist (article (gnus-summary-work-articles n)) (when (gnus-summary-select-article t nil nil article) (when (gnus-eval-in-buffer-window gnus-original-article-buffer (message-cancel-news)) @@ -867,7 +879,8 @@ header line with the old Message-ID." ;; Decode charsets. (let ((gnus-article-decode-hook (delq 'article-decode-charset - (copy-sequence gnus-article-decode-hook)))) + (copy-sequence gnus-article-decode-hook))) + (rfc2047-quote-decoded-words-containing-tspecials t)) (run-hooks 'gnus-article-decode-hook))))) gnus-article-copy))) @@ -1028,17 +1041,18 @@ If SILENT, don't prompt the user." "Stringified Gnus version and Emacs version. See the variable `gnus-user-agent'." (interactive) - (let* ((float-output-format nil) - (gnus-v - (concat "Gnus/" - (prin1-to-string (gnus-continuum-version gnus-version) t) - " (" gnus-version ")")) - (emacs-v (gnus-emacs-version))) - (if (stringp gnus-user-agent) - gnus-user-agent - (concat gnus-v - (when emacs-v - (concat " " emacs-v)))))) + (if (stringp gnus-user-agent) + gnus-user-agent + ;; `gnus-user-agent' is a list: + (let* ((float-output-format nil) + (gnus-v + (when (memq 'gnus gnus-user-agent) + (concat "Gnus/" + (prin1-to-string (gnus-continuum-version gnus-version) t) + " (" gnus-version ")"))) + (emacs-v (gnus-emacs-version))) + (concat gnus-v (when (and gnus-v emacs-v) " ") + emacs-v)))) ;;; @@ -1237,14 +1251,12 @@ For the `inline' alternatives, also see the variable (with-current-buffer gnus-original-article-buffer (nnmail-fetch-field "to")))) current-prefix-arg)) - (let ((articles (gnus-summary-work-articles n)) - article) - (while (setq article (pop articles)) - (gnus-summary-select-article nil nil nil article) - (save-excursion - (set-buffer gnus-original-article-buffer) - (message-resend address)) - (gnus-summary-mark-article-as-forwarded article)))) + (dolist (article (gnus-summary-work-articles n)) + (gnus-summary-select-article nil nil nil article) + (save-excursion + (set-buffer gnus-original-article-buffer) + (message-resend address)) + (gnus-summary-mark-article-as-forwarded article))) ;; From: Matthieu Moy (defun gnus-summary-resend-message-edit () @@ -1302,37 +1314,35 @@ The current group name will be inserted at \"%s\".") (defun gnus-summary-mail-crosspost-complaint (n) "Send a complaint about crossposting to the current article(s)." (interactive "P") - (let ((articles (gnus-summary-work-articles n)) - article) - (while (setq article (pop articles)) - (set-buffer gnus-summary-buffer) - (gnus-summary-goto-subject article) - (let ((group (gnus-group-real-name gnus-newsgroup-name)) - newsgroups followup-to) - (gnus-summary-select-article) - (set-buffer gnus-original-article-buffer) - (if (and (<= (length (message-tokenize-header - (setq newsgroups - (mail-fetch-field "newsgroups")) - ", ")) - 1) - (or (not (setq followup-to (mail-fetch-field "followup-to"))) - (not (member group (message-tokenize-header - followup-to ", "))))) - (if followup-to - (gnus-message 1 "Followup-to restricted") - (gnus-message 1 "Not a crossposted article")) - (set-buffer gnus-summary-buffer) - (gnus-summary-reply-with-original 1) - (set-buffer gnus-message-buffer) - (message-goto-body) - (insert (format gnus-crosspost-complaint newsgroups group)) - (message-goto-subject) - (re-search-forward " *$") - (replace-match " (crosspost notification)" t t) - (gnus-deactivate-mark) - (when (gnus-y-or-n-p "Send this complaint? ") - (message-send-and-exit))))))) + (dolist (article (gnus-summary-work-articles n)) + (set-buffer gnus-summary-buffer) + (gnus-summary-goto-subject article) + (let ((group (gnus-group-real-name gnus-newsgroup-name)) + newsgroups followup-to) + (gnus-summary-select-article) + (set-buffer gnus-original-article-buffer) + (if (and (<= (length (message-tokenize-header + (setq newsgroups + (mail-fetch-field "newsgroups")) + ", ")) + 1) + (or (not (setq followup-to (mail-fetch-field "followup-to"))) + (not (member group (message-tokenize-header + followup-to ", "))))) + (if followup-to + (gnus-message 1 "Followup-to restricted") + (gnus-message 1 "Not a crossposted article")) + (set-buffer gnus-summary-buffer) + (gnus-summary-reply-with-original 1) + (set-buffer gnus-message-buffer) + (message-goto-body) + (insert (format gnus-crosspost-complaint newsgroups group)) + (message-goto-subject) + (re-search-forward " *$") + (replace-match " (crosspost notification)" t t) + (gnus-deactivate-mark) + (when (gnus-y-or-n-p "Send this complaint? ") + (message-send-and-exit)))))) (defun gnus-mail-parse-comma-list () (let (accumulated @@ -1512,21 +1522,22 @@ The source file has to be in the Emacs load path." (while olist (if (boundp (car olist)) (ignore-errors - (pp `(setq ,(car olist) - ,(if (or (consp (setq sym (symbol-value (car olist)))) - (and (symbolp sym) - (not (or (eq sym nil) - (eq sym t))))) - (list 'quote (symbol-value (car olist))) - (symbol-value (car olist)))) - (current-buffer))) + (gnus-pp + `(setq ,(car olist) + ,(if (or (consp (setq sym (symbol-value (car olist)))) + (and (symbolp sym) + (not (or (eq sym nil) + (eq sym t))))) + (list 'quote (symbol-value (car olist))) + (symbol-value (car olist)))))) (insert ";; (makeunbound '" (symbol-name (car olist)) ")\n")) (setq olist (cdr olist))) (insert "\n\n") ;; Remove any control chars - they seem to cause trouble for some ;; mailers. (Byte-compiled output from the stuff above.) (goto-char point) - (while (re-search-forward "[\000-\010\013-\037\200-\237]" nil t) + (while (re-search-forward (mm-string-as-multibyte + "[\000-\010\013-\037\200-\237]") nil t) (replace-match (format "\\%03o" (string-to-char (match-string 0))) t t)))) @@ -1632,11 +1643,13 @@ this is a reply." (concat "^" (regexp-quote mail-header-separator) "$") nil t) (replace-match "" t t )) - (unless (setq group-art - (gnus-request-accept-article group method t t)) + (when (or (not (gnus-check-backend-function + 'request-accept-article group)) + (not (setq group-art + (gnus-request-accept-article + group method t t)))) (gnus-message 1 "Couldn't store article in group %s: %s" - group (gnus-status-message method)) - (sit-for 2)) + group (gnus-status-message method))) (when (and group-art ;; FIXME: Should gcc-mark-as-read work when ;; Gnus is not running? @@ -1795,9 +1808,11 @@ this is a reply." ;; Obsolete format of header match. (and (gnus-buffer-live-p gnus-article-copy) (with-current-buffer gnus-article-copy - (let ((header (message-fetch-field (pop style)))) - (and header - (string-match (pop style) header)))))) + (save-restriction + (nnheader-narrow-to-headers) + (let ((header (message-fetch-field (pop style)))) + (and header + (string-match (pop style) header))))))) ((or (symbolp match) (functionp match)) (cond @@ -1813,9 +1828,11 @@ this is a reply." ;; New format of header match. (and (gnus-buffer-live-p gnus-article-copy) (with-current-buffer gnus-article-copy - (let ((header (message-fetch-field (nth 1 match)))) - (and header - (string-match (nth 2 match) header)))))) + (save-restriction + (nnheader-narrow-to-headers) + (let ((header (message-fetch-field (nth 1 match)))) + (and header + (string-match (nth 2 match) header))))))) (t ;; This is a form to be evaled. (eval match))))) @@ -1857,10 +1874,13 @@ this is a reply." (when (and filep v) (setq v (with-temp-buffer (insert-file-contents v) - (goto-char (point-max)) - (while (bolp) - (delete-char -1)) - (buffer-string)))) + (buffer-substring + (point-min) + (progn + (goto-char (point-max)) + (if (zerop (skip-chars-backward "\n")) + (point) + (1+ (point)))))))) (setq results (delq (assoc element results) results)) (push (cons element v) results)))) ;; Now we have all the styles, so we insert them. @@ -1925,4 +1945,5 @@ this is a reply." (provide 'gnus-msg) +;;; arch-tag: 9f22b2f5-1c0a-49de-916e-4c88e984852b ;;; gnus-msg.el ends here diff --git a/lisp/gnus-nocem.el b/lisp/gnus-nocem.el index bbaf550..487b77e 100644 --- a/lisp/gnus-nocem.el +++ b/lisp/gnus-nocem.el @@ -390,4 +390,5 @@ valid issuer, which is much faster if you are selective about the issuers." (provide 'gnus-nocem) +;;; arch-tag: 0e0c74ea-2f8e-4f3e-8fff-09f767c1adef ;;; gnus-nocem.el ends here diff --git a/lisp/gnus-picon.el b/lisp/gnus-picon.el index 1412aff..ef75a17 100644 --- a/lisp/gnus-picon.el +++ b/lisp/gnus-picon.el @@ -1,6 +1,6 @@ ;;; gnus-picon.el --- displaying pretty icons in Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -74,6 +74,15 @@ Some people may want to add \"unknown\" to this list." :type '(repeat string) :group 'gnus-picon) +(defcustom gnus-picon-style 'inline + "How should picons be displayed. +If `inline', the textual representation is replaced. If `right', picons are +added right to the textual representation." + ;; FIXME: `right' needs improvement for XEmacs. + :type '(choice (const inline) + (const right)) + :group 'gnus-picon) + (defface gnus-picon-xbm-face '((t (:foreground "black" :background "white"))) "Face to show xbm picon in." :group 'gnus-picon) @@ -135,14 +144,17 @@ List of pairs (KEY . GLYPH) where KEY is either a filename or an URL.") file nil))) -(defun gnus-picon-insert-glyph (glyph category) +(defun gnus-picon-insert-glyph (glyph category &optional nostring) "Insert GLYPH into the buffer. -GLYPH can be either a glyph or a string." +GLYPH can be either a glyph or a string. When NOSTRING, no textual +replacement is added." + ;; Using NOSTRING prevents wrong BBDB entries with `gnus-picon-style' set to + ;; 'right. (if (stringp glyph) (insert glyph) (gnus-add-wash-type category) (gnus-add-image category (car glyph)) - (gnus-put-image (car glyph) (cdr glyph) category))) + (gnus-put-image (car glyph) (unless nostring (cdr glyph)) category))) (defun gnus-picon-create-glyph (file) (or (cdr (assoc file gnus-picon-glyph-alist)) @@ -153,87 +165,107 @@ GLYPH can be either a glyph or a string." (defun gnus-picon-transform-address (header category) (gnus-with-article-headers - (let ((addresses - (mail-header-parse-addresses - ;; mail-header-parse-addresses does not work (reliably) on - ;; decoded headers. - (or - (ignore-errors - (mail-encode-encoded-word-string - (or (mail-fetch-field header) ""))) - (mail-fetch-field header)))) - spec file point cache) - (dolist (address addresses) - (setq address (car address)) - (when (and (stringp address) - (setq spec (gnus-picon-split-address address))) - (if (setq cache (cdr (assoc address gnus-picon-cache))) - (setq spec cache) - (when (setq file (or (gnus-picon-find-face - address gnus-picon-user-directories) - (gnus-picon-find-face - (concat "unknown@" - (mapconcat - 'identity (cdr spec) ".")) - gnus-picon-user-directories))) - (setcar spec (cons (gnus-picon-create-glyph file) - (car spec)))) - - (dotimes (i (1- (length spec))) - (when (setq file (gnus-picon-find-face - (concat "unknown@" - (mapconcat - 'identity (nthcdr (1+ i) spec) ".")) - gnus-picon-domain-directories t)) - (setcar (nthcdr (1+ i) spec) - (cons (gnus-picon-create-glyph file) - (nth (1+ i) spec))))) - (setq spec (nreverse spec)) - (push (cons address spec) gnus-picon-cache)) - - (gnus-article-goto-header header) - (mail-header-narrow-to-field) - (when (search-forward address nil t) - (delete-region (match-beginning 0) (match-end 0)) - (setq point (point)) - (while spec - (goto-char point) - (if (> (length spec) 2) - (insert ".") - (if (= (length spec) 2) - (insert "@"))) - (gnus-picon-insert-glyph (pop spec) category)))))))) + (let ((addresses + (mail-header-parse-addresses + ;; mail-header-parse-addresses does not work (reliably) on + ;; decoded headers. + (or + (ignore-errors + (mail-encode-encoded-word-string + (or (mail-fetch-field header) ""))) + (mail-fetch-field header)))) + spec file point cache len) + (dolist (address addresses) + (setq address (car address)) + (when (and (stringp address) + (setq spec (gnus-picon-split-address address))) + (if (setq cache (cdr (assoc address gnus-picon-cache))) + (setq spec cache) + (when (setq file (or (gnus-picon-find-face + address gnus-picon-user-directories) + (gnus-picon-find-face + (concat "unknown@" + (mapconcat + 'identity (cdr spec) ".")) + gnus-picon-user-directories))) + (setcar spec (cons (gnus-picon-create-glyph file) + (car spec)))) + + (dotimes (i (1- (length spec))) + (when (setq file (gnus-picon-find-face + (concat "unknown@" + (mapconcat + 'identity (nthcdr (1+ i) spec) ".")) + gnus-picon-domain-directories t)) + (setcar (nthcdr (1+ i) spec) + (cons (gnus-picon-create-glyph file) + (nth (1+ i) spec))))) + (setq spec (nreverse spec)) + (push (cons address spec) gnus-picon-cache)) + + (gnus-article-goto-header header) + (mail-header-narrow-to-field) + (case gnus-picon-style + (right + (when (= (length addresses) 1) + (setq len (apply '+ (mapcar (lambda (x) + (condition-case nil + (car (image-size (car x))) + (error 0))) spec))) + (when (> len 0) + (goto-char (point-at-eol)) + (insert (propertize + " " 'display + (cons 'space + (list :align-to (- (window-width) 1 len)))))) + (goto-char (point-at-eol)) + (setq point (point-at-eol)) + (dolist (image spec) + (unless (stringp image) + (goto-char point) + (gnus-picon-insert-glyph image category 'nostring))))) + (inline + (when (search-forward address nil t) + (delete-region (match-beginning 0) (match-end 0)) + (setq point (point)) + (while spec + (goto-char point) + (if (> (length spec) 2) + (insert ".") + (if (= (length spec) 2) + (insert "@"))) + (gnus-picon-insert-glyph (pop spec) category)))))))))) (defun gnus-picon-transform-newsgroups (header) (interactive) (gnus-with-article-headers - (gnus-article-goto-header header) - (mail-header-narrow-to-field) - (let ((groups (message-tokenize-header (mail-fetch-field header))) - spec file point) - (dolist (group groups) - (unless (setq spec (cdr (assoc group gnus-picon-cache))) - (setq spec (nreverse (split-string group "[.]"))) - (dotimes (i (length spec)) - (when (setq file (gnus-picon-find-face - (concat "unknown@" - (mapconcat - 'identity (nthcdr i spec) ".")) - gnus-picon-news-directories t)) - (setcar (nthcdr i spec) - (cons (gnus-picon-create-glyph file) - (nth i spec))))) - (push (cons group spec) gnus-picon-cache)) - (when (search-forward group nil t) - (delete-region (match-beginning 0) (match-end 0)) - (save-restriction - (narrow-to-region (point) (point)) - (while spec - (goto-char (point-min)) - (if (> (length spec) 1) - (insert ".")) - (gnus-picon-insert-glyph (pop spec) 'newsgroups-picon)) - (goto-char (point-max)))))))) + (gnus-article-goto-header header) + (mail-header-narrow-to-field) + (let ((groups (message-tokenize-header (mail-fetch-field header))) + spec file point) + (dolist (group groups) + (unless (setq spec (cdr (assoc group gnus-picon-cache))) + (setq spec (nreverse (split-string group "[.]"))) + (dotimes (i (length spec)) + (when (setq file (gnus-picon-find-face + (concat "unknown@" + (mapconcat + 'identity (nthcdr i spec) ".")) + gnus-picon-news-directories t)) + (setcar (nthcdr i spec) + (cons (gnus-picon-create-glyph file) + (nth i spec))))) + (push (cons group spec) gnus-picon-cache)) + (when (search-forward group nil t) + (delete-region (match-beginning 0) (match-end 0)) + (save-restriction + (narrow-to-region (point) (point)) + (while spec + (goto-char (point-min)) + (if (> (length spec) 1) + (insert ".")) + (gnus-picon-insert-glyph (pop spec) 'newsgroups-picon)) + (goto-char (point-max)))))))) ;;; Commands: @@ -247,10 +279,9 @@ If picons are already displayed, remove them." (interactive) (let ((wash-picon-p buffer-read-only)) (gnus-with-article-buffer - (if (and wash-picon-p (memq 'from-picon gnus-article-wash-types)) - (gnus-delete-images 'from-picon) - (gnus-picon-transform-address "from" 'from-picon))) - )) + (if (and wash-picon-p (memq 'from-picon gnus-article-wash-types)) + (gnus-delete-images 'from-picon) + (gnus-picon-transform-address "from" 'from-picon))))) ;;;###autoload (defun gnus-treat-mail-picon () @@ -259,11 +290,10 @@ If picons are already displayed, remove them." (interactive) (let ((wash-picon-p buffer-read-only)) (gnus-with-article-buffer - (if (and wash-picon-p (memq 'mail-picon gnus-article-wash-types)) - (gnus-delete-images 'mail-picon) - (gnus-picon-transform-address "cc" 'mail-picon) - (gnus-picon-transform-address "to" 'mail-picon))) - )) + (if (and wash-picon-p (memq 'mail-picon gnus-article-wash-types)) + (gnus-delete-images 'mail-picon) + (gnus-picon-transform-address "cc" 'mail-picon) + (gnus-picon-transform-address "to" 'mail-picon))))) ;;;###autoload (defun gnus-treat-newsgroups-picon () @@ -272,12 +302,12 @@ If picons are already displayed, remove them." (interactive) (let ((wash-picon-p buffer-read-only)) (gnus-with-article-buffer - (if (and wash-picon-p (memq 'newsgroups-picon gnus-article-wash-types)) - (gnus-delete-images 'newsgroups-picon) - (gnus-picon-transform-newsgroups "newsgroups") - (gnus-picon-transform-newsgroups "followup-to"))) - )) + (if (and wash-picon-p (memq 'newsgroups-picon gnus-article-wash-types)) + (gnus-delete-images 'newsgroups-picon) + (gnus-picon-transform-newsgroups "newsgroups") + (gnus-picon-transform-newsgroups "followup-to"))))) (provide 'gnus-picon) +;;; arch-tag: fe9aede0-1b1b-463a-b4ab-807f98bcb31f ;;; gnus-picon.el ends here diff --git a/lisp/gnus-range.el b/lisp/gnus-range.el index eea1737..454712a 100644 --- a/lisp/gnus-range.el +++ b/lisp/gnus-range.el @@ -656,4 +656,5 @@ LIST is a sorted list." (provide 'gnus-range) +;;; arch-tag: 4780bdd8-5a15-4aff-be28-18727895b6ad ;;; gnus-range.el ends here diff --git a/lisp/gnus-registry.el b/lisp/gnus-registry.el index a84ea83..5c9c205 100644 --- a/lisp/gnus-registry.el +++ b/lisp/gnus-registry.el @@ -1,5 +1,5 @@ ;;; gnus-registry.el --- article registry for Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Ted Zlatanov @@ -66,9 +66,12 @@ (defgroup gnus-registry nil "The Gnus registry." + :version "22.1" :group 'gnus) -(defvar gnus-registry-hashtb nil +(defvar gnus-registry-hashtb (make-hash-table + :size 256 + :test 'equal) "*The article registry by Message ID.") (defcustom gnus-registry-unfollowed-groups '("delayed" "drafts" "queue") @@ -99,7 +102,7 @@ and no extra data." The Subject and Sender (From:) headers are currently tracked this way." :group 'gnus-registry - :type + :type '(set :tag "Tracking choices" (const :tag "Track by subject (Subject: header)" subject) (const :tag "Track by sender (From: header)" sender))) @@ -131,7 +134,7 @@ way." "Maximum number of entries in the registry, nil for unlimited." :group 'gnus-registry :type '(radio (const :format "Unlimited " nil) - (integer :format "Maximum number: %v\n" :size 0))) + (integer :format "Maximum number: %v"))) (defun gnus-registry-track-subject-p () (memq 'subject gnus-registry-track-extra)) @@ -184,12 +187,12 @@ way." "%s#tmp#%d")) working-dir (setq i (1+ i)))) (file-exists-p working-file))) - + (unwind-protect (progn (gnus-with-output-to-file working-file (gnus-gnus-to-quick-newsrc-format t "gnus registry startup file" 'gnus-registry-alist)) - + ;; These bindings will mislead the current buffer ;; into thinking that it is visiting the startup ;; file. @@ -199,14 +202,14 @@ way." (setmodes (file-modes startup-file))) ;; Backup the current version of the startup file. (backup-buffer) - + ;; Replace the existing startup file with the temp file. (rename-file working-file startup-file t) - (set-file-modes startup-file setmodes))) + (gnus-set-file-modes startup-file setmodes))) (condition-case nil (delete-file working-file) (file-error nil))))) - + (gnus-kill-buffer (current-buffer)) (gnus-message 5 "Saving %s...done" file)))) @@ -234,10 +237,10 @@ way." (remhash key gnus-registry-hashtb))) gnus-registry-hashtb) ;; remove empty entries - (when gnus-registry-clean-empty + (when gnus-registry-clean-empty (gnus-registry-clean-empty-function)) ;; now trim the registry appropriately - (setq gnus-registry-alist (gnus-registry-trim + (setq gnus-registry-alist (gnus-registry-trim (hashtable-to-alist gnus-registry-hashtb))) ;; really save (gnus-registry-cache-save) @@ -247,15 +250,37 @@ way." (defun gnus-registry-clean-empty-function () "Remove all empty entries from the registry. Returns count thereof." (let ((count 0)) + (maphash (lambda (key value) - (unless (or - (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)) - (incf count) - (remhash key gnus-registry-hashtb))) + (when (stringp key) + (dolist (group (gnus-registry-fetch-groups key)) + (when (gnus-parameter-registry-ignore group) + (gnus-message + 10 + "gnus-registry: deleted ignored group %s from key %s" + group key) + (gnus-registry-delete-group key group))) + + (unless (gnus-registry-group-count key) + (gnus-registry-delete-id key)) + + (unless (or + (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)) + (incf count) + (gnus-registry-delete-id key)) + + (unless (stringp key) + (gnus-message + 10 + "gnus-registry key %s was not a string, removing" + key) + (gnus-registry-delete-id key)))) + gnus-registry-hashtb) count)) @@ -265,31 +290,34 @@ way." (setq gnus-registry-dirty nil)) (defun gnus-registry-trim (alist) - "Trim alist to size, using gnus-registry-max-entries." + "Trim alist to size, using gnus-registry-max-entries. +Also, drop all gnus-registry-ignored-groups matches." (if (null gnus-registry-max-entries) - alist ; just return the alist + alist ; just return the alist ;; else, when given max-entries, trim the alist - (let ((timehash (make-hash-table - :size 4096 - :test 'equal))) + (let* ((timehash (make-hash-table + :size 4096 + :test 'equal)) + (trim-length (- (length alist) gnus-registry-max-entries)) + (trim-length (if (natnump trim-length) trim-length 0))) (maphash (lambda (key value) - (puthash key (gnus-registry-fetch-extra key 'mtime) timehash)) + (puthash key (gnus-registry-fetch-extra key 'mtime) timehash)) gnus-registry-hashtb) - + ;; we use the return value of this setq, which is the trimmed alist (setq alist (nthcdr - (- (length alist) gnus-registry-max-entries) + trim-length (sort alist (lambda (a b) - (time-less-p - (cdr (gethash (car a) timehash)) - (cdr (gethash (car b) timehash)))))))))) + (time-less-p + (or (cdr (gethash (car a) timehash)) '(0 0 0)) + (or (cdr (gethash (car b) timehash)) '(0 0 0)))))))))) (defun alist-to-hashtable (alist) "Build a hashtable from the values in ALIST." - (let ((ht (make-hash-table + (let ((ht (make-hash-table :size 4096 :test 'equal))) (mapc @@ -309,7 +337,7 @@ way." (defun gnus-registry-action (action data-header from &optional to method) (let* ((id (mail-header-id data-header)) - (subject (gnus-registry-simplify-subject + (subject (gnus-registry-simplify-subject (mail-header-subject data-header))) (sender (mail-header-from data-header)) (from (gnus-group-guess-full-name-from-command-method from)) @@ -325,7 +353,7 @@ way." ;; All except copy will need a delete (gnus-registry-delete-group id from) - (when (equal 'copy action) + (when (equal 'copy action) (gnus-registry-add-group id from subject sender)) ; undo the delete (gnus-registry-add-group id to subject sender))) @@ -345,7 +373,7 @@ way." "Split this message into the same group as its parent. The parent is obtained from the registry. This function can be used as an entry in `nnmail-split-fancy' or `nnimap-split-fancy', for example like -this: (: gnus-registry-split-fancy-with-parent) +this: (: gnus-registry-split-fancy-with-parent) This function tracks ALL backends, unlike `nnmail-split-fancy-with-parent' which tracks only nnmail @@ -356,22 +384,27 @@ 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. See the Info node `(gnus)Fancy Mail Splitting' for more details." - (let ((refstr (or (message-fetch-field "references") - (message-fetch-field "in-reply-to"))) + (let* ((refstr (or (message-fetch-field "references") "")) ; guarantee string + (reply-to (message-fetch-field "in-reply-to")) ; grab reply-to + ;; now, if reply-to is valid, append it to the References + (refstr (if reply-to + (concat refstr " " reply-to) + refstr)) (nnmail-split-fancy-with-parent-ignore-groups (if (listp nnmail-split-fancy-with-parent-ignore-groups) nnmail-split-fancy-with-parent-ignore-groups (list nnmail-split-fancy-with-parent-ignore-groups))) references res) - (if refstr + ;; the references string must be valid and parse to valid references + (if (and refstr (gnus-extract-references refstr)) (progn - (setq references (nreverse (gnus-split-references refstr))) + (setq references (nreverse (gnus-extract-references refstr))) (mapcar (lambda (x) (setq res (or (gnus-registry-fetch-group x) res)) (when (or (gnus-registry-grep-in-list res gnus-registry-unfollowed-groups) - (gnus-registry-grep-in-list + (gnus-registry-grep-in-list res nnmail-split-fancy-with-parent-ignore-groups)) (setq res nil))) @@ -387,7 +420,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." sender) (maphash (lambda (key value) - (let ((this-sender (cdr + (let ((this-sender (cdr (gnus-registry-fetch-extra key 'sender)))) (when (and single-match this-sender @@ -411,7 +444,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (< gnus-registry-minimum-subject-length (length subject))) (maphash (lambda (key value) - (let ((this-subject (cdr + (let ((this-subject (cdr (gnus-registry-fetch-extra key 'subject)))) (when (and single-match this-subject @@ -443,13 +476,13 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (when (and res gnus-registry-use-long-group-names) (let ((m1 (gnus-find-method-for-group res)) - (m2 (or gnus-command-method + (m2 (or gnus-command-method (gnus-find-method-for-group gnus-newsgroup-name))) (short-res (gnus-group-short-name res))) (if (gnus-methods-equal-p m1 m2) (progn (gnus-message - 9 + 9 "gnus-registry-split-fancy-with-parent stripped group %s to %s" res short-res) @@ -468,9 +501,9 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (dolist (article gnus-newsgroup-articles) (let ((id (gnus-registry-fetch-message-id-fast article))) (unless (gnus-registry-fetch-group id) - (gnus-message 9 "Registry: Registering article %d with group %s" + (gnus-message 9 "Registry: Registering article %d with group %s" article gnus-newsgroup-name) - (gnus-registry-add-group + (gnus-registry-add-group (gnus-registry-fetch-message-id-fast article) gnus-newsgroup-name (gnus-registry-fetch-simplified-message-subject-fast article) @@ -509,7 +542,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (when word (memq nil (mapcar 'not - (mapcar + (mapcar (lambda (x) (string-match x word)) list))))) @@ -545,7 +578,7 @@ Update the entry cache if needed." ;; get the entree from the hash table or from the alist (setq entree (gethash id entry-cache))) - + (unless entree (setq entree (assq entry alist)) (when gnus-registry-entry-caching @@ -586,10 +619,27 @@ Returns the first place where the trail finds a group name." (let ((trail (gethash id gnus-registry-hashtb))) (dolist (crumb trail) (when (stringp crumb) - (return (if gnus-registry-use-long-group-names - crumb + (return (if gnus-registry-use-long-group-names + crumb (gnus-group-short-name crumb)))))))) +(defun gnus-registry-fetch-groups (id) + "Get the groups of a message, based on the message ID." + (let ((trail (gethash id gnus-registry-hashtb)) + groups) + (dolist (crumb trail) + (when (stringp crumb) + ;; push the group name into the list + (setq + groups + (cons + (if (or (not (stringp crumb)) gnus-registry-use-long-group-names) + crumb + (gnus-group-short-name crumb)) + groups)))) + ;; return the list of groups + groups)) + (defun gnus-registry-group-count (id) "Get the number of groups of a message, based on the message ID." (let ((trail (gethash id gnus-registry-hashtb))) @@ -599,19 +649,20 @@ Returns the first place where the trail finds a group name." (defun gnus-registry-delete-group (id group) "Delete a group for a message, based on the message ID." - (when group - (when id + (when (and group id) (let ((trail (gethash id gnus-registry-hashtb)) - (group (gnus-group-short-name group))) + (short-group (gnus-group-short-name group))) (puthash id (if trail - (delete group trail) + (delete short-group (delete group trail)) nil) gnus-registry-hashtb)) ;; now, clear the entry if there are no more groups (when gnus-registry-trim-articles-without-groups (unless (gnus-registry-group-count id) (gnus-registry-delete-id id))) - (gnus-registry-store-extra-entry id 'mtime (current-time))))) + ;; is this ID still in the registry? + (when (gethash id gnus-registry-hashtb) + (gnus-registry-store-extra-entry id 'mtime (current-time))))) (defun gnus-registry-delete-id (id) "Delete a message ID from the registry." @@ -629,8 +680,8 @@ Returns the first place where the trail finds a group name." (when (and id (not (string-match "totally-fudged-out-message-id" id))) (let ((full-group group) - (group (if gnus-registry-use-long-group-names - group + (group (if gnus-registry-use-long-group-names + group (gnus-group-short-name group)))) (gnus-registry-delete-group id group) @@ -646,16 +697,16 @@ Returns the first place where the trail finds a group name." (when (and (gnus-registry-track-subject-p) subject) (gnus-registry-store-extra-entry - id - 'subject + id + 'subject (gnus-registry-simplify-subject subject))) (when (and (gnus-registry-track-sender-p) sender) (gnus-registry-store-extra-entry - id + id 'sender sender)) - + (gnus-registry-store-extra-entry id 'mtime (current-time))))))) (defun gnus-registry-clear () @@ -676,11 +727,11 @@ Returns the first place where the trail finds a group name." (defun gnus-registry-install-hooks () "Install the registry hooks." (interactive) - (add-hook 'gnus-summary-article-move-hook 'gnus-registry-action) + (add-hook 'gnus-summary-article-move-hook 'gnus-registry-action) (add-hook 'gnus-summary-article-delete-hook 'gnus-registry-action) (add-hook 'gnus-summary-article-expire-hook 'gnus-registry-action) (add-hook 'nnmail-spool-hook 'gnus-registry-spool-action) - + (add-hook 'gnus-save-newsrc-hook 'gnus-registry-save) (add-hook 'gnus-read-newsrc-el-hook 'gnus-registry-read) @@ -689,16 +740,18 @@ Returns the first place where the trail finds a group name." (defun gnus-registry-unload-hook () "Uninstall the registry hooks." (interactive) - (remove-hook 'gnus-summary-article-move-hook 'gnus-registry-action) + (remove-hook 'gnus-summary-article-move-hook 'gnus-registry-action) (remove-hook 'gnus-summary-article-delete-hook 'gnus-registry-action) (remove-hook 'gnus-summary-article-expire-hook 'gnus-registry-action) (remove-hook 'nnmail-spool-hook 'gnus-registry-spool-action) - + (remove-hook 'gnus-save-newsrc-hook 'gnus-registry-save) (remove-hook 'gnus-read-newsrc-el-hook 'gnus-registry-read) (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)) @@ -707,4 +760,5 @@ Returns the first place where the trail finds a group name." (provide 'gnus-registry) +;;; arch-tag: 5cba0a32-718a-4a97-8c91-0a15af21da94 ;;; gnus-registry.el ends here diff --git a/lisp/gnus-salt.el b/lisp/gnus-salt.el index f64c563..cd2aec8 100644 --- a/lisp/gnus-salt.el +++ b/lisp/gnus-salt.el @@ -230,7 +230,7 @@ This must be bound to a button-down mouse event." (let* ((echo-keystrokes 0) (start-posn (event-start start-event)) (start-point (posn-point start-posn)) - (start-line (1+ (count-lines 1 start-point))) + (start-line (1+ (count-lines (point-min) start-point))) (start-window (posn-window start-posn)) (bounds (gnus-window-edges start-window)) (top (nth 1 bounds)) @@ -266,17 +266,18 @@ This must be bound to a button-down mouse event." ;; Are we moving within the original window? ((and (eq (posn-window end) start-window) (integer-or-marker-p end-point)) - ;; Go to START-POINT first, so that when we move to END-POINT, + ;; Go to START-POINT first, so that when we move to END-POINT, ;; if it's in the middle of intangible text, ;; point jumps in the direction away from START-POINT. (goto-char start-point) (goto-char end-point) (gnus-pick-article) ;; In case the user moved his mouse really fast, pick - ;; articles on the line between this one and the last one. - (let* ((this-line (1+ (count-lines 1 end-point))) + ;; articles on the line between this one and the last one. + (let* ((this-line (1+ (count-lines (point-min) end-point))) (min-line (min this-line start-line)) (max-line (max this-line start-line))) + ;; Why not use `forward-line'? --Stef (while (< min-line max-line) (goto-line min-line) (gnus-pick-article) @@ -787,7 +788,7 @@ Two predefined functions are available: (setq beg (point)) (forward-char -1) ;; Draw "-" lines leftwards. - (while (and (> (point) 1) + (while (and (not (bobp)) (eq (char-after (1- (point))) ? )) (delete-char -1) (insert (car gnus-tree-parent-child-edges)) @@ -858,7 +859,8 @@ Two predefined functions are available: (gnus-extent-detached-p gnus-selected-tree-overlay)) ;; Create a new overlay. (gnus-overlay-put - (setq gnus-selected-tree-overlay (gnus-make-overlay 1 2)) + (setq gnus-selected-tree-overlay + (gnus-make-overlay (point-min) (1+ (point-min)))) 'face gnus-selected-tree-face)) ;; Move the overlay to the article. (gnus-move-overlay @@ -1062,4 +1064,5 @@ The following commands are available: (provide 'gnus-salt) +;; arch-tag: 35449164-77b3-4398-bcbd-a2e3e998f810 ;;; gnus-salt.el ends here diff --git a/lisp/gnus-score.el b/lisp/gnus-score.el index 8a1306c..5c3d74a 100644 --- a/lisp/gnus-score.el +++ b/lisp/gnus-score.el @@ -146,9 +146,15 @@ will be expired along with non-matching score entries." :type 'boolean) (defcustom gnus-decay-scores nil - "*If non-nil, decay non-permanent scores." + "*If non-nil, decay non-permanent scores. + +If it is a regexp, only decay score files matching regexp." :group 'gnus-score-decay - :type 'boolean) + :type `(choice (const :tag "never" nil) + (const :tag "always" t) + (const :tag "adaptive score files" + ,(concat "\\." gnus-adaptive-file-suffix "\\'")) + (regexp))) (defcustom gnus-decay-score-function 'gnus-decay-score "*Function called to decay a score. @@ -235,9 +241,10 @@ This variable allows the same syntax as `gnus-home-score-file'." (defcustom gnus-adaptive-word-length-limit nil "*Words of a length lesser than this limit will be ignored when doing adaptive scoring." + :version "22.1" :group 'gnus-score-adapt :type '(radio (const :format "Unlimited " nil) - (integer :format "Maximum length: %v\n" :size 0))) + (integer :format "Maximum length: %v"))) (defcustom gnus-ignored-adaptive-words nil "List of words to be ignored when doing adaptive word scoring." @@ -305,6 +312,13 @@ If this variable is nil, exact matching will always be used." :group 'gnus-score-files :type 'regexp) +(defcustom gnus-adaptive-pretty-print nil + "If non-nil, adaptive score files fill are pretty printed." + :group 'gnus-score-files + :group 'gnus-score-adapt + :version "23.0" ;; No Gnus + :type 'boolean) + (defcustom gnus-score-default-header nil "Default header when entering new scores. @@ -740,7 +754,7 @@ file for the command instead of the current score file." (setq i (1+ i)))) (goto-char (point-min)) ;; display ourselves in a small window at the bottom - (gnus-appt-select-lowest-window) + (gnus-select-lowest-window) (if (< (/ (window-height) 2) window-min-height) (switch-to-buffer "*Score Help*") (split-window) @@ -1202,7 +1216,9 @@ If FORMAT, also format the current score file." (decay (car (gnus-score-get 'decay alist))) (eval (car (gnus-score-get 'eval alist)))) ;; Perform possible decays. - (when (and gnus-decay-scores + (when (and (if (stringp gnus-decay-scores) + (string-match gnus-decay-scores file) + gnus-decay-scores) (or cached (file-exists-p file)) (or (not decay) (gnus-decay-scores alist decay))) @@ -1404,17 +1420,18 @@ If FORMAT, also format the current score file." (setq score (setcdr entry (gnus-delete-alist 'touched score))) (erase-buffer) (let (emacs-lisp-mode-hook) - (if (string-match - (concat (regexp-quote gnus-adaptive-file-suffix) "$") - file) - ;; This is an adaptive score file, so we do not run - ;; it through `pp'. These files can get huge, and - ;; are not meant to be edited by human hands. + (if (and (not gnus-adaptive-pretty-print) + (string-match + (concat (regexp-quote gnus-adaptive-file-suffix) "$") + file)) + ;; This is an adaptive score file, so we do not run it through + ;; `pp' unless requested. These files can get huge, and are + ;; not meant to be edited by human hands. (gnus-prin1 score) ;; This is a normal score file, so we print it very ;; prettily. (let ((lisp-mode-syntax-table score-mode-syntax-table)) - (pp score (current-buffer))))) + (gnus-pp score)))) (gnus-make-directory (file-name-directory file)) ;; If the score file is empty, we delete it. (if (zerop (buffer-size)) @@ -2357,7 +2374,8 @@ score in `gnus-newsgroup-scored' by SCORE." (when winconf (set-window-configuration winconf)) (gnus-score-remove-from-cache bufnam) - (gnus-score-load-file bufnam))) + (gnus-score-load-file bufnam) + (run-hooks 'gnus-score-edit-done-hook))) (defun gnus-score-find-trace () "Find all score rules that applies to the current article." @@ -3057,4 +3075,5 @@ See Info node `(gnus)Scoring Tips' for examples of good regular expressions." (provide 'gnus-score) +;;; arch-tag: d3922589-764d-46ae-9954-9330fd192634 ;;; gnus-score.el ends here diff --git a/lisp/gnus-setup.el b/lisp/gnus-setup.el index 25dfda0..1acb6f2 100644 --- a/lisp/gnus-setup.el +++ b/lisp/gnus-setup.el @@ -191,4 +191,5 @@ score the alt hierarchy, you'd say \"!alt.all\"." t nil)) (run-hooks 'gnus-setup-load-hook) +;;; arch-tag: 08e4af93-8565-46bf-905c-36229400609d ;;; gnus-setup.el ends here diff --git a/lisp/gnus-sieve.el b/lisp/gnus-sieve.el index 824e66c..e7409c3 100644 --- a/lisp/gnus-sieve.el +++ b/lisp/gnus-sieve.el @@ -236,4 +236,5 @@ This is returned as a string." (provide 'gnus-sieve) +;;; arch-tag: 3b906527-c7f3-4c86-9e82-62e2697998a3 ;;; gnus-sieve.el ends here diff --git a/lisp/gnus-soup.el b/lisp/gnus-soup.el index 62722b1..4b1185a 100644 --- a/lisp/gnus-soup.el +++ b/lisp/gnus-soup.el @@ -582,4 +582,5 @@ Return whether the unpacking was successful." (provide 'gnus-soup) +;;; arch-tag: eddfa69d-13e8-4aea-84ef-62a526ef185c ;;; gnus-soup.el ends here diff --git a/lisp/gnus-spec.el b/lisp/gnus-spec.el index 97a705e..201c5dd 100644 --- a/lisp/gnus-spec.el +++ b/lisp/gnus-spec.el @@ -1,5 +1,5 @@ ;;; gnus-spec.el --- format spec functions for Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -32,12 +32,14 @@ (defcustom gnus-use-correct-string-widths (featurep 'xemacs) "*If non-nil, use correct functions for dealing with wide characters." + :version "22.1" :group 'gnus-format :type 'boolean) (defcustom gnus-make-format-preserve-properties (featurep 'xemacs) "*If non-nil, use a replacement `format' function which preserves text properties. This is only needed on XEmacs, as FSF Emacs does this anyway." + :version "22.1" :group 'gnus-format :type 'boolean) @@ -180,10 +182,11 @@ text properties. This is only needed on XEmacs, as FSF Emacs does this anyway." (pop-to-buffer "*Gnus Format*") (erase-buffer) (lisp-interaction-mode) - (insert (pp-to-string spec)))) + (insert (gnus-pp-to-string spec)))) (defun gnus-update-format-specifications (&optional force &rest types) - "Update all (necessary) format specifications." + "Update all (necessary) format specifications. +Return a list of updated types." ;; Make the indentation array. ;; See whether all the stored info needs to be flushed. (when (or force @@ -193,21 +196,22 @@ text properties. This is only needed on XEmacs, as FSF Emacs does this anyway." (not (equal emacs-version (cdr (assq 'version gnus-format-specs))))) (setq gnus-format-specs nil)) - ;; Flush the group format spec cache if there's the grouplens stuff. - (let ((spec (assq 'group gnus-format-specs))) - (when (and (memq 'group types) - (string-match " gnus-tmp-grouplens[ )]" - (gnus-prin1-to-string (cdr spec)))) - (setq gnus-format-specs (delq spec gnus-format-specs)))) + ;; Flush the group format spec cache if there's the grouplens stuff + ;; or it doesn't support decoded group names. + (when (memq 'group types) + (let* ((spec (assq 'group gnus-format-specs)) + (sspec (gnus-prin1-to-string (nth 2 spec)))) + (when (or (string-match " gnus-tmp-grouplens[ )]" sspec) + (not (string-match " gnus-tmp-decoded-group[ )]" sspec))) + (setq gnus-format-specs (delq spec gnus-format-specs))))) ;; Go through all the formats and see whether they need updating. - (let (new-format entry type val) + (let (new-format entry type val updated) (while (setq type (pop types)) ;; Jump to the proper buffer to find out the value of the ;; variable, if possible. (It may be buffer-local.) (save-excursion - (let ((buffer (intern (format "gnus-%s-buffer" type))) - val) + (let ((buffer (intern (format "gnus-%s-buffer" type)))) (when (and (boundp buffer) (setq val (symbol-value buffer)) (gnus-buffer-exists-p val)) @@ -237,10 +241,12 @@ text properties. This is only needed on XEmacs, as FSF Emacs does this anyway." (setcar (cdr entry) val) (setcar entry new-format)) (push (list type new-format val) gnus-format-specs)) - (set (intern (format "gnus-%s-line-format-spec" type)) val))))) + (set (intern (format "gnus-%s-line-format-spec" type)) val) + (push type updated)))) - (unless (assq 'version gnus-format-specs) - (push (cons 'version emacs-version) gnus-format-specs))) + (unless (assq 'version gnus-format-specs) + (push (cons 'version emacs-version) gnus-format-specs)) + updated)) (defvar gnus-mouse-face-0 'highlight) (defvar gnus-mouse-face-1 'highlight) @@ -277,21 +283,15 @@ text properties. This is only needed on XEmacs, as FSF Emacs does this anyway." (defun gnus-spec-tab (column) (if (> column 0) - `(insert (make-string (max (- ,column (current-column)) 0) ? )) + `(insert-char ? (max (- ,column (current-column)) 0)) (let ((column (abs column))) - (if gnus-use-correct-string-widths - `(progn - (if (> (current-column) ,column) - (while (progn - (delete-backward-char 1) - (> (current-column) ,column)))) - (insert (make-string (max (- ,column (current-column)) 0) ? ))) - `(progn - (if (> (current-column) ,column) - (delete-region (point) - (- (point) (- (current-column) ,column))) - (insert (make-string (max (- ,column (current-column)) 0) - ? )))))))) + `(if (> (current-column) ,column) + (let ((end (point))) + (if (= (move-to-column ,column) ,column) + (delete-region (point) end) + (delete-region (1- (point)) end) + (insert " "))) + (insert-char ? (max (- ,column (current-column)) 0)))))) (defun gnus-correct-length (string) "Return the correct width of STRING." @@ -763,4 +763,5 @@ If PROPS, insert the result." ;; coding: iso-8859-1 ;; End: +;;; arch-tag: a4328fa1-1f84-4b09-97ad-4b5767cfd50f ;;; gnus-spec.el ends here diff --git a/lisp/gnus-srvr.el b/lisp/gnus-srvr.el index a690659..d33022c 100644 --- a/lisp/gnus-srvr.el +++ b/lisp/gnus-srvr.el @@ -1,5 +1,5 @@ ;;; gnus-srvr.el --- virtual server support for Gnus -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -71,6 +71,7 @@ See Info node `(gnus)Formatting Variables'." (defcustom gnus-server-browse-in-group-buffer nil "Whether server browsing should take place in the group buffer. If nil, a faster, but more primitive, buffer is used instead." + :version "22.1" :group 'gnus-server-visual :type 'boolean) @@ -204,26 +205,31 @@ If nil, a faster, but more primitive, buffer is used instead." (defcustom gnus-server-agent-face 'gnus-server-agent-face "Face name to use on AGENTIZED servers." + :version "22.1" :group 'gnus-server-visual :type 'face) (defcustom gnus-server-opened-face 'gnus-server-opened-face "Face name to use on OPENED servers." + :version "22.1" :group 'gnus-server-visual :type 'face) (defcustom gnus-server-closed-face 'gnus-server-closed-face "Face name to use on CLOSED servers." + :version "22.1" :group 'gnus-server-visual :type 'face) (defcustom gnus-server-denied-face 'gnus-server-denied-face "Face name to use on DENIED servers." + :version "22.1" :group 'gnus-server-visual :type 'face) (defcustom gnus-server-offline-face 'gnus-server-offline-face "Face name to use on OFFLINE servers." + :version "22.1" :group 'gnus-server-visual :type 'face) @@ -313,7 +319,6 @@ The following commands are available: (gnus-set-format 'server t) (let ((alist gnus-server-alist) (buffer-read-only nil) - (opened gnus-opened-servers) done server op-ser) (erase-buffer) (setq gnus-inserted-opened-servers nil) @@ -328,16 +333,15 @@ The following commands are available: (pop alist))) ;; Then we insert the list of servers that have been opened in ;; this session. - (while opened - (when (and (not (member (caar opened) done)) + (dolist (open gnus-opened-servers) + (when (and (not (member (car open) done)) ;; Just ignore ephemeral servers. - (not (member (caar opened) gnus-ephemeral-servers))) - (push (caar opened) done) + (not (member (car open) gnus-ephemeral-servers))) + (push (car open) done) (gnus-server-insert-server-line - (setq op-ser (format "%s:%s" (caaar opened) (nth 1 (caar opened)))) - (caar opened)) - (push (list op-ser (caar opened)) gnus-inserted-opened-servers)) - (setq opened (cdr opened)))) + (setq op-ser (format "%s:%s" (caar open) (nth 1 (car open)))) + (car open)) + (push (list op-ser (car open)) gnus-inserted-opened-servers)))) (goto-char (point-min)) (gnus-server-position-point)) @@ -391,7 +395,14 @@ The following commands are available: (if cached (setq gnus-server-method-cache (delq cached gnus-server-method-cache))) - (if entry (setcdr entry info) + (if entry + (progn + ;; Remove the server from `gnus-opened-servers' since + ;; it has never been opened with the new `info' yet. + (gnus-opened-servers-remove (cdr entry)) + ;; Don't make a new Lisp object. + (setcar (cdr entry) (car info)) + (setcdr (cdr entry) (cdr info))) (setq gnus-server-alist (nconc gnus-server-alist (list (cons server info)))))))) @@ -492,9 +503,8 @@ The following commands are available: (defun gnus-server-open-all-servers () "Open all servers." (interactive) - (let ((servers gnus-inserted-opened-servers)) - (while servers - (gnus-server-open-server (car (pop servers)))))) + (dolist (server gnus-inserted-opened-servers) + (gnus-server-open-server (car server)))) (defun gnus-server-close-server (server) "Close SERVER." @@ -853,23 +863,26 @@ buffer. (setq buffer-read-only t) (gnus-run-hooks 'gnus-browse-mode-hook)) -(defun gnus-browse-read-group (&optional no-article) - "Enter the group at the current line." - (interactive) +(defun gnus-browse-read-group (&optional no-article number) + "Enter the group at the current line. +If NUMBER, fetch this number of articles." + (interactive "P") (let ((group (gnus-browse-group-name))) (if (or (not (gnus-get-info group)) (gnus-ephemeral-group-p group)) (unless (gnus-group-read-ephemeral-group group gnus-browse-current-method nil - (cons (current-buffer) 'browse)) + (cons (current-buffer) 'browse) + nil nil nil number) (error "Couldn't enter %s" group)) (unless (gnus-group-read-group nil no-article group) (error "Couldn't enter %s" group))))) -(defun gnus-browse-select-group () - "Select the current group." - (interactive) - (gnus-browse-read-group 'no)) +(defun gnus-browse-select-group (&optional number) + "Select the current group. +If NUMBER, fetch this number of articles." + (interactive "P") + (gnus-browse-read-group 'no number)) (defun gnus-browse-next-group (n) "Go to the next group." @@ -990,4 +1003,5 @@ buffer. (provide 'gnus-srvr) +;;; arch-tag: c0117f64-27ca-475d-9406-8da6854c7a25 ;;; gnus-srvr.el ends here diff --git a/lisp/gnus-start.el b/lisp/gnus-start.el index c77e00c..c990667 100644 --- a/lisp/gnus-start.el +++ b/lisp/gnus-start.el @@ -1,5 +1,5 @@ ;;; gnus-start.el --- startup functions for Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -37,7 +37,7 @@ (autoload 'gnus-agent-save-local "gnus-agent") (autoload 'gnus-agent-possibly-alter-active "gnus-agent") -(eval-when-compile +(eval-when-compile (require 'cl) (defvar gnus-agent-covered-methods nil) @@ -54,6 +54,7 @@ "Whether to create backup files. This variable takes the same values as the `version-control' variable." + :version "22.1" :group 'gnus-start :type '(choice (const :tag "Never" never) (const :tag "If existing" nil) @@ -64,6 +65,7 @@ variable." the buffer or write directly to the file. The buffer is faster because all of the contents are written at once. The direct write uses considerably less memory." + :version "22.1" :group 'gnus-start :type '(choice (const :tag "Write via buffer" t) (const :tag "Write directly to file" nil))) @@ -256,7 +258,7 @@ not match this regexp will be removed before saving the list." (and value (not (stringp value)))) :value t) (const nil) - (regexp :format "%t: %v\n" :size 0))) + regexp)) (defcustom gnus-ignored-newsgroups (mapconcat 'identity @@ -297,6 +299,7 @@ claim them." (defcustom gnus-subscribe-newsgroup-hooks nil "*Hooks run after you subscribe to a new group. The hooks will be called with new group's name as argument." + :version "22.1" :group 'gnus-group-new :type 'hook) @@ -403,6 +406,7 @@ This hook is called as the first thing when Gnus is started." (defcustom gnus-get-top-new-news-hook nil "A hook run just before Gnus checks for new news globally." + :version "22.1" :group 'gnus-group-new :type 'hook) @@ -496,19 +500,23 @@ Can be used to turn version control on or off." (defun gnus-subscribe-hierarchical-interactive (groups) (let ((groups (sort groups 'string<)) - prefixes prefix start ans group starts) + prefixes prefix start ans group starts real-group) (while groups (setq prefixes (list "^")) (while (and groups prefixes) - (while (not (string-match (car prefixes) (car groups))) + (while (not (string-match (car prefixes) + (gnus-group-real-name (car groups)))) (setq prefixes (cdr prefixes))) (setq prefix (car prefixes)) (setq start (1- (length prefix))) - (if (and (string-match "[^\\.]\\." (car groups) start) + (if (and (string-match "[^\\.]\\." (gnus-group-real-name (car groups)) + start) (cdr groups) (setq prefix - (concat "^" (substring (car groups) 0 (match-end 0)))) - (string-match prefix (cadr groups))) + (concat "^" (substring + (gnus-group-real-name (car groups)) + 0 (match-end 0)))) + (string-match prefix (gnus-group-real-name (cadr groups)))) (progn (push prefix prefixes) (message "Descend hierarchy %s? ([y]nsq): " @@ -520,16 +528,18 @@ Can be used to turn version control on or off." (substring prefix 1 (1- (length prefix))))) (cond ((= ans ?n) (while (and groups - (string-match prefix - (setq group (car groups)))) + (setq group (car groups) + real-group (gnus-group-real-name group)) + (string-match prefix real-group)) (push group gnus-killed-list) (gnus-sethash group group gnus-killed-hashtb) (setq groups (cdr groups))) (setq starts (cdr starts))) ((= ans ?s) (while (and groups - (string-match prefix - (setq group (car groups)))) + (setq group (car groups) + real-group (gnus-group-real-name group)) + (string-match prefix real-group)) (gnus-sethash group group gnus-killed-hashtb) (gnus-subscribe-alphabetically (car groups)) (setq groups (cdr groups))) @@ -870,7 +880,7 @@ prompt the user for the name of an NNTP server to use." (when (and (file-exists-p gnus-current-startup-file) (file-exists-p dribble-file) (setq modes (file-modes gnus-current-startup-file))) - (set-file-modes dribble-file modes)) + (gnus-set-file-modes dribble-file modes)) (goto-char (point-min)) (when (search-forward "Gnus was exited on purpose" nil t) (setq purpose t)) @@ -942,16 +952,28 @@ If LEVEL is non-nil, the news will be set up at level LEVEL." ;; Make sure the archive server is available to all and sundry. (when gnus-message-archive-method (unless (assoc "archive" gnus-server-alist) - (push `("archive" - nnfolder - "archive" - (nnfolder-directory - ,(nnheader-concat message-directory "archive")) - (nnfolder-active-file - ,(nnheader-concat message-directory "archive/active")) - (nnfolder-get-new-mail nil) - (nnfolder-inhibit-expiry t)) - gnus-server-alist))) + (let ((method (or (and (stringp gnus-message-archive-method) + (gnus-server-to-method + gnus-message-archive-method)) + gnus-message-archive-method))) + ;; Check whether the archive method is writable. + (unless (or (stringp method) + (memq 'respool (assoc (format "%s" (car method)) + gnus-valid-select-methods))) + (setq method "archive")) ;; The default. + (push (if (stringp method) + `("archive" + nnfolder + ,method + (nnfolder-directory + ,(nnheader-concat message-directory method)) + (nnfolder-active-file + ,(nnheader-concat message-directory + (concat method "/active"))) + (nnfolder-get-new-mail nil) + (nnfolder-inhibit-expiry t)) + (cons "archive" method)) + gnus-server-alist)))) ;; If we don't read the complete active file, we fill in the ;; hashtb here. @@ -1479,8 +1501,8 @@ newsgroup." (setcdr active (cdr cache-active)))))))) (defun gnus-activate-group (group &optional scan dont-check method) - ;; Check whether a group has been activated or not. - ;; If SCAN, request a scan of that group as well. + "Check whether a group has been activated or not. +If SCAN, request a scan of that group as well." (let ((method (or method (inline (gnus-find-method-for-group group)))) active) (and (inline (gnus-check-server method)) @@ -1525,7 +1547,7 @@ newsgroup." active))))) (defun gnus-get-unread-articles-in-group (info active &optional update) - (when active + (when (and info active) ;; Allow the backend to update the info in the group. (when (and update (gnus-request-update-info @@ -1637,12 +1659,12 @@ newsgroup." (methods-cache nil) (type-cache nil) scanned-methods info group active method retrieve-groups cmethod - method-type) + method-type ignore) (gnus-message 6 "Checking new news...") (while newsrc (setq active (gnus-active (setq group (gnus-info-group - (setq info (pop newsrc)))))) + (setq info (pop newsrc)))))) ;; Check newsgroups. If the user doesn't want to check them, or ;; they can't be checked (for instance, if the news server can't @@ -1665,28 +1687,30 @@ newsgroup." (when (and method (not (setq method-type (cdr (assoc method type-cache))))) (setq method-type - (cond - ((gnus-secondary-method-p method) - 'secondary) - ((inline (gnus-server-equal gnus-select-method method)) - 'primary) - (t - 'foreign))) + (cond + ((gnus-secondary-method-p method) + 'secondary) + ((inline (gnus-server-equal gnus-select-method method)) + 'primary) + (t + 'foreign))) (push (cons method method-type) type-cache)) + (setq ignore nil) (cond ((and method (eq method-type 'foreign)) ;; These groups are foreign. Check the level. - (when (and (<= (gnus-info-level info) foreign-level) - (setq active (gnus-activate-group group 'scan))) - ;; Let the Gnus agent save the active file. - (when (and gnus-agent active (gnus-online method)) - (gnus-agent-save-group-info - method (gnus-group-real-name group) active)) - (unless (inline (gnus-virtual-group-p group)) - (inline (gnus-close-group group))) - (when (fboundp (intern (concat (symbol-name (car method)) - "-request-update-info"))) - (inline (gnus-request-update-info info method))))) + (if (<= (gnus-info-level info) foreign-level) + (when (setq active (gnus-activate-group group 'scan)) + ;; Let the Gnus agent save the active file. + (when (and gnus-agent active (gnus-online method)) + (gnus-agent-save-group-info + method (gnus-group-real-name group) active)) + (unless (inline (gnus-virtual-group-p group)) + (inline (gnus-close-group group))) + (when (fboundp (intern (concat (symbol-name (car method)) + "-request-update-info"))) + (inline (gnus-request-update-info info method)))) + (setq ignore t))) ;; These groups are native or secondary. ((> (gnus-info-level info) level) ;; We don't want these groups. @@ -1725,6 +1749,10 @@ newsgroup." ((eq active 'ignore) ;; Don't do anything. ) + ((and active ignore) + ;; The level of the foreign group is higher than the specified + ;; value. + ) (active (inline (gnus-get-unread-articles-in-group info active t))) (t @@ -1745,8 +1773,8 @@ newsgroup." (when (gnus-check-backend-function 'request-scan (car method)) (gnus-request-scan nil method)) (gnus-read-active-file-2 - (mapcar (lambda (group) (gnus-group-real-name group)) groups) - method) + (mapcar (lambda (group) (gnus-group-real-name group)) groups) + method) (dolist (group groups) (cond ((setq active (gnus-active (gnus-info-group @@ -1765,7 +1793,7 @@ newsgroup." (defun gnus-make-hashtable-from-newsrc-alist () (let ((alist gnus-newsrc-alist) (ohashtb gnus-newsrc-hashtb) - prev) + prev info method rest methods) (setq gnus-newsrc-hashtb (gnus-make-hashtable (length alist))) (setq alist (setq prev (setq gnus-newsrc-alist @@ -1774,14 +1802,26 @@ newsgroup." gnus-newsrc-alist (cons (list "dummy.group" 0 nil) alist))))) (while alist + (setq info (car alist)) + ;; Make the same select-methods identical Lisp objects. + (when (setq method (gnus-info-method info)) + (if (setq rest (member method methods)) + (gnus-info-set-method info (car rest)) + (push method methods))) (gnus-sethash - (caar alist) + (car info) ;; Preserve number of unread articles in groups. - (cons (and ohashtb (car (gnus-gethash (caar alist) ohashtb))) + (cons (and ohashtb (car (gnus-gethash (car info) ohashtb))) prev) gnus-newsrc-hashtb) (setq prev alist - alist (cdr alist))))) + alist (cdr alist))) + ;; Make the same select-methods in `gnus-server-alist' identical + ;; as well. + (while methods + (setq method (pop methods)) + (when (setq rest (rassoc method gnus-server-alist)) + (setcdr rest method))))) (defun gnus-make-hashtable-from-killed () "Create a hash table from the killed and zombie lists." @@ -1882,7 +1922,7 @@ newsgroup." (setcdr range (1- article)) (setq modified t) ranges)))))))) - + (when modified (when (eq modified 'remove-null) (setq r (delq nil r))) @@ -2215,9 +2255,10 @@ If FORCE is non-nil, the .newsrc file is read." (defun gnus-convert-old-newsrc () "Convert old newsrc formats into the current format, if needed." (let ((fcv (and gnus-newsrc-file-version - (gnus-continuum-version gnus-newsrc-file-version)))) + (gnus-continuum-version gnus-newsrc-file-version))) + (gcv (gnus-continuum-version))) (when fcv - ;; A .newsrc.eld file was loaded. + ;; A newsrc file was loaded. (let (prompt-displayed (converters (sort @@ -2233,13 +2274,13 @@ If FORCE is non-nil, the .newsrc file is read." ;; doesn't change with each release) and the ;; function that must be applied to convert the ;; previous version into the current version. - '(("September Gnus v0.1" nil + '(("September Gnus v0.1" nil gnus-convert-old-ticks) ("Oort Gnus v0.08" "legacy-gnus-agent" gnus-agent-convert-to-compressed-agentview) - ("No Gnus v0.2" "legacy-gnus-agent" + ("Gnus v5.10.7" "legacy-gnus-agent" gnus-agent-unlist-expire-days) - ("No Gnus v0.2" "legacy-gnus-agent" + ("Gnus v5.10.7" "legacy-gnus-agent" gnus-agent-unhook-expire-days))) #'car-less-than-car))) ;; Skip converters older than the file version @@ -2248,7 +2289,8 @@ If FORCE is non-nil, the .newsrc file is read." ;; Perform converters to bring older version up to date. (when (and converters (< fcv (caar converters))) - (while (and converters (< fcv (caar converters))) + (while (and converters (< fcv (caar converters)) + (<= (caar converters) gcv)) (let* ((converter-spec (pop converters)) (convert-to (nth 1 converter-spec)) (load-from (nth 2 converter-spec)) @@ -2256,24 +2298,23 @@ If FORCE is non-nil, the .newsrc file is read." (when (and load-from (not (fboundp func))) (load load-from t)) - (or prompt-displayed (not (gnus-convert-converter-needs-prompt func)) (while (let (c (cursor-in-echo-area t) (echo-keystrokes 0)) - (message "Convert newsrc from version '%s' to '%s'? (n/y/?)" + (message "Convert gnus from version '%s' to '%s'? (n/y/?)" gnus-newsrc-file-version gnus-version) (setq c (read-char-exclusive)) (cond ((or (eq c ?n) (eq c ?N)) - (error "Can not start gnus using old (unconverted) newsrc")) + (error "Can not start gnus without converting")) ((or (eq c ?y) (eq c ?Y)) (setq prompt-displayed t) nil) ((eq c ?\?) (message "This conversion is irreversible. \ - You should backup your files before proceeding.") + To be safe, you should backup your files before proceeding.") (sit-for 5) t) (t @@ -2282,20 +2323,22 @@ If FORCE is non-nil, the .newsrc file is read." t))))) (funcall func convert-to))) - (gnus-dribble-enter - (format ";Converted newsrc from version '%s' to '%s'? (n/y/?)" + (gnus-dribble-enter + (format ";Converted gnus from version '%s' to '%s'." gnus-newsrc-file-version gnus-version))))))) (defun gnus-convert-mark-converter-prompt (converter no-prompt) - (setplist converter - (let* ((symbol 'gnus-convert-no-prompt) - (value (delq symbol (symbol-plist converter)))) - (if no-prompt - (cons symbol value) - value)))) + "Indicate whether CONVERTER requires gnus-convert-old-newsrc to + display the conversion prompt. NO-PROMPT may be nil (prompt), + t (no prompt), or any form that can be called as a function. + The form should return either t or nil." + (put converter 'gnus-convert-no-prompt no-prompt)) (defun gnus-convert-converter-needs-prompt (converter) - (not (memq 'gnus-convert-no-prompt (symbol-plist converter)))) + (let ((no-prompt (get converter 'gnus-convert-no-prompt))) + (not (if (memq no-prompt '(t nil)) + no-prompt + (funcall no-prompt))))) (defun gnus-convert-old-ticks (converting-to) (let ((newsrc (cdr gnus-newsrc-alist)) @@ -2752,7 +2795,7 @@ If FORCE is non-nil, the .newsrc file is read." ;; Replace the existing startup file with the temp file. (rename-file working-file startup-file t) - (set-file-modes startup-file setmodes))) + (gnus-set-file-modes startup-file setmodes))) (condition-case nil (delete-file working-file) (file-error nil))))) @@ -2897,7 +2940,7 @@ If FORCE is non-nil, the .newsrc file is read." (let ((coding-system-for-write gnus-ding-file-coding-system)) (gnus-write-buffer slave-name)) (when modes - (set-file-modes slave-name modes))))) + (gnus-set-file-modes slave-name modes))))) (defun gnus-master-read-slave-newsrc () (let ((slave-files @@ -3056,12 +3099,10 @@ If this variable is nil, don't do anything." (file-name-as-directory (expand-file-name gnus-default-directory)) default-directory))) -(eval-and-compile -(defalias 'gnus-display-time-event-handler - (if (gnus-boundp 'display-time-timer) - 'display-time-event-handler - (lambda () "Does nothing as `display-time-timer' is not bound. -Would otherwise be an alias for `display-time-event-handler'." nil)))) +(defun gnus-display-time-event-handler () + (if (and (fboundp 'display-time-event-handler) + (gnus-boundp 'display-time-timer)) + (display-time-event-handler))) ;;;###autoload (defun gnus-fixup-nnimap-unread-after-getting-new-news () @@ -3077,9 +3118,45 @@ Would otherwise be an alias for `display-time-event-handler'." nil)))) (symbol-value 'nnimap-mailbox-info) (make-vector 1 0))))) +(defun gnus-check-reasonable-setup () + ;; Check whether nnml and nnfolder share a directory. + (let ((display-warn + (if (fboundp '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) + (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) +;; arch-tag: f4584a22-b7b7-4853-abfc-a637329af5d2 ;;; gnus-start.el ends here diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 3dcec78..6480c51 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -1,5 +1,5 @@ ;;; gnus-sum.el --- summary mode commands for Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -64,7 +64,7 @@ it will be killed sometime later." "*Non-nil means that Gnus will try to build threads by grabbing old headers. If an unread article in the group refers to an older, already read (or just marked as read) article, the old article will not normally be -displayed in the Summary buffer. If this variable is non-nil, Gnus +displayed in the Summary buffer. If this variable is t, Gnus will attempt to grab the headers to the old articles, and thereby build complete threads. If it has the value `some', only enough headers to connect otherwise loose threads will be displayed. This @@ -75,7 +75,9 @@ old headers will be fetched, but none will be displayed. The server has to support NOV for any of this to work." :group 'gnus-thread :type '(choice (const :tag "off" nil) + (const :tag "on" t) (const some) + (const invisible) number (sexp :menu-tag "other" t))) @@ -117,6 +119,7 @@ given by the `gnus-summary-same-subject' variable.)" (defcustom gnus-summary-make-false-root-always nil "Always make a false dummy root." + :version "22.1" :group 'gnus-thread :type 'boolean) @@ -217,6 +220,7 @@ If this variable is nil, scoring will be disabled." "*Default threshold for a high scored article. An article will be highlighted as high scored if its score is greater than this score." + :version "22.1" :group 'gnus-score-default :type 'integer) @@ -224,6 +228,7 @@ than this score." "*Default threshold for a low scored article. An article will be highlighted as low scored if its score is smaller than this score." + :version "22.1" :group 'gnus-score-default :type 'integer) @@ -259,7 +264,7 @@ to expose hidden threads." (not (or (consp value) (functionp value)))) :value t) (const nil) - (sexp :tag "Predicate specifier" :size 0))) + (sexp :tag "Predicate specifier"))) (defcustom gnus-thread-hide-killed t "*If non-nil, hide killed threads automatically." @@ -319,6 +324,7 @@ the first unseen article), 'unseen-or-unread' (place point on the subject line of the first unseen article or, if all article have been seen, on the subject line of the first unread article), or a function to be called to place point on some subject line." + :version "22.1" :group 'gnus-group-select :type '(choice (const best) (const unread) @@ -362,6 +368,7 @@ ignores articles whose headers have not been fetched). NOTE: The list of unfetched articles will always be nil when plugged and, when unplugged, a subset of the undownloaded article list." + :version "22.1" :group 'gnus-summary-maneuvering :type '(choice (const :tag "None" nil) (const :tag "Undownloaded when unplugged" undownloaded) @@ -375,7 +382,7 @@ current article is unread." :group 'gnus-summary-maneuvering :type 'boolean) -(defcustom gnus-auto-center-summary t +(defcustom gnus-auto-center-summary 2 "*If non-nil, always center the current summary buffer. In particular, if `vertical' do only vertical recentering. If non-nil and non-`vertical', do both horizontal and vertical recentering." @@ -429,6 +436,9 @@ string with the suggested prefix." :group 'gnus-summary-mail :type 'function) +;; FIXME: Although the custom type is `character' for the following variables, +;; using multibyte characters (Latin-1, UTF-8) doesn't work. -- rs + (defcustom gnus-unread-mark ? ;Whitespace "*Mark used for unread articles." :group 'gnus-summary-marks @@ -466,6 +476,7 @@ string with the suggested prefix." (defcustom gnus-spam-mark ?$ "*Mark used for spam articles." + :version "22.1" :group 'gnus-summary-marks :type 'character) @@ -496,11 +507,13 @@ string with the suggested prefix." (defcustom gnus-forwarded-mark ?F "*Mark used for articles that have been forwarded." + :version "22.1" :group 'gnus-summary-marks :type 'character) (defcustom gnus-recent-mark ?N "*Mark used for articles that are recent." + :version "22.1" :group 'gnus-summary-marks :type 'character) @@ -516,11 +529,13 @@ string with the suggested prefix." (defcustom gnus-unseen-mark ?. "*Mark used for articles that haven't been seen." + :version "22.1" :group 'gnus-summary-marks :type 'character) (defcustom gnus-no-mark ? ;Whitespace "*Mark used for articles that have no other secondary mark." + :version "22.1" :group 'gnus-summary-marks :type 'character) @@ -546,6 +561,7 @@ string with the suggested prefix." (defcustom gnus-undownloaded-mark ?- "*Mark used for articles that weren't downloaded." + :version "22.1" :group 'gnus-summary-marks :type 'character) @@ -712,7 +728,6 @@ VALUE should have the form `(FOO nil)' or `(FOO t)', where FOO is an atom. :match 'gnus-widget-reversible-match :value-to-internal 'gnus-widget-reversible-to-internal :value-to-external 'gnus-widget-reversible-to-external) - (defcustom gnus-article-sort-functions '(gnus-article-sort-by-number) "*List of functions used for sorting articles in the summary buffer. @@ -933,16 +948,19 @@ automatically when it is selected." (defcustom gnus-summary-article-move-hook nil "*A hook called after an article is moved, copied, respooled, or crossposted." + :version "22.1" :group 'gnus-summary :type 'hook) (defcustom gnus-summary-article-delete-hook nil "*A hook called after an article is deleted." + :version "22.1" :group 'gnus-summary :type 'hook) (defcustom gnus-summary-article-expire-hook nil "*A hook called after an article is expired." + :version "22.1" :group 'gnus-summary :type 'hook) @@ -950,7 +968,7 @@ automatically when it is selected." (and (fboundp 'display-graphic-p) (display-graphic-p)) "*If non-nil, display an arrow highlighting the current article." - :version "21.1" + :version "22.1" :group 'gnus-summary :type 'boolean) @@ -1128,22 +1146,23 @@ type of files to save." This is mostly relevant for slow back ends where the user may wish to widen the summary buffer to include all headers that were fetched. Say, for nnultimate groups." + :version "22.1" :group 'gnus-summary :type '(choice boolean regexp)) (defcustom gnus-summary-muttprint-program "muttprint" "Command (and optional arguments) used to run Muttprint." - :version "21.3" + :version "22.1" :group 'gnus-summary :type 'string) -(defcustom gnus-article-loose-mime nil +(defcustom gnus-article-loose-mime t "If non-nil, don't require MIME-Version header. Some brain-damaged MUA/MTA, e.g. Lotus Domino 5.0.6 clients, does not -supply the MIME-Version header or deliberately strip it From the mail. -Set it to non-nil, Gnus will treat some articles as MIME even if -the MIME-Version header is missed." - :version "21.3" +supply the MIME-Version header or deliberately strip it from the mail. +If non-nil (the default), Gnus will treat some articles as MIME +even if the MIME-Version header is missing." + :version "22.1" :type 'boolean :group 'gnus-article-mime) @@ -1152,6 +1171,7 @@ the MIME-Version header is missed." This means that Gnus will search message bodies for text that look like uuencoded bits, yEncoded bits, and so on, and present that using the normal Gnus MIME machinery." + :version "22.1" :type 'boolean :group 'gnus-article-mime) @@ -1469,7 +1489,6 @@ For example: nil (load "gnus-sum.el" t t t)) (require 'gnus) - (require 'gnus-agent) (require 'gnus-art))) ;; MIME stuff. @@ -1710,6 +1729,7 @@ increase the score of each group you read." "\C-c\C-s\C-l" gnus-summary-sort-by-lines "\C-c\C-s\C-c" gnus-summary-sort-by-chars "\C-c\C-s\C-a" gnus-summary-sort-by-author + "\C-c\C-s\C-t" gnus-summary-sort-by-recipient "\C-c\C-s\C-s" gnus-summary-sort-by-subject "\C-c\C-s\C-d" gnus-summary-sort-by-date "\C-c\C-s\C-i" gnus-summary-sort-by-score @@ -1737,6 +1757,7 @@ increase the score of each group you read." "Q" gnus-summary-exit-no-update "\C-c\C-i" gnus-info-find-node gnus-mouse-2 gnus-mouse-pick-article + [follow-link] mouse-face "m" gnus-summary-mail-other-window "a" gnus-summary-post-news "i" gnus-summary-news-other-window @@ -1820,7 +1841,8 @@ increase the score of each group you read." "C" gnus-summary-limit-mark-excluded-as-read "o" gnus-summary-insert-old-articles "N" gnus-summary-insert-new-articles - "r" gnus-summary-limit-to-replied) + "r" gnus-summary-limit-to-replied + "R" gnus-summary-limit-to-recipient) (gnus-define-keys (gnus-summary-goto-map "G" gnus-summary-mode-map) "n" gnus-summary-next-unread-article @@ -1923,7 +1945,8 @@ increase the score of each group you read." "v" gnus-summary-verbose-headers "a" gnus-article-strip-headers-in-body ;; mnemonic: wash archive "p" gnus-article-verify-x-pgp-sig - "d" gnus-article-treat-dumbquotes) + "d" gnus-article-treat-dumbquotes + "i" gnus-summary-idna-message) (gnus-define-keys (gnus-summary-wash-deuglify-map "Y" gnus-summary-wash-map) ;; mnemonic: deuglif*Y* @@ -2246,6 +2269,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) ["Rot 13" gnus-summary-caesar-message ,@(if (featurep 'xemacs) '(t) '(:help "\"Caesar rotate\" article by 13"))] + ["De-IDNA" gnus-summary-idna-message t] ["Morse decode" gnus-summary-morse-message t] ["Unix pipe..." gnus-summary-pipe-message t] ["Add buttons" gnus-article-add-buttons t] @@ -2282,8 +2306,12 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) ["Pipe through a filter..." gnus-summary-pipe-output t] ["Add to SOUP packet" gnus-soup-add-article t] ["Print with Muttprint..." gnus-summary-muttprint t] - ["Print" gnus-summary-print-article t]) - ("Backend" + ["Print" gnus-summary-print-article + ,@(if (featurep 'xemacs) '(t) + '(:help "Generate and print a PostScript image"))]) + ("Copy, move,... (Backend)" + ,@(if (featurep 'xemacs) nil + '(:help "Copying, moving, expiring articles...")) ["Respool article..." gnus-summary-respool-article t] ["Move article..." gnus-summary-move-article (gnus-check-backend-function @@ -2374,7 +2402,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) `("Post" ["Send a message (mail or news)" gnus-summary-post-news ,@(if (featurep 'xemacs) '(t) - '(:help "Post an article"))] + '(:help "Compose a new message (mail or news)"))] ["Followup" gnus-summary-followup ,@(if (featurep 'xemacs) '(t) '(:help "Post followup to this article"))] @@ -2453,6 +2481,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) ["Marks..." gnus-summary-limit-to-marks t] ["Subject..." gnus-summary-limit-to-subject t] ["Author..." gnus-summary-limit-to-author t] + ["Recipient..." gnus-summary-limit-to-recipient t] ["Age..." gnus-summary-limit-to-age t] ["Extra..." gnus-summary-limit-to-extra t] ["Score..." gnus-summary-limit-to-score t] @@ -2473,6 +2502,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) ["Set mark" gnus-summary-mark-as-processable t] ["Remove mark" gnus-summary-unmark-as-processable t] ["Remove all marks" gnus-summary-unmark-all-processable t] + ["Invert marks" gnus-uu-invert-processable t] ["Mark above" gnus-uu-mark-over t] ["Mark series" gnus-uu-mark-series t] ["Mark region" gnus-uu-mark-region (gnus-mark-active-p)] @@ -2516,6 +2546,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) ("Sort" ["Sort by number" gnus-summary-sort-by-number t] ["Sort by author" gnus-summary-sort-by-author t] + ["Sort by recipient" gnus-summary-sort-by-recipient t] ["Sort by subject" gnus-summary-sort-by-subject t] ["Sort by date" gnus-summary-sort-by-date t] ["Sort by score" gnus-summary-sort-by-score t] @@ -2610,6 +2641,8 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) (tool-bar-add-item-from-menu 'gnus-uu-post-news "uu-post" gnus-summary-mode-map) (tool-bar-add-item-from-menu + 'gnus-uu-post-news "uu-post" gnus-summary-mode-map) + (tool-bar-add-item-from-menu 'gnus-summary-catchup "catchup" gnus-summary-mode-map) (tool-bar-add-item-from-menu 'gnus-summary-catchup-and-exit "cu-exit" gnus-summary-mode-map) @@ -2741,7 +2774,8 @@ The following commands are available: (make-local-variable 'minor-mode-alist) (use-local-map gnus-summary-mode-map) (buffer-disable-undo) - (setq buffer-read-only t) ;Disable modification + (setq buffer-read-only t ;Disable modification + show-trailing-whitespace nil) (setq truncate-lines t) (setq selective-display t) (setq selective-display-ellipses t) ;Display `...' @@ -2780,9 +2814,9 @@ The following commands are available: (let ((locals gnus-summary-local-variables)) (while locals (if (consp (car locals)) - (and (vectorp (caar locals)) + (and (symbolp (caar locals)) (set (caar locals) nil)) - (and (vectorp (car locals)) + (and (symbolp (car locals)) (set (car locals) nil))) (setq locals (cdr locals))))) @@ -2854,10 +2888,9 @@ The following commands are available: (setq gnus-newsgroup-data (nconc list gnus-newsgroup-data)) (when offset (gnus-data-update-list odata offset))) - ;; Find the last element in the list to be spliced into the main + ;; Find the last element in the list to be spliced into the main ;; list. - (while (cdr list) - (setq list (cdr list))) + (setq list (last list)) (if (not data) (progn (setcdr list gnus-newsgroup-data) @@ -3264,34 +3297,55 @@ buffer that was in action when the last article was fetched." (save-excursion (when (gnus-buffer-exists-p gnus-summary-buffer) (set-buffer gnus-summary-buffer)) - (let ((gnus-replied-mark 129) - (gnus-score-below-mark 130) - (gnus-score-over-mark 130) - (gnus-undownloaded-mark 131) - (spec gnus-summary-line-format-spec) - gnus-visual pos) + (let ((spec gnus-summary-line-format-spec) + pos) (save-excursion (gnus-set-work-buffer) - (let ((gnus-summary-line-format-spec spec) - (gnus-newsgroup-downloadable '(0))) - (gnus-summary-insert-line - [0 "" "" "05 Apr 2001 23:33:09 +0400" "" "" 0 0 "" nil] - 0 nil t 128 t nil "" nil 1) + (let ((gnus-tmp-unread ?Z) + (gnus-replied-mark ?Z) + (gnus-score-below-mark ?Z) + (gnus-score-over-mark ?Z) + (gnus-undownloaded-mark ?Z) + (gnus-summary-line-format-spec spec) + (gnus-newsgroup-downloadable '(0)) + (header [0 "" "" "05 Apr 2001 23:33:09 +0400" "" "" 0 0 "" nil]) + case-fold-search ignores) + ;; Here, all marks are bound to Z. + (gnus-summary-insert-line header + 0 nil t gnus-tmp-unread t nil "" nil 1) + (goto-char (point-min)) + ;; Memorize the positions of the same characters as dummy marks. + (while (re-search-forward "[A-D]" nil t) + (push (point) ignores)) + (erase-buffer) + ;; We use A-D as dummy marks in order to know column positions + ;; where marks should be inserted. + (setq gnus-tmp-unread ?A + gnus-replied-mark ?B + gnus-score-below-mark ?C + gnus-score-over-mark ?C + gnus-undownloaded-mark ?D) + (gnus-summary-insert-line header + 0 nil t gnus-tmp-unread t nil "" nil 1) + ;; Ignore characters which aren't dummy marks. + (dolist (p ignores) + (delete-region (goto-char (1- p)) p) + (insert ?Z)) (goto-char (point-min)) - (setq pos (list (cons 'unread (and (search-forward "\200" nil t) - (- (point) (point-min) 1))))) + (setq pos (list (cons 'unread + (and (search-forward "A" nil t) + (- (point) (point-min) 1))))) (goto-char (point-min)) - (push (cons 'replied (and (search-forward "\201" nil t) + (push (cons 'replied (and (search-forward "B" nil t) (- (point) (point-min) 1))) pos) (goto-char (point-min)) - (push (cons 'score (and (search-forward "\202" nil t) + (push (cons 'score (and (search-forward "C" nil t) (- (point) (point-min) 1))) pos) (goto-char (point-min)) - (push (cons 'download - (and (search-forward "\203" nil t) - (- (point) (point-min) 1))) + (push (cons 'download (and (search-forward "D" nil t) + (- (point) (point-min) 1))) pos))) (setq gnus-summary-mark-positions pos)))) @@ -3474,12 +3528,8 @@ This function is intended to be used in (defun gnus-summary-set-local-parameters (group) "Go through the local params of GROUP and set all variable specs in that list." - (let ((params (gnus-group-find-parameter group)) - (vars '(quit-config)) ; Ignore quit-config. - elem) - (while params - (setq elem (car params) - params (cdr params)) + (let ((vars '(quit-config))) ; Ignore quit-config. + (dolist (elem (gnus-group-find-parameter group)) (and (consp elem) ; Has to be a cons. (consp (cdr elem)) ; The cdr has to be a list. (symbolp (car elem)) ; Has to be a symbol in there. @@ -3588,9 +3638,11 @@ If NO-DISPLAY, don't generate a summary buffer." (gnus-active gnus-newsgroup-name))) ;; You can change the summary buffer in some way with this hook. (gnus-run-hooks 'gnus-select-group-hook) - (gnus-update-format-specifications - nil 'summary 'summary-mode 'summary-dummy) - (gnus-update-summary-mark-positions) + (when (memq 'summary (gnus-update-format-specifications + nil 'summary 'summary-mode 'summary-dummy)) + ;; The format specification for the summary line was updated, + ;; so we need to update the mark positions as well. + (gnus-update-summary-mark-positions)) ;; Do score processing. (when gnus-use-scoring (gnus-possibly-score-headers)) @@ -3598,16 +3650,10 @@ If NO-DISPLAY, don't generate a summary buffer." (when gnus-build-sparse-threads (gnus-build-sparse-threads)) ;; Find the initial limit. - (if gnus-show-threads - (if show-all - (let ((gnus-newsgroup-dormant nil)) - (gnus-summary-initial-limit show-all)) + (if show-all + (let ((gnus-newsgroup-dormant nil)) (gnus-summary-initial-limit show-all)) - ;; When unthreaded, all articles are always shown. - (setq gnus-newsgroup-limit - (mapcar - (lambda (header) (mail-header-number header)) - gnus-newsgroup-headers))) + (gnus-summary-initial-limit show-all)) ;; Generate the summary buffer. (unless no-display (gnus-summary-prepare)) @@ -4077,7 +4123,7 @@ Returns HEADER if it was entered in the DEPENDENCIES. Returns nil otherwise." (setq x (nnheader-nov-field)))) (error x)) (nnheader-nov-field) ; date - (nnheader-nov-read-message-id) ; id + (nnheader-nov-read-message-id number) ; id (setq references (nnheader-nov-field)) ; refs (nnheader-nov-read-integer) ; chars (nnheader-nov-read-integer) ; lines @@ -4529,6 +4575,18 @@ using some other form will lead to serious barfage." (gnus-article-sort-by-author (gnus-thread-header h1) (gnus-thread-header h2))) +(defsubst gnus-article-sort-by-recipient (h1 h2) + "Sort articles by recipient." + (string-lessp + (let ((extract (funcall + gnus-extract-address-components + (or (cdr (assq 'To (mail-header-extra h1))) "")))) + (or (car extract) (cadr extract))) + (let ((extract (funcall + gnus-extract-address-components + (or (cdr (assq 'To (mail-header-extra h2))) "")))) + (or (car extract) (cadr extract))))) + (defsubst gnus-article-sort-by-subject (h1 h2) "Sort articles by root subject." (string-lessp @@ -4646,32 +4704,39 @@ Unscored articles will be counted as having a score of zero." (defcustom gnus-sum-thread-tree-root "> " "With %B spec, used for the root of a thread. If nil, use subject instead." - :type '(radio (const :format "%v " nil) (string :size 0)) + :version "22.1" + :type '(radio (const :format "%v " nil) string) :group 'gnus-thread) (defcustom gnus-sum-thread-tree-false-root "> " "With %B spec, used for a false root of a thread. If nil, use subject instead." - :type '(radio (const :format "%v " nil) (string :size 0)) + :version "22.1" + :type '(radio (const :format "%v " nil) string) :group 'gnus-thread) (defcustom gnus-sum-thread-tree-single-indent "" "With %B spec, used for a thread with just one message. If nil, use subject instead." - :type '(radio (const :format "%v " nil) (string :size 0)) + :version "22.1" + :type '(radio (const :format "%v " nil) string) :group 'gnus-thread) (defcustom gnus-sum-thread-tree-vertical "| " "With %B spec, used for drawing a vertical line." + :version "22.1" :type 'string :group 'gnus-thread) (defcustom gnus-sum-thread-tree-indent " " "With %B spec, used for indenting." + :version "22.1" :type 'string :group 'gnus-thread) (defcustom gnus-sum-thread-tree-leaf-with-other "+-> " "With %B spec, used for a leaf with brothers." + :version "22.1" :type 'string :group 'gnus-thread) (defcustom gnus-sum-thread-tree-single-leaf "\\-> " "With %B spec, used for a leaf without brothers." + :version "22.1" :type 'string :group 'gnus-thread) @@ -5094,7 +5159,7 @@ If SELECT-ARTICLES, only select those articles from GROUP." (when gnus-agent (gnus-agent-possibly-alter-active group (gnus-active group) info) - + (setq gnus-summary-use-undownloaded-faces (gnus-agent-find-parameter group @@ -5296,8 +5361,7 @@ If SELECT-ARTICLES, only select those articles from GROUP." (defun gnus-articles-to-read (group &optional read-all) "Find out what articles the user wants to read." - (let* ((display (gnus-group-find-parameter group 'display)) - (articles + (let* ((articles ;; Select all articles if `read-all' is non-nil, or if there ;; are no unread articles. (if (or read-all @@ -5784,7 +5848,7 @@ The resulting hash table is returned, or nil if no Xrefs were found." (or dependencies (with-current-buffer gnus-summary-buffer gnus-newsgroup-dependencies))) - headers id end ref + headers id end ref number (mail-parse-charset gnus-newsgroup-charset) (mail-parse-ignored-charsets (save-excursion (condition-case nil @@ -5817,7 +5881,7 @@ The resulting hash table is returned, or nil if no Xrefs were found." (vector ;; Number. (prog1 - (read cur) + (setq number (read cur)) (end-of-line) (setq p (point)) (narrow-to-region (point) @@ -5854,7 +5918,7 @@ The resulting hash table is returned, or nil if no Xrefs were found." (match-end 1)) ;; If there was no message-id, we just fake one ;; to make subsequent routines simpler. - (nnheader-generate-fake-message-id)))) + (nnheader-generate-fake-message-id number)))) ;; References. (progn (goto-char p) @@ -6048,6 +6112,10 @@ the subject line on." (prog1 (1+ (point-at-eol)) (gnus-delete-line)))))) + ;; Remove list identifiers from subject. + (when gnus-list-identifiers + (let ((gnus-newsgroup-headers (list header))) + (gnus-summary-remove-list-identifiers))) (when old-header (mail-header-set-number header (mail-header-number old-header))) (setq gnus-newsgroup-sparse @@ -6156,8 +6224,7 @@ executed with point over the summary line of the articles." (defun gnus-summary-process-mark-set (set) "Make SET into the current process marked articles." (gnus-summary-unmark-all-processable) - (while set - (gnus-summary-set-process-mark (pop set)))) + (mapc 'gnus-summary-set-process-mark set)) ;;; Searching and stuff @@ -6304,7 +6371,7 @@ displayed, no centering will be performed." ((< (window-height) 7) 1) (t (if (numberp gnus-auto-center-summary) gnus-auto-center-summary - 2)))) + (/ (1- (window-height)) 2))))) (height (1- (window-height))) (bottom (save-excursion (goto-char (point-max)) (forward-line (- height)) @@ -6362,7 +6429,8 @@ displayed, no centering will be performed." (defun gnus-list-of-unread-articles (group) (let* ((read (gnus-info-read (gnus-get-info group))) (active (or (gnus-active group) (gnus-activate-group group))) - (last (cdr active)) + (last (or (cdr active) + (error "Group %s couldn't be activated " group))) first nlast unread) ;; If none are read, then all are unread. (if (not read) @@ -6656,25 +6724,20 @@ If FORCE (the prefix), also save the .newsrc file(s)." (gnus-summary-clear-local-variables)) (when (get-buffer gnus-article-buffer) (bury-buffer gnus-article-buffer)) - ;; We clear the global counterparts of the buffer-local - ;; variables as well, just to be on the safe side. - (set-buffer gnus-group-buffer) - (gnus-summary-clear-local-variables) - (let ((gnus-summary-local-variables gnus-newsgroup-variables)) - (gnus-summary-clear-local-variables)) ;; Return to group mode buffer. (when (eq mode 'gnus-summary-mode) (gnus-kill-buffer buf))) (setq gnus-current-select-method gnus-select-method) - (if leave-hidden - (set-buffer gnus-group-buffer) - (pop-to-buffer gnus-group-buffer)) - (if (not quit-config) - (progn - (goto-char group-point) - (unless leave-hidden - (gnus-configure-windows 'group 'force))) - (gnus-handle-ephemeral-exit quit-config)) + (set-buffer gnus-group-buffer) + (if quit-config + (gnus-handle-ephemeral-exit quit-config) + (goto-char group-point) + ;; If gnus-group-buffer is already displayed, make sure we also move + ;; the cursor in the window that displays it. + (let ((win (get-buffer-window (current-buffer) 0))) + (if win (set-window-point win (point)))) + (unless leave-hidden + (gnus-configure-windows 'group 'force))) ;; Clear the current group name. (unless quit-config (setq gnus-newsgroup-name nil))))) @@ -6710,10 +6773,6 @@ If FORCE (the prefix), also save the .newsrc file(s)." (gnus-summary-clear-local-variables) (let ((gnus-summary-local-variables gnus-newsgroup-variables)) (gnus-summary-clear-local-variables)) - (set-buffer gnus-group-buffer) - (gnus-summary-clear-local-variables) - (let ((gnus-summary-local-variables gnus-newsgroup-variables)) - (gnus-summary-clear-local-variables)) (gnus-kill-buffer gnus-summary-buffer)) (unless gnus-single-article-buffer (setq gnus-article-current nil)) @@ -7035,7 +7094,7 @@ If optional argument UNREAD is non-nil, only unread article is selected." (gnus-summary-goto-subject article t))) (gnus-summary-limit (append articles gnus-newsgroup-limit)) (gnus-summary-position-point)) - + (defun gnus-summary-goto-subject (article &optional force silent) "Go the subject line of ARTICLE. If FORCE, also allow jumping to articles not currently shown." @@ -7239,11 +7298,12 @@ If BACKWARD, the previous article is selected instead of the next." (if (and group (not (gnus-ephemeral-group-p gnus-newsgroup-name))) (format " (Type %s for %s [%s])" - (single-key-description cmd) group + (single-key-description cmd) + (gnus-group-decoded-name group) (gnus-group-unread group)) (format " (Type %s to exit %s)" (single-key-description cmd) - gnus-newsgroup-name)))) + (gnus-group-decoded-name gnus-newsgroup-name))))) ;; Confirm auto selection. (setq key (car (setq keve (gnus-read-event-char prompt))) ended t) @@ -7628,6 +7688,49 @@ If NOT-MATCHING, excluding articles that have authors that match a regexp." current-prefix-arg)) (gnus-summary-limit-to-subject from "from" not-matching)) +(defun gnus-summary-limit-to-recipient (recipient &optional not-matching) + "Limit the summary buffer to articles with the given RECIPIENT. + +If NOT-MATCHING, exclude RECIPIENT. + +To and Cc headers are checked. You need to include them in +`nnmail-extra-headers'." + ;; Unlike `rmail-summary-by-recipients', doesn't include From. + (interactive + (list (read-string (format "%s recipient (regexp): " + (if current-prefix-arg "Exclude" "Limit to"))) + current-prefix-arg)) + (when (not (equal "" recipient)) + (prog1 (let* ((to + (if (memq 'To nnmail-extra-headers) + (gnus-summary-find-matching + (cons 'extra 'To) recipient 'all nil nil + not-matching) + (gnus-message + 1 "`To' isn't present in `nnmail-extra-headers'") + (sit-for 1) + nil)) + (cc + (if (memq 'Cc nnmail-extra-headers) + (gnus-summary-find-matching + (cons 'extra 'Cc) recipient 'all nil nil + not-matching) + (gnus-message + 1 "`Cc' isn't present in `nnmail-extra-headers'") + (sit-for 1) + nil)) + (articles + (if not-matching + ;; We need the numbers that are in both lists: + (mapcar (lambda (a) + (and (memq a to) a)) + cc) + (nconc to cc)))) + (unless articles + (error "Found no matches for \"%s\"" recipient)) + (gnus-summary-limit articles)) + (gnus-summary-position-point)))) + (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 @@ -8363,12 +8466,11 @@ This will allow you to read digests and other similar documents as newsgroups. Obeys the standard process/prefix convention." (interactive "P") - (let* ((articles (gnus-summary-work-articles n)) - (ogroup gnus-newsgroup-name) + (let* ((ogroup gnus-newsgroup-name) (params (append (gnus-info-params (gnus-get-info ogroup)) (list (cons 'to-group ogroup)))) - article group egroup groups vgroup) - (while (setq article (pop articles)) + group egroup groups vgroup) + (dolist (article (gnus-summary-work-articles n)) (setq group (format "%s-%d" gnus-newsgroup-name article)) (gnus-summary-remove-process-mark article) (when (gnus-summary-display-article article) @@ -8438,7 +8540,7 @@ If BACKWARD, search backward instead." (let ((gnus-last-article gnus-last-article)) (if (gnus-summary-search-article regexp backward) (gnus-summary-show-thread) - (error "Search failed: \"%s\"" regexp)))) + (signal 'search-failed (list regexp))))) (defun gnus-summary-search-article-backward (regexp) "Search for an article containing REGEXP backward." @@ -8720,8 +8822,7 @@ strokes are `C-u g'." (or (cdr (assq arg gnus-summary-show-article-charset-alist)) (mm-read-coding-system "View as charset: " ;; actually it is coding system. - (save-excursion - (set-buffer gnus-article-buffer) + (with-current-buffer gnus-article-buffer (mm-detect-coding-region (point) (point-max)))))) (gnus-newsgroup-ignored-charsets 'gnus-all)) (gnus-summary-select-article nil 'force) @@ -8810,7 +8911,8 @@ If ARG is a negative number, hide the unwanted header lines." (inhibit-point-motion-hooks t) (hidden (if (numberp arg) (>= arg 0) - (gnus-article-hidden-text-p 'headers))) + (or (not (looking-at "[^ \t\n]+:")) + (gnus-article-hidden-text-p 'headers)))) s e) (delete-region (point-min) (point-max)) (with-current-buffer gnus-original-article-buffer @@ -8855,7 +8957,35 @@ forward." (let ((start (window-start)) buffer-read-only) (message-caesar-buffer-body arg) - (set-window-start (get-buffer-window (current-buffer)) start)))))) + (set-window-start (get-buffer-window (current-buffer)) start))))) + ;; Create buttons and stuff... + (gnus-treat-article nil)) + +(defun gnus-summary-idna-message (&optional arg) + "Decode IDNA encoded domain names in the current articles. +IDNA encoded domain names looks like `xn--bar'. If a string +remain unencoded after running this function, it is likely an +invalid IDNA string (`xn--bar' is invalid). + +You must have GNU Libidn (`http://www.gnu.org/software/libidn/') +installed for this command to work." + (interactive "P") + (if (not (and (condition-case nil (require 'idna) + (file-error)) + (mm-coding-system-p 'utf-8) + (executable-find (symbol-value 'idna-program)))) + (gnus-message + 5 "GNU Libidn not installed properly (`idn' or `idna.el' missing)") + (gnus-summary-select-article) + (let ((mail-header-separator "")) + (gnus-eval-in-buffer-window gnus-article-buffer + (save-restriction + (widen) + (let ((start (window-start)) + buffer-read-only) + (while (re-search-forward "\\(xn--[-0-9a-z]+\\)" nil t) + (replace-match (idna-to-unicode (match-string 1)))) + (set-window-start (get-buffer-window (current-buffer)) start))))))) (autoload 'unmorse-region "morse" "Convert morse coded text in region to ordinary ASCII text." @@ -8876,7 +9006,7 @@ forward." (when (message-goto-body) (gnus-narrow-to-body)) (goto-char (point-min)) - (while (re-search-forward "·" (point-max) t) + (while (search-forward "·" (point-max) t) (replace-match ".")) (unmorse-region (point-min) (point-max)) (widen) @@ -8937,7 +9067,7 @@ ACTION can be either `move' (the default), `crosspost' or `copy'." (crosspost "Crosspost" "Crossposting"))) (copy-buf (save-excursion (nnheader-set-temp-buffer " *copy article*"))) - art-group to-method new-xref article to-groups) + art-group to-method new-xref article to-groups articles-to-update-marks) (unless (assq action names) (error "Unknown action %s" action)) ;; Read the newsgroup name. @@ -8982,6 +9112,11 @@ ACTION can be either `move' (the default), `crosspost' or `copy'." ((eq action 'move) ;; Remove this article from future suppression. (gnus-dup-unsuppress-article article) + (let* ((from-method (gnus-find-method-for-group + gnus-newsgroup-name)) + (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 @@ -8990,12 +9125,17 @@ ACTION can be either `move' (the default), `crosspost' or `copy'." (list 'gnus-request-accept-article to-newsgroup (list 'quote select-method) (not articles) t) ; Accept form - (not articles))) ; Only save nov last time + (not articles) ; Only save nov last time + move-is-internal))) ; is this move internal? ;; Copy the article. ((eq action 'copy) (save-excursion (set-buffer copy-buf) (when (gnus-request-article-this-buffer article gnus-newsgroup-name) + (save-restriction + (nnheader-narrow-to-headers) + (dolist (hdr gnus-copy-article-ignored-headers) + (message-remove-header hdr t))) (gnus-request-accept-article to-newsgroup select-method (not articles) t)))) ;; Crosspost the article. @@ -9140,20 +9280,22 @@ ACTION can be either `move' (the default), `crosspost' or `copy'." (gnus-summary-goto-subject article) (when (eq action 'move) (gnus-summary-mark-article article gnus-canceled-mark)))) - (gnus-summary-remove-process-mark article)) + (push article articles-to-update-marks)) + + (apply 'gnus-summary-remove-process-mark articles-to-update-marks) ;; Re-activate all groups that have been moved to. (save-excursion (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))) (defun gnus-summary-copy-article (&optional n to-newsgroup select-method) - "Move the current article to a different newsgroup. -If TO-NEWSGROUP is string, do not prompt for a newsgroup to move to. + "Copy the current article to some other group. +If TO-NEWSGROUP is string, do not prompt for a newsgroup to copy to. When called interactively, if TO-NEWSGROUP is nil, use the value of the variable `gnus-move-split-methods' for finding a default target newsgroup. @@ -9177,6 +9319,7 @@ If nil, use to the current newsgroup method." "If non-nil, show and update the summary buffer as it's being built. If the value is t, update the buffer after every line is inserted. If the value is an integer (N), update the display every N lines." + :version "22.1" :group 'gnus-thread :type '(choice (const :tag "off" nil) number @@ -9415,10 +9558,10 @@ confirmation before the articles are deleted." (unless (memq (car articles) not-deleted) (gnus-summary-mark-article (car articles) gnus-canceled-mark)) (let* ((article (car articles)) - (id (mail-header-id (gnus-data-header - (assoc article (gnus-data-list nil)))))) + (ghead (gnus-data-header + (assoc article (gnus-data-list nil))))) (run-hook-with-args 'gnus-summary-article-delete-hook - 'delete id gnus-newsgroup-name nil + 'delete ghead gnus-newsgroup-name nil nil)) (setq articles (cdr articles))) (when not-deleted @@ -9479,7 +9622,8 @@ groups." `(lambda () (let ((mbl mml-buffer-list)) (setq mml-buffer-list nil) - (mime-to-mml ,'current-handles) + (let ((rfc2047-quote-decoded-words-containing-tspecials t)) + (mime-to-mml ,'current-handles)) (let ((mbl1 mml-buffer-list)) (setq mml-buffer-list mbl) (set (make-local-variable 'mml-buffer-list) mbl1)) @@ -9834,13 +9978,14 @@ the actual number of articles marked is returned." (gnus-summary-goto-subject article) (gnus-summary-update-secondary-mark article))) -(defun gnus-summary-remove-process-mark (article) - "Remove the process mark from ARTICLE and update the summary line." - (setq gnus-newsgroup-processable (delq article gnus-newsgroup-processable)) - (when (gnus-summary-goto-subject article) - (gnus-summary-show-thread) - (gnus-summary-goto-subject article) - (gnus-summary-update-secondary-mark article))) +(defun gnus-summary-remove-process-mark (&rest articles) + "Remove the process mark from ARTICLES and update the summary line." + (dolist (article articles) + (setq gnus-newsgroup-processable (delq article gnus-newsgroup-processable)) + (when (gnus-summary-goto-subject article) + (gnus-summary-show-thread) + (gnus-summary-goto-subject article) + (gnus-summary-update-secondary-mark article)))) (defun gnus-summary-set-saved-mark (article) "Set the process mark on ARTICLE and update the summary line." @@ -10779,6 +10924,13 @@ Argument REVERSE means reverse order." (interactive "P") (gnus-summary-sort 'author reverse)) +(defun gnus-summary-sort-by-recipient (&optional reverse) + "Sort the summary buffer by recipient name alphabetically. +If `case-fold-search' is non-nil, case of letters is ignored. +Argument REVERSE means reverse order." + (interactive "P") + (gnus-summary-sort 'recipient reverse)) + (defun gnus-summary-sort-by-subject (&optional reverse) "Sort the summary buffer by subject alphabetically. `Re:'s are ignored. If `case-fold-search' is non-nil, case of letters is ignored. @@ -11757,4 +11909,5 @@ If ALL is a number, fetch this number of articles." ;; coding: iso-8859-1 ;; End: +;; arch-tag: 17c6748f-6d00-4d36-bf01-835c42f31235 ;;; gnus-sum.el ends here diff --git a/lisp/gnus-topic.el b/lisp/gnus-topic.el index f485f5d..ff7e59a 100644 --- a/lisp/gnus-topic.el +++ b/lisp/gnus-topic.el @@ -166,9 +166,11 @@ See Info node `(gnus)Formatting Variables'." (list (completing-read "Go to topic: " (mapcar 'list (gnus-topic-list)) nil t))) - (dolist (topic (gnus-current-topics topic)) - (gnus-topic-goto-topic topic) - (gnus-topic-fold t)) + (let ((buffer-read-only nil)) + (dolist (topic (gnus-current-topics topic)) + (unless (gnus-topic-goto-topic topic) + (gnus-topic-goto-missing-topic topic) + (gnus-topic-display-missing-topic topic)))) (gnus-topic-goto-topic topic)) (defun gnus-current-topic () @@ -392,10 +394,9 @@ If RECURSIVE is t, return groups in its subtopics too." (defun gnus-topic-hierarchical-parameters (topic) "Return a topic list computed for TOPIC." - (let ((topics (gnus-current-topics topic)) - params-list param out params) - (while topics - (push (gnus-topic-parameters (pop topics)) params-list)) + (let ((params-list (nreverse (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)) @@ -1729,9 +1730,7 @@ If REVERSE, reverse the sorting order." (if (gnus-topic-find-topology to current-top 0);; Don't care the level (error "Can't move `%s' to its sub-level" current)) (gnus-topic-find-topology current nil nil 'delete) - (while (cdr to-top) - (setq to-top (cdr to-top))) - (setcdr to-top (list current-top)) + (setcdr (last to-top) (list current-top)) (gnus-topic-enter-dribble) (gnus-group-list-groups) (gnus-topic-goto-topic current))) @@ -1758,4 +1757,5 @@ If REVERSE, reverse the sorting order." (provide 'gnus-topic) +;;; arch-tag: bf176856-f30c-40f0-ae77-e41529a1134c ;;; gnus-topic.el ends here diff --git a/lisp/gnus-undo.el b/lisp/gnus-undo.el index 6557f5a..f4eda2c 100644 --- a/lisp/gnus-undo.el +++ b/lisp/gnus-undo.el @@ -186,9 +186,9 @@ A numeric argument serves as a repeat count." (error "Nothing further to undo")) (setq gnus-undo-actions (delq action gnus-undo-actions)) (setq gnus-undo-boundary t) - (while action - (funcall (pop action))))) + (mapc 'funcall action))) (provide 'gnus-undo) +;;; arch-tag: 0d787bc7-787d-499a-837f-211d2cb07f2e ;;; gnus-undo.el ends here diff --git a/lisp/gnus-util.el b/lisp/gnus-util.el index 16502ad..8e49234 100644 --- a/lisp/gnus-util.el +++ b/lisp/gnus-util.el @@ -1,5 +1,5 @@ ;;; gnus-util.el --- utility functions for Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -60,12 +60,12 @@ (defalias 'gnus-replace-in-string 'replace-in-string)) ((fboundp 'replace-regexp-in-string) (defun gnus-replace-in-string (string regexp newtext &optional literal) - (replace-regexp-in-string regexp newtext string nil literal))))) + "Replace all matches for REGEXP with NEWTEXT in STRING. +If LITERAL is non-nil, insert NEWTEXT literally. Return a new +string containing the replacements. -;;; bring in the netrc functions as aliases -(defalias 'gnus-netrc-get 'netrc-get) -(defalias 'gnus-netrc-machine 'netrc-machine) -(defalias 'gnus-parse-netrc 'netrc-parse) +This is a compatibility function for different Emacsen." + (replace-regexp-in-string regexp newtext string nil literal))))) (defun gnus-boundp (variable) "Return non-nil if VARIABLE is bound and non-nil." @@ -219,12 +219,15 @@ is slower." (defun gnus-remove-text-with-property (prop) "Delete all text in the current buffer with text property PROP." - (save-excursion - (goto-char (point-min)) - (while (not (eobp)) - (while (get-text-property (point) prop) - (delete-char 1)) - (goto-char (next-single-property-change (point) prop nil (point-max)))))) + (let ((start (point-min)) + end) + (unless (get-text-property start prop) + (setq start (next-single-property-change start prop))) + (while start + (setq end (text-property-any start (point-max) prop nil)) + (delete-region start (or end (point-max))) + (setq start (when end + (next-single-property-change start prop)))))) (defun gnus-newsgroup-directory-form (newsgroup) "Make hierarchical directory name from NEWSGROUP name." @@ -476,12 +479,23 @@ inside loops." (defun gnus-split-references (references) "Return a list of Message-IDs in REFERENCES." (let ((beg 0) + (references (or references "")) ids) (while (string-match "<[^<]+[^< \t]" references beg) (push (substring references (match-beginning 0) (setq beg (match-end 0))) ids)) (nreverse ids))) +(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)) + refs) + (dolist (id ids) + (when (string-match "<[^<>]+>" id) + (push (match-string 0 id) refs))) + refs)) + (defsubst gnus-parent-id (references &optional n) "Return the last Message-ID in REFERENCES. If N, return the Nth ancestor instead." @@ -567,6 +581,15 @@ If N, return the Nth ancestor instead." (substring gname (match-end 0)) gname))) +(defmacro gnus-group-server (group) + "Find the server name of a foreign newsgroup. +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)) + (format "%s:%s" (car gnus-select-method) (cadr gnus-select-method))))) + (defun gnus-make-sort-function (funs) "Return a composite sort condition based on the functions in FUNS." (cond @@ -612,24 +635,49 @@ If N, return the Nth ancestor instead." (define-key (symbol-value (intern (format "gnus-%s-mode-map" type))) [menu-bar edit] 'undefined)) +(defmacro gnus-bind-print-variables (&rest forms) + "Bind print-* variables and evaluate FORMS. +This macro is used with `prin1', `pp', etc. in order to ensure printed +Lisp objects are loadable. Bind `print-quoted' and `print-readably' +to t, and `print-escape-multibyte', `print-escape-newlines', +`print-escape-nonascii', `print-length', `print-level' and +`print-string-length' to nil." + `(let ((print-quoted t) + (print-readably t) + ;;print-circle + ;;print-continuous-numbering + print-escape-multibyte + print-escape-newlines + print-escape-nonascii + ;;print-gensym + print-length + print-level + print-string-length) + ,@forms)) + (defun gnus-prin1 (form) "Use `prin1' on FORM in the current buffer. -Bind `print-quoted' and `print-readably' to t while printing." - (let ((print-quoted t) - (print-readably t) - (print-escape-multibyte nil) - print-level print-length) - (prin1 form (current-buffer)))) +Bind `print-quoted' and `print-readably' to t, and `print-length' and +`print-level' to nil. See also `gnus-bind-print-variables'." + (gnus-bind-print-variables (prin1 form (current-buffer)))) (defun gnus-prin1-to-string (form) "The same as `prin1'. -Bind `print-quoted' and `print-readably' to t, and `print-length' -and `print-level' to nil." - (let ((print-quoted t) - (print-readably t) - (print-length nil) - (print-level nil)) - (prin1-to-string form))) +Bind `print-quoted' and `print-readably' to t, and `print-length' and +`print-level' to nil. See also `gnus-bind-print-variables'." + (gnus-bind-print-variables (prin1-to-string form))) + +(defun gnus-pp (form &optional stream) + "Use `pp' on FORM in the current buffer. +Bind `print-quoted' and `print-readably' to t, and `print-length' and +`print-level' to nil. See also `gnus-bind-print-variables'." + (gnus-bind-print-variables (pp form (or stream (current-buffer))))) + +(defun gnus-pp-to-string (form) + "The same as `pp-to-string'. +Bind `print-quoted' and `print-readably' to t, and `print-length' and +`print-level' to nil. See also `gnus-bind-print-variables'." + (gnus-bind-print-variables (pp-to-string form))) (defun gnus-make-directory (directory) "Make DIRECTORY (and all its parents) if it doesn't exist." @@ -653,6 +701,23 @@ and `print-level' to nil." (when (file-exists-p file) (delete-file file))) +(defun gnus-delete-directory (directory) + "Delete files in DIRECTORY. Subdirectories remain. +If there's no subdirectory, delete DIRECTORY as well." + (when (file-directory-p directory) + (let ((files (directory-files + directory t "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*")) + file dir) + (while files + (setq file (pop files)) + (if (eq t (car (file-attributes file))) + ;; `file' is a subdirectory. + (setq dir t) + ;; `file' is a file or a symlink. + (delete-file file))) + (unless dir + (delete-directory directory))))) + (defun gnus-strip-whitespace (string) "Return STRING stripped of all whitespace." (while (string-match "[\r\n\t ]+" string) @@ -1053,7 +1118,7 @@ Return the modified alist." (standard-output (lambda (c) (aset ,buffer ,leng c) - + (if (= ,size (setq ,leng (1+ ,leng))) (progn (write-region ,buffer nil ,file ,append 'no-msg) (setq ,leng 0 @@ -1122,7 +1187,7 @@ Return the modified alist." Setting it to nil has no effect after the first time `gnus-byte-compile' is run." :type 'boolean - :version "21.1" + :version "22.1" :group 'gnus-various) (defun gnus-byte-compile (form) @@ -1145,7 +1210,7 @@ is run." "Delete by side effect any elements of LIST whose car is `equal' to KEY. The modified LIST is returned. If the first member of LIST has a car that is `equal' to KEY, there is no way to remove it -by side effect; therefore, write `(setq foo (remassoc key foo))' to be +by side effect; therefore, write `(setq foo (gnus-remassoc key foo))' to be sure of changing the value of `foo'." (when alist (if (equal key (caar alist)) @@ -1414,41 +1479,48 @@ predicate on the elements." (nconc (nreverse res) list1 list2)))) (eval-when-compile - (defvar xemacs-codename)) + (defvar xemacs-codename) + (defvar sxemacs-codename) + (defvar emacs-program-version)) (defun gnus-emacs-version () "Stringified Emacs version." - (let ((system-v - (cond - ((eq gnus-user-agent 'emacs-gnus-config) - system-configuration) - ((eq gnus-user-agent 'emacs-gnus-type) - (symbol-name system-type)) - (t nil)))) + (let* ((lst (if (listp gnus-user-agent) + gnus-user-agent + '(gnus emacs type))) + (system-v (cond ((memq 'config lst) + system-configuration) + ((memq 'type lst) + (symbol-name system-type)) + (t nil))) + codename emacsname) + (cond ((featurep 'sxemacs) + (setq emacsname "SXEmacs" + codename sxemacs-codename)) + ((featurep 'xemacs) + (setq emacsname "XEmacs" + codename xemacs-codename)) + (t + (setq emacsname "Emacs"))) (cond - ((eq gnus-user-agent 'gnus) + ((not (memq 'emacs lst)) nil) ((string-match "^\\(\\([.0-9]+\\)*\\)\\.[0-9]+$" emacs-version) + ;; Emacs: (concat "Emacs/" (match-string 1 emacs-version) (if system-v (concat " (" system-v ")") ""))) - ((string-match - "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?" - emacs-version) - (concat - (match-string 1 emacs-version) - (format "/%d.%d" emacs-major-version emacs-minor-version) - (if (match-beginning 3) - (match-string 3 emacs-version) - "") - (if (boundp 'xemacs-codename) - (concat - " (" xemacs-codename - (if system-v - (concat ", " system-v ")") + ((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) ")")) - ""))) (t emacs-version)))) (defun gnus-rename-file (old-path new-path &optional trim) @@ -1468,11 +1540,16 @@ empty directories from OLD-PATH." (setq temp (cdr temp))) (= (length temp) 0)) (delete-directory old-dir) - (setq old-dir (file-name-as-directory - (file-truename + (setq old-dir (file-name-as-directory + (file-truename (concat old-dir ".."))))))))) +(defun gnus-set-file-modes (filename mode) + "Wrapper for set-file-modes." + (ignore-errors + (set-file-modes filename mode))) (provide 'gnus-util) +;;; arch-tag: f94991af-d32b-4c97-8c26-ca12a934de49 ;;; gnus-util.el ends here diff --git a/lisp/gnus-uu.el b/lisp/gnus-uu.el index f0f54a5..1ffce74 100644 --- a/lisp/gnus-uu.el +++ b/lisp/gnus-uu.el @@ -1,6 +1,6 @@ ;;; gnus-uu.el --- extract (uu)encoded files in Gnus ;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 2000, -;; 2001, 2002, 2003 Free Software Foundation, Inc. +;; 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Created: 2 Oct 1993 @@ -480,7 +480,16 @@ didn't work, and overwrite existing files. Otherwise, ask each time." (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))) + (let ((gnus-article-reply (gnus-summary-work-articles n)) + gnus-newsgroup-processable) + (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 (gnus-uu-get-list-of-articles nil))) + ;; Specify articles to be forwarded. + (setq gnus-newsgroup-processable (copy-sequence gnus-article-reply)) (gnus-setup-message 'forward (setq gnus-uu-digest-from-subject nil) (setq gnus-uu-digest-buffer @@ -859,7 +868,7 @@ When called interactively, prompt for REGEXP." (mm-enable-multibyte) (mime-to-mml)) (goto-char (point-min)) - (re-search-forward "\n\n") + (search-forward "\n\n") (unless (and message-forward-as-mime gnus-uu-digest-buffer) ;; Quote all 30-dash lines. (save-excursion @@ -1751,7 +1760,7 @@ Gnus might fail to display all of it.") (setq gnus-uu-work-dir (mm-make-temp-file (concat gnus-uu-tmp-dir "gnus") 'dir)) - (set-file-modes gnus-uu-work-dir 448) + (gnus-set-file-modes gnus-uu-work-dir 448) (setq gnus-uu-work-dir (file-name-as-directory gnus-uu-work-dir)) (push (cons gnus-newsgroup-name gnus-uu-work-dir) gnus-uu-tmp-alist)))) @@ -1895,7 +1904,7 @@ The user will be asked for a file name." (when (gnus-uu-post-encode-file "uuencode" path file-name) (goto-char (point-min)) (forward-line 1) - (while (re-search-forward " " nil t) + (while (search-forward " " nil t) (replace-match "`")) t)) @@ -2106,4 +2115,5 @@ If no file has been included, the user will be asked for a file." (provide 'gnus-uu) +;;; arch-tag: 05312384-0a83-4720-9a58-b3160b888853 ;;; gnus-uu.el ends here diff --git a/lisp/gnus-vm.el b/lisp/gnus-vm.el index a4f5e65..d23777d 100644 --- a/lisp/gnus-vm.el +++ b/lisp/gnus-vm.el @@ -105,4 +105,5 @@ save those articles instead." (provide 'gnus-vm) +;;; arch-tag: 42ca7f88-a12f-461d-be3e-cac7efb44866 ;;; gnus-vm.el ends here diff --git a/lisp/gnus-win.el b/lisp/gnus-win.el index e17f2a8..05f252c 100644 --- a/lisp/gnus-win.el +++ b/lisp/gnus-win.el @@ -1,5 +1,5 @@ ;;; gnus-win.el --- window configuration functions for Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -62,6 +62,7 @@ "*If non-nil, frames on all displays will be considered useable by Gnus. When nil, only frames on the same display as the selected frame will be used to display Gnus windows." + :version "22.1" :group 'gnus-windows :type 'boolean) @@ -164,8 +165,12 @@ used to display Gnus windows." (article 0.5) (message 1.0 point))) (display-term - (vertical 1.0 - ("*display*" 1.0)))) + (vertical 1.0 + ("*display*" 1.0))) + (mml-preview + (vertical 1.0 + (message 0.5) + (mml-preview 1.0 point)))) "Window configuration for all possible Gnus buffers. See the Gnus manual for an explanation of the syntax used.") @@ -193,11 +198,13 @@ See the Gnus manual for an explanation of the syntax used.") (info . gnus-info-buffer) (category . gnus-category-buffer) (article-copy . gnus-article-copy) - (draft . gnus-draft-buffer)) + (draft . gnus-draft-buffer) + (mml-preview . mml-preview-buffer)) "Mapping from short symbols to buffer names or buffer variables.") (defcustom gnus-configure-windows-hook nil "*A hook called when configuring windows." + :version "22.1" :group 'gnus-windows :type 'hook) @@ -579,4 +586,5 @@ should have point." (provide 'gnus-win) +;;; arch-tag: ccd5a394-2ddf-4397-b8f8-6d80d3e46e2b ;;; gnus-win.el ends here diff --git a/lisp/gnus-xmas.el b/lisp/gnus-xmas.el index a879a30..32804a9 100644 --- a/lisp/gnus-xmas.el +++ b/lisp/gnus-xmas.el @@ -39,7 +39,7 @@ (defvar menu-bar-mode (featurep 'menubar)) (require 'messagexmas) (require 'wid-edit) -(require 'run-at-time) +(require 'timer-funcs) (defgroup gnus-xmas nil "XEmacsoid support for Gnus" @@ -243,7 +243,7 @@ call it with the value of the `gnus-data' text property." (select-window selected)))))) ;; Select the lowest window on the frame. -(defun gnus-xmas-appt-select-lowest-window () +(defun gnus-xmas-select-lowest-window () (let* ((lowest-window (selected-window)) (bottom-edge (car (cdr (cdr (cdr (window-pixel-edges)))))) (last-window (previous-window)) @@ -419,8 +419,8 @@ call it with the value of the `gnus-data' text property." (defalias 'gnus-read-event-char 'gnus-xmas-read-event-char) (defalias 'gnus-group-startup-message 'gnus-xmas-group-startup-message) (defalias 'gnus-tree-minimize 'gnus-xmas-tree-minimize) - (defalias 'gnus-appt-select-lowest-window - 'gnus-xmas-appt-select-lowest-window) + (defalias 'gnus-select-lowest-window + 'gnus-xmas-select-lowest-window) (defalias 'gnus-mail-strip-quoted-names 'gnus-xmas-mail-strip-quoted-names) (defalias 'gnus-character-to-event 'character-to-event) (defalias 'gnus-mode-line-buffer-identification @@ -837,12 +837,13 @@ Warning: Don't insert text immediately after the image." glyph) (defun gnus-xmas-remove-image (image &optional category) + "Remove the image matching IMAGE and CATEGORY found first." (map-extents (lambda (ext unused) (when (equal (extent-end-glyph ext) image) (set-extent-property ext 'invisible nil) - (set-extent-property ext 'end-glyph nil)) - nil) + (set-extent-property ext 'end-glyph nil) + t)) nil nil nil nil nil 'gnus-image category)) (defun gnus-xmas-assq-delete-all (key alist) @@ -853,4 +854,5 @@ Warning: Don't insert text immediately after the image." (provide 'gnus-xmas) +;;; arch-tag: 4e84de3f-ea0a-4ee3-bfeb-e03d46fcacef ;;; gnus-xmas.el ends here diff --git a/lisp/gnus.el b/lisp/gnus.el index dfcbcfb..b6d7c39 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -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 Free Software Foundation, Inc. +;; 1998, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen @@ -34,6 +34,7 @@ (require 'wid-edit) (require 'mm-util) (require 'nnheader) +(autoload 'message-y-or-n-p "message" nil nil 'macro) (defgroup gnus nil "The coffee-brewing, all singing, all dancing, kitchen sink newsreader." @@ -155,7 +156,7 @@ (defgroup gnus-summary-sort nil "Sorting the summary buffer." - :link '(custom-manual "(gnus)Summary Sorting") + :link '(custom-manual "(gnus)Sorting the Summary Buffer") :group 'gnus-summary) (defgroup gnus-summary-visual nil @@ -282,7 +283,7 @@ is restarted, and sometimes reloaded." :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) -(defconst gnus-version-number "0.2" +(defconst gnus-version-number "0.3" "Version number for this version of Gnus.") (defconst gnus-version (format "No Gnus v%s" gnus-version-number) @@ -313,7 +314,6 @@ be set in `.emacs' instead." (defalias 'gnus-overlay-end 'overlay-end) (defalias 'gnus-extent-detached-p 'ignore) (defalias 'gnus-extent-start-open 'ignore) - (defalias 'gnus-appt-select-lowest-window 'appt-select-lowest-window) (defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names) (defalias 'gnus-character-to-event 'identity) (defalias 'gnus-assq-delete-all 'assq-delete-all) @@ -322,7 +322,8 @@ be set in `.emacs' instead." (defvar gnus-mode-line-image-cache t) (if (fboundp 'find-image) (defun gnus-mode-line-buffer-identification (line) - (let ((str (car-safe line))) + (let ((str (car-safe line)) + (load-path (mm-image-load-path))) (if (and (stringp str) (string-match "^Gnus:" str)) (progn (add-text-properties @@ -871,7 +872,7 @@ be set in `.emacs' instead." ((and (fboundp 'find-image) (display-graphic-p) - (let* ((data-directory (nnheader-find-etc-directory "gnus")) + (let* ((data-directory (nnheader-find-etc-directory "images/gnus")) (image (find-image `((:type xpm :file "gnus.xpm" :color-symbols @@ -960,6 +961,7 @@ For example: (\"mail\\\\.me\" (gnus-use-scoring t)) (\"list\\\\..*\" (total-expire . t) (broken-reply-to . t)))" + :version "22.1" :group 'gnus-group-various :type '(repeat (cons regexp (repeat sexp)))) @@ -1309,6 +1311,7 @@ If the default site is too slow, try one of these: (gnus-replace-in-string name "\\." "-") "-charter.html"))) "*An alist of (HIERARCHY . FORM) pairs used to construct the URL of a charter. When FORM is evaluated `name' is bound to the name of the group." + :version "22.1" :group 'gnus-group-various :type '(repeat (cons (string :tag "Hierarchy") (sexp :tag "Form")))) @@ -1316,6 +1319,7 @@ When FORM is evaluated `name' is bound to the name of the group." "*Non-nil means that control messages are displayed using `browse-url'. Otherwise they are fetched with ange-ftp and displayed in an ephemeral group." + :version "22.1" :group 'gnus-group-various :type 'boolean) @@ -1590,6 +1594,7 @@ to be desirable; see the manual for further details." "Return GROUP's to-address." :variable-document "*Alist of group regexps and correspondent to-addresses." + :variable-group gnus-group-parameter :parameter-type '(gnus-email-address :tag "To Address") :parameter-document "\ This will be used when doing followups and posts. @@ -1616,6 +1621,7 @@ address was listed in gnus-group-split Addresses (see below).") "Return GROUP's to-list." :variable-document "*Alist of group regexps and correspondent to-lists." + :variable-group gnus-group-parameter :parameter-type '(gnus-email-address :tag "To List") :parameter-document "\ This address will be used when doing a `a' in the group. @@ -1634,6 +1640,7 @@ address was listed in gnus-group-split Addresses (see below).") "Return GROUP's subscription status." :variable-document "*Groups which are automatically considered subscribed." + :variable-group gnus-group-parameter :parameter-type '(const :tag "Subscribed" t) :parameter-document "\ Gnus assumed that you are subscribed to the To/List address. @@ -1740,6 +1747,7 @@ posting an article." "Return GROUP's initial input of the number of articles." :variable-document "*Alist of group regexps and its initial input of the number of articles." + :variable-group gnus-group-parameter :parameter-type '(choice :tag "Initial Input for Large Newsgroup" (const :tag "All" nil) (integer)) @@ -1765,7 +1773,7 @@ total number of articles in the group.") (list (regexp :tag "Group Name Regular Expression") (boolean :tag "Ignored"))) - + :parameter-type '(boolean :tag "Group Ignored by the Registry") :parameter-document "Whether the Gnus Registry should ignore this group.") @@ -1774,6 +1782,7 @@ total number of articles in the group.") (defcustom gnus-install-group-spam-parameters t "*Disable the group parameters for spam detection. Enable if `G c' in XEmacs is giving you trouble, and make sure to submit a bug report." + :version "22.1" :type 'boolean :group 'gnus-start) @@ -1801,11 +1810,12 @@ registry.") :variable gnus-spam-newsgroup-contents :variable-default nil :variable-document - "*Groups in which to automatically mark new articles as spam on -summary entry. If non-nil, this should be a list of group name -regexps that should match all groups in which to do automatic spam -tagging, associated with a classification (spam, ham, or neither). -This only makes sense for mail groups." + "*Group classification (spam, ham, or neither). Only +meaningful when spam.el is loaded. If non-nil, this should be a +list of group name regexps associated with a classification for +each one. In spam groups, new articles are marked as spam on +summary entry. There is other behavior associated with ham and +no classification when spam.el is loaded - see the manual." :variable-group spam :variable-type '(repeat (list :tag "Group contents spam/ham classification" @@ -1822,7 +1832,45 @@ This only makes sense for mail groups." (const :tag "Unclassified" nil))) :parameter-document "The spam classification (spam, ham, or neither) of this group. -When a spam group is entered, all unread articles are marked as spam.") +When a spam group is entered, all unread articles are marked as +spam. There is other behavior associated with ham and no +classification when spam.el is loaded - see the manual.") + + (gnus-define-group-parameter + spam-resend-to + :type list + :function-document + "The address to get spam resent (through spam-report-resend)." + :variable gnus-spam-resend-to + :variable-default nil + :variable-document + "The address to get spam resent (through spam-report-resend)." + :variable-group spam + :variable-type '(repeat + (list :tag "Group address for resending spam" + (regexp :tag "Group") + (string :tag "E-mail address for resending spam (requires the spam-use-resend exit processor)"))) + :parameter-type 'string :tag "E-mail address for resending spam (requires the spam-use-resend exit processor)" + :parameter-document + "The address to get spam resent (through spam-report-resend).") + + (gnus-define-group-parameter + ham-resend-to + :type list + :function-document + "The address to get ham resent (through spam-report-resend)." + :variable gnus-ham-resend-to + :variable-default nil + :variable-document + "The address to get ham resent (through spam-report-resend)." + :variable-group spam + :variable-type '(repeat + (list :tag "Group address for resending ham" + (regexp :tag "Group") + (string :tag "E-mail address for resending ham (requires the spam-use-resend exit processor)"))) + :parameter-type 'string :tag "E-mail address for resending ham (requires the spam-use-resend exit processor)" + :parameter-document + "The address to get ham resent (through spam-report-resend).") (defvar gnus-group-spam-exit-processor-ifile "ifile" "OBSOLETE: The ifile summary exit spam processor.") @@ -1874,42 +1922,46 @@ Only applicable to non-spam (unclassified and ham) groups.") (gnus-define-group-parameter spam-process :type list - :parameter-type - '(choice + :parameter-type + '(choice :tag "Spam Summary Exit Processor" :value nil (list :tag "Spam Summary Exit Processor Choices" (set - (variable-item gnus-group-spam-exit-processor-ifile) - (variable-item gnus-group-spam-exit-processor-stat) - (variable-item gnus-group-spam-exit-processor-bogofilter) - (variable-item gnus-group-spam-exit-processor-blacklist) - (variable-item gnus-group-spam-exit-processor-spamoracle) - (variable-item gnus-group-spam-exit-processor-report-gmane) - (variable-item gnus-group-ham-exit-processor-bogofilter) - (variable-item gnus-group-ham-exit-processor-ifile) - (variable-item gnus-group-ham-exit-processor-stat) - (variable-item gnus-group-ham-exit-processor-whitelist) - (variable-item gnus-group-ham-exit-processor-BBDB) - (variable-item gnus-group-ham-exit-processor-spamoracle) - (variable-item gnus-group-ham-exit-processor-copy) (const :tag "Spam: Bogofilter" (spam spam-use-bogofilter)) (const :tag "Spam: Blacklist" (spam spam-use-blacklist)) (const :tag "Spam: Bsfilter" (spam spam-use-bsfilter)) (const :tag "Spam: Gmane Report" (spam spam-use-gmane)) + (const :tag "Spam: Resend Message"(spam spam-use-resend)) (const :tag "Spam: ifile" (spam spam-use-ifile)) (const :tag "Spam: Spam Oracle" (spam spam-use-spamoracle)) (const :tag "Spam: Spam-stat" (spam spam-use-stat)) (const :tag "Spam: SpamAssassin" (spam spam-use-spamassassin)) + (const :tag "Spam: CRM114" (spam spam-use-crm114)) (const :tag "Ham: BBDB" (ham spam-use-BBDB)) (const :tag "Ham: Bogofilter" (ham spam-use-bogofilter)) (const :tag "Ham: Bsfilter" (ham spam-use-bsfilter)) (const :tag "Ham: Copy" (ham spam-use-ham-copy)) + (const :tag "Ham: Resend Message" (ham spam-use-resend)) (const :tag "Ham: ifile" (ham spam-use-ifile)) (const :tag "Ham: Spam Oracle" (ham spam-use-spamoracle)) (const :tag "Ham: Spam-stat" (ham spam-use-stat)) (const :tag "Ham: SpamAssassin" (ham spam-use-spamassassin)) - (const :tag "Ham: Whitelist" (ham spam-use-whitelist))))) + (const :tag "Ham: CRM114" (ham spam-use-crm114)) + (const :tag "Ham: Whitelist" (ham spam-use-whitelist)) + (variable-item gnus-group-spam-exit-processor-ifile) + (variable-item gnus-group-spam-exit-processor-stat) + (variable-item gnus-group-spam-exit-processor-bogofilter) + (variable-item gnus-group-spam-exit-processor-blacklist) + (variable-item gnus-group-spam-exit-processor-spamoracle) + (variable-item gnus-group-spam-exit-processor-report-gmane) + (variable-item gnus-group-ham-exit-processor-bogofilter) + (variable-item gnus-group-ham-exit-processor-ifile) + (variable-item gnus-group-ham-exit-processor-stat) + (variable-item gnus-group-ham-exit-processor-whitelist) + (variable-item gnus-group-ham-exit-processor-BBDB) + (variable-item gnus-group-ham-exit-processor-spamoracle) + (variable-item gnus-group-ham-exit-processor-copy)))) :function-document "Which spam or ham processors will be applied when the summary is exited." :variable gnus-spam-process-newsgroups @@ -1920,42 +1972,46 @@ a backend on summary exit. If non-nil, this should be a list of group name regexps that should match all groups in which to do automatic spam processing, associated with the appropriate processor." :variable-group spam - :variable-type + :variable-type '(repeat :tag "Spam/Ham Processors" (list :tag "Spam Summary Exit Processor Choices" (regexp :tag "Group Regexp") - (set + (set :tag "Spam/Ham Summary Exit Processor" - (variable-item gnus-group-spam-exit-processor-ifile) - (variable-item gnus-group-spam-exit-processor-stat) - (variable-item gnus-group-spam-exit-processor-bogofilter) - (variable-item gnus-group-spam-exit-processor-blacklist) - (variable-item gnus-group-spam-exit-processor-spamoracle) - (variable-item gnus-group-spam-exit-processor-report-gmane) - (variable-item gnus-group-ham-exit-processor-bogofilter) - (variable-item gnus-group-ham-exit-processor-ifile) - (variable-item gnus-group-ham-exit-processor-stat) - (variable-item gnus-group-ham-exit-processor-whitelist) - (variable-item gnus-group-ham-exit-processor-BBDB) - (variable-item gnus-group-ham-exit-processor-spamoracle) - (variable-item gnus-group-ham-exit-processor-copy) (const :tag "Spam: Bogofilter" (spam spam-use-bogofilter)) (const :tag "Spam: Blacklist" (spam spam-use-blacklist)) (const :tag "Spam: Bsfilter" (spam spam-use-bsfilter)) - (const :tag "Spam: ifile" (spam spam-use-ifile)) (const :tag "Spam: Gmane Report" (spam spam-use-gmane)) + (const :tag "Spam: Resend Message"(spam spam-use-resend)) + (const :tag "Spam: ifile" (spam spam-use-ifile)) (const :tag "Spam: Spam-stat" (spam spam-use-stat)) (const :tag "Spam: Spam Oracle" (spam spam-use-spamoracle)) (const :tag "Spam: SpamAssassin" (spam spam-use-spamassassin)) + (const :tag "Spam: CRM114" (spam spam-use-crm114)) (const :tag "Ham: BBDB" (ham spam-use-BBDB)) (const :tag "Ham: Bogofilter" (ham spam-use-bogofilter)) (const :tag "Ham: Bsfilter" (ham spam-use-bsfilter)) (const :tag "Ham: Copy" (ham spam-use-ham-copy)) + (const :tag "Ham: Resend Message" (ham spam-use-resend)) (const :tag "Ham: ifile" (ham spam-use-ifile)) (const :tag "Ham: Spam-stat" (ham spam-use-stat)) (const :tag "Ham: Spam Oracle" (ham spam-use-spamoracle)) (const :tag "Ham: SpamAssassin" (ham spam-use-spamassassin)) - (const :tag "Ham: Whitelist" (ham spam-use-whitelist))))) + (const :tag "Ham: CRM114" (ham spam-use-crm114)) + (const :tag "Ham: Whitelist" (ham spam-use-whitelist)) + (variable-item gnus-group-spam-exit-processor-ifile) + (variable-item gnus-group-spam-exit-processor-stat) + (variable-item gnus-group-spam-exit-processor-bogofilter) + (variable-item gnus-group-spam-exit-processor-blacklist) + (variable-item gnus-group-spam-exit-processor-spamoracle) + (variable-item gnus-group-spam-exit-processor-report-gmane) + (variable-item gnus-group-ham-exit-processor-bogofilter) + (variable-item gnus-group-ham-exit-processor-ifile) + (variable-item gnus-group-ham-exit-processor-stat) + (variable-item gnus-group-ham-exit-processor-whitelist) + (variable-item gnus-group-ham-exit-processor-BBDB) + (variable-item gnus-group-ham-exit-processor-spamoracle) + (variable-item gnus-group-ham-exit-processor-copy)))) :parameter-document "Which spam or ham processors will be applied when the summary is exited.") @@ -1963,7 +2019,7 @@ spam processing, associated with the appropriate processor." (gnus-define-group-parameter spam-autodetect :type list - :parameter-type + :parameter-type '(boolean :tag "Spam autodetection") :function-document "Should spam be autodetected (with spam-split) in this group?" @@ -1974,7 +2030,7 @@ spam processing, associated with the appropriate processor." Only unseen articles will be examined, unless spam-autodetect-recheck-messages is set." :variable-group spam - :variable-type + :variable-type '(repeat :tag "Autodetection setting" (list @@ -1988,7 +2044,7 @@ spam-autodetect-recheck-messages is set.") (gnus-define-group-parameter spam-autodetect-methods :type list - :parameter-type + :parameter-type '(choice :tag "Spam autodetection-specific methods" (const none) (const default) @@ -2001,6 +2057,7 @@ spam-autodetect-recheck-messages is set.") (variable-item spam-use-BBDB) (variable-item spam-use-ifile) (variable-item spam-use-spamoracle) + (variable-item spam-use-crm114) (variable-item spam-use-spamassassin) (variable-item spam-use-spamassassin-headers) (variable-item spam-use-bsfilter) @@ -2020,7 +2077,7 @@ Requires the spam-autodetect parameter. Only unseen articles will be examined, unless spam-autodetect-recheck-messages is set." :variable-group spam - :variable-type + :variable-type '(repeat :tag "Autodetection methods" (list @@ -2037,6 +2094,7 @@ set." (variable-item spam-use-BBDB) (variable-item spam-use-ifile) (variable-item spam-use-spamoracle) + (variable-item spam-use-crm114) (variable-item spam-use-stat) (variable-item spam-use-blackholes) (variable-item spam-use-hashcash) @@ -2047,7 +2105,7 @@ set." (variable-item spam-use-bogofilter-headers) (variable-item spam-use-bogofilter))))) :parameter-document - "Spam autodetection methods. + "Spam autodetection methods. Requires the spam-autodetect parameter. Only unseen articles will be examined, unless spam-autodetect-recheck-messages is set.") @@ -2055,7 +2113,7 @@ set.") (gnus-define-group-parameter spam-process-destination :type list - :parameter-type + :parameter-type '(choice :tag "Destination for spam-processed articles at summary exit" (string :tag "Move to a group") (repeat :tag "Move to multiple groups" @@ -2073,7 +2131,7 @@ to do spam-processed article moving, associated with the destination group or nil for explicit expiration. This only makes sense for mail groups." :variable-group spam - :variable-type + :variable-type '(repeat :tag "Spam-processed articles destination" (list @@ -2086,11 +2144,11 @@ mail groups." (const :tag "Expire" nil)))) :parameter-document "Where spam-processed articles will go at summary exit.") - + (gnus-define-group-parameter ham-process-destination :type list - :parameter-type + :parameter-type '(choice :tag "Destination for ham articles at summary exit from a spam group" (string :tag "Move to a group") @@ -2110,7 +2168,7 @@ to do ham article moving, associated with the destination group or nil for explicit ignoring. This only makes sense for mail groups, and only works in spam groups." :variable-group spam - :variable-type + :variable-type '(repeat :tag "Ham articles destination" (list @@ -2294,7 +2352,7 @@ face." When set, Gnus will prefer using the locally stored content rather than re-fetching it from the server. You also need to enable `gnus-agent' for this to have any affect." - :version "21.3" + :version "22.1" :group 'gnus-agent :type 'boolean) @@ -2313,7 +2371,7 @@ covered by that variable." You may customize gnus-agent to disable its use. However, some back ends have started to use the agent as a client-side cache. Disabling the agent may result in noticeable loss of performance." - :version "21.3" + :version "22.1" :group 'gnus-agent :type 'boolean) @@ -2337,23 +2395,45 @@ This should be an alist for Emacs, or a plist for XEmacs." (symbol :tag "Parameter") (sexp :tag "Value"))))) -(defcustom gnus-user-agent 'emacs-gnus-type +(defcustom gnus-user-agent '(emacs gnus type) "Which information should be exposed in the User-Agent header. -It can be one of the symbols `gnus' \(show only Gnus version\), `emacs-gnus' -\(show only Emacs and Gnus versions\), `emacs-gnus-config' \(same as -`emacs-gnus' plus system configuration\), `emacs-gnus-type' \(same as -`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." +Can be a list of symbols or a string. Valid symbols are `gnus' +\(show Gnus version\) and `emacs' \(show Emacs version\). In +addition to the Emacs version, you can add `codename' \(show +\(S\)XEmacs codename\) or either `config' \(show system +configuration\) or `type' \(show system type\). If you set it to +a string, be sure to use a valid format, see RFC 2616." + + :version "22.1" :group 'gnus-message - :type '(choice - (item :tag "Show Gnus and Emacs versions and system type" - emacs-gnus-type) - (item :tag "Show Gnus and Emacs versions and system configuration" - emacs-gnus-config) - (item :tag "Show Gnus and Emacs versions" emacs-gnus) - (item :tag "Show only Gnus version" gnus) - (string :tag "Other"))) + :type '(choice (list (set :inline t + (const gnus :tag "Gnus version") + (const emacs :tag "Emacs version") + (choice :tag "system" + (const type :tag "system type") + (const config :tag "system configuration")) + (const codename :tag "Emacs codename"))) + (string))) + +;; Convert old (< 2005-01-10) symbol type values: +(when (symbolp gnus-user-agent) + (setq gnus-user-agent + (cond ((eq gnus-user-agent 'emacs-gnus-config) + '(emacs gnus config)) + ((eq gnus-user-agent 'emacs-gnus-type) + '(emacs gnus type)) + ((eq gnus-user-agent 'emacs-gnus) + '(emacs gnus)) + ((eq gnus-user-agent 'gnus) + '(gnus)) + (t gnus-user-agent))) + (gnus-message 1 "Converted `gnus-user-agent' to `%s'." gnus-user-agent) + (sit-for 1) + (if (get 'gnus-user-agent 'saved-value) + (customize-save-variable 'gnus-user-agent gnus-user-agent) + (gnus-message 1 "Edit your init file to make this change permanent.") + (sit-for 2))) ;;; Internal variables @@ -2451,7 +2531,6 @@ such as a mark that says whether an article is stored in the cache (defvar gnus-headers-retrieved-by nil) (defvar gnus-article-reply nil) (defvar gnus-override-method nil) -(defvar gnus-article-check-size nil) (defvar gnus-opened-servers nil) (defvar gnus-current-kill-article nil) @@ -2645,7 +2724,7 @@ gnus-registry.el will populate this if it's loaded.") gnus-uu-decode-uu-and-save-view gnus-uu-decode-unshar-view gnus-uu-decode-unshar-and-save-view gnus-uu-decode-save-view gnus-uu-decode-binhex-view gnus-uu-unmark-thread - gnus-uu-mark-over gnus-uu-post-news) + gnus-uu-mark-over gnus-uu-post-news gnus-uu-invert-processable) ("gnus-uu" gnus-uu-delete-work-dir gnus-uu-unmark-thread) ("gnus-msg" (gnus-summary-send-map keymap) gnus-article-mail gnus-copy-article-buffer gnus-extended-version) @@ -2704,7 +2783,8 @@ gnus-registry.el will populate this if it's loaded.") gnus-mime-view-all-parts) ("gnus-int" gnus-request-type) ("gnus-start" gnus-newsrc-parse-options gnus-1 gnus-no-server-1 - gnus-dribble-enter gnus-read-init-file gnus-dribble-touch) + gnus-dribble-enter gnus-read-init-file gnus-dribble-touch + gnus-check-reasonable-setup) ("gnus-dup" gnus-dup-suppress-articles gnus-dup-unsuppress-article gnus-dup-enter-articles) ("gnus-range" gnus-copy-sequence) @@ -2717,7 +2797,7 @@ gnus-registry.el will populate this if it's loaded.") gnus-async-prefetch-article gnus-async-prefetch-remove-group gnus-async-halt-prefetch) ("gnus-agent" gnus-open-agent gnus-agent-get-function - gnus-agent-save-groups gnus-agent-save-active gnus-agent-method-p + gnus-agent-save-active gnus-agent-method-p gnus-agent-get-undownloaded-list gnus-agent-fetch-session gnus-summary-set-agent-mark gnus-agent-save-group-info gnus-agent-request-article gnus-agent-retrieve-headers) @@ -2952,11 +3032,9 @@ Return nil if not defined." (defun gnus-shutdown (symbol) "Shut down everything that waits for SYMBOL." - (let ((alist gnus-shutdown-alist) - entry) - (while (setq entry (pop alist)) - (when (memq symbol (cdr entry)) - (funcall (car entry)))))) + (dolist (entry gnus-shutdown-alist) + (when (memq symbol (cdr entry)) + (funcall (car entry))))) ;;; @@ -3325,7 +3403,7 @@ that that variable is buffer-local to the summary buffers." ;; gnus-server-method-cache so this only happens once, ;; if at all. (let (match) - (mapcar + (mapcar (lambda (info) (let ((info-method (gnus-info-method info))) (unless (stringp info-method) @@ -3989,10 +4067,10 @@ Allow completion over sensible values." (defun gnus-agent-method-p (method) "Say whether METHOD is covered by the agent." (or (eq (car gnus-agent-method-p-cache) method) - (setq gnus-agent-method-p-cache + (setq gnus-agent-method-p-cache (cons method - (member (if (stringp method) - method + (member (if (stringp method) + method (gnus-method-to-server method)) gnus-agent-covered-methods)))) (cdr gnus-agent-method-p-cache)) @@ -4096,4 +4174,5 @@ prompt the user for the name of an NNTP server to use." (provide 'gnus) +;;; arch-tag: acebeeab-f331-4f8f-a7ea-89c58c84f636 ;;; gnus.el ends here diff --git a/lisp/hashcash.el b/lisp/hashcash.el new file mode 100644 index 0000000..94b140d --- /dev/null +++ b/lisp/hashcash.el @@ -0,0 +1,368 @@ +;;; hashcash.el --- Add hashcash payments to email + +;; Copyright (C) 2003, 2004, 2005 Free Software Foundation + +;; Written by: Paul Foley (1997-2002) +;; Maintainer: Paul Foley +;; Keywords: mail, hashcash + +;; 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., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; 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. +;; +;; Call mail-add-payment-async after writing the addresses but before +;; writing the mail to start calculating the hashcash payment +;; asynchronously. +;; +;; The easiest way to do this automatically for all outgoing mail +;; is to set `message-generate-hashcash' to t. If you want more +;; control, try the following hooks. +;; +;; To automatically add payments to all outgoing mail when sending: +;; (add-hook 'message-send-hook 'mail-add-payment) +;; +;; To start calculations automatically when addresses are prefilled: +;; (add-hook 'message-setup-hook 'mail-add-payment-async) +;; +;; To check whether calculations are done before sending: +;; (add-hook 'message-send-hook 'hashcash-wait-or-cancel) + +;;; Code: + +(eval-and-compile + (autoload 'executable-find "executable")) + +(defcustom hashcash-default-payment 20 + "*The default number of bits to pay to unknown users. +If this is zero, no payment header will be generated. +See `hashcash-payment-alist'." + :type 'integer) + +(defcustom hashcash-payment-alist '() + "*An association list mapping email addresses to payment amounts. +Elements may consist of (ADDR AMOUNT) or (ADDR STRING AMOUNT), where +ADDR is the email address of the intended recipient and AMOUNT is +the value of hashcash payment to be made to that user. STRING, if +present, is the string to be hashed; if not present ADDR will be used." + :type '(repeat (choice (list :tag "Normal" + (string :name "Address") + (integer :name "Amount")) + (list :tag "Replace hash input" + (string :name "Address") + (string :name "Hash input") + (integer :name "Amount"))))) + +(defcustom hashcash-default-accept-payment 20 + "*The default minimum number of bits to accept on incoming payments." + :type 'integer) + +(defcustom hashcash-accept-resources `((,user-mail-address nil)) + "*An association list mapping hashcash resources to payment amounts. +Resources named here are to be accepted in incoming payments. If the +corresponding AMOUNT is NIL, the value of `hashcash-default-accept-payment' +is used instead.") + +(defcustom hashcash-path (executable-find "hashcash") + "*The path to the hashcash binary.") + +(defcustom hashcash-extra-generate-parameters nil + "*A list of parameter strings passed to `hashcash-path' when minting. +For example, you may want to set this to '(\"-Z2\") to reduce header length." + :type '(repeat string)) + +(defcustom hashcash-double-spend-database "hashcash.db" + "*The path to the double-spending database.") + +(defcustom hashcash-in-news nil + "*Specifies whether or not hashcash payments should be made to newsgroups." + :type 'boolean) + +(defvar hashcash-process-alist nil + "Alist of asynchronous hashcash processes and buffers.") + +(require 'mail-utils) + +(eval-and-compile + (if (fboundp 'point-at-bol) + (defalias 'hashcash-point-at-bol 'point-at-bol) + (defalias 'hashcash-point-at-bol 'line-beginning-position)) + + (if (fboundp 'point-at-eol) + (defalias 'hashcash-point-at-eol 'point-at-eol) + (defalias 'hashcash-point-at-eol 'line-end-position))) + +(defun hashcash-strip-quoted-names (addr) + (setq addr (mail-strip-quoted-names addr)) + (if (and addr (string-match "\\`\\([^+@]+\\)\\+[^@]*\\(@.+\\)" addr)) + (concat (match-string 1 addr) (match-string 2 addr)) + addr)) + +(defun hashcash-token-substring () + (save-excursion + (let ((token "")) + (loop + (setq token + (concat token (buffer-substring (point) (hashcash-point-at-eol)))) + (goto-char (hashcash-point-at-eol)) + (forward-char 1) + (unless (looking-at "[ \t]") (return token)) + (while (looking-at "[ \t]") (forward-char 1)))))) + +(defun hashcash-payment-required (addr) + "Return the hashcash payment value required for the given address." + (let ((val (assoc addr hashcash-payment-alist))) + (or (nth 2 val) (nth 1 val) hashcash-default-payment))) + +(defun hashcash-payment-to (addr) + "Return the string with which hashcash payments should collide." + (let ((val (assoc addr hashcash-payment-alist))) + (or (nth 1 val) (nth 0 val) addr))) + +(defun hashcash-generate-payment (str val) + "Generate a hashcash payment by finding a VAL-bit collison on STR." + (if (and (> val 0) + hashcash-path) + (save-excursion + (set-buffer (get-buffer-create " *hashcash*")) + (erase-buffer) + (apply 'call-process hashcash-path nil t nil + "-m" "-q" "-b" (number-to-string val) str + hashcash-extra-generate-parameters) + (goto-char (point-min)) + (hashcash-token-substring)) + (error "No `hashcash' binary found"))) + +(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) + (let ((process (apply 'start-process "hashcash" nil + hashcash-path "-m" "-q" + "-b" (number-to-string val) str + hashcash-extra-generate-parameters))) + (setq hashcash-process-alist (cons + (cons process (current-buffer)) + hashcash-process-alist)) + (set-process-filter process `(lambda (process output) + (funcall ,callback process output)))) + (funcall callback nil))) + +(defun hashcash-check-payment (token str val) + "Check the validity of a hashcash payment." + (if hashcash-path + (zerop (call-process hashcash-path nil nil nil "-c" + "-d" "-f" hashcash-double-spend-database + "-b" (number-to-string val) + "-r" str + token)) + (progn + (message "No hashcash binary found") + (sleep-for 1) + nil))) + +(defun hashcash-version (token) + "Find the format version of a hashcash token." + ;; Version 1.2 looks like n:yymmdd:rrrrr:xxxxxxxxxxxxxxxx + ;; This carries its own version number embedded in the token, + ;; so no further format number changes should be necessary + ;; in the X-Payment header. + ;; + ;; Version 1.1 looks like yymmdd:rrrrr:xxxxxxxxxxxxxxxx + ;; You need to upgrade your hashcash binary. + ;; + ;; Version 1.0 looked like nnnnnrrrrrxxxxxxxxxxxxxxxx + ;; This is no longer supported. + (cond ((equal (aref token 1) ?:) 1.2) + ((equal (aref token 6) ?:) 1.1) + (t (error "Unknown hashcash format version")))) + +(defun hashcash-already-paid-p (recipient) + "Check for hashcash token to RECIPIENT in current buffer." + (save-excursion + (save-restriction + (message-narrow-to-headers-or-head) + (let ((token (message-fetch-field "x-hashcash"))) + (and (stringp token) + (string-match (regexp-quote recipient) token)))))) + +;;;###autoload +(defun hashcash-insert-payment (arg) + "Insert X-Payment and X-Hashcash headers with a payment for ARG" + (interactive "sPay to: ") + (unless (hashcash-already-paid-p arg) + (let ((pay (hashcash-generate-payment (hashcash-payment-to arg) + (hashcash-payment-required arg)))) + (when pay + ;; (insert-before-markers "X-Payment: hashcash " + ;; (number-to-string (hashcash-version pay)) " " + ;; pay "\n") + (insert-before-markers "X-Hashcash: " pay "\n"))))) + +;;;###autoload +(defun hashcash-insert-payment-async (arg) + "Insert X-Payment and X-Hashcash headers with a payment for ARG +Only start calculation. Results are inserted when ready." + (interactive "sPay to: ") + (unless (hashcash-already-paid-p arg) + (hashcash-generate-payment-async (hashcash-payment-to arg) + (hashcash-payment-required arg) + `(lambda (process payment) + (hashcash-insert-payment-async-2 ,(current-buffer) process payment))))) + +(defun hashcash-insert-payment-async-2 (buffer process pay) + (with-current-buffer buffer + (save-excursion + (save-restriction + (setq hashcash-process-alist (delq + (assq process hashcash-process-alist) + hashcash-process-alist)) + (goto-char (point-min)) + (search-forward mail-header-separator) + (beginning-of-line) + (when pay +;; (insert-before-markers "X-Payment: hashcash " +;; (number-to-string (hashcash-version pay)) " " +;; pay "\n") + (insert-before-markers "X-Hashcash: " pay)))))) + +(defun hashcash-cancel-async (&optional buffer) + "Delete any hashcash processes associated with BUFFER. +BUFFER defaults to the current buffer." + (interactive) + (unless buffer (setq buffer (current-buffer))) + (let (entry) + (while (setq entry (rassq buffer hashcash-process-alist)) + (delete-process (car entry)) + (setq hashcash-process-alist + (delq entry hashcash-process-alist))))) + +(defun hashcash-wait-async (&optional buffer) + "Wait for asynchronous hashcash processes in BUFFER to finish. +BUFFER defaults to the current buffer." + (interactive) + (unless buffer (setq buffer (current-buffer))) + (let (entry) + (while (setq entry (rassq buffer hashcash-process-alist)) + (accept-process-output (car entry))))) + +(defun hashcash-processes-running-p (buffer) + "Return non-nil if hashcash processes in BUFFER are still running." + (rassq buffer hashcash-process-alist)) + +(defun hashcash-wait-or-cancel () + "Ask user whether to wait for hashcash processes to finish." + (interactive) + (when (hashcash-processes-running-p (current-buffer)) + (if (y-or-n-p + "Hashcash process(es) still running; wait for them to finish? ") + (hashcash-wait-async) + (hashcash-cancel-async)))) + +;;;###autoload +(defun hashcash-verify-payment (token &optional resource amount) + "Verify a hashcash payment" + (let* ((split (split-string token ":")) + (key (if (< (hashcash-version token) 1.2) + (nth 1 split) + (case (string-to-number (nth 0 split)) + (0 (nth 2 split)) + (1 (nth 3 split)))))) + (cond ((null resource) + (let ((elt (assoc key hashcash-accept-resources))) + (and elt (hashcash-check-payment token (car elt) + (or (cadr elt) hashcash-default-accept-payment))))) + ((equal token key) + (hashcash-check-payment token resource + (or amount hashcash-default-accept-payment))) + (t nil)))) + +;;;###autoload +(defun mail-add-payment (&optional arg async) + "Add X-Payment: and X-Hashcash: headers with a hashcash payment +for each recipient address. Prefix arg sets default payment temporarily. +Set ASYNC to t to start asynchronous calculation. (See +`mail-add-payment-async')." + (interactive "P") + (let ((hashcash-default-payment (if arg (prefix-numeric-value arg) + hashcash-default-payment)) + (addrlist nil)) + (save-excursion + (save-restriction + (goto-char (point-min)) + (search-forward mail-header-separator) + (beginning-of-line) + (narrow-to-region (point-min) (point)) + (let ((to (hashcash-strip-quoted-names (mail-fetch-field "To" nil t))) + (cc (hashcash-strip-quoted-names (mail-fetch-field "Cc" nil t))) + (ng (hashcash-strip-quoted-names (mail-fetch-field "Newsgroups" + nil t)))) + (when to + (setq addrlist (split-string to ",[ \t\n]*"))) + (when cc + (setq addrlist (nconc addrlist (split-string cc ",[ \t\n]*")))) + (when (and hashcash-in-news ng) + (setq addrlist (nconc addrlist (split-string ng ",[ \t\n]*"))))) + (when addrlist + (mapcar (if async + #'hashcash-insert-payment-async + #'hashcash-insert-payment) + addrlist))))) ; mapc + t) + +;;;###autoload +(defun mail-add-payment-async (&optional arg) + "Add X-Payment: and X-Hashcash: headers with a hashcash payment +for each recipient address. Prefix arg sets default payment temporarily. +Calculation is asynchronous." + (interactive "P") + (mail-add-payment arg t)) + +;;;###autoload +(defun mail-check-payment (&optional arg) + "Look for a valid X-Payment: or X-Hashcash: header. +Prefix arg sets default accept amount temporarily." + (interactive "P") + (let ((hashcash-default-accept-payment (if arg (prefix-numeric-value arg) + hashcash-default-accept-payment)) + (version (hashcash-version (hashcash-generate-payment "x" 1)))) + (save-excursion + (goto-char (point-min)) + (search-forward "\n\n") + (beginning-of-line) + (let ((end (point)) + (ok nil)) + (goto-char (point-min)) + (while (and (not ok) (search-forward "X-Payment: hashcash " end t)) + (let ((value (split-string (hashcash-token-substring) " "))) + (when (equal (car value) (number-to-string version)) + (setq ok (hashcash-verify-payment (cadr value)))))) + (goto-char (point-min)) + (while (and (not ok) (search-forward "X-Hashcash: " end t)) + (setq ok (hashcash-verify-payment (hashcash-token-substring)))) + (when ok + (message "Payment valid")) + ok)))) + +(provide 'hashcash) + +;;; arch-tag: 0e7fe983-a124-4392-9788-0dbcbd2c4d62 diff --git a/lisp/hex-util.el b/lisp/hex-util.el index 6936bf3..bdaf197c 100644 --- a/lisp/hex-util.el +++ b/lisp/hex-util.el @@ -70,4 +70,5 @@ (provide 'hex-util) +;;; arch-tag: fe8aaa79-6c86-400e-813f-5a8cc4cb3859 ;;; hex-util.el ends here diff --git a/lisp/hmac-def.el b/lisp/hmac-def.el index 264bdac..1275f74 100644 --- a/lisp/hmac-def.el +++ b/lisp/hmac-def.el @@ -82,4 +82,5 @@ If BIT is non-nil, truncate output to specified bits." (provide 'hmac-def) +;;; arch-tag: 645adcef-b835-4900-a10a-11f636c982b9 ;;; hmac-def.el ends here diff --git a/lisp/hmac-md5.el b/lisp/hmac-md5.el index 94bdc2e..b9bb877 100644 --- a/lisp/hmac-md5.el +++ b/lisp/hmac-md5.el @@ -81,4 +81,5 @@ (provide 'hmac-md5) +;;; arch-tag: 0ab3f4f6-3d4b-4167-a9fa-635b7fed7f27 ;;; hmac-md5.el ends here diff --git a/lisp/html2text.el b/lisp/html2text.el index b5c7478..4e39d66 100644 --- a/lisp/html2text.el +++ b/lisp/html2text.el @@ -24,11 +24,11 @@ ;; These functions provide a simple way to wash/clean html infected ;; mails. Definitely do not work in all cases, but some improvement -;; in readability is generally obtained. Formatting is only done in +;; in readability is generally obtained. Formatting is only done in ;; the buffer, so the next time you enter the article it will be ;; "re-htmlized". ;; -;; The main function is "html2text" +;; The main function is `html2text'. ;;; Code: @@ -47,9 +47,9 @@ "The map of entity to text. This is an alist were each element is a dotted pair consisting of an -old string, and a replacement string. This replacement is done by the -function \"html2text-substitute\" which basically performs a -replace-string operation for every element in the list. This is +old string, and a replacement string. This replacement is done by the +function `html2text-substitute' which basically performs a +`replace-string' operation for every element in the list. This is completely verbatim - without any use of REGEXP.") (defvar html2text-remove-tag-list @@ -57,11 +57,11 @@ completely verbatim - without any use of REGEXP.") "A list of removable tags. This is a list of tags which should be removed, without any -formatting. Observe that if you the tags in the list are presented -*without* any \"<\" or \">\". All occurences of a tag appearing in -this list are removed, irrespective of whether it is a closing or -opening tag, or if the tag has additional attributes. The actual -deletion is done by the function \"html2text-remove-tags\". +formatting. Note that tags in the list are presented *without* +any \"<\" or \">\". All occurences of a tag appearing in this +list are removed, irrespective of whether it is a closing or +opening tag, or if the tag has additional attributes. The +deletion is done by the function `html2text-remove-tags'. For instance the text: @@ -75,8 +75,10 @@ If this list contains the element \"font\".") (defvar html2text-format-tag-list '(("b" . html2text-clean-bold) + ("strong" . html2text-clean-bold) ("u" . html2text-clean-underline) ("i" . html2text-clean-italic) + ("em" . html2text-clean-italic) ("blockquote" . html2text-clean-blockquote) ("a" . html2text-clean-anchor) ("ul" . html2text-clean-ul) @@ -86,7 +88,7 @@ If this list contains the element \"font\".") "An alist of tags and processing functions. This is an alist where each dotted pair consists of a tag, and then -the name of a function to be called when this tag is found. The +the name of a function to be called when this tag is found. The function is called with the arguments p1, p2, p3 and p4. These are demontrated below: @@ -116,16 +118,13 @@ formatting, and then moved afterward.") ;; ;; -(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) +(defun html2text-replace-string (from-string to-string min max) + "Replace FROM-STRING with TO-STRING in region from MIN to MAX." + (goto-char min) (let ((delta (- (string-width to-string) (string-width from-string))) (change 0)) - (while (search-forward from-string p2 t) + (while (search-forward from-string max t) (replace-match to-string) (setq change (+ change delta))) change)) @@ -141,27 +140,80 @@ formatting, and then moved afterward.") ;; i.e. ;; -(defun html2text-attr-value (attr-list attr) - (nth 1 (assoc attr attr-list))) +(defun html2text-attr-value (list attribute) + "Get value of ATTRIBUTE from LIST." + (nth 1 (assoc attribute list))) (defun html2text-get-attr (p1 p2) - (save-restriction - (narrow-to-region p1 p2) - (let (result) - (goto-char (point-min)) - (while (not (eobp)) - (when (re-search-forward "[^= ]+" nil t) - (push - (list - (match-string 0) - (when (looking-at " *= *") - (goto-char (match-end 0)) - (buffer-substring - (point) - (goto-char (or (ignore-errors (scan-sexps (point) 1)) - (point-max)))))) - result))) - result))) + (goto-char p1) + (re-search-forward " +[^ ]" p2 t) + (let* ((attr-string (buffer-substring-no-properties (1- (point)) (1- p2))) + (tmp-list (split-string attr-string)) + (attr-list) + (counter 0) + (prev (car tmp-list)) + (this (nth 1 tmp-list)) + (next (nth 2 tmp-list)) + (index 1)) + + (cond + ;; size=3 + ((string-match "[^ ]=[^ ]" prev) + (let ((attr (nth 0 (split-string prev "="))) + (value (nth 1 (split-string prev "=")))) + (setq attr-list (cons (list attr value) attr-list)))) + ;; size= 3 + ((string-match "[^ ]=\\'" prev) + (setq attr-list (cons (list (substring prev 0 -1) this) attr-list)))) + + (while (< index (length tmp-list)) + (cond + ;; size=3 + ((string-match "[^ ]=[^ ]" this) + (let ((attr (nth 0 (split-string this "="))) + (value (nth 1 (split-string this "=")))) + (setq attr-list (cons (list attr value) attr-list)))) + ;; size =3 + ((string-match "\\`=[^ ]" this) + (setq attr-list (cons (list prev (substring this 1)) attr-list))) + ;; size= 3 + ((string-match "[^ ]=\\'" this) + (setq attr-list (cons (list (substring this 0 -1) next) attr-list))) + ;; size = 3 + ((string= "=" this) + (setq attr-list (cons (list prev next) attr-list)))) + (setq index (1+ index)) + (setq prev this) + (setq this next) + (setq next (nth (1+ index) tmp-list))) + ;; + ;; Tags with no accompanying "=" i.e. value=nil + ;; + (setq prev (car tmp-list)) + (setq this (nth 1 tmp-list)) + (setq next (nth 2 tmp-list)) + (setq index 1) + + (when (and (not (string-match "=" prev)) + (not (string= (substring this 0 1) "="))) + (setq attr-list (cons (list prev nil) attr-list))) + (while (< index (1- (length tmp-list))) + (when (and (not (string-match "=" this)) + (not (or (string= (substring next 0 1) "=") + (string= (substring prev -1) "=")))) + (setq attr-list (cons (list this nil) attr-list))) + (setq index (1+ index)) + (setq prev this) + (setq this next) + (setq next (nth (1+ index) tmp-list))) + + (when (and this + (not (string-match "=" this)) + (not (string= (substring prev -1) "="))) + (setq attr-list (cons (list this nil) attr-list))) + ;; return - value + attr-list)) + ;; ;; ;; @@ -176,12 +228,12 @@ formatting, and then moved afterward.") (goto-char p1) (let ((item-nr 0) (items 0)) - (while (re-search-forward "
  • " p2 t) + (while (search-forward "
  • " p2 t) (setq items (1+ items))) (goto-char p1) (while (< item-nr items) (setq item-nr (1+ item-nr)) - (re-search-forward "
  • " (point-max) t) + (search-forward "
  • " (point-max) t) (cond ((string= list-type "ul") (insert " o ")) ((string= list-type "ol") (insert (format " %s: " item-nr))) @@ -191,7 +243,7 @@ formatting, and then moved afterward.") (goto-char p1) (let ((items 0) (item-nr 0)) - (while (re-search-forward "
    " p2 t) + (while (search-forward "
    " p2 t) (setq items (1+ items))) (goto-char p1) (while (< item-nr items) @@ -265,9 +317,11 @@ formatting, and then moved afterward.") (html2text-delete-tags p1 p2 p3 p4)) (defun html2text-clean-anchor (p1 p2 p3 p4) - ;; If someone can explain how to make the URL clickable I will - ;; surely improve upon this. - (let ((href (html2text-attr-value (html2text-get-attr p1 p2) "href"))) + ;; If someone can explain how to make the URL clickable I will surely + ;; improve upon this. + ;; Maybe `goto-addr.el' can be used here. + (let* ((attr-list (html2text-get-attr p1 p2)) + (href (html2text-attr-value attr-list "href"))) (delete-region p1 p4) (when href (goto-char p1) @@ -287,31 +341,28 @@ formatting, and then moved afterward.") (defun html2text-fix-paragraph (p1 p2) (goto-char p1) - (let ((has-br-line) - (refill-start) + (let ((refill-start) (refill-stop)) (when (re-search-forward "
    $" p2 t) - (setq has-br-line t)) - (when has-br-line - (goto-char p1) - (when (re-search-forward ".+[^<][^b][^r][^>]$" p2 t) - (beginning-of-line) - (setq refill-start (point)) - (goto-char p2) - (re-search-backward ".+[^<][^b][^r][^>]$" refill-start t) - (next-line 1) - (end-of-line) - ;; refill-stop should ideally be adjusted to - ;; accomodate the "
    " strings which are removed - ;; between refill-start and refill-stop. Can simply - ;; be returned from my-replace-string - (setq refill-stop (+ (point) - (html2text-replace-string - "
    " "" - refill-start (point)))) - ;; (message "Point = %s refill-stop = %s" (point) refill-stop) - ;; (sleep-for 4) - (fill-region refill-start refill-stop)))) + (goto-char p1) + (when (re-search-forward ".+[^<][^b][^r][^>]$" p2 t) + (beginning-of-line) + (setq refill-start (point)) + (goto-char p2) + (re-search-backward ".+[^<][^b][^r][^>]$" refill-start t) + (next-line 1) + (end-of-line) + ;; refill-stop should ideally be adjusted to + ;; accomodate the "
    " strings which are removed + ;; between refill-start and refill-stop. Can simply + ;; be returned from my-replace-string + (setq refill-stop (+ (point) + (html2text-replace-string + "
    " "" + refill-start (point)))) + ;; (message "Point = %s refill-stop = %s" (point) refill-stop) + ;; (sleep-for 4) + (fill-region refill-start refill-stop)))) (html2text-replace-string "
    " "" p1 p2)) ;; @@ -321,11 +372,11 @@ formatting, and then moved afterward.") "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 "^
    $" "") ;; Removing lonely
    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) @@ -347,55 +398,51 @@ fashion, quite close to pure guess-work. It does work in some cases though." ;; (defun html2text-remove-tags (tag-list) - "Removes the tags listed in the list \"html2text-remove-tag-list\". + "Removes the tags listed in the list `html2text-remove-tag-list'. See the documentation for that variable." (interactive) (dolist (tag tag-list) - (html2text-buffer-head) - (while (re-search-forward (format "]*>" tag) (point-max) t) + (goto-char (point-min)) + (while (re-search-forward (format "\\(]*>\\)" tag) (point-max) t) (delete-region (match-beginning 0) (match-end 0))))) (defun html2text-format-tags () - "See the variable \"html2text-format-tag-list\" for documentation" + "See the variable `html2text-format-tag-list' for documentation." (interactive) (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)) - (p3) (p4) - (attr (match-string 0))) + (p3) (p4)) (search-backward "<" (point-min) t) (setq p1 (point)) - (re-search-forward (format "" tag) (point-max) t) + (search-forward (format "" tag) (point-max) t) (setq p4 (point)) (search-backward "]*\\)?>" tag) + (goto-char (point-min)) + (while (re-search-forward (format "\\(<%s\\( [^>]*\\)?>\\)" tag) (point-max) t) (let ((p1) (p2 (point))) @@ -424,5 +471,6 @@ See the documentation for that variable." ;; ;; ;; - +(provide 'html2text) +;;; arch-tag: e9e57b79-35d4-4de1-a647-e7e01fe56d1e ;;; html2text.el ends here diff --git a/lisp/ietf-drums.el b/lisp/ietf-drums.el index eec283b..645a79a 100644 --- a/lisp/ietf-drums.el +++ b/lisp/ietf-drums.el @@ -1,5 +1,5 @@ ;;; ietf-drums.el --- Functions for parsing RFC822bis headers -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -27,6 +27,16 @@ ;; Messages". This library is based on ;; draft-ietf-drums-msg-fmt-05.txt, released on 1998-08-05. +;; Pending a real regression self test suite, Simon Josefsson added +;; various self test expressions snipped from bug reports, and their +;; expected value, below. I you believe it could be useful, please +;; add your own test cases, or write a real self test suite, or just +;; remove this. + +;; +;; (ietf-drums-parse-address "'foo' ") +;; => ("foo@example.com" . "'foo'") + ;;; Code: (eval-when-compile (require 'cl)) @@ -64,9 +74,9 @@ backslash and doublequote.") (modify-syntax-entry ?> ")" table) (modify-syntax-entry ?@ "w" table) (modify-syntax-entry ?/ "w" table) - (modify-syntax-entry ?* " " table) - (modify-syntax-entry ?\; " " table) - (modify-syntax-entry ?\' " " table) + (modify-syntax-entry ?* "_" table) + (modify-syntax-entry ?\; "_" table) + (modify-syntax-entry ?\' "_" table) (if (featurep 'xemacs) (let ((i 128)) (while (< i 256) @@ -133,7 +143,7 @@ backslash and doublequote.") (forward-sexp 1)) ((eq c ?\() (forward-sexp 1)) - ((memq c '(? ?\t ?\n)) + ((memq c '(?\ ?\t ?\n)) (delete-char 1)) (t (forward-char 1)))) @@ -263,6 +273,12 @@ backslash and doublequote.") (concat "\"" string "\"") string)) +(defun ietf-drums-make-address (name address) + (if name + (concat (ietf-drums-quote-string name) " <" address ">") + address)) + (provide 'ietf-drums) +;;; arch-tag: 379a0191-dbae-4ca6-a0f5-d4202c209ef9 ;;; ietf-drums.el ends here diff --git a/lisp/imap.el b/lisp/imap.el index cca272a..238e0b9 100644 --- a/lisp/imap.el +++ b/lisp/imap.el @@ -1,5 +1,5 @@ ;;; imap.el --- imap library -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Simon Josefsson @@ -69,7 +69,7 @@ ;; imap-message-append, imap-envelope-from ;; imap-body-lines ;; -;; It is my hope that theese commands should be pretty self +;; It is my hope that these commands should be pretty self ;; explanatory for someone that know IMAP. All functions have ;; additional documentation on how to invoke them. ;; @@ -141,6 +141,7 @@ (eval-and-compile (autoload 'starttls-open-stream "starttls") (autoload 'starttls-negotiate "starttls") + (autoload 'sasl-find-mechanism "sasl") (autoload 'digest-md5-parse-digest-challenge "digest-md5") (autoload 'digest-md5-digest-response "digest-md5") (autoload 'digest-md5-digest-uri "digest-md5") @@ -216,7 +217,8 @@ used to communicate with subprocesses. Values are nil to use a pipe, or t or `pty' to use a pty. The value has no effect if the system has no ptys or if all ptys are busy: then a pipe is used in any case. The value takes effect when a IMAP server is -opened, changing it after that has no effect.." +opened, changing it after that has no effect." + :version "22.1" :group 'imap :type 'boolean) @@ -229,12 +231,20 @@ encoded mailboxes which doesn't translate into ISO-8859-1." :type 'boolean) (defcustom imap-log nil - "If non-nil, a imap session trace is placed in *imap-log* buffer." + "If non-nil, a imap session trace is placed in *imap-log* buffer. +Note that username, passwords and other privacy sensitive +information (such as e-mail) may be stored in the *imap-log* +buffer. It is not written to disk, however. Do not enable this +variable unless you are comfortable with that." :group 'imap :type 'boolean) (defcustom imap-debug nil - "If non-nil, random debug spews are placed in *imap-debug* buffer." + "If non-nil, random debug spews are placed in *imap-debug* buffer. +Note that username, passwords and other privacy sensitive +information (such as e-mail) may be stored in the *imap-debug* +buffer. It is not written to disk, however. Do not enable this +variable unless you are comfortable with that." :group 'imap :type 'boolean) @@ -291,6 +301,7 @@ stream.") kerberos4 digest-md5 cram-md5 + ;;sasl login anonymous) "Priority of authenticators to consider when authenticating to server.") @@ -298,6 +309,7 @@ stream.") (defvar imap-authenticator-alist '((gssapi imap-gssapi-auth-p imap-gssapi-auth) (kerberos4 imap-kerberos4-auth-p imap-kerberos4-auth) + (sasl imap-sasl-auth-p imap-sasl-auth) (cram-md5 imap-cram-md5-p imap-cram-md5-auth) (login imap-login-p imap-login-auth) (anonymous imap-anonymous-p imap-anonymous-auth) @@ -313,7 +325,7 @@ for doing the actual authentication.") (defvar imap-error nil "Error codes from the last command.") -;; Internal constants. Change theese and die. +;; Internal constants. Change these and die. (defconst imap-default-port 143) (defconst imap-default-ssl-port 993) @@ -625,7 +637,7 @@ sure of changing the value of `foo'." (let* ((port (or port imap-default-ssl-port)) (coding-system-for-read imap-coding-system-for-read) (coding-system-for-write imap-coding-system-for-write) - (process-connection-type nil) + (process-connection-type imap-process-connection-type) process) (when (progn (setq process (start-process @@ -904,6 +916,66 @@ Returns t if login was successful, nil otherwise." (concat "LOGIN anonymous \"" (concat (user-login-name) "@" (system-name)) "\""))))) +;;; Compiler directives. + +(defvar imap-sasl-client) +(defvar imap-sasl-step) + +(defun imap-sasl-make-mechanisms (buffer) + (let ((mecs '())) + (mapc (lambda (sym) + (let ((name (symbol-name sym))) + (if (and (> (length name) 5) + (string-equal "AUTH=" (substring name 0 5 ))) + (setq mecs (cons (substring name 5) mecs))))) + (imap-capability nil buffer)) + mecs)) + +(defun imap-sasl-auth-p (buffer) + (and (condition-case () + (require 'sasl) + (error nil)) + (sasl-find-mechanism (imap-sasl-make-mechanisms buffer)))) + +(defun imap-sasl-auth (buffer) + "Login to server using the SASL method." + (message "imap: Authenticating using SASL...") + (with-current-buffer buffer + (make-local-variable 'imap-username) + (make-local-variable 'imap-sasl-client) + (make-local-variable 'imap-sasl-step) + (let ((mechanism (sasl-find-mechanism (imap-sasl-make-mechanisms buffer))) + logged user) + (while (not logged) + (setq user (or imap-username + (read-from-minibuffer + (concat "IMAP username for " imap-server " using SASL " + (sasl-mechanism-name mechanism) ": ") + (or user imap-default-user)))) + (when user + (setq imap-sasl-client (sasl-make-client mechanism user "imap2" imap-server) + imap-sasl-step (sasl-next-step imap-sasl-client nil)) + (let ((tag (imap-send-command + (if (sasl-step-data imap-sasl-step) + (format "AUTHENTICATE %s %s" + (sasl-mechanism-name mechanism) + (sasl-step-data imap-sasl-step)) + (format "AUTHENTICATE %s" (sasl-mechanism-name mechanism))) + buffer))) + (while (eq (imap-wait-for-tag tag) 'INCOMPLETE) + (sasl-step-set-data imap-sasl-step (base64-decode-string imap-continuation)) + (setq imap-continuation nil + imap-sasl-step (sasl-next-step imap-sasl-client imap-sasl-step)) + (imap-send-command-1 (if (sasl-step-data imap-sasl-step) + (base64-encode-string (sasl-step-data imap-sasl-step) t) + ""))) + (if (imap-ok-p (imap-wait-for-tag tag)) + (setq imap-username user + logged t) + (message "Login failed...") + (sit-for 1))))) + logged))) + (defun imap-digest-md5-p (buffer) (and (imap-capability 'AUTH=DIGEST-MD5 buffer) (condition-case () @@ -1051,7 +1123,7 @@ password is remembered in the buffer." (with-current-buffer (or buffer (current-buffer)) (if (not (eq imap-state 'nonauth)) (or (eq imap-state 'auth) - (eq imap-state 'select) + (eq imap-state 'selected) (eq imap-state 'examine)) (make-local-variable 'imap-username) (make-local-variable 'imap-password) @@ -1469,7 +1541,7 @@ or 'unseen. The IMAP command tag is returned." (defun imap-fetch (uids props &optional receive nouidfetch buffer) "Fetch properties PROPS from message set UIDS from server in BUFFER. UIDS can be a string, number or a list of numbers. If RECEIVE -is non-nil return theese properties." +is non-nil return these properties." (with-current-buffer (or buffer (current-buffer)) (when (imap-ok-p (imap-send-command-wait (format "%sFETCH %s %s" (if nouidfetch "" "UID ") @@ -1997,7 +2069,9 @@ Return nil if no complete line has arrived." (when (eq (char-after) ?\)) (imap-forward) (nreverse addresses))) - (assert (imap-parse-nil) t "In imap-parse-address-list"))) + ;; With assert, the code might not be eval'd. + ;; (assert (imap-parse-nil) t "In imap-parse-address-list") + (imap-parse-nil))) ;; mailbox = "INBOX" / astring ;; ; INBOX is case-insensitive. All case variants of @@ -2562,7 +2636,9 @@ Return nil if no complete line has arrived." (imap-forward) (push (imap-parse-string-list) dsp) (imap-forward)) - (assert (imap-parse-nil) t "In imap-parse-body-ext")) + ;; With assert, the code might not be eval'd. + ;; (assert (imap-parse-nil) t "In imap-parse-body-ext") + (imap-parse-nil)) (push (nreverse dsp) ext)) (when (eq (char-after) ?\ ) ;; body-fld-lang (imap-forward) @@ -2821,4 +2897,5 @@ Return nil if no complete line has arrived." (provide 'imap) +;;; arch-tag: 27369ed6-33e4-482f-96f1-8bb906ba70f7 ;;; imap.el ends here diff --git a/lisp/legacy-gnus-agent.el b/lisp/legacy-gnus-agent.el index 7127dbd..16b0cf6 100644 --- a/lisp/legacy-gnus-agent.el +++ b/lisp/legacy-gnus-agent.el @@ -6,6 +6,8 @@ ; 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) + (defun gnus-agent-convert-to-compressed-agentview (converting-to) "Iterates over all agentview files to ensure that they have been converted to the compressed format." @@ -30,6 +32,13 @@ converted to the compressed format." (if converted-something (gnus-message 4 "Successfully converted Gnus %s offline (agent) files to %s" gnus-newsrc-file-version converting-to)))) +(defun gnus-agent-convert-to-compressed-agentview-prompt () + (catch 'found-file-to-convert + (let ((gnus-agent-compressed-agentview-search-only t)) + (gnus-agent-convert-to-compressed-agentview nil)))) + +(gnus-convert-mark-converter-prompt 'gnus-agent-convert-to-compressed-agentview 'gnus-agent-convert-to-compressed-agentview-prompt) + (defun gnus-agent-convert-agentview (file) "Load FILE and do a `read' there." (with-temp-buffer @@ -68,6 +77,9 @@ converted to the compressed format." (setq changed-version t))) (when changed-version + (when gnus-agent-compressed-agentview-search-only + (throw 'found-file-to-convert t)) + (erase-buffer) (let ((compressed nil)) (mapcar (lambda (pair) @@ -109,7 +121,7 @@ converted to the compressed format." (set-buffer buffer) (erase-buffer) (insert "The definition of gnus-agent-expire-days has been changed.\nYou currently have it set to the list:\n ") - (let (print-level print-length) (pp gnus-agent-expire-days (current-buffer))) + (gnus-pp gnus-agent-expire-days) (insert "\nIn order to use version '" converting-to "' of gnus, you will need to set\n") (insert "gnus-agent-expire-days to an integer. If you still wish to set different\n") @@ -211,3 +223,5 @@ possible that the hook was persistently saved." ;; gnus-agent-unhook-expire-days is safe in that it does not modify ;; the .newsrc.eld file. (gnus-convert-mark-converter-prompt 'gnus-agent-unhook-expire-days t) + +;;; arch-tag: 845c7b8a-88f7-4468-b8d7-94e8fc72cf1a diff --git a/lisp/lpath.el b/lisp/lpath.el index 6851604..cbeb7a7 100644 --- a/lisp/lpath.el +++ b/lisp/lpath.el @@ -10,17 +10,17 @@ (mapcar (lambda (var) (unless (boundp var) (set var nil))) args)) (maybe-fbind '(Info-directory - Info-menu bbdb-create-internal bbdb-records create-image - display-graphic-p find-coding-system find-image image-size - image-type-available-p insert-image 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 spam-BBDB-register-routine - spam-enter-ham-BBDB string-to-multibyte tool-bar-add-item - tool-bar-add-item-from-menu tool-bar-local-item-from-menu - url-generic-parse-url url-http-file-exists-p - url-insert-file-contents vcard-pretty-print w32-focus-frame - w3m-charset-to-coding-system w3m-region x-focus-frame)) + Info-menu create-image display-graphic-p + display-time-event-handler find-coding-system find-image + image-size image-type-available-p insert-image + 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 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 mc-pgp-always-sign rmail-insert-mime-forwarded-message-function url-current-object @@ -28,8 +28,7 @@ w3-meta-charset-content-type-regexp w3-meta-content-type-charset-regexp w3m-cid-retrieve-function-alist w3m-current-buffer - w3m-display-inline-images w3m-meta-content-type-charset-regexp - w3m-minor-mode-map)) + w3m-display-inline-images w3m-minor-mode-map)) (if (featurep 'xemacs) (progn @@ -60,7 +59,8 @@ 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))) + (maybe-bind '(help-echo-owns-message mail-mode-hook mm-w3m-mode-map + show-nonbreak-escape))) (when (and (featurep 'xemacs) (not (featurep 'mule))) @@ -81,3 +81,5 @@ ) (provide 'lpath) + +;;; arch-tag: d1ad864f-dca6-4d21-aa3f-be3248e66dba diff --git a/lisp/mail-parse.el b/lisp/mail-parse.el index a5de09b..12f9918 100644 --- a/lisp/mail-parse.el +++ b/lisp/mail-parse.el @@ -58,6 +58,7 @@ (defalias 'mail-header-parse-date 'ietf-drums-parse-date) (defalias 'mail-narrow-to-head 'ietf-drums-narrow-to-header) (defalias 'mail-quote-string 'ietf-drums-quote-string) +(defalias 'mail-header-make-address 'ietf-drums-make-address) (defalias 'mail-header-fold-field 'rfc2047-fold-field) (defalias 'mail-header-unfold-field 'rfc2047-unfold-field) @@ -72,4 +73,5 @@ (provide 'mail-parse) +;;; arch-tag: 3e63d75c-c962-4784-ab01-7ba07ca9d2d4 ;;; mail-parse.el ends here diff --git a/lisp/mail-prsvr.el b/lisp/mail-prsvr.el index 2566abc..fc80459 100644 --- a/lisp/mail-prsvr.el +++ b/lisp/mail-prsvr.el @@ -41,4 +41,5 @@ what the desired charsets is to be ignored.") (provide 'mail-prsvr) +;;; arch-tag: 9ba878cc-8b43-4f7a-85b1-69b1a9a5d9f5 ;;; mail-prsvr.el ends here diff --git a/lisp/mail-source.el b/lisp/mail-source.el index 39a202c..d8ef71a 100644 --- a/lisp/mail-source.el +++ b/lisp/mail-source.el @@ -1,5 +1,5 @@ ;;; mail-source.el --- functions for fetching mail -;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 +;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -234,7 +234,10 @@ See Info node `(gnus)Mail Source Specifiers'." (defcustom mail-source-ignore-errors nil "*Ignore errors when querying mail sources. If nil, the user will be prompted when an error occurs. If non-nil, -the error will be ignored.") +the error will be ignored." + :version "22.1" + :group 'mail-source + :type 'boolean) (defcustom mail-source-primary-source nil "*Primary source for incoming mail. @@ -253,7 +256,7 @@ If non-nil, this maildrop will be checked periodically for new mail." :type 'file) (defcustom mail-source-directory message-directory - "Directory where files (if any) will be stored." + "Directory where incoming mail source files (if any) will be stored." :group 'mail-source :type 'directory) @@ -280,6 +283,7 @@ files older than number of days." "*If non-nil, ask for for confirmation before deleting old incoming files. This variable only applies when `mail-source-delete-incoming' is a positive number." + :version "22.1" :group 'mail-source :type 'boolean) @@ -300,6 +304,7 @@ number." (defcustom mail-source-movemail-program nil "If non-nil, name of program for fetching new mail." + :version "22.1" :group 'mail-source :type '(choice (const nil) string)) @@ -493,7 +498,8 @@ Return the number of files that were found." (when (file-exists-p mail-source-crash-box) (message "Processing mail from %s..." mail-source-crash-box) (setq found (mail-source-callback - callback mail-source-crash-box))) + callback mail-source-crash-box)) + (mail-source-delete-crash-box)) (+ found (if (or debug-on-quit debug-on-error) (funcall function source callback) @@ -506,7 +512,7 @@ Return the number of files that were found." (format "Mail source %s error (%s). Continue? " (if (memq ':password source) (let ((s (copy-sequence source))) - (setcar (cdr (memq ':password s)) + (setcar (cdr (memq ':password s)) "********") s) source) @@ -543,33 +549,33 @@ If CONFIRM is non-nil, ask for confirmation before removing a file." (delete-file ffile)))))) (defun mail-source-callback (callback info) - "Call CALLBACK on the mail file, and then remove the mail file. -Pass INFO on to CALLBACK." + "Call CALLBACK on the mail file. Pass INFO on to CALLBACK." (if (or (not (file-exists-p mail-source-crash-box)) (zerop (nth 7 (file-attributes mail-source-crash-box)))) (progn (when (file-exists-p mail-source-crash-box) (delete-file mail-source-crash-box)) 0) - (prog1 - (funcall callback mail-source-crash-box info) - (when (file-exists-p mail-source-crash-box) - ;; Delete or move the incoming mail out of the way. - (if (eq mail-source-delete-incoming t) - (delete-file mail-source-crash-box) - (let ((incoming - (mm-make-temp-file - (expand-file-name - mail-source-incoming-file-prefix - mail-source-directory)))) - (unless (file-exists-p (file-name-directory incoming)) - (make-directory (file-name-directory incoming) t)) - (rename-file mail-source-crash-box incoming t) - ;; remove old incoming files? - (when (natnump mail-source-delete-incoming) - (mail-source-delete-old-incoming - mail-source-delete-incoming - mail-source-delete-old-incoming-confirm)))))))) + (funcall callback mail-source-crash-box info))) + +(defun mail-source-delete-crash-box () + (when (file-exists-p mail-source-crash-box) + ;; Delete or move the incoming mail out of the way. + (if (eq mail-source-delete-incoming t) + (delete-file mail-source-crash-box) + (let ((incoming + (mm-make-temp-file + (expand-file-name + mail-source-incoming-file-prefix + mail-source-directory)))) + (unless (file-exists-p (file-name-directory incoming)) + (make-directory (file-name-directory incoming) t)) + (rename-file mail-source-crash-box incoming t) + ;; remove old incoming files? + (when (natnump mail-source-delete-incoming) + (mail-source-delete-old-incoming + mail-source-delete-incoming + mail-source-delete-old-incoming-confirm)))))) (defun mail-source-movemail (from to) "Move FROM to TO using movemail." @@ -683,7 +689,8 @@ Pass INFO on to CALLBACK." (prog1 (mail-source-callback callback path) (mail-source-run-script - postscript (format-spec-make ?t mail-source-crash-box))) + postscript (format-spec-make ?t mail-source-crash-box)) + (mail-source-delete-crash-box)) 0)))) (defun mail-source-fetch-directory (source callback) @@ -698,8 +705,9 @@ Pass INFO on to CALLBACK." (when (and (file-regular-p file) (funcall predicate file) (mail-source-movemail file mail-source-crash-box)) - (incf found (mail-source-callback callback file)))) - (mail-source-run-script postscript (format-spec-make ?t path)) + (incf found (mail-source-callback callback file)) + (mail-source-run-script postscript (format-spec-make ?t path)) + (mail-source-delete-crash-box))) found))) (defun mail-source-fetch-pop (source callback) @@ -763,7 +771,8 @@ Pass INFO on to CALLBACK." (mail-source-run-script postscript (format-spec-make ?p password ?t mail-source-crash-box - ?s server ?P port ?u user)))) + ?s server ?P port ?u user)) + (mail-source-delete-crash-box))) ;; We nix out the password in case the error ;; was because of a wrong password being given. (setq mail-source-password-cache @@ -856,7 +865,7 @@ See the Gnus manual for details." (eval-when-compile (if (featurep 'xemacs) - (require 'itimer) + (require 'timer-funcs) (require 'timer))) (defun mail-source-start-idle-timer () @@ -946,7 +955,8 @@ This only works when `display-time' is enabled." ;; MMDF mail format (insert "\001\001\001\001\n")) (delete-file file))))) - (incf found (mail-source-callback callback file)))))) + (incf found (mail-source-callback callback file)) + (mail-source-delete-crash-box))))) found))) (eval-and-compile @@ -1007,11 +1017,13 @@ This only works when `display-time' is enabled." (insert "From imap " (current-time-string) "\n") (save-excursion (insert str "\n\n")) - (while (re-search-forward "^From " nil t) + (while (let ((case-fold-search nil)) + (re-search-forward "^From " nil t)) (replace-match ">From ")) (goto-char (point-max)))) (nnheader-ms-strip-cr)) (incf found (mail-source-callback callback server)) + (mail-source-delete-crash-box) (when (and remove fetchflag) (setq remove (nreverse remove)) (imap-message-flags-add @@ -1057,8 +1069,10 @@ This only works when `display-time' is enabled." (push (cons (format "webmail:%s:%s" subtype user) password) mail-source-password-cache))) (webmail-fetch mail-source-crash-box subtype user password) - (mail-source-callback callback (symbol-name subtype))))) + (mail-source-callback callback (symbol-name subtype)) + (mail-source-delete-crash-box)))) (provide 'mail-source) +;;; arch-tag: 72948025-1d17-4d6c-bb12-ef1aa2c490fd ;;; mail-source.el ends here diff --git a/lisp/mailcap.el b/lisp/mailcap.el index e6aa0cc..7e457a4 100644 --- a/lisp/mailcap.el +++ b/lisp/mailcap.el @@ -1,5 +1,5 @@ ;;; mailcap.el --- MIME media types configuration -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: William M. Perry @@ -135,23 +135,21 @@ (non-viewer . t) (type . "application/zip") ("copiousoutput")) - ;; Prefer free viewers. ("pdf" (viewer . "gv -safer %s") (type . "application/pdf") (test . window-system) ("print" . ,(concat "pdf2ps %s - | " mailcap-print-command))) ("pdf" - (viewer . "xpdf %s") + (viewer . "gpdf %s") (type . "application/pdf") ("print" . ,(concat "pdftops %s - | " mailcap-print-command)) (test . (eq window-system 'x))) ("pdf" - (viewer . "acroread %s") - (type . "application/pdf") - ("print" . ,(concat "cat %s | acroread -toPostScript | " - mailcap-print-command)) - (test . window-system)) + (viewer . "xpdf %s") + (type . "application/pdf") + ("print" . ,(concat "pdftops %s - | " mailcap-print-command)) + (test . (eq window-system 'x))) ("pdf" (viewer . ,(concat "pdftotext %s -")) (type . "application/pdf") @@ -255,7 +253,11 @@ ("html" (viewer . mm-w3-prepare-buffer) (test . (fboundp 'w3-prepare-buffer)) - (type . "text/html"))) + (type . "text/html")) + ("dns" + (viewer . dns-mode) + (test . (fboundp 'dns-mode)) + (type . "text/dns"))) ("video" ("mpeg" (viewer . "mpeg_play %s") @@ -305,6 +307,7 @@ validity. Otherwise, if it is a non-function Lisp symbol or list whose car is a symbol, it is `eval'led to yield the validity. If it is a string or list of strings, it represents a shell command to run to return a true or false shell value for the validity.") +(put 'mailcap-mime-data 'risky-local-variable t) (defcustom mailcap-download-directory nil "*Directory to which `mailcap-save-binary-file' downloads files by default. @@ -846,6 +849,7 @@ this type is returned." (".sit" . "application/x-stuffit") (".siv" . "application/sieve") (".snd" . "audio/basic") + (".soa" . "text/dns") (".src" . "application/x-wais-source") (".tar" . "archive/tar") (".tcl" . "application/x-tcl") @@ -985,4 +989,5 @@ If FORCE, re-parse even if already parsed." (provide 'mailcap) +;;; arch-tag: 1fd4f9c9-c305-4d2e-9747-3a4d45baa0bd ;;; mailcap.el ends here diff --git a/lisp/md4.el b/lisp/md4.el index 05e4f87..33d0d32 100644 --- a/lisp/md4.el +++ b/lisp/md4.el @@ -225,4 +225,5 @@ integer is represented as a pair of two 16 bits integers (cons high low)." (provide 'md4) +;;; arch-tag: 99d706fe-089b-42ea-9507-67ae41091e6e ;;; md4.el ends here diff --git a/lisp/message.el b/lisp/message.el index eec8456..08777c9 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -1,5 +1,5 @@ ;;; message.el --- composing mail and news messages -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -33,7 +33,8 @@ (eval-when-compile (require 'cl) (defvar gnus-message-group-art) - (defvar gnus-list-identifiers)) ; gnus-sum is required where necessary + (defvar gnus-list-identifiers) ; gnus-sum is required where necessary + (require 'hashcash)) (require 'canlock) (require 'mailheader) (require 'nnheader) @@ -131,6 +132,7 @@ mailbox format." (defcustom message-fcc-externalize-attachments nil "If non-nil, attachments are included as external parts in Fcc copies." + :version "22.1" :type 'boolean :group 'message-sending) @@ -141,7 +143,7 @@ If the string contains the format spec \"%s\", the Newsgroups the article has been posted to will be inserted there. If this variable is nil, no such courtesy message will be added." :group 'message-sending - :type '(radio (string :format "%t: %v\n" :size 0) (const nil))) + :type '(radio string (const nil))) (defcustom message-ignored-bounced-headers "^\\(Received\\|Return-Path\\|Delivered-To\\):" @@ -170,7 +172,7 @@ Otherwise, most addresses look like `angles', but they look like (defcustom message-insert-canlock t "Whether to insert a Cancel-Lock header in news postings." - :version "21.3" + :version "22.1" :group 'message-headers :type 'boolean) @@ -199,6 +201,7 @@ Checks include `subject-cmsg', `multiple-headers', `sendsys', "*Headers to be generated or prompted for when sending a message. Also see `message-required-news-headers' and `message-required-mail-headers'." + :version "22.1" :group 'message-news :group 'message-headers :link '(custom-manual "(message)Message Headers") @@ -206,6 +209,7 @@ Also see `message-required-news-headers' and (defcustom message-draft-headers '(References From) "*Headers to be generated when saving a draft message." + :version "22.1" :group 'message-news :group 'message-headers :link '(custom-manual "(message)Message Headers") @@ -248,7 +252,12 @@ included. Organization and User-Agent are optional." :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:" @@ -258,13 +267,18 @@ included. Organization and User-Agent are optional." :link '(custom-manual "(message)Mail Headers") :type 'regexp) -(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|^X-Payment:" +(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|^X-Payment:\\|^Approved:" "*Header lines matching this regexp will be deleted before posting. It's best to delete old Path and Date headers before posting to avoid 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-subject-re-regexp "^[ \t]*\\([Rr][Ee]\\(\\[[0-9]*\\]\\)*:[ \t]*\\)*[ \t]*" @@ -283,6 +297,7 @@ the user what do do. In this case, the subject is matched against `message-subject-trailing-was-query' is t, always strip the trailing old subject. In this case, `message-subject-trailing-was-regexp' is used." + :version "22.1" :type '(choice (const :tag "never" nil) (const :tag "always strip" t) (const ask)) @@ -299,6 +314,7 @@ the variable is t instead of `ask', use `message-subject-trailing-was-regexp' instead. It is okay to create some false positives here, as the user is asked." + :version "22.1" :group 'message-various :link '(custom-manual "(message)Message Headers") :type 'regexp) @@ -311,46 +327,43 @@ If `message-subject-trailing-was-query' is set to t, the subject is matched against `message-subject-trailing-was-regexp' in `message-strip-subject-trailing-was'. You should use a regexp creating very few false positives here." + :version "22.1" :group 'message-various :link '(custom-manual "(message)Message Headers") :type 'regexp) -;; Fixme: Why are all these things autoloaded? - ;;; marking inserted text -;;;###autoload (defcustom message-mark-insert-begin "--8<---------------cut here---------------start------------->8---\n" "How to mark the beginning of some inserted text." + :version "22.1" :type 'string :link '(custom-manual "(message)Insertion Variables") :group 'message-various) -;;;###autoload (defcustom message-mark-insert-end "--8<---------------cut here---------------end--------------->8---\n" "How to mark the end of some inserted text." + :version "22.1" :type 'string :link '(custom-manual "(message)Insertion Variables") :group 'message-various) -;;;###autoload -(defcustom message-archive-header - "X-No-Archive: Yes\n" +(defcustom message-archive-header "X-No-Archive: Yes\n" "Header to insert when you don't want your article to be archived. Archives \(such as groups.google.com\) respect this header." + :version "22.1" :type 'string :link '(custom-manual "(message)Header Commands") :group 'message-various) -;;;###autoload (defcustom message-archive-note "X-No-Archive: Yes - save http://groups.google.com/" "Note to insert why you wouldn't want this posting archived. If nil, don't insert any text in the body." - :type '(radio (string :format "%t: %v\n" :size 0) - (const nil)) + :version "22.1" + :type '(radio string (const nil)) :link '(custom-manual "(message)Header Commands") :group 'message-various) @@ -362,36 +375,33 @@ If nil, don't insert any text in the body." "Old target for cross-posts or follow-ups.") (make-variable-buffer-local 'message-cross-post-old-target) -;;;###autoload (defcustom message-cross-post-default t "When non-nil `message-cross-post-followup-to' will perform a crosspost. If nil, `message-cross-post-followup-to' will only do a followup. Note that you can explicitly override this setting by calling `message-cross-post-followup-to' with a prefix." + :version "22.1" :type 'boolean :group 'message-various) -;;;###autoload -(defcustom message-cross-post-note - "Crosspost & Followup-To: " +(defcustom message-cross-post-note "Crosspost & Followup-To: " "Note to insert before signature to notify of cross-post and follow-up." + :version "22.1" :type 'string :group 'message-various) -;;;###autoload -(defcustom message-followup-to-note - "Followup-To: " +(defcustom message-followup-to-note "Followup-To: " "Note to insert before signature to notify of follow-up only." + :version "22.1" :type 'string :group 'message-various) -;;;###autoload -(defcustom message-cross-post-note-function - 'message-cross-post-insert-note +(defcustom message-cross-post-note-function 'message-cross-post-insert-note "Function to use to insert note about Crosspost or Followup-To. The function will be called with four arguments. The function should not only insert a note, but also ensure old notes are deleted. See the documentation for `message-cross-post-insert-note'." + :version "22.1" :type 'function :group 'message-various) @@ -436,6 +446,13 @@ should return the new buffer name." :link '(custom-manual "(message)Message Buffers") :type 'boolean) +(defcustom message-kill-buffer-query t + "*Non-nil means that killing a modified message buffer has to be confirmed. +This is used by `message-kill-buffer'." + :version "23.0" ;; No Gnus + :group 'message-buffers + :type 'boolean) + (eval-when-compile (defvar gnus-local-organization)) (defcustom message-user-organization @@ -516,13 +533,22 @@ Done before generating the new subject of a forward." "*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 "." @@ -548,6 +574,7 @@ Done before generating the new subject of a forward." non-word-constituents "]\\)+>+\\|[ \t]*[]>|}+]\\)+")))) "*Regexp matching the longest possible citation prefix on a line." + :version "22.1" :group 'message-insertion :link '(custom-manual "(message)Insertion Variables") :type 'regexp) @@ -560,7 +587,20 @@ Done before generating the new subject of a forward." ;; Useful to set in site-init.el ;;;###autoload -(defcustom message-send-mail-function 'message-send-mail-with-sendmail +(defcustom message-send-mail-function + (let ((program (if (boundp 'sendmail-program) + ;; see paths.el + sendmail-program))) + (cond + ((and program + (string-match "/" program) ;; Skip path + (file-executable-p program)) + 'message-send-mail-with-sendmail) + ((and program + (executable-find program)) + 'message-send-mail-with-sendmail) + (t + 'smtpmail-send-it))) "Function to call to send the current buffer as mail. The headers should be delimited by a line whose contents match the variable `mail-header-separator'. @@ -614,6 +654,12 @@ and respond with new To and Cc headers." :link '(custom-manual "(message)Followup") :type '(choice function (const nil))) +(defcustom message-extra-wide-headers nil + "If non-nil, a list of additional address headers. +These are used when composing a wide reply." + :group 'message-sending + :type '(repeat string)) + (defcustom message-use-followup-to 'ask "*Specifies what to do with Followup-To header. If nil, always ignore the header. If it is t, use its value, but @@ -632,6 +678,7 @@ always query the user whether to use the value. If it is the symbol If nil, always ignore the header. If it is the symbol `ask', always query the user whether to use the value. If it is the symbol `use', always use the value." + :version "22.1" :group 'message-interface :link '(custom-manual "(message)Mailing Lists") :type '(choice (const :tag "ignore" nil) @@ -645,6 +692,7 @@ If non-nil, this variable contains a list of functions which return regular expressions to match lists. These functions can be used in conjunction with `message-subscribed-regexps' and `message-subscribed-addresses'." + :version "22.1" :group 'message-interface :link '(custom-manual "(message)Mailing Lists") :type '(repeat sexp)) @@ -653,16 +701,17 @@ conjunction with `message-subscribed-regexps' and "*A file containing addresses the user is subscribed to. If nil, do not look at any files to determine list subscriptions. If non-nil, each line of this file should be a mailing list address." + :version "22.1" :group 'message-interface :link '(custom-manual "(message)Mailing Lists") - :type '(radio (file :format "%t: %v\n" :size 0) - (const nil))) + :type '(radio file (const nil))) (defcustom message-subscribed-addresses nil "*Specifies a list of addresses the user is subscribed to. If nil, do not use any predefined list subscriptions. This list of addresses can be used in conjunction with `message-subscribed-address-functions' and `message-subscribed-regexps'." + :version "22.1" :group 'message-interface :link '(custom-manual "(message)Mailing Lists") :type '(repeat string)) @@ -672,6 +721,7 @@ addresses can be used in conjunction with If nil, do not use any predefined list subscriptions. This list of regular expressions can be used in conjunction with `message-subscribed-address-functions' and `message-subscribed-addresses'." + :version "22.1" :group 'message-interface :link '(custom-manual "(message)Mailing Lists") :type '(repeat regexp)) @@ -681,6 +731,7 @@ regular expressions can be used in conjunction with If it is the symbol `always', the posting is allowed. If it is the symbol `never', the posting is not allowed. If it is the symbol `ask', you are prompted." + :version "22.1" :group 'message-interface :link '(custom-manual "(message)Message Headers") :type '(choice (const always) @@ -698,6 +749,7 @@ Doing so would be even more evil than leaving it out." "*Envelope-from when sending mail with sendmail. If this is nil, use `user-mail-address'. If it is the symbol `header', use the From: header of the message." + :version "22.1" :type '(choice (string :tag "From name") (const :tag "Use From: header from message" header) (const :tag "Use `user-mail-address'" nil)) @@ -805,7 +857,8 @@ the signature is inserted." (let ((map (make-sparse-keymap 'message-minibuffer-local-map))) (set-keymap-parent map minibuffer-local-map) map) - "Keymap for `message-read-from-minibuffer'.") + "Keymap for `message-read-from-minibuffer'." + :version "22.1") ;;;###autoload (defcustom message-citation-line-function 'message-insert-citation-line @@ -832,6 +885,7 @@ See also `message-yank-cited-prefix'." "*Prefix inserted on cited or empty lines of yanked messages. Fix `message-cite-prefix-regexp' if it is set to an abnormal value. See also `message-yank-prefix'." + :version "22.1" :type 'string :link '(custom-manual "(message)Insertion Variables") :group 'message-insertion) @@ -888,6 +942,7 @@ If nil, don't insert a signature." ;;;###autoload (defcustom message-signature-insert-empty-line t "*If non-nil, insert an empty line before the signature separator." + :version "22.1" :type 'boolean :link '(custom-manual "(message)Insertion Variables") :group 'message-insertion) @@ -1064,13 +1119,27 @@ candidates: (or (not (listp message-shoot-gnksa-feet)) (memq feature message-shoot-gnksa-feet))) -(defcustom message-hidden-headers nil +(defcustom message-hidden-headers "^References:" "Regexp of headers to be hidden when composing new messages. This can also be a list of regexps to match headers. Or a list starting with `not' and followed by regexps." + :version "22.1" :group 'message :link '(custom-manual "(message)Message Headers") - :type '(repeat regexp)) + :type '(choice + :format "%{%t%}: %[Value Type%] %v" + (regexp :menu-tag "regexp" :format "regexp\n%t: %v") + (repeat :menu-tag "(regexp ...)" :format "(regexp ...)\n%v%i" + (regexp :format "%t: %v")) + (cons :menu-tag "(not regexp ...)" :format "(not regexp ...)\n%v" + (const not) + (repeat :format "%v%i" + (regexp :format "%t: %v"))))) + +(defcustom message-cite-articles-with-x-no-archive t + "If non-nil, cite text from articles that has X-No-Archive set." + :group 'message + :type 'boolean) ;;; Internal variables. ;;; Well, not really internal. @@ -1343,6 +1412,7 @@ subaddresses. So if the first address appears in the recipient list for a message, the subaddresses will be removed (if present) before the mail is sent. All addresses in this structure should be downcased." + :version "22.1" :group 'message-headers :type '(repeat (repeat string))) @@ -1350,6 +1420,7 @@ downcased." "Like `mail-user-agent'. Except if it is nil, use Gnus native MUA; if it is t, use `mail-user-agent'." + :version "22.1" :type '(radio (const :tag "Gnus native" :format "%t\n" nil) @@ -1373,17 +1444,18 @@ If this variable is non-nil, pose the question \"Reply to all recipients?\" before a wide reply to multiple recipients. If the user answers yes, reply to all recipients as usual. If the user answers no, only reply back to the author." - :version "21.3" + :version "22.1" :group 'message-headers :link '(custom-manual "(message)Wide Reply") :type 'boolean) (defcustom message-user-fqdn nil "*Domain part of Messsage-Ids." + :version "22.1" :group 'message-headers :link '(custom-manual "(message)News Headers") :type '(radio (const :format "%v " nil) - (string :format "FQDN: %v\n" :size 0))) + (string :format "FQDN: %v"))) (defcustom message-use-idna (and (condition-case nil (require 'idna) (file-error)) @@ -1391,12 +1463,20 @@ no, only reply back to the author." (executable-find idna-program) 'ask) "Whether to encode non-ASCII in domain names into ASCII according to IDNA." + :version "22.1" :group 'message-headers :link '(custom-manual "(message)IDNA") :type '(choice (const :tag "Ask" ask) (const :tag "Never" nil) (const :tag "Always" t))) +(defcustom message-generate-hashcash nil + "*Whether to generate X-Hashcash: headers. +You must have the \"hashcash\" binary installed, see `hashcash-path'." + :group 'message-headers + :link '(custom-manual "(message)Mail Headers") + :type 'boolean) + ;;; Internal variables. (defvar message-sending-message "Sending...") @@ -1479,10 +1559,17 @@ no, only reply back to the author." "^|? *---+ +Message text follows: +---+ *|?$") "A regexp that matches the separator before the text of a failed message.") +(defvar message-field-fillers + '((To message-fill-field-address) + (Cc message-fill-field-address) + (From message-fill-field-address)) + "Alist of header names/filler functions.") + (defvar message-header-format-alist - `((Newsgroups) - (To . message-fill-address) - (Cc . message-fill-address) + `((From) + (Newsgroups) + (To) + (Cc) (Subject) (In-Reply-To) (Fcc) @@ -1516,6 +1603,7 @@ no, only reply back to the author." "\\)") "Regular expression that matches a valid FQDN." ;; see also: gnus-button-valid-fqdn-regexp + :version "22.1" :group 'message-headers :type 'regexp) @@ -1546,9 +1634,6 @@ no, only reply back to the author." (autoload 'rmail-msg-restore-non-pruned-header "rmail") (autoload 'rmail-output "rmailout")) -(eval-when-compile - (autoload 'sha1 "sha1-el")) - ;;; @@ -1584,11 +1669,11 @@ is used by default." (if (not header) nil (let ((regexp (format "[%s]+" (or separator ","))) - (beg 1) (first t) - quoted elems paren) + beg quoted elems paren) (with-temp-buffer (mm-enable-multibyte) + (setq beg (point-min)) (insert header) (goto-char (point-min)) (while (not (eobp)) @@ -1631,7 +1716,6 @@ see `message-narrow-to-headers-or-head'." (when value (while (string-match "\n[\t ]+" value) (setq value (replace-match " " t t value))) - (set-text-properties 0 (length value) nil value) value))) (defun message-field-value (header &optional not-all) @@ -1644,6 +1728,8 @@ see `message-narrow-to-headers-or-head'." (defun message-narrow-to-field () "Narrow the buffer to the header on the current line." (beginning-of-line) + (while (looking-at "[ \t]") + (forward-line -1)) (narrow-to-region (point) (progn @@ -1711,7 +1797,7 @@ see `message-narrow-to-headers-or-head'." ;;; Start of functions adopted from `message-utils.el'. (defun message-strip-subject-trailing-was (subject) - "Remove trailing \"(Was: )\" from SUBJECT lines. + "Remove trailing \"(was: )\" from SUBJECT lines. Leading \"Re: \" is not stripped by this function. Use the function `message-strip-subject-re' for this." (let* ((query message-subject-trailing-was-query) @@ -2125,6 +2211,12 @@ Point is left at the beginning of the narrowed-to region." (1+ max))))) (message-sort-headers-1)))) +(defun message-kill-address () + "Kill the address under point." + (interactive) + (let ((start (point))) + (message-skip-to-next-address) + (kill-region start (point)))) @@ -2197,11 +2289,11 @@ Point is left at the beginning of the narrowed-to region." (define-key message-mode-map "\C-c\C-d" 'message-dont-send) (define-key message-mode-map "\C-c\n" 'gnus-delay-article) + (define-key message-mode-map "\C-c\M-k" 'message-kill-address) (define-key message-mode-map "\C-c\C-e" 'message-elide-region) (define-key message-mode-map "\C-c\C-v" 'message-delete-not-region) (define-key message-mode-map "\C-c\C-z" 'message-kill-to-signature) (define-key message-mode-map "\M-\r" 'message-newline-and-reformat) - ;;(define-key message-mode-map "\M-q" 'message-fill-paragraph) (define-key message-mode-map [remap split-line] 'message-split-line) (define-key message-mode-map "\C-c\C-a" 'mml-attach-file) @@ -2329,6 +2421,7 @@ these properties from the message composition buffer. However, some packages requires these properties to be present in order to work. If you use one of these packages, turn this option off, and hope the message composition doesn't break too bad." + :version "22.1" :group 'message-various :link '(custom-manual "(message)Various Message Variables") :type 'boolean) @@ -2345,7 +2438,7 @@ message composition doesn't break too bad." ;; fontified: is used by font-lock. ;; syntax-table, local-map: I dunno. ;; We need to add XEmacs names to the list. - "Property list of with properties.forbidden in message buffers. + "Property list of with properties forbidden in message buffers. The values of the properties are ignored, only the property names are used.") (defun message-tamago-not-in-use-p (pos) @@ -2368,11 +2461,9 @@ This function is intended to be called from `after-change-functions'. See also `message-forbidden-properties'." (when (and message-strip-special-text-properties (message-tamago-not-in-use-p begin)) - (while (not (= begin end)) - (when (not (get-text-property begin 'message-hidden)) - (remove-text-properties begin (1+ begin) - message-forbidden-properties)) - (incf begin)))) + (let ((buffer-read-only nil) + (inhibit-read-only t)) + (remove-text-properties begin end message-forbidden-properties)))) ;;;###autoload (define-derived-mode message-mode text-mode "Message" @@ -2438,7 +2529,11 @@ M-RET `message-newline-and-reformat' (break the line and reformat)." (set (make-local-variable 'message-mime-part) 0) (message-setup-fill-variables) ;; Allow using comment commands to add/remove quoting. - (set (make-local-variable 'comment-start) message-yank-prefix) + ;; (set (make-local-variable 'comment-start) message-yank-prefix) + (when message-yank-prefix + (set (make-local-variable 'comment-start) message-yank-prefix) + (set (make-local-variable 'comment-start-skip) + (concat "^" (regexp-quote message-yank-prefix) "[ \t]*"))) (if (featurep 'xemacs) (message-setup-toolbar) (set (make-local-variable 'font-lock-defaults) @@ -2571,7 +2666,7 @@ M-RET `message-newline-and-reformat' (break the line and reformat)." (defun message-goto-mail-followup-to () "Move point to the Mail-Followup-To header." (interactive) - (message-position-on-field "Mail-Followup-To" "From")) + (message-position-on-field "Mail-Followup-To" "To")) (defun message-goto-keywords () "Move point to the Keywords header." @@ -2669,6 +2764,7 @@ prefix FORCE is given." E.g., if this list contains a member list with elements `Cc' and `To', then `message-carefully-insert-headers' will not insert a `To' header when the message is already `Cc'ed to the recipient." + :version "22.1" :group 'message-headers :link '(custom-manual "(message)Message Headers") :type '(repeat sexp)) @@ -2680,6 +2776,7 @@ or in the synonym headers, defined by `message-header-synonyms'." ;; FIXME: Should compare only the address and not the full name. Comparison ;; should be done case-folded (and with `string=' rather than ;; `string-match'). + ;; (mail-strip-quoted-names "Foo Bar , bla@fasel (Bla Fasel)") (dolist (header headers) (let* ((header-name (symbol-name (car header))) (new-header (cdr header)) @@ -2865,7 +2962,9 @@ Prefix arg means justify as well." (interactive (list (if current-prefix-arg 'full))) (if (if (boundp 'filladapt-mode) filladapt-mode) nil - (message-newline-and-reformat arg t) + (if (message-point-in-header-p) + (message-fill-field) + (message-newline-and-reformat arg t)) t)) ;; Is it better to use `mail-header-end'? @@ -3207,8 +3306,7 @@ prefix, and don't delete any headers." ;; Insert a blank line if it is peeled off. (insert "\n"))) (goto-char start) - (while functions - (funcall (pop functions))) + (mapc 'funcall functions) (when message-citation-line-function (unless (bolp) (insert "\n")) @@ -3222,6 +3320,7 @@ prefix, and don't delete any headers." (run-hooks 'mail-citation-hook) (let* ((start (point)) (end (mark t)) + (x-no-archive nil) (functions (when message-indent-citation-function (if (listp message-indent-citation-function) @@ -3234,6 +3333,7 @@ prefix, and don't delete any headers." (save-restriction (narrow-to-region start end) (message-narrow-to-head-1) + (setq x-no-archive (message-fetch-field "x-no-archive")) (vector 0 (or (message-fetch-field "subject") "none") (message-fetch-field "from") @@ -3243,12 +3343,18 @@ prefix, and don't delete any headers." 0 0 "")))) (mml-quote-region start end) (goto-char start) - (while functions - (funcall (pop functions))) + (mapc 'funcall functions) (when message-citation-line-function (unless (bolp) (insert "\n")) - (funcall message-citation-line-function))))) + (funcall message-citation-line-function)) + (when (and x-no-archive + (not message-cite-articles-with-x-no-archive) + (string-match "yes" x-no-archive)) + (undo-boundary) + (delete-region (point) (mark t)) + (insert "> [Quoted text removed due to X-No-Archive]\n") + (forward-line -1))))) (defun message-insert-citation-line () "Insert a simple citation line." @@ -3340,6 +3446,7 @@ Instead, just auto-save the buffer and then bury it." "Kill the current buffer." (interactive) (when (or (not (buffer-modified-p)) + (not message-kill-buffer-query) (yes-or-no-p "Message modified; kill anyway? ")) (let ((actions message-kill-actions) (draft-article message-draft-article) @@ -3352,8 +3459,15 @@ Instead, just auto-save the buffer and then bury it." (file-exists-p auto-save-file-name)) (and file-name (file-exists-p file-name))) - (yes-or-no-p (format "Remove the backup file%s? " - (if modified " too" "")))) + (progn + ;; If the message buffer has lived in a dedicated window, + ;; `kill-buffer' has killed the frame. Thus the + ;; `yes-or-no-p' may show up in a lowered frame. Make sure + ;; that the user can see the question by raising the + ;; current frame: + (raise-frame) + (yes-or-no-p (format "Remove the backup file%s? " + (if modified " too" ""))))) (ignore-errors (delete-file auto-save-file-name)) (let ((message-draft-article draft-article)) @@ -3364,8 +3478,7 @@ Instead, just auto-save the buffer and then bury it." "Bury this mail BUFFER." (let ((newbuf (other-buffer buffer))) (bury-buffer buffer) - (if (and (fboundp 'frame-parameters) - (cdr (assq 'dedicated (frame-parameters))) + (if (and (window-dedicated-p (selected-window)) (not (null (delq (selected-frame) (visible-frame-list))))) (delete-frame (selected-frame)) (switch-to-buffer newbuf)))) @@ -3453,16 +3566,31 @@ It should typically alter the sending method in some way or other." (put 'message-check 'lisp-indent-function 1) (put 'message-check 'edebug-form-spec '(form body)) -(defun message-text-with-property (prop) - "Return a list of all points where the text has PROP." - (let ((points nil) - (point (point-min))) - (save-excursion - (while (< point (point-max)) - (when (get-text-property point prop) - (push point points)) - (incf point))) - (nreverse points))) +(defun message-text-with-property (prop &optional start end reverse) + "Return a list of start and end positions where the text has PROP. +START and END bound the search, they default to `point-min' and +`point-max' respectively. If REVERSE is non-nil, find text which does +not have PROP." + (unless start + (setq start (point-min))) + (unless end + (setq end (point-max))) + (let (next regions) + (if reverse + (while (and start + (setq start (text-property-any start end prop nil))) + (setq next (next-single-property-change start prop nil end)) + (push (cons start (or next end)) regions) + (setq start next)) + (while (and start + (or (get-text-property start prop) + (and (setq start (next-single-property-change + start prop nil end)) + (get-text-property start prop)))) + (setq next (text-property-any start end prop nil)) + (push (cons start (or next end)) regions) + (setq start next))) + (nreverse regions))) (defun message-fix-before-sending () "Do various things to make the message nice before sending it." @@ -3471,22 +3599,22 @@ It should typically alter the sending method in some way or other." (unless (bolp) (insert "\n")) ;; Make the hidden headers visible. - (let ((points (message-text-with-property 'message-hidden))) - (when points - (goto-char (car points)) - (dolist (point points) - (add-text-properties point (1+ point) - '(invisible nil intangible nil))))) + (widen) + ;; Sort headers before sending the message. + (message-sort-headers) ;; Make invisible text visible. ;; It doesn't seem as if this is useful, since the invisible property ;; is clobbered by an after-change hook anyhow. (message-check 'invisible-text - (let ((points (message-text-with-property 'invisible))) - (when points - (goto-char (car points)) - (dolist (point points) - (put-text-property point (1+ point) 'invisible nil) - (message-overlay-put (message-make-overlay point (1+ point)) + (let ((regions (message-text-with-property 'invisible)) + from to) + (when regions + (while regions + (setq from (caar regions) + to (cdar regions) + regions (cdr regions)) + (put-text-property from to 'invisible nil) + (message-overlay-put (message-make-overlay from to) 'face 'highlight)) (unless (yes-or-no-p "Invisible text found and made visible; continue sending? ") @@ -3557,16 +3685,15 @@ It should typically alter the sending method in some way or other." (defun message-do-actions (actions) "Perform all actions in ACTIONS." ;; Now perform actions on successful sending. - (while actions + (dolist (action actions) (ignore-errors (cond ;; A simple function. - ((functionp (car actions)) - (funcall (car actions))) + ((functionp action) + (funcall action)) ;; Something to be evaled. (t - (eval (car actions))))) - (pop actions))) + (eval action)))))) (defun message-send-mail-partially () "Send mail as message/partial." @@ -3651,6 +3778,14 @@ It should typically alter the sending method in some way or other." (gnus-setup-posting-charset nil) message-posting-charset)) (headers message-required-mail-headers)) + (when message-generate-hashcash + (message "Generating hashcash...") + ;; Wait for calculations already started to finish... + (hashcash-wait-async) + ;; ...and do calculations not already done. mail-add-payment + ;; will leave existing X-Hashcash headers alone. + (mail-add-payment) + (message "Generating hashcash...done")) (save-restriction (message-narrow-to-headers) ;; Generate the Mail-Followup-To header if the header is not there... @@ -3718,13 +3853,13 @@ It should typically alter the sending method in some way or other." "content-transfer-encoding"))))))) (message-insert-courtesy-copy)) (if (or (not message-send-mail-partially-limit) - (< (point-max) message-send-mail-partially-limit) + (< (buffer-size) message-send-mail-partially-limit) (not (message-y-or-n-p "The message size is too large, split? " t "\ The message size, " - (/ (point-max) 1000) "KB, is too large. + (/ (buffer-size) 1000) "KB, is too large. Some mail gateways (MTA's) bounce large messages. To avoid the problem, answer `y', and the message will be split into several @@ -3777,8 +3912,7 @@ If you always want Gnus to send messages in one piece, set (when (eval message-mailer-swallows-blank-line) (newline)) (when message-interactive - (save-excursion - (set-buffer errbuf) + (with-current-buffer errbuf (erase-buffer)))) (let* ((default-directory "/") (coding-system-for-write message-send-coding-system) @@ -3813,7 +3947,7 @@ If you always want Gnus to send messages in one piece, set (save-excursion (set-buffer errbuf) (goto-char (point-min)) - (while (re-search-forward "\n\n* *" nil t) + (while (re-search-forward "\n+ *" nil t) (replace-match "; ")) (if (not (zerop (buffer-size))) (error "Sending...failed to %s" @@ -3835,8 +3969,8 @@ to find out how to use this." (case (let ((coding-system-for-write message-send-coding-system)) (apply - 'call-process-region 1 (point-max) message-qmail-inject-program - nil nil nil + 'call-process-region (point-min) (point-max) + message-qmail-inject-program nil nil nil ;; qmail-inject's default behaviour is to look for addresses on the ;; command line; if there're none, it scans the headers. ;; yes, it does The Right Thing w.r.t. Resent-To and it's kin. @@ -3895,7 +4029,7 @@ manual for details." (defun message-canlock-generate () "Return a string that is non-trivial to guess. Do not use this for anything important, it is cryptographically weak." - (require 'sha1-el) + (require 'sha1) (let (sha1-maximum-internal-length) (sha1 (concat (message-unique-id) (format "%x%x%x" (random) (random t) (random)) @@ -4366,7 +4500,9 @@ Otherwise, generate and save a value for `canlock-password' first." nil)))) ;; Check for control characters. (message-check 'control-chars - (if (re-search-forward "[\000-\007\013\015-\032\034-\037\200-\237]" nil t) + (if (re-search-forward + (mm-string-as-multibyte "[\000-\007\013\015-\032\034-\037\200-\237]") + nil t) (y-or-n-p "The article contains control characters. Really post? ") t)) @@ -4522,24 +4658,8 @@ Otherwise, generate and save a value for `canlock-password' first." (defun message-make-date (&optional now) "Make a valid data header. If NOW, use that time instead." - (let* ((now (or now (current-time))) - (zone (nth 8 (decode-time now))) - (sign "+")) - (when (< zone 0) - (setq sign "-") - (setq zone (- zone))) - (concat - ;; The day name of the %a spec is locale-specific. Pfff. - (format "%s, " (capitalize (car (rassoc (nth 6 (decode-time now)) - parse-time-weekdays)))) - (format-time-string "%d" now) - ;; The month name of the %b spec is locale-specific. Pfff. - (format " %s " - (capitalize (car (rassoc (nth 4 (decode-time now)) - parse-time-months)))) - (format-time-string "%Y %H:%M:%S " now) - ;; We do all of this because XEmacs doesn't have the %z spec. - (format "%s%02d%02d" sign (/ zone 3600) (/ (% zone 3600) 60))))) + (let ((system-time-locale "C")) + (format-time-string "%a, %d %b %Y %T %z" now))) (defun message-make-message-id () "Make a unique Message-ID." @@ -4875,55 +4995,25 @@ subscribed address (and not the additional To and Cc header contents)." list msg-recipients)))))) -(defun message-idna-inside-rhs-p () - "Return t iff point is inside a RHS (heuristically). -Only works properly if header contains mailbox-list or address-list. -I.e., calling it on a Subject: header is useless." - (save-restriction - (narrow-to-region (save-excursion (or (re-search-backward "^[^ \t]" nil t) - (point-min))) - (save-excursion (or (re-search-forward "^[^ \t]" nil t) - (point-max)))) - (if (re-search-backward "[\\\n\r\t ]" - (save-excursion (search-backward "@" nil t)) t) - ;; whitespace between @ and point - nil - (let ((dquote 1) (paren 1)) - (while (save-excursion (re-search-backward "[^\\]\"" nil t dquote)) - (incf dquote)) - (while (save-excursion (re-search-backward "[^\\]\(" nil t paren)) - (incf paren)) - (and (= (% dquote 2) 1) (= (% paren 2) 1)))))) - (defun message-idna-to-ascii-rhs-1 (header) "Interactively potentially IDNA encode domain names in HEADER." - (let (rhs ace start startpos endpos ovl) - (goto-char (point-min)) - (while (re-search-forward (concat "^" header) nil t) - (while (re-search-forward "@\\([^ \t\r\n>,]+\\)" - (or (save-excursion - (re-search-forward "^[^ \t]" nil t)) - (point-max)) - t) - (setq rhs (match-string-no-properties 1) - startpos (match-beginning 1) - endpos (match-end 1)) - (when (save-match-data - (and (message-idna-inside-rhs-p) - (setq ace (idna-to-ascii rhs)) - (not (string= rhs ace)) - (if (eq message-use-idna 'ask) - (unwind-protect - (progn - (setq ovl (message-make-overlay startpos - endpos)) - (message-overlay-put ovl 'face 'highlight) - (y-or-n-p - (format "Replace with `%s'? " ace))) - (message "") - (message-delete-overlay ovl)) - message-use-idna))) - (replace-match (concat "@" ace))))))) + (let ((field (message-fetch-field header)) + rhs ace address) + (when field + (dolist (address (mail-header-parse-addresses field)) + (setq address (car address) + rhs (downcase (or (cadr (split-string address "@")) "")) + ace (downcase (idna-to-ascii rhs))) + (when (and (not (equal rhs ace)) + (or (not (eq message-use-idna 'ask)) + (y-or-n-p (format "Replace %s with %s? " rhs ace)))) + (goto-char (point-min)) + (while (re-search-forward (concat "^" header ":") nil t) + (message-narrow-to-field) + (while (search-forward (concat "@" rhs) nil t) + (replace-match (concat "@" ace) t t)) + (goto-char (point-max)) + (widen))))))) (defun message-idna-to-ascii-rhs () "Possibly IDNA encode non-ASCII domain names in From:, To: and Cc: headers. @@ -4935,6 +5025,7 @@ See `message-idna-encode'." (message-narrow-to-head) (message-idna-to-ascii-rhs-1 "From") (message-idna-to-ascii-rhs-1 "To") + (message-idna-to-ascii-rhs-1 "Reply-To") (message-idna-to-ascii-rhs-1 "Cc"))))) (defun message-generate-headers (headers) @@ -5044,8 +5135,9 @@ Headers already prepared in the buffer are not modified." (if formatter (funcall formatter header value) (insert header-string ": " value)) + (goto-char (message-fill-field)) ;; We check whether the value was ended by a - ;; newline. If now, we insert one. + ;; newline. If not, we insert one. (unless (bolp) (insert "\n")) (forward-line -1))) @@ -5056,7 +5148,8 @@ Headers already prepared in the buffer are not modified." ;; empty, we con't insert it anyway. (unless optionalp (push header-string message-inserted-headers) - (insert value))) + (insert value) + (message-fill-field))) ;; Add the deletable property to the headers that require it. (and (memq header message-deletable-headers) (progn (beginning-of-line) (looking-at "[^:]+: ")) @@ -5112,65 +5205,89 @@ Headers already prepared in the buffer are not modified." ;;; Setting up a message buffer ;;; +(defun message-skip-to-next-address () + (let ((end (save-excursion + (message-next-header) + (point))) + quoted char) + (when (looking-at ",") + (forward-char 1)) + (while (and (not (= (point) end)) + (or (not (eq char ?,)) + quoted)) + (skip-chars-forward "^,\"" (point-max)) + (when (eq (setq char (following-char)) ?\") + (setq quoted (not quoted))) + (unless (= (point) end) + (forward-char 1))) + (skip-chars-forward " \t\n"))) + (defun message-fill-address (header value) - (save-restriction - (narrow-to-region (point) (point)) - (insert (capitalize (symbol-name header)) - ": " - (if (consp value) (car value) value) - "\n") - (narrow-to-region (point-min) (1- (point-max))) - (let (quoted last) - (goto-char (point-min)) - (while (not (eobp)) - (skip-chars-forward "^,\"" (point-max)) - (if (or (eq (char-after) ?,) - (eobp)) - (when (not quoted) - (if (and (> (current-column) 78) - last) - (progn - (save-excursion - (goto-char last) - (insert "\n\t")) - (setq last (1+ (point)))) - (setq last (1+ (point))))) - (setq quoted (not quoted))) - (unless (eobp) - (forward-char 1)))) - (goto-char (point-max)) - (widen) - (forward-line 1))) + (insert (capitalize (symbol-name header)) + ": " + (if (consp value) (car value) value) + "\n") + (message-fill-field-address)) (defun message-split-line () "Split current line, moving portion beyond point vertically down. If the current line has `message-yank-prefix', insert it on the new line." (interactive "*") (condition-case nil - (split-line message-yank-prefix) ;; Emacs 21.3.50+ supports arg. + (split-line message-yank-prefix) ;; Emacs 22.1+ supports arg. (error (split-line)))) - -(defun message-fill-header (header value) + +(defun message-insert-header (header value) + (insert (capitalize (symbol-name header)) + ": " + (if (consp value) (car value) value))) + +(defun message-field-name () + (save-excursion + (goto-char (point-min)) + (when (looking-at "\\([^:]+\\):") + (intern (capitalize (match-string 1)))))) + +(defun message-fill-field () + (save-excursion + (save-restriction + (message-narrow-to-field) + (let ((field-name (message-field-name))) + (funcall (or (cadr (assq field-name message-field-fillers)) + 'message-fill-field-general))) + (point-max)))) + +(defun message-fill-field-address () + (while (not (eobp)) + (message-skip-to-next-address) + (let (last) + (if (and (> (current-column) 78) + last) + (progn + (save-excursion + (goto-char last) + (insert "\n\t")) + (setq last (1+ (point)))) + (setq last (1+ (point))))))) + +(defun message-fill-field-general () (let ((begin (point)) (fill-column 78) (fill-prefix "\t")) - (insert (capitalize (symbol-name header)) - ": " - (if (consp value) (car value) value) - "\n") - (save-restriction - (narrow-to-region begin (point)) - (fill-region-as-paragraph begin (point)) - ;; Tapdance around looong Message-IDs. - (forward-line -1) - (when (looking-at "[ \t]*$") - (message-delete-line)) - (goto-char begin) - (re-search-forward ":" nil t) - (when (looking-at "\n[ \t]+") - (replace-match " " t t)) - (goto-char (point-max))))) + (while (and (search-forward "\n" nil t) + (not (eobp))) + (replace-match " " t t)) + (fill-region-as-paragraph begin (point-max)) + ;; Tapdance around looong Message-IDs. + (forward-line -1) + (when (looking-at "[ \t]*$") + (message-delete-line)) + (goto-char begin) + (search-forward ":" nil t) + (when (looking-at "\n[ \t]+") + (replace-match " " t t)) + (goto-char (point-max)))) (defun message-shorten-1 (list cut surplus) "Cut SURPLUS elements out of LIST, beginning with CUTth one." @@ -5206,7 +5323,7 @@ they are." ;; When sending via news, make sure the total folded length will ;; be less than 998 characters. This is to cater to broken INN ;; 2.3 which counts the total number of characters in a header - ;; rather than the physical line length of each line, as it shuld. + ;; rather than the physical line length of each line, as it should. ;; ;; This hack should be removed when it's believed than INN 2.3 is ;; no longer widely used. @@ -5216,12 +5333,13 @@ they are." (when message-this-is-news (while (< 998 (with-temp-buffer - (message-fill-header header (mapconcat #'identity refs " ")) + (message-insert-header + header (mapconcat #'identity refs " ")) (buffer-size))) (message-shorten-1 refs cut 1))) ;; Finally, collect the references back into a string and insert ;; it into the buffer. - (message-fill-header header (mapconcat #'identity refs " ")))) + (message-insert-header header (mapconcat #'identity refs " ")))) (defun message-position-point () "Move point to where the user probably wants to find it." @@ -5245,6 +5363,7 @@ they are." (defcustom message-beginning-of-line t "Whether \\\\[message-beginning-of-line]\ goes to beginning of header values." + :version "22.1" :group 'message-buffers :link '(custom-manual "(message)Movement") :type 'boolean) @@ -5258,10 +5377,10 @@ outside the message header or if the option `message-beginning-of-line' is nil. If point is in the message header and on a (non-continued) header -line, move point to the beginning of the header value. If point -is already there, move point to beginning of line. Therefore, -repeated calls will toggle point between beginning of field and -beginning of line." +line, move point to the beginning of the header value or the beginning of line, +whichever is closer. If point is already at beginning of line, move point to +beginning of header value. Therefore, repeated calls will toggle point +between beginning of field and beginning of line." (interactive "p") (let ((zrs 'zmacs-region-stays)) (when (and (interactive-p) (boundp zrs)) @@ -5272,9 +5391,9 @@ beginning of line." (bol (progn (beginning-of-line n) (point))) (eol (point-at-eol)) (eoh (re-search-forward ": *" eol t))) - (if (or (not eoh) (equal here eoh)) - (goto-char bol) - (goto-char eoh))) + (goto-char + (if (and eoh (or (< eoh here) (= bol here))) + eoh bol))) (beginning-of-line n))) (defun message-buffer-name (type &optional to group) @@ -5484,6 +5603,9 @@ are not included." (run-hooks 'message-header-setup-hook)) (set-buffer-modified-p nil) (setq buffer-undo-list nil) + (when message-generate-hashcash + ;; Generate hashcash headers for recipients already known + (mail-add-payment-async)) (run-hooks 'message-setup-hook) (message-position-point) (undo-boundary)) @@ -5570,7 +5692,7 @@ OTHER-HEADERS is an alist of header/value pairs." (Subject . ,(or subject "")))))) (defun message-get-reply-headers (wide &optional to-address address-headers) - (let (follow-to mct never-mct to cc author mft recipients) + (let (follow-to mct never-mct to cc author mft recipients extra) ;; Find all relevant headers we need. (save-restriction (message-narrow-to-headers-or-head) @@ -5582,6 +5704,11 @@ OTHER-HEADERS is an alist of header/value pairs." return t) (message-fetch-field "original-to"))) cc (message-fetch-field "cc") + extra (when message-extra-wide-headers + (mapconcat 'identity + (mapcar 'message-fetch-field + message-extra-wide-headers) + ", ")) mct (message-fetch-field "mail-copies-to") author (or (message-fetch-field "mail-reply-to") (message-fetch-field "reply-to") @@ -5633,7 +5760,10 @@ because discussions that are spread over several lists tend to be fragmented and very difficult to follow. Also, some source/announcement lists are not intended for discussion; -responses here are directed to other addresses."))) +responses here are directed to other addresses. + +You may customize the variable `message-use-mail-followup-to', if you +want to get rid of this query permanently."))) (setq recipients (concat ", " mft))) (to-address (setq recipients (concat ", " to-address)) @@ -5641,8 +5771,9 @@ responses here are directed to other addresses."))) (if mct (setq recipients (concat recipients ", " mct)))) (t (setq recipients (if never-mct "" (concat ", " author))) - (if to (setq recipients (concat recipients ", " to))) - (if cc (setq recipients (concat recipients ", " cc))) + (if to (setq recipients (concat recipients ", " to))) + (if cc (setq recipients (concat recipients ", " cc))) + (if extra (setq recipients (concat recipients ", " extra))) (if mct (setq recipients (concat recipients ", " mct))))) (if (>= (length recipients) 2) ;; Strip the leading ", ". @@ -5829,7 +5960,10 @@ You should normally obey the Followup-To: header. `Followup-To: poster' sends your response via e-mail instead of news. A typical situation where `Followup-To: poster' is used is when the poster -does not read the newsgroup, so he wouldn't see any replies sent to it.")) +does not read the newsgroup, so he wouldn't see any replies sent to it. + +You may customize the variable `message-use-followup-to', if you +want to get rid of this query permanently.")) (progn (setq message-this-is-news nil) (cons 'To (or mrt reply-to from ""))) @@ -5852,7 +5986,10 @@ because discussions that are spread over several newsgroup tend to be fragmented and very difficult to follow. Also, some source/announcement newsgroups are not intended for discussion; -responses here are directed to other newsgroups.")) +responses here are directed to other newsgroups. + +You may customize the variable `message-use-followup-to', if you +want to get rid of this query permanently.")) (cons 'Newsgroups followup-to) (cons 'Newsgroups newsgroups)))))) (posted-to @@ -6097,18 +6234,17 @@ the message." subject (mail-decode-encoded-word-string subject)) "")) - (if message-wash-forwarded-subjects - (setq subject (message-wash-subject subject))) + (when message-wash-forwarded-subjects + (setq subject (message-wash-subject subject))) ;; Make sure funcs is a list. (and funcs (not (listp funcs)) (setq funcs (list funcs))) ;; Apply funcs in order, passing subject generated by previous ;; func to the next one. - (while funcs - (when (functionp (car funcs)) - (setq subject (funcall (car funcs) subject))) - (setq funcs (cdr funcs))) + (dolist (func funcs) + (when (functionp func) + (setq subject (funcall func subject)))) subject)))) (eval-when-compile @@ -6151,8 +6287,7 @@ Optional DIGEST will use digest to forward." (setq e (point)) (insert "\n-------------------- End of forwarded message --------------------\n") - (when (and (not current-prefix-arg) - message-forward-ignored-headers) + (when message-forward-ignored-headers (save-restriction (narrow-to-region b e) (goto-char b) @@ -6198,7 +6333,7 @@ Optional DIGEST will use digest to forward." (goto-char (point-max)))) (setq e (point)) (insert "<#/mml>\n") - (when (and (not current-prefix-arg) + (when (and (not message-forward-decoded-p) message-forward-ignored-headers) (save-restriction (narrow-to-region b e) @@ -6325,7 +6460,8 @@ Optional DIGEST will use digest to forward." (replace-match "X-From-Line: ")) ;; Send it. (let ((message-inhibit-body-encoding t) - message-required-mail-headers) + message-required-mail-headers + rfc2047-encode-encoded-words) (message-send-mail)) (kill-buffer (current-buffer))) (message "Resending message to %s...done" address))) @@ -6464,7 +6600,7 @@ which specify the range to operate on." (let ((end1 (make-marker))) (move-marker end1 (max start end)) (goto-char (min start end)) - (while (re-search-forward "\b" end1 t) + (while (search-forward "\b" end1 t) (if (eq (char-after) (char-after (- (point) 2))) (delete-char -2)))))) @@ -6550,12 +6686,21 @@ which specify the range to operate on." '("^\\(Disposition-Notification-To\\|Return-Receipt-To\\):" . message-expand-name)) "Alist of (RE . FUN). Use FUN for completion on header lines matching RE." + :version "22.1" :group 'message :type '(alist :key-type regexp :value-type function)) +(defcustom message-expand-name-databases + (list 'bbdb 'eudc) + "List of databases to try for name completion (`message-expand-name'). +Each element is a symbol and can be `bbdb' or `eudc'." + :group 'message + :type '(set (const bbdb) (const eudc))) + (defcustom message-tab-body-function nil "*Function to execute when `message-tab' (TAB) is executed in the body. If nil, the function bound in `text-mode-map' or `global-map' is executed." + :version "22.1" :group 'message :link '(custom-manual "(message)Various Commands") :type 'function) @@ -6618,9 +6763,12 @@ those headers." (delete-region (point) (progn (forward-line 3) (point)))))))))) (defun message-expand-name () - (cond ((when (boundp 'eudc-protocol) eudc-protocol) + (cond ((and (memq 'eudc message-expand-name-databases) + (boundp 'eudc-protocol) + eudc-protocol) (eudc-expand-inline)) - ((fboundp 'bbdb-complete-name) + ((and (memq 'bbdb message-expand-name-databases) + (fboundp 'bbdb-complete-name)) (bbdb-complete-name)) (t (expand-abbrev)))) @@ -6669,7 +6817,7 @@ regexp VARSTR." (let ((locals (save-excursion (set-buffer buffer) (buffer-local-variables))) - (regexp "^gnus\\|^nn\\|^message\\|^user-mail-address")) + (regexp "^gnus\\|^nn\\|^message\\|^sendmail\\|^smtp\\|^user-mail-address")) (mapcar (lambda (local) (when (and (consp local) @@ -6746,7 +6894,7 @@ regexp VARSTR." (defun message-use-alternative-email-as-from () (require 'mail-utils) - (let* ((fields '("To" "Cc")) + (let* ((fields '("To" "Cc" "From")) (emails (split-string (mail-strip-quoted-names @@ -6760,7 +6908,8 @@ regexp VARSTR." (pop emails)) (unless (or (not email) (equal email user-mail-address)) (goto-char (point-max)) - (insert "From: " email "\n")))) + (insert "From: " (let ((user-mail-address email)) (message-make-from)) + "\n")))) (defun message-options-get (symbol) (cdr (assq symbol message-options))) @@ -6799,7 +6948,8 @@ regexp VARSTR." (list message-hidden-headers) message-hidden-headers)) (inhibit-point-motion-hooks t) - (after-change-functions nil)) + (after-change-functions nil) + (end-of-headers 0)) (when regexps (save-excursion (save-restriction @@ -6808,11 +6958,17 @@ regexp VARSTR." (while (not (eobp)) (if (not (message-hide-header-p regexps)) (message-next-header) - (let ((begin (point))) + (let ((begin (point)) + header header-len) (message-next-header) - (add-text-properties - begin (point) - '(invisible t message-hidden t)))))))))) + (setq header (buffer-substring begin (point)) + header-len (- (point) begin)) + (delete-region begin (point)) + (goto-char (1+ end-of-headers)) + (insert header) + (setq end-of-headers + (+ end-of-headers header-len)))))))) + (narrow-to-region (1+ end-of-headers) (point-max)))) (defun message-hide-header-p (regexps) (let ((result nil) @@ -6838,4 +6994,5 @@ regexp VARSTR." ;; coding: iso-8859-1 ;; End: +;; arch-tag: 94b32cac-4504-4b6c-8181-030ebf380ee0 ;;; message.el ends here diff --git a/lisp/messagexmas.el b/lisp/messagexmas.el index b3e5028..facbf88 100644 --- a/lisp/messagexmas.el +++ b/lisp/messagexmas.el @@ -1,6 +1,6 @@ ;;; messagexmas.el --- XEmacs extensions to message -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2003 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -114,6 +114,21 @@ If it is non-nil, it must be a toolbar. The five valid values are (substring table a (+ a n)) (substring table (+ a 26) 255)))) +(defun message-xmas-make-date (&optional now) + "Make a valid data header. +If NOW, use that time instead." + (let ((zone (car (current-time-zone))) + sign) + (if (>= zone 0) + (setq sign "+") + (setq sign "-" + zone (- zone))) + (format "%s %s%02d%02d" + (format-time-string "%a, %d %b %Y %T" now) + sign + (/ zone 3600) + (/ (% zone 3600) 60)))) + (add-hook 'message-mode-hook 'message-xmas-maybe-fontify) (defun message-xmas-redefine () @@ -126,10 +141,12 @@ If it is non-nil, it must be a toolbar. The five valid values are 'message-xmas-make-caesar-translation-table) (defalias 'message-make-overlay 'make-extent) (defalias 'message-delete-overlay 'delete-extent) - (defalias 'message-overlay-put 'set-extent-property)) + (defalias 'message-overlay-put 'set-extent-property) + (defalias 'message-make-date 'message-xmas-make-date)) (message-xmas-redefine) (provide 'messagexmas) +;;; arch-tag: 0ece0484-8757-4641-b2d4-17147dd5c5b5 ;;; messagexmas.el ends here diff --git a/lisp/messcompat.el b/lisp/messcompat.el index ff7520f..bc8be17 100644 --- a/lisp/messcompat.el +++ b/lisp/messcompat.el @@ -91,4 +91,5 @@ variable `mail-header-separator'.") (provide 'messcompat) +;;; arch-tag: a76673be-905e-4bbd-8966-615370494a7b ;;; messcompat.el ends here diff --git a/lisp/mm-bodies.el b/lisp/mm-bodies.el index 6470ddf..9847da9 100644 --- a/lisp/mm-bodies.el +++ b/lisp/mm-bodies.el @@ -1,6 +1,6 @@ ;;; mm-bodies.el --- Functions for decoding MIME things -;; Copyright (C) 1998, 1999, 2000, 2001, 2003 +;; Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -137,7 +137,8 @@ If no encoding was done, nil is returned." (cond ((and (not longp) (not (and mm-use-ultra-safe-encoding - (save-excursion (re-search-forward "^From " nil t)))) + (or (save-excursion (re-search-forward " $" nil t)) + (save-excursion (re-search-forward "^From " nil t))))) (eq bits '7bit)) bits) ((and (not mm-use-ultra-safe-encoding) @@ -292,4 +293,5 @@ decoding. If it is nil, default to `mail-parse-charset'." (provide 'mm-bodies) +;;; arch-tag: 41104bb6-4443-4ca9-8d5c-ff87ecf27d8d ;;; mm-bodies.el ends here diff --git a/lisp/mm-decode.el b/lisp/mm-decode.el index ccf92c8..767354e 100644 --- a/lisp/mm-decode.el +++ b/lisp/mm-decode.el @@ -1,5 +1,5 @@ ;;; mm-decode.el --- Functions for decoding MIME things -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -98,8 +98,9 @@ (defcustom mm-text-html-renderer (cond ((locate-library "w3") 'w3) - ((locate-library "w3m") 'w3m) - ((executable-find "w3m") 'w3m-standalone) + ((executable-find "w3m") (if (locate-library "w3m") + 'w3m + 'w3m-standalone)) ((executable-find "links") 'links) ((executable-find "lynx") 'lynx) (t 'html2text)) @@ -113,6 +114,7 @@ The defined renderer types are: `lynx' : use lynx; `html2text' : use html2text; nil : use external viewer." + :version "22.1" :type '(choice (const w3) (const w3m) (const w3m-standalone) @@ -121,7 +123,6 @@ nil : use external viewer." (const html2text) (const nil) (function)) - :version "21.3" :group 'mime-display) (defvar mm-inline-text-html-renderer nil @@ -132,6 +133,7 @@ It is suggested to customize `mm-text-html-renderer' instead.") "If non-nil, Gnus will allow retrieving images in HTML contents with the tags. It has no effect on Emacs/w3. See also the documentation for the `mm-w3m-safe-url-regexp' variable." + :version "22.1" :type 'boolean :group 'mime-display) @@ -147,12 +149,14 @@ when displaying the image. The default value is \"\\\\`cid:\" which only matches parts embedded to the Multipart/Related type MIME contents and Gnus will never connect to the spammer's site arbitrarily. You may set this variable to nil if you consider all urls to be safe." + :version "22.1" :type '(choice (regexp :tag "Regexp") (const :tag "All URLs are safe" nil)) :group 'mime-display) (defcustom mm-inline-text-html-with-w3m-keymap t "If non-nil, use emacs-w3m command keys in the article buffer." + :version "22.1" :type 'boolean :group 'mime-display) @@ -162,7 +166,7 @@ set this variable to nil if you consider all urls to be safe." If t, all defined external MIME handlers are used. If nil, files are saved by `mailcap-save-binary-file'. If it is the symbol `ask', you are prompted before the external MIME handler is invoked." - :version "21.4" + :version "22.1" :type '(choice (const :tag "Always" t) (const :tag "Never" nil) (const :tag "Ask" ask)) @@ -217,6 +221,7 @@ before the external MIME handler is invoked." (locate-library "diff-mode"))) ("application/emacs-lisp" mm-display-elisp-inline identity) ("application/x-emacs-lisp" mm-display-elisp-inline identity) + ("text/dns" mm-display-dns-inline identity) ("text/html" mm-inline-text-html (lambda (handle) @@ -278,13 +283,14 @@ type inline." "application/pdf" "application/x-dvi") "List of media types for which the external viewer will not be killed when selecting a different article." + :version "22.1" :type '(repeat string) :group 'mime-display) (defcustom mm-automatic-display '("text/plain" "text/enriched" "text/richtext" "text/html" "text/x-vcard" "image/.*" "message/delivery-status" "multipart/.*" - "message/rfc822" "text/x-patch" "application/pgp-signature" + "message/rfc822" "text/x-patch" "text/dns" "application/pgp-signature" "application/emacs-lisp" "application/x-emacs-lisp" "application/x-pkcs7-signature" "application/pkcs7-signature" "application/x-pkcs7-mime" @@ -374,11 +380,13 @@ If not set, `default-directory' will be used." (defcustom mm-attachment-file-modes 384 "Set the mode bits of saved attachments to this integer." + :version "22.1" :type 'integer :group 'mime-display) (defcustom mm-external-terminal-program "xterm" "The program to start an external terminal." + :version "22.1" :type 'string :group 'mime-display) @@ -411,6 +419,7 @@ If not set, `default-directory' will be used." "Option of verifying signed parts. `never', not verify; `always', always verify; `known', only verify known protocols. Otherwise, ask user." + :version "22.1" :type '(choice (item always) (item never) (item :tag "only known protocols" known) @@ -429,6 +438,7 @@ If not set, `default-directory' will be used." "Option of decrypting encrypted parts. `never', not decrypt; `always', always decrypt; `known', only decrypt known protocols. Otherwise, ask user." + :version "22.1" :type '(choice (item always) (item never) (item :tag "only known protocols" known) @@ -499,10 +509,10 @@ Postpone undisplaying of viewers for types in (message "Destroying external MIME viewers") (mm-destroy-parts mm-postponed-undisplay-list))) -(defun mm-dissect-buffer (&optional no-strict-mime loose-mime) +(defun mm-dissect-buffer (&optional no-strict-mime loose-mime from) "Dissect the current buffer and return a list of MIME handles." (save-excursion - (let (ct ctl type subtype cte cd description id result from) + (let (ct ctl type subtype cte cd description id result) (save-restriction (mail-narrow-to-head) (when (or no-strict-mime @@ -513,23 +523,20 @@ Postpone undisplaying of viewers for types in cte (mail-fetch-field "content-transfer-encoding") cd (mail-fetch-field "content-disposition") description (mail-fetch-field "content-description") - from (mail-fetch-field "from") id (mail-fetch-field "content-id")) + (unless from + (setq from (mail-fetch-field "from"))) ;; FIXME: In some circumstances, this code is running within ;; an unibyte macro. mail-extract-address-components ;; creates unibyte buffers. This `if', though not a perfect ;; solution, avoids most of them. (if from (setq from (cadr (mail-extract-address-components from)))))) - (when cte - (setq cte (mail-header-strip cte))) (if (or (not ctl) (not (string-match "/" (car ctl)))) (mm-dissect-singlepart (list mm-dissect-default-type) - (and cte (intern (downcase (mail-header-remove-whitespace - (mail-header-remove-comments - cte))))) + (and cte (intern (downcase (mail-header-strip cte)))) no-strict-mime (and cd (ignore-errors (mail-header-parse-content-disposition cd))) description) @@ -557,14 +564,12 @@ Postpone undisplaying of viewers for types in 'from from 'start start) (car ctl)) - (cons (car ctl) (mm-dissect-multipart ctl)))) + (cons (car ctl) (mm-dissect-multipart ctl from)))) (t (mm-possibly-verify-or-decrypt (mm-dissect-singlepart ctl - (and cte (intern (downcase (mail-header-remove-whitespace - (mail-header-remove-comments - cte))))) + (and cte (intern (downcase (mail-header-strip cte)))) no-strict-mime (and cd (ignore-errors (mail-header-parse-content-disposition cd))) @@ -584,7 +589,7 @@ Postpone undisplaying of viewers for types in (mm-make-handle (mm-copy-to-buffer) ctl cte nil cdl description nil id))) -(defun mm-dissect-multipart (ctl) +(defun mm-dissect-multipart (ctl from) (goto-char (point-min)) (let* ((boundary (concat "\n--" (mail-content-type-get ctl 'boundary))) (close-delimiter (concat (regexp-quote boundary) "--[ \t]*$")) @@ -601,7 +606,7 @@ Postpone undisplaying of viewers for types in (save-excursion (save-restriction (narrow-to-region start (point)) - (setq parts (nconc (list (mm-dissect-buffer t)) parts))))) + (setq parts (nconc (list (mm-dissect-buffer t nil from)) parts))))) (end-of-line 2) (or (looking-at boundary) (forward-line 1)) @@ -610,7 +615,7 @@ Postpone undisplaying of viewers for types in (save-excursion (save-restriction (narrow-to-region start end) - (setq parts (nconc (list (mm-dissect-buffer t)) parts))))) + (setq parts (nconc (list (mm-dissect-buffer t nil from)) parts))))) (mm-possibly-verify-or-decrypt (nreverse parts) ctl))) (defun mm-copy-to-buffer () @@ -621,7 +626,10 @@ Postpone undisplaying of viewers for types in (goto-char (point-min)) (search-forward-regexp "^\n" nil t) (setq beg (point)) - (set-buffer (generate-new-buffer " *mm*")) + (set-buffer + ;; Preserve the data's unibyteness (for url-insert-file-contents). + (let ((default-enable-multibyte-characters (mm-multibyte-p))) + (generate-new-buffer " *mm*"))) (insert-buffer-substring obuf beg) (current-buffer)))) @@ -1019,27 +1027,10 @@ external if displayed external." (defun mm-insert-part (handle) "Insert the contents of HANDLE in the current buffer." - (let ((cur (current-buffer))) - (save-excursion - (if (member (mm-handle-media-supertype handle) '("text" "message")) - (with-temp-buffer - (insert-buffer-substring (mm-handle-buffer handle)) - (prog1 - (mm-decode-content-transfer-encoding - (mm-handle-encoding handle) - (mm-handle-media-type handle)) - (let ((temp (current-buffer))) - (set-buffer cur) - (insert-buffer-substring temp)))) - (mm-with-unibyte-buffer - (insert-buffer-substring (mm-handle-buffer handle)) - (prog1 - (mm-decode-content-transfer-encoding - (mm-handle-encoding handle) - (mm-handle-media-type handle)) - (let ((temp (current-buffer))) - (set-buffer cur) - (insert-buffer-substring temp)))))))) + (save-excursion + (insert (if (mm-multibyte-p) + (mm-string-as-multibyte (mm-get-part handle)) + (mm-get-part handle))))) (defun mm-file-name-delete-whitespace (file-name) "Remove all whitespace characters from FILE-NAME." @@ -1480,4 +1471,5 @@ If RECURSIVE, search recursively." (provide 'mm-decode) +;; arch-tag: 4f35d360-56b8-4030-9388-3ed82d359b9b ;;; mm-decode.el ends here diff --git a/lisp/mm-encode.el b/lisp/mm-encode.el index f9585da..63c963b 100644 --- a/lisp/mm-encode.el +++ b/lisp/mm-encode.el @@ -1,5 +1,5 @@ ;;; mm-encode.el --- Functions for encoding MIME things -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -36,13 +36,23 @@ '(("text/x-patch" 8bit) ("text/.*" qp-or-base64) ("message/rfc822" 8bit) - ("application/emacs-lisp" 8bit) - ("application/x-emacs-lisp" 8bit) - ("application/x-patch" 8bit) + ("application/emacs-lisp" qp-or-base64) + ("application/x-emacs-lisp" qp-or-base64) + ("application/x-patch" qp-or-base64) (".*" base64)) "Alist of regexps that match MIME types and their encodings. If the encoding is `qp-or-base64', then either quoted-printable -or base64 will be used, depending on what is more efficient." +or base64 will be used, depending on what is more efficient. + +`qp-or-base64' has another effect. It will fold long lines so that +MIME parts may not be broken by MTA. So do `quoted-printable' and +`base64'. + +Note: It affects body encoding only when a part is a raw forwarded +message (which will be made by `gnus-summary-mail-forward' with the +arg 2 for example) or is neither the text/* type nor the message/* +type. Even though in those cases, you can use the `encoding' MML tag +to specify encoding of non-ASCII MIME parts." :type '(repeat (list (regexp :tag "MIME type") (choice :tag "encoding" (const 7bit) @@ -88,7 +98,8 @@ This variable should never be set directly, but bound before a call to (defun mm-safer-encoding (encoding) "Return an encoding similar to ENCODING but safer than it." (cond - ((memq encoding '(7bit 8bit quoted-printable)) 'quoted-printable) + ((eq encoding '7bit) '7bit) ;; 7bit is considered safe. + ((memq encoding '(8bit quoted-printable)) 'quoted-printable) ;; The remaining encodings are binary and base64 (and perhaps some ;; non-standard ones), which are both turned into base64. (t 'base64))) @@ -194,4 +205,5 @@ This is either `base64' or `quoted-printable'." (provide 'mm-encode) +;;; arch-tag: 7d01bba4-d469-4851-952b-dc863f84ed66 ;;; mm-encode.el ends here diff --git a/lisp/mm-extern.el b/lisp/mm-extern.el index b6bf163..994dd1d 100644 --- a/lisp/mm-extern.el +++ b/lisp/mm-extern.el @@ -165,4 +165,5 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing." (provide 'mm-extern) +;;; arch-tag: 9653808e-14d9-4172-86e6-adceaa05378e ;;; mm-extern.el ends here diff --git a/lisp/mm-partial.el b/lisp/mm-partial.el index b24bfda..de003bb 100644 --- a/lisp/mm-partial.el +++ b/lisp/mm-partial.el @@ -32,8 +32,7 @@ (require 'mm-decode) (defun mm-partial-find-parts (id &optional art) - (let ((headers (save-excursion - (set-buffer gnus-summary-buffer) + (let ((headers (with-current-buffer gnus-summary-buffer gnus-newsgroup-headers)) phandles header) (while (setq header (pop headers)) @@ -151,4 +150,5 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing." (provide 'mm-partial) +;;; arch-tag: 460e7424-05f2-4a1d-a0f2-70ec081eff7d ;;; mm-partial.el ends here diff --git a/lisp/mm-url.el b/lisp/mm-url.el index 6e67807..6dd921a 100644 --- a/lisp/mm-url.el +++ b/lisp/mm-url.el @@ -35,7 +35,9 @@ (require 'gnus) (eval-when-compile - (require 'timer)) + (if (featurep 'xemacs) + (require 'timer-funcs) + (require 'timer))) (defgroup mm-url nil "A wrapper of url package and external url command for Gnus." @@ -46,6 +48,7 @@ (require 'url) (error nil))) "*If non-nil, use external grab program `mm-url-program'." + :version "22.1" :type 'boolean :group 'mm-url) @@ -53,7 +56,7 @@ '((wget "wget" "--user-agent=mm-url" "-q" "-O" "-") (w3m "w3m" "-dump_source") (lynx "lynx" "-source") - (curl "curl"))) + (curl "curl" "--silent"))) (defcustom mm-url-program (cond @@ -64,6 +67,7 @@ (t "GET")) "The url grab program. Likely values are `wget', `w3m', `lynx' and `curl'." + :version "22.1" :type '(choice (symbol :tag "wget" wget) (symbol :tag "w3m" w3m) @@ -74,6 +78,7 @@ Likely values are `wget', `w3m', `lynx' and `curl'." (defcustom mm-url-arguments nil "The arguments for `mm-url-program'." + :version "22.1" :type '(repeat string) :group 'mm-url) @@ -443,4 +448,5 @@ spaces. Die Die Die." (provide 'mm-url) +;;; arch-tag: 0594f9b3-417c-48b0-adc2-5082e1e7917f ;;; mm-url.el ends here diff --git a/lisp/mm-util.el b/lisp/mm-util.el index 8f600fd..3d7bc25 100644 --- a/lisp/mm-util.el +++ b/lisp/mm-util.el @@ -1,5 +1,5 @@ ;;; mm-util.el --- Utility functions for Mule and low level things -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -54,7 +54,8 @@ mm-mime-mule-charset-alist) nil t)))) (subst-char-in-string - . (lambda (from to string &optional inplace) ;; stolen (and renamed) from nnheader.el + . (lambda (from to string &optional inplace) + ;; stolen (and renamed) from nnheader.el "Replace characters in STRING from FROM to TO. Unless optional argument INPLACE is non-nil, return a new string." (let ((string (if inplace string (copy-sequence string))) @@ -66,9 +67,37 @@ (aset string idx to)) (setq idx (1+ idx))) string))) + (replace-in-string + . (lambda (string regexp rep &optional literal) + "See `replace-regexp-in-string', only the order of args differs." + (replace-regexp-in-string regexp rep string nil literal))) (string-as-unibyte . identity) (string-make-unibyte . identity) + ;; string-as-multibyte often doesn't really do what you think it does. + ;; Example: + ;; (aref (string-as-multibyte "\201") 0) -> 129 (aka ?\201) + ;; (aref (string-as-multibyte "\300") 0) -> 192 (aka ?\300) + ;; (aref (string-as-multibyte "\300\201") 0) -> 192 (aka ?\300) + ;; (aref (string-as-multibyte "\300\201") 1) -> 129 (aka ?\201) + ;; but + ;; (aref (string-as-multibyte "\201\300") 0) -> 2240 + ;; (aref (string-as-multibyte "\201\300") 1) -> + ;; Better use string-to-multibyte or encode-coding-string. + ;; If you really need string-as-multibyte somewhere it's usually + ;; because you're using the internal emacs-mule representation (maybe + ;; because you're using string-as-unibyte somewhere), which is + ;; generally a problem in itself. + ;; Here is an approximate equivalence table to help think about it: + ;; (string-as-multibyte s) ~= (decode-coding-string s 'emacs-mule) + ;; (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) ;; It is not a MIME function, but some MIME functions use it. (make-temp-file . (lambda (prefix &optional dir-flag) @@ -121,13 +150,16 @@ (defun mm-coding-system-p (cs) "Return non-nil if CS is a symbol naming a coding system. -In XEmacs, also return non-nil if CS is a coding system object." +In XEmacs, also return non-nil if CS is a coding system object. +If CS is available, return CS itself in Emacs, and return a coding +system object in XEmacs." (if (fboundp 'find-coding-system) - (find-coding-system cs) + (and cs (find-coding-system cs)) (if (fboundp 'coding-system-p) - (coding-system-p cs) + (when (coding-system-p cs) + cs) ;; Is this branch ever actually useful? - (memq cs (mm-get-coding-system-list))))) + (car (memq cs (mm-get-coding-system-list)))))) (defvar mm-charset-synonym-alist `( @@ -153,6 +185,10 @@ In XEmacs, also return non-nil if CS is a coding system object." (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))) + ;; A Microsoft misunderstanding. ,@(unless (mm-coding-system-p 'ks_c_5601-1987) (if (mm-coding-system-p 'cp949) '((ks_c_5601-1987 . cp949)) @@ -222,12 +258,12 @@ In XEmacs, also return non-nil if CS is a coding system object." (big5 chinese-big5-1 chinese-big5-2) (tibetan tibetan) (thai-tis620 thai-tis620) + (windows-1251 cyrillic-iso8859-5) (iso-2022-7bit ethiopic arabic-1-column arabic-2-column) (iso-2022-jp-2 latin-iso8859-1 greek-iso8859-7 latin-jisx0201 japanese-jisx0208-1978 chinese-gb2312 japanese-jisx0208 - korean-ksc5601 japanese-jisx0212 - katakana-jisx0201) + korean-ksc5601 japanese-jisx0212) (iso-2022-int-1 latin-iso8859-1 greek-iso8859-7 latin-jisx0201 japanese-jisx0208-1978 chinese-gb2312 japanese-jisx0208 @@ -242,6 +278,9 @@ In XEmacs, also return non-nil if CS is a coding system object." chinese-cns11643-3 chinese-cns11643-4 chinese-cns11643-5 chinese-cns11643-6 chinese-cns11643-7) + (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))) @@ -252,24 +291,47 @@ In XEmacs, also return non-nil if CS is a coding system object." (coding-system-get 'mule-utf-8 'safe-charsets))))) "Alist of MIME-charset/MULE-charsets.") -;; Correct by construction, but should be unnecessary: -;; XEmacs hates it. -(when (and (not (featurep 'xemacs)) - (fboundp 'coding-system-list) - (fboundp 'sort-coding-systems)) - (setq mm-mime-mule-charset-alist - (apply - 'nconc - (mapcar - (lambda (cs) - (when (and (or (coding-system-get cs :mime-charset) ; Emacs 22 - (coding-system-get cs 'mime-charset)) - (not (eq t (coding-system-get cs 'safe-charsets)))) - (list (cons (or (coding-system-get cs :mime-charset) - (coding-system-get cs 'mime-charset)) - (delq 'ascii - (coding-system-get cs 'safe-charsets)))))) - (sort-coding-systems (coding-system-list 'base-only)))))) +(defun mm-enrich-utf-8-by-mule-ucs () + "Make the `utf-8' MIME charset usable by the Mule-UCS package. +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 + 'ascii + (copy-sequence + (symbol-value + 'unicode-basic-translation-charset-order-list)))) + (elem (assq 'utf-8 mm-mime-mule-charset-alist))) + (if elem + (setcdr elem val) + (setq mm-mime-mule-charset-alist + (nconc mm-mime-mule-charset-alist + (list (cons 'utf-8 val)))))) + (error)))) + +;; Correct by construction, but should be unnecessary for Emacs: +(if (featurep 'xemacs) + (eval-after-load "un-define" '(mm-enrich-utf-8-by-mule-ucs)) + (when (and (fboundp 'coding-system-list) + (fboundp 'sort-coding-systems)) + (let ((css (sort-coding-systems (coding-system-list 'base-only))) + cs mime mule alist) + (while css + (setq cs (pop css) + mime (or (coding-system-get cs :mime-charset) ; Emacs 22 + (coding-system-get cs 'mime-charset))) + (when (and mime + (not (eq t (setq mule + (coding-system-get cs 'safe-charsets)))) + (not (assq mime alist))) + (push (cons mime (delq 'ascii mule)) alist))) + (setq mm-mime-mule-charset-alist (nreverse alist))))) (defvar mm-hack-charsets '(iso-8859-15 iso-2022-jp-2) "A list of special charsets. @@ -305,15 +367,17 @@ Valid elements include: (if (boundp 'current-language-environment) (let ((lang (symbol-value 'current-language-environment))) (cond ((string= lang "Japanese") - ;; Japanese users may prefer iso-2022-jp to shift-jis. - '(iso-2022-jp iso-2022-jp-2 japanese-shift-jis - iso-latin-1 utf-8))))) + ;; Japanese users prefer iso-2022-jp to euc-japan or + ;; shift_jis, however iso-8859-1 should be used when + ;; there are only ASCII text and Latin-1 characters. + '(iso-8859-1 iso-2022-jp iso-2022-jp-2 shift_jis utf-8))))) "Preferred coding systems for encoding outgoing messages. More than one suitable coding system may be found for some text. By default, the coding system with the highest priority is used to encode outgoing messages (see `sort-coding-systems'). If this variable is set, it overrides the default priority." + :version "21.2" :type '(repeat (symbol :tag "Coding system")) :group 'mime) @@ -333,16 +397,20 @@ mail with multiple parts is preferred to sending a Unicode one.") "Return the MIME charset corresponding to the given Mule CHARSET." (if (and (fboundp 'find-coding-systems-for-charsets) (fboundp 'sort-coding-systems)) - (let (mime) - (dolist (cs (sort-coding-systems - (copy-sequence - (find-coding-systems-for-charsets (list charset))))) - (unless mime - (when cs - (setq mime (or (coding-system-get cs :mime-charset) - (coding-system-get cs 'mime-charset)))))) + (let ((css (sort (sort-coding-systems + (find-coding-systems-for-charsets (list charset))) + 'mm-sort-coding-systems-predicate)) + cs mime) + (while (and (not mime) + css) + (when (setq cs (pop css)) + (setq mime (or (coding-system-get cs :mime-charset) + (coding-system-get cs 'mime-charset))))) mime) - (let ((alist mm-mime-mule-charset-alist) + (let ((alist (mapcar (lambda (cs) + (assq cs mm-mime-mule-charset-alist)) + (sort (mapcar 'car mm-mime-mule-charset-alist) + 'mm-sort-coding-systems-predicate))) out) (while alist (when (memq charset (cdar alist)) @@ -532,11 +600,91 @@ This affects whether coding conversion should be attempted generally." (let ((priorities (mapcar (lambda (cs) ;; Note: invalid entries are dropped silently - (and (coding-system-p cs) + (and (setq cs (mm-coding-system-p cs)) (coding-system-base cs))) mm-coding-system-priorities))) - (> (length (memq a priorities)) - (length (memq b priorities))))) + (and (setq a (mm-coding-system-p a)) + (if (setq b (mm-coding-system-p b)) + (> (length (memq (coding-system-base a) priorities)) + (length (memq (coding-system-base b) priorities))) + t)))) + +(eval-when-compile + (autoload 'latin-unity-massage-name "latin-unity") + (autoload 'latin-unity-maybe-remap "latin-unity") + (autoload 'latin-unity-representations-feasible-region "latin-unity") + (autoload 'latin-unity-representations-present-region "latin-unity") + (defvar latin-unity-coding-systems) + (defvar latin-unity-ucs-list)) + +(defun mm-xemacs-find-mime-charset-1 (begin end) + "Determine which MIME charset to use to send region as message. +This uses the XEmacs-specific latin-unity package to better handle the +case where identical characters from diverse ISO-8859-? character sets +can be encoded using a single one of the corresponding coding systems. + +It treats `mm-coding-system-priorities' as the list of preferred +coding systems; a useful example setting for this list in Western +Europe would be '(iso-8859-1 iso-8859-15 utf-8), which would default +to the very standard Latin 1 coding system, and only move to coding +systems that are less supported as is necessary to encode the +characters that exist in the buffer. + +Latin Unity doesn't know about those non-ASCII Roman characters that +are available in various East Asian character sets. As such, its +behavior if you have a JIS 0212 LATIN SMALL LETTER A WITH ACUTE in a +buffer and it can otherwise be encoded as Latin 1, won't be ideal. +But this is very much a corner case, so don't worry about it." + (let ((systems mm-coding-system-priorities) csets psets curset) + + ;; Load the Latin Unity library, if available. + (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity")) + (require 'latin-unity)) + + ;; Now, can we use it? + (if (featurep 'latin-unity) + (progn + (setq csets (latin-unity-representations-feasible-region begin end) + psets (latin-unity-representations-present-region begin end)) + + (catch 'done + + ;; Pass back the first coding system in the preferred list + ;; that can encode the whole region. + (dolist (curset systems) + (setq curset (latin-unity-massage-name 'buffer-default curset)) + + ;; If the coding system is a universal coding system, then + ;; it can certainly encode all the characters in the region. + (if (memq curset latin-unity-ucs-list) + (throw 'done (list curset))) + + ;; If a coding system isn't universal, and isn't in + ;; the list that latin unity knows about, we can't + ;; decide whether to use it here. Leave that until later + ;; in `mm-find-mime-charset-region' function, whence we + ;; have been called. + (unless (memq curset latin-unity-coding-systems) + (throw 'done nil)) + + ;; Right, we know about this coding system, and it may + ;; conceivably be able to encode all the characters in + ;; the region. + (if (latin-unity-maybe-remap begin end curset csets psets t) + (throw 'done (list curset)))) + + ;; Can't encode using anything from the + ;; `mm-coding-system-priorities' list. + ;; Leave `mm-find-mime-charset' to do most of the work. + nil)) + + ;; Right, latin unity isn't available; let `mm-find-charset-region' + ;; take its default action, which equally applies to GNU Emacs. + nil))) + +(defmacro mm-xemacs-find-mime-charset (begin end) + (when (featurep 'xemacs) + `(and (featurep 'mule) (mm-xemacs-find-mime-charset-1 ,begin ,end)))) (defun mm-find-mime-charset-region (b e &optional hack-charsets) "Return the MIME charsets needed to encode the region between B and E. @@ -579,8 +727,12 @@ charset, and a longer list means no appropriate charset." (setq systems nil charsets (list cs)))))) charsets)) - ;; Otherwise we're not multibyte, we're XEmacs, or a single - ;; coding system won't cover it. + ;; If we're XEmacs, and some coding system is appropriate, + ;; mm-xemacs-find-mime-charset will return an appropriate list. + ;; Otherwise, we'll get nil, and the next setq will get invoked. + (setq charsets (mm-xemacs-find-mime-charset b e)) + + ;; We're not multibyte, or a single coding system won't cover it. (setq charsets (mm-delete-duplicates (mapcar 'mm-mime-charset @@ -605,6 +757,14 @@ Use unibyte mode for this." (put 'mm-with-unibyte-buffer 'lisp-indent-function 0) (put 'mm-with-unibyte-buffer 'edebug-form-spec '(body)) +(defmacro mm-with-multibyte-buffer (&rest forms) + "Create a temporary buffer, and evaluate FORMS there like `progn'. +Use multibyte mode for this." + `(let ((default-enable-multibyte-characters t)) + (with-temp-buffer ,@forms))) +(put 'mm-with-multibyte-buffer 'lisp-indent-function 0) +(put 'mm-with-multibyte-buffer 'edebug-form-spec '(body)) + (defmacro mm-with-unibyte-current-buffer (&rest forms) "Evaluate FORMS with current buffer temporarily made unibyte. Also bind `default-enable-multibyte-characters' to nil. @@ -759,7 +919,7 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'." (file-directory-p (setq dir (concat (file-name-directory (directory-file-name path)) - "etc/" (or package "gnus/"))))) + "etc/images/" (or package "gnus/"))))) (push dir result)) (push path result)))) @@ -768,7 +928,7 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'." (defun mm-detect-coding-region (start end) "Like `detect-coding-region' except returning the best one." (let ((coding-systems - (detect-coding-region (point) (point-max)))) + (detect-coding-region start end))) (or (car-safe coding-systems) coding-systems))) (defun mm-detect-coding-region (start end) @@ -783,13 +943,191 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'." (defun mm-detect-mime-charset-region (start end) "Detect MIME charset of the text in the region between START and END." (let ((cs (mm-detect-coding-region start end))) - (coding-system-get cs 'mime-charset))) + (or (coding-system-get cs :mime-charset) + (coding-system-get cs 'mime-charset)))) (defun mm-detect-mime-charset-region (start end) "Detect MIME charset of the text in the region between START and END." (let ((cs (mm-detect-coding-region start end))) cs))) +(eval-when-compile + (unless (fboundp 'coding-system-to-mime-charset) + (defalias 'coding-system-to-mime-charset 'ignore))) + +(defun mm-coding-system-to-mime-charset (coding-system) + "Return the MIME charset corresponding to CODING-SYSTEM. +To make this function work with XEmacs, the APEL package is required." + (when coding-system + (or (and (fboundp 'coding-system-get) + (or (coding-system-get coding-system :mime-charset) + (coding-system-get coding-system 'mime-charset))) + (and (featurep 'xemacs) + (or (and (fboundp 'coding-system-to-mime-charset) + (not (eq (symbol-function 'coding-system-to-mime-charset) + 'ignore))) + (and (condition-case nil + (require 'mcharset) + (error nil)) + (fboundp 'coding-system-to-mime-charset))) + (coding-system-to-mime-charset coding-system))))) + +(eval-when-compile + (require 'jka-compr)) + +(defun mm-decompress-buffer (filename &optional inplace force) + "Decompress buffer's contents, depending on jka-compr. +Only when FORCE is t or `auto-compression-mode' is enabled and FILENAME +agrees with `jka-compr-compression-info-list', decompression is done. +Signal an error if FORCE is neither nil nor t and compressed data are +not decompressed because `auto-compression-mode' is disabled. +If INPLACE is nil, return decompressed data or nil without modifying +the buffer. Otherwise, replace the buffer's contents with the +decompressed data. The buffer's multibyteness must be turned off." + (when (and filename + (if force + (prog1 t (require 'jka-compr)) + (and (fboundp 'jka-compr-installed-p) + (jka-compr-installed-p)))) + (let ((info (jka-compr-get-compression-info filename))) + (when info + (unless (or (memq force (list nil t)) + (jka-compr-installed-p)) + (error "")) + (let ((prog (jka-compr-info-uncompress-program info)) + (args (jka-compr-info-uncompress-args info)) + (msg (format "%s %s..." + (jka-compr-info-uncompress-message info) + filename)) + (err-file (jka-compr-make-temp-name)) + (cur (current-buffer)) + (coding-system-for-read mm-binary-coding-system) + (coding-system-for-write mm-binary-coding-system) + retval err-msg) + (message "%s" msg) + (with-temp-buffer + (insert-buffer-substring cur) + (condition-case err + (progn + (unless (memq (apply 'call-process-region + (point-min) (point-max) + prog t (list t err-file) nil args) + jka-compr-acceptable-retval-list) + (erase-buffer) + (insert (mapconcat + 'identity + (delete "" (split-string + (prog2 + (insert-file-contents err-file) + (buffer-string) + (erase-buffer)))) + " ") + "\n") + (setq err-msg + (format "Error while executing \"%s %s < %s\"" + prog (mapconcat 'identity args " ") + filename))) + (setq retval (buffer-string))) + (error + (setq err-msg (error-message-string err))))) + (when (file-exists-p err-file) + (ignore-errors (jka-compr-delete-temp-file err-file))) + (when inplace + (unless err-msg + (delete-region (point-min) (point-max)) + (insert retval)) + (setq retval nil)) + (message "%s" (or err-msg (concat msg "done"))) + retval))))) + +(eval-when-compile + (unless (fboundp 'coding-system-name) + (defalias 'coding-system-name 'ignore)) + (unless (fboundp 'find-file-coding-system-for-read-from-filename) + (defalias 'find-file-coding-system-for-read-from-filename 'ignore)) + (unless (fboundp 'find-operation-coding-system) + (defalias 'find-operation-coding-system 'ignore))) + +(defun mm-find-buffer-file-coding-system (&optional filename) + "Find coding system used to decode the contents of the current buffer. +This function looks for the coding system magic cookie or examines the +coding system specified by `file-coding-system-alist' being associated +with FILENAME which defaults to `buffer-file-name'. Data compressed by +gzip, bzip2, etc. are allowed." + (unless filename + (setq filename buffer-file-name)) + (save-excursion + (let ((decomp (mm-decompress-buffer filename nil t))) + (when decomp + (set-buffer (let (default-enable-multibyte-characters) + (generate-new-buffer " *temp*"))) + (insert decomp) + (setq filename (file-name-sans-extension filename))) + (goto-char (point-min)) + (prog1 + (cond + ((boundp 'set-auto-coding-function) ;; Emacs + (if filename + (or (funcall (symbol-value 'set-auto-coding-function) + filename (- (point-max) (point-min))) + (car (find-operation-coding-system 'insert-file-contents + filename))) + (let (auto-coding-alist) + (condition-case nil + (funcall (symbol-value 'set-auto-coding-function) + nil (- (point-max) (point-min))) + (error nil))))) + ((featurep 'file-coding) ;; XEmacs + (let ((case-fold-search t) + (end (point-at-eol)) + codesys start) + (or + (and (re-search-forward "-\\*-+[\t ]*" end t) + (progn + (setq start (match-end 0)) + (re-search-forward "[\t ]*-+\\*-" end t)) + (progn + (setq end (match-beginning 0)) + (goto-char start) + (or (looking-at "coding:[\t ]*\\([^\t ;]+\\)") + (re-search-forward + "[\t ;]+coding:[\t ]*\\([^\t ;]+\\)" + end t))) + (find-coding-system (setq codesys + (intern (match-string 1)))) + codesys) + (and (re-search-forward "^[\t ]*;+[\t ]*Local[\t ]+Variables:" + nil t) + (progn + (setq start (match-end 0)) + (re-search-forward "^[\t ]*;+[\t ]*End:" nil t)) + (progn + (setq end (match-beginning 0)) + (goto-char start) + (re-search-forward + "^[\t ]*;+[\t ]*coding:[\t ]*\\([^\t\n\r ]+\\)" + end t)) + (find-coding-system (setq codesys + (intern (match-string 1)))) + codesys) + (and (progn + (goto-char (point-min)) + (setq case-fold-search nil) + (re-search-forward "^;;;coding system: " + ;;(+ (point-min) 3000) t)) + nil t)) + (looking-at "[^\t\n\r ]+") + (find-coding-system + (setq codesys (intern (match-string 0)))) + codesys) + (and filename + (setq codesys + (find-file-coding-system-for-read-from-filename + filename)) + (coding-system-name (coding-system-base codesys))))))) + (when decomp + (kill-buffer (current-buffer))))))) (provide 'mm-util) +;; arch-tag: 94dc5388-825d-4fd1-bfa5-2100aa351238 ;;; mm-util.el ends here diff --git a/lisp/mm-uu.el b/lisp/mm-uu.el index 5db13b6..6ad7aba 100644 --- a/lisp/mm-uu.el +++ b/lisp/mm-uu.el @@ -1,5 +1,6 @@ ;;; mm-uu.el --- Return uu stuff as mm handles -;; Copyright (c) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +;; Copyright (c) 1998, 1999, 2000, 2001, 2002, 2003, 2004 +;; Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: postscript uudecode binhex shar forward gnatsweb pgp @@ -80,6 +81,7 @@ This can be either \"inline\" or \"attachment\".") (defcustom mm-uu-diff-groups-regexp "gnus\\.commits" "*Regexp matching diff groups." + :version "22.1" :type 'regexp :group 'gnus-article-mime) @@ -162,6 +164,10 @@ To disable dissecting shar codes, for instance, add mm-uu-type-alist) :group 'gnus-article-mime) +(defvar mm-uu-text-plain-type '("text/plain" (charset . gnus-decoded)) + "MIME type and parameters for text/plain parts. +`gnus-decoded' is a fake charset, which means no further decoding.") + ;; functions (defsubst mm-uu-type (entry) @@ -362,7 +368,7 @@ Return that buffer." (while (re-search-forward "^- " nil t) (replace-match "" t t) (forward-line 1))) - (list (mm-make-handle buf '("text/plain" (charset . gnus-decoded)))))) + (list (mm-make-handle buf mm-uu-text-plain-type)))) (defun mm-uu-pgp-signed-extract () (let ((mm-security-handle (list (format "multipart/signed")))) @@ -394,9 +400,7 @@ Return that buffer." (with-current-buffer buf (mml2015-clean-buffer) (funcall (mml2015-clear-decrypt-function)))) - (list - (mm-make-handle buf - '("text/plain" (charset . gnus-decoded)))))) + (list (mm-make-handle buf mm-uu-text-plain-type)))) (defun mm-uu-pgp-encrypted-extract () (let ((mm-security-handle (list (format "multipart/encrypted")))) @@ -430,23 +434,24 @@ Return that buffer." '("application/pgp-keys")))) ;;;###autoload -(defun mm-uu-dissect () - "Dissect the current buffer and return a list of uu handles." +(defun mm-uu-dissect (&optional noheader mime-type) + "Dissect the current buffer and return a list of uu handles. +The optional NOHEADER means there's no header in the buffer. +MIME-TYPE specifies a MIME type and parameters, which defaults to the +value of `mm-uu-text-plain-type'." (let ((case-fold-search t) - text-start start-point end-point file-name result - text-plain-type entry func) + (mm-uu-text-plain-type (or mime-type mm-uu-text-plain-type)) + text-start start-point end-point file-name result entry func) (save-excursion (goto-char (point-min)) (cond + (noheader) ((looking-at "\n") (forward-line)) ((search-forward "\n\n" nil t) t) (t (goto-char (point-max)))) - ;;; gnus-decoded is a fake charset, which means no further - ;;; decoding. - (setq text-start (point) - text-plain-type '("text/plain" (charset . gnus-decoded))) + (setq text-start (point)) (while (re-search-forward mm-uu-beginning-regexp nil t) (setq start-point (match-beginning 0)) (let ((alist mm-uu-type-alist) @@ -475,7 +480,7 @@ Return that buffer." (re-search-forward "." start-point t))) (push (mm-make-handle (mm-uu-copy-to-buffer text-start start-point) - text-plain-type) + mm-uu-text-plain-type) result)) (push (funcall (mm-uu-function-extract entry)) @@ -488,11 +493,31 @@ Return that buffer." (re-search-forward "." nil t))) (push (mm-make-handle (mm-uu-copy-to-buffer text-start (point-max)) - text-plain-type) + mm-uu-text-plain-type) result)) (setq result (cons "multipart/mixed" (nreverse result)))) result))) +(defun mm-uu-dissect-text-parts (handle) + "Dissect text parts and put uu handles into HANDLE." + (let ((buffer (mm-handle-buffer handle)) + type children) + (cond ((stringp buffer) + (mapc 'mm-uu-dissect-text-parts (cdr handle))) + ((bufferp buffer) + (when (and (setq type (mm-handle-media-type handle)) + (stringp type) + (string-match "\\`text/" type) + (with-current-buffer buffer + (setq children + (mm-uu-dissect t (mm-handle-type handle))))) + (kill-buffer buffer) + (setcar handle (car children)) + (setcdr handle (cdr children)))) + (t + (mapc 'mm-uu-dissect-text-parts handle))))) + (provide 'mm-uu) +;;; arch-tag: 7db076bf-53db-4320-aa19-ca76a1d2ab2c ;;; mm-uu.el ends here diff --git a/lisp/mm-view.el b/lisp/mm-view.el index e88eca5..8d03600 100644 --- a/lisp/mm-view.el +++ b/lisp/mm-view.el @@ -1,6 +1,6 @@ ;;; mm-view.el --- functions for viewing MIME objects -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. @@ -78,6 +78,7 @@ (let ((b (point-marker)) buffer-read-only) (put-image (mm-get-image handle) b) + (insert "\n\n") (mm-handle-set-undisplayer handle `(lambda () @@ -129,26 +130,26 @@ (charset (mail-content-type-get (mm-handle-type handle) 'charset))) (save-excursion - (insert text) + (insert (if charset (mm-decode-string text charset) text)) (save-restriction (narrow-to-region b (point)) - (goto-char (point-min)) - (if (or (and (boundp 'w3-meta-content-type-charset-regexp) - (re-search-forward - w3-meta-content-type-charset-regexp nil t)) - (and (boundp 'w3-meta-charset-content-type-regexp) - (re-search-forward - w3-meta-charset-content-type-regexp nil t))) + (unless charset + (goto-char (point-min)) + (when (or (and (boundp 'w3-meta-content-type-charset-regexp) + (re-search-forward + w3-meta-content-type-charset-regexp nil t)) + (and (boundp 'w3-meta-charset-content-type-regexp) + (re-search-forward + w3-meta-charset-content-type-regexp nil t))) (setq charset - (or (let ((bsubstr (buffer-substring-no-properties - (match-beginning 2) - (match-end 2)))) - (if (fboundp 'w3-coding-system-for-mime-charset) - (w3-coding-system-for-mime-charset bsubstr) - (mm-charset-to-coding-system bsubstr))) - charset))) - (delete-region (point-min) (point-max)) - (insert (mm-decode-string text charset)) + (let ((bsubstr (buffer-substring-no-properties + (match-beginning 2) + (match-end 2)))) + (if (fboundp 'w3-coding-system-for-mime-charset) + (w3-coding-system-for-mime-charset bsubstr) + (mm-charset-to-coding-system bsubstr)))) + (delete-region (point-min) (point-max)) + (insert (mm-decode-string text charset)))) (save-window-excursion (save-restriction (let ((w3-strict-width width) @@ -201,13 +202,14 @@ (setq w3m-display-inline-images mm-inline-text-html-with-images)) (defun mm-w3m-cid-retrieve-1 (url handle) - (if (mm-multiple-handles handle) - (dolist (elem handle) - (mm-w3m-cid-retrieve-1 url elem)) - (when (and (listp handle) - (equal url (mm-handle-id handle))) - (mm-insert-part handle) - (throw 'found-handle (mm-handle-media-type handle))))) + (dolist (elem handle) + (when (listp elem) + (if (equal url (mm-handle-id elem)) + (progn + (mm-insert-part elem) + (throw 'found-handle (mm-handle-media-type elem)))) + (if (equal "multipart" (mm-handle-media-supertype elem)) + (mm-w3m-cid-retrieve-1 url elem))))) (defun mm-w3m-cid-retrieve (url &rest args) "Insert a content pointed by URL if it has the cid: scheme." @@ -224,19 +226,17 @@ (b (point)) (charset (mail-content-type-get (mm-handle-type handle) 'charset))) (save-excursion - (insert text) + (insert (if charset (mm-decode-string text charset) text)) (save-restriction (narrow-to-region b (point)) - (goto-char (point-min)) - (when (re-search-forward w3m-meta-content-type-charset-regexp nil t) - (setq charset (or (w3m-charset-to-coding-system (match-string 2)) - charset))) - (when charset - (delete-region (point-min) (point-max)) - (insert (mm-decode-string text charset))) + (unless charset + (goto-char (point-min)) + (when (setq charset (w3m-detect-meta-charset)) + (delete-region (point-min) (point-max)) + (insert (mm-decode-string text charset)))) (let ((w3m-safe-url-regexp mm-w3m-safe-url-regexp) w3m-force-redisplay) - (w3m-region (point-min) (point-max))) + (w3m-region (point-min) (point-max) nil charset)) (when (and mm-inline-text-html-with-w3m-keymap (boundp 'w3m-minor-mode-map) w3m-minor-mode-map) @@ -301,11 +301,14 @@ (buffer-string))))) (defun mm-inline-render-with-function (handle func &rest args) - (let ((source (mm-get-part handle))) + (let ((source (mm-get-part handle)) + (charset (mail-content-type-get (mm-handle-type handle) 'charset))) (mm-insert-inline handle - (mm-with-unibyte-buffer - (insert source) + (mm-with-multibyte-buffer + (insert (if charset + (mm-decode-string source charset) + source)) (apply func args) (buffer-string))))) @@ -375,6 +378,8 @@ "Insert TEXT inline from HANDLE." (let ((b (point))) (insert text) + (unless (bolp) + (insert "\n")) (mm-handle-set-undisplayer handle `(lambda () @@ -456,32 +461,52 @@ (delete-region ,(point-min-marker) ,(point-max-marker))))))))) (defun mm-display-inline-fontify (handle mode) - (let (text) + (let ((charset (mail-content-type-get (mm-handle-type handle) 'charset)) + text coding-system) + (unless (eq charset 'gnus-decoded) + (mm-with-unibyte-buffer + (mm-insert-part handle) + (mm-decompress-buffer + (or (mail-content-type-get (mm-handle-disposition handle) 'name) + (mail-content-type-get (mm-handle-disposition handle) 'filename)) + t t) + (unless charset + (setq coding-system (mm-find-buffer-file-coding-system))) + (setq text (buffer-string)))) ;; XEmacs @#$@ version of font-lock refuses to fully turn itself ;; on for buffers whose name begins with " ". That's why we use - ;; save-current-buffer/get-buffer-create rather than - ;; with-temp-buffer. - (save-current-buffer - (set-buffer (generate-new-buffer "*fontification*")) - (unwind-protect - (progn - (buffer-disable-undo) - (mm-insert-part handle) - (funcall mode) - (require 'font-lock) - (let ((font-lock-verbose nil)) - ;; I find font-lock a bit too verbose. - (font-lock-fontify-buffer)) - ;; By default, XEmacs font-lock uses non-duplicable text - ;; properties. This code forces all the text properties - ;; to be copied along with the text. - (when (fboundp 'extent-list) - (map-extents (lambda (ext ignored) - (set-extent-property ext 'duplicable t) - nil) - nil nil nil nil nil 'text-prop)) - (setq text (buffer-string))) - (kill-buffer (current-buffer)))) + ;; `with-current-buffer'/`generate-new-buffer' rather than + ;; `with-temp-buffer'. + (with-current-buffer (generate-new-buffer "*fontification*") + (buffer-disable-undo) + (mm-enable-multibyte) + (insert (cond ((eq charset 'gnus-decoded) + (mm-insert-part handle)) + (coding-system + (mm-decode-coding-string text coding-system)) + (charset + (mm-decode-string text charset)) + (t + text))) + (require 'font-lock) + ;; Inhibit font-lock this time (*-mode-hook might run + ;; `turn-on-font-lock') so that jit-lock may not turn off + ;; font-lock immediately after this. + (let ((font-lock-mode t)) + (funcall mode)) + (let ((font-lock-verbose nil)) + ;; I find font-lock a bit too verbose. + (font-lock-fontify-buffer)) + ;; By default, XEmacs font-lock uses non-duplicable text + ;; properties. This code forces all the text properties + ;; to be copied along with the text. + (when (fboundp 'extent-list) + (map-extents (lambda (ext ignored) + (set-extent-property ext 'duplicable t) + nil) + nil nil nil nil nil 'text-prop)) + (setq text (buffer-string)) + (kill-buffer (current-buffer))) (mm-insert-inline handle text))) ;; Shouldn't these functions check whether the user even wants to use @@ -495,6 +520,9 @@ (defun mm-display-elisp-inline (handle) (mm-display-inline-fontify handle 'emacs-lisp-mode)) +(defun mm-display-dns-inline (handle) + (mm-display-inline-fontify handle 'dns-mode)) + ;; id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) ;; us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 } (defvar mm-pkcs7-signed-magic @@ -569,4 +597,5 @@ (provide 'mm-view) +;;; arch-tag: b60e749a-d05c-47f2-bccd-bdaa59327cb2 ;;; mm-view.el ends here diff --git a/lisp/mml-sec.el b/lisp/mml-sec.el index be4665b..d254a60 100644 --- a/lisp/mml-sec.el +++ b/lisp/mml-sec.el @@ -1,5 +1,5 @@ ;;; mml-sec.el --- A package with security functions for MML documents -;; Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: Simon Josefsson @@ -43,6 +43,7 @@ (defcustom mml-default-sign-method "pgpmime" "Default sign method. The string must have an entry in `mml-sign-alist'." + :version "22.1" :type '(choice (const "smime") (const "pgp") (const "pgpauto") @@ -60,6 +61,7 @@ The string must have an entry in `mml-sign-alist'." (defcustom mml-default-encrypt-method "pgpmime" "Default encryption method. The string must have an entry in `mml-encrypt-alist'." + :version "22.1" :type '(choice (const "smime") (const "pgp") (const "pgpauto") @@ -83,6 +85,8 @@ Note that the output generated by using a `combined' mode is NOT understood by all PGP implementations, in particular PGP version 2 does not support it! See Info node `(message)Security' for details." + :version "22.1" + :group 'message :type '(repeat (list (choice (const :tag "S/MIME" "smime") (const :tag "PGP" "pgp") (const :tag "PGP/MIME" "pgpmime") @@ -220,6 +224,13 @@ You can also customize or set `mml-signencrypt-style-alist' instead." ;; defuns that add the proper <#secure ...> tag to the top of the message body (defun mml-secure-message (method &optional modesym) (let ((mode (prin1-to-string modesym)) + (tags (append + (if (or (eq modesym 'sign) + (eq modesym 'signencrypt)) + (funcall (nth 2 (assoc method mml-sign-alist)))) + (if (or (eq modesym 'encrypt) + (eq modesym 'signencrypt)) + (funcall (nth 2 (assoc method mml-encrypt-alist)))))) insert-loc) (mml-unsecure-message) (save-excursion @@ -228,8 +239,8 @@ You can also customize or set `mml-signencrypt-style-alist' instead." (concat "^" (regexp-quote mail-header-separator) "\n") nil t) (goto-char (setq insert-loc (match-end 0))) (unless (looking-at "<#secure") - (mml-insert-tag - 'secure 'method method 'mode mode))) + (apply 'mml-insert-tag + 'secure 'method method 'mode mode tags))) (t (error "The message is corrupted. No mail header separator")))) (when (eql insert-loc (point)) @@ -289,4 +300,5 @@ If called with a prefix argument, only encrypt (do NOT sign)." (provide 'mml-sec) +;;; arch-tag: 111c56e7-df5e-4287-87d7-93ed2911ec6c ;;; mml-sec.el ends here diff --git a/lisp/mml-smime.el b/lisp/mml-smime.el index dbcd1c1..6febd61 100644 --- a/lisp/mml-smime.el +++ b/lisp/mml-smime.el @@ -1,5 +1,5 @@ ;;; mml-smime.el --- S/MIME support for MML -;; Copyright (c) 2000, 2001, 2003 Free Software Foundation, Inc. +;; Copyright (c) 2000, 2001, 2003, 2005 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: Gnus, MIME, S/MIME, MML @@ -115,16 +115,36 @@ (quit)) result)) +(defun mml-smime-get-ldap-cert () + ;; todo: deal with comma separated multiple recipients + (let (result who bad cert) + (condition-case () + (while (not result) + (setq who (read-from-minibuffer + (format "%sLookup certificate for: " (or bad "")) + (cadr (funcall gnus-extract-address-components + (or (save-excursion + (save-restriction + (message-narrow-to-headers) + (message-fetch-field "to"))) + ""))))) + (if (setq cert (smime-cert-by-ldap who)) + (setq result (list 'certfile (buffer-name cert))) + (setq bad (format "`%s' not found. " who)))) + (quit)) + result)) + (defun mml-smime-encrypt-query () - ;; todo: add ldap support (xemacs ldap api?) ;; todo: try dns/ldap automatically first, before prompting user (let (certs done) (while (not done) (ecase (read (gnus-completing-read-with-default - "dns" "Fetch certificate from" - '(("dns") ("file")) nil t)) + "ldap" "Fetch certificate from" + '(("dns") ("ldap") ("file")) nil t)) (dns (setq certs (append certs (mml-smime-get-dns-cert)))) + (ldap (setq certs (append certs + (mml-smime-get-ldap-cert)))) (file (setq certs (append certs (mml-smime-get-file-cert))))) (setq done (not (y-or-n-p "Add more recipients? ")))) @@ -200,4 +220,5 @@ (provide 'mml-smime) +;;; arch-tag: f1bf94d4-f2cd-4c6f-b059-ad69492817e2 ;;; mml-smime.el ends here diff --git a/lisp/mml.el b/lisp/mml.el index 68370d6..80bb833 100644 --- a/lisp/mml.el +++ b/lisp/mml.el @@ -1,5 +1,5 @@ ;;; mml.el --- A package for parsing and validating MML documents -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -38,13 +38,16 @@ (autoload 'message-fetch-field "message") (autoload 'message-mark-active-p "message") (autoload 'fill-flowed-encode "flow-fill") - (autoload 'message-posting-charset "message") - (autoload 'x-dnd-get-local-file-name "x-dnd")) + (autoload 'message-posting-charset "message")) + +(eval-when-compile + (autoload 'dnd-get-local-file-name "dnd")) (defcustom mml-content-type-parameters '(name access-type expiration size permission format) "*A list of acceptable parameters in MML tag. These parameters are generated in Content-Type header if exists." + :version "22.1" :type '(repeat (symbol :tag "Parameter")) :group 'message) @@ -52,12 +55,14 @@ These parameters are generated in Content-Type header if exists." '(filename creation-date modification-date read-date) "*A list of acceptable parameters in MML tag. These parameters are generated in Content-Disposition header if exists." + :version "22.1" :type '(repeat (symbol :tag "Parameter")) :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." + :version "22.1" :type 'boolean :group 'message) @@ -155,6 +160,8 @@ one charsets.") ;; included in the message (let* (secure-mode (taginfo (mml-read-tag)) + (keyfile (cdr (assq 'keyfile taginfo))) + (certfile (cdr (assq 'certfile taginfo))) (recipients (cdr (assq 'recipients taginfo))) (sender (cdr (assq 'sender taginfo))) (location (cdr (assq 'tag-location taginfo))) @@ -178,6 +185,10 @@ one charsets.") (setq tags (list "sign" method "encrypt" method)))) (eval `(mml-insert-tag ,secure-mode ,@tags + ,(if keyfile "keyfile") + ,keyfile + ,(if certfile "certfile") + ,certfile ,(if recipients "recipients") ,recipients ,(if sender "sender") @@ -394,22 +405,25 @@ If MML is non-nil, return the buffer up till the correspondent mml tag." (cond ((or (eq (car cont) 'part) (eq (car cont) 'mml)) (let ((raw (cdr (assq 'raw cont))) - coded encoding charset filename type flowed) - (setq type (or (cdr (assq 'type cont)) "text/plain")) + type charset coding filename encoding flowed coded) + (setq type (or (cdr (assq 'type cont)) "text/plain") + charset (cdr (assq 'charset cont)) + coding (mm-charset-to-coding-system charset)) + (cond ((eq coding 'ascii) + (setq charset nil + coding nil)) + (charset + (setq charset (intern (downcase charset))))) (if (and (not raw) (member (car (split-string type "/")) '("text" "message"))) (progn (with-temp-buffer - (setq charset (mm-charset-to-coding-system - (cdr (assq 'charset cont)))) - (when (eq charset 'ascii) - (setq charset nil)) (cond ((cdr (assq 'buffer cont)) (insert-buffer-substring (cdr (assq 'buffer cont)))) ((and (setq filename (cdr (assq 'filename cont))) (not (equal (cdr (assq 'nofile cont)) "yes"))) - (let ((coding-system-for-read charset)) + (let ((coding-system-for-read coding)) (mm-insert-file-contents filename))) ((eq 'mml (car cont)) (insert (cdr (assq 'contents cont)))) @@ -465,11 +479,17 @@ If MML is non-nil, return the buffer up till the correspondent mml tag." (mm-with-unibyte-buffer (cond ((cdr (assq 'buffer cont)) - (insert-buffer-substring (cdr (assq 'buffer cont)))) + (insert (with-current-buffer (cdr (assq 'buffer cont)) + (mm-with-unibyte-current-buffer + (buffer-string))))) ((and (setq filename (cdr (assq 'filename cont))) (not (equal (cdr (assq 'nofile cont)) "yes"))) (let ((coding-system-for-read mm-binary-coding-system)) - (mm-insert-file-contents filename nil nil nil nil t))) + (mm-insert-file-contents filename nil nil nil nil t)) + (unless charset + (setq charset (mm-coding-system-to-mime-charset + (mm-find-buffer-file-coding-system + filename))))) (t (insert (cdr (assq 'contents cont))))) (setq encoding (mm-encode-buffer type) @@ -702,7 +722,8 @@ If HANDLES is non-nil, use it instead reparsing the buffer." ;; First decode the head. (save-restriction (message-narrow-to-head) - (mail-decode-encoded-word-region (point-min) (point-max))) + (let ((rfc2047-quote-decoded-words-containing-tspecials t)) + (mail-decode-encoded-word-region (point-min) (point-max)))) (unless handles (setq handles (mm-dissect-buffer t))) (goto-char (point-min)) @@ -803,7 +824,7 @@ If HANDLES is non-nil, use it instead reparsing the buffer." (insert " " param) (when (> (current-column) 71) (goto-char point) - (insert "\n ") + (insert "\n") (end-of-line))))) ;;; @@ -895,11 +916,11 @@ See Info node `(emacs-mime)Composing'. (> (prefix-numeric-value arg) 0))) (add-minor-mode 'mml-mode " MML" mml-mode-map) (easy-menu-add mml-menu mml-mode-map) - (when (boundp 'x-dnd-protocol-alist) - (set (make-local-variable 'x-dnd-protocol-alist) - '(("^file:///" . mml-x-dnd-attach-file) - ("^file://" . x-dnd-open-file) - ("^file:" . mml-x-dnd-attach-file)))) + (when (boundp 'dnd-protocol-alist) + (set (make-local-variable 'dnd-protocol-alist) + '(("^file:///" . mml-dnd-attach-file) + ("^file://" . dnd-open-file) + ("^file:" . mml-dnd-attach-file)))) (run-hooks 'mml-mode-hook))) ;;; @@ -946,11 +967,9 @@ See Info node `(emacs-mime)Composing'. (if (string-match "^text/.*" type) "inline" "attachment"))) - (disposition (completing-read - (format "Disposition: (default %s): " default) - '(("attachment") ("inline") ("")) - nil - nil))) + (disposition (completing-read "Disposition: " + '(("attachment") ("inline") ("")) + nil t))) (if (not (equal disposition "")) disposition default))) @@ -1017,9 +1036,9 @@ description of the attachment." 'disposition (or disposition "attachment") 'description description)) -(defun mml-x-dnd-attach-file (uri action) +(defun mml-dnd-attach-file (uri action) "Attach a drag and drop file." - (let ((file (x-dnd-get-local-file-name uri t))) + (let ((file (dnd-get-local-file-name uri t))) (when (and file (file-regular-p file)) (let* ((type (mml-minibuffer-read-type file)) (description (mml-minibuffer-read-description)) @@ -1075,10 +1094,15 @@ Should be adopted if code in `message-send-mail' is changed." (message-position-on-field "Mail-Followup-To" "X-Draft-From") (insert (message-make-mail-followup-to)))) +(defvar mml-preview-buffer nil) + (defun mml-preview (&optional raw) "Display current buffer with Gnus, in a new buffer. If RAW, don't highlight the article." (interactive "P") + (setq mml-preview-buffer (generate-new-buffer + (concat (if raw "*Raw MIME preview of " + "*MIME preview of ") (buffer-name)))) (save-excursion (let* ((buf (current-buffer)) (message-options message-options) @@ -1090,13 +1114,13 @@ If RAW, don't highlight the article." (message-fetch-field "Newsgroups"))) message-posting-charset))) (message-options-set-recipient) - (switch-to-buffer (generate-new-buffer - (concat (if raw "*Raw MIME preview of " - "*MIME preview of ") (buffer-name)))) (when (boundp 'gnus-buffers) - (push (current-buffer) gnus-buffers)) - (erase-buffer) - (insert-buffer-substring buf) + (push mml-preview-buffer gnus-buffers)) + (save-restriction + (widen) + (set-buffer mml-preview-buffer) + (erase-buffer) + (insert-buffer-substring buf)) (mml-preview-insert-mail-followup-to) (let ((message-deletable-headers (if (message-news-p) nil @@ -1109,6 +1133,7 @@ If RAW, don't highlight the article." (concat "^" (regexp-quote mail-header-separator) "\n") nil t) (replace-match "\n")) (let ((mail-header-separator ""));; mail-header-separator is removed. + (message-sort-headers) (mml-to-mime)) (if raw (when (fboundp 'set-buffer-multibyte) @@ -1141,7 +1166,12 @@ If RAW, don't highlight the article." (lambda (event) (interactive "@e") (widget-button-press (widget-event-point event) event))) - (goto-char (point-min))))) + (goto-char (point-min)))) + (if (and (boundp 'gnus-buffer-configuration) + (assq 'mml-preview gnus-buffer-configuration)) + (let ((gnus-message-buffer (current-buffer))) + (gnus-configure-windows 'mml-preview)) + (pop-to-buffer mml-preview-buffer))) (defun mml-validate () "Validate the current MML document." @@ -1187,4 +1217,5 @@ If RAW, don't highlight the article." (provide 'mml) +;;; arch-tag: 583c96cf-1ffe-451b-a5e5-4733ae9ddd12 ;;; mml.el ends here diff --git a/lisp/mml1991.el b/lisp/mml1991.el index 50daea8..14d52e4 100644 --- a/lisp/mml1991.el +++ b/lisp/mml1991.el @@ -303,4 +303,5 @@ ;; coding: iso-8859-1 ;; End: +;;; arch-tag: e542be18-ab28-4393-9b33-97fe9cf30706 ;;; mml1991.el ends here diff --git a/lisp/mml2015.el b/lisp/mml2015.el index 2b29b12..9e0311c 100644 --- a/lisp/mml2015.el +++ b/lisp/mml2015.el @@ -87,6 +87,8 @@ Valid packages include `pgg', `gpg' and `mailcrypt'.") ("TRUST_FULLY" . t) ("TRUST_ULTIMATE" . t)) "Map GnuPG trust output values to a boolean saying if you trust the key." + :version "22.1" + :group 'mime-security :type '(repeat (cons (regexp :tag "GnuPG output regexp") (boolean :tag "Trust key")))) @@ -587,7 +589,7 @@ Valid packages include `pgg', `gpg' and `mailcrypt'.") ;; set up a function to call the correct gpg encrypt routine ;; with the right arguments. (FIXME: this should be done ;; differently.) - (flet ((gpg-encrypt-func + (flet ((gpg-encrypt-func (sign plaintext ciphertext result recipients &optional passphrase sign-with-key armor textmode) (if sign @@ -658,7 +660,7 @@ Valid packages include `pgg', `gpg' and `mailcrypt'.") (if (condition-case err (prog1 (pgg-decrypt-region (point-min) (point-max)) - (setq decrypt-status + (setq decrypt-status (with-current-buffer mml2015-result-buffer (buffer-string))) (mm-set-handle-multipart-parameter @@ -742,7 +744,7 @@ Valid packages include `pgg', `gpg' and `mailcrypt'.") (mm-insert-part signature)) (if (condition-case err (prog1 - (pgg-verify-region (point-min) (point-max) + (pgg-verify-region (point-min) (point-max) signature-file t) (goto-char (point-min)) (while (search-forward "\r\n" nil t) @@ -918,4 +920,5 @@ Valid packages include `pgg', `gpg' and `mailcrypt'.") (provide 'mml2015) +;;; arch-tag: b04701d5-0b09-44d8-bed8-de901bf435f2 ;;; mml2015.el ends here diff --git a/lisp/netrc.el b/lisp/netrc.el index b561885..dd60fc4 100644 --- a/lisp/netrc.el +++ b/lisp/netrc.el @@ -34,61 +34,16 @@ ;;; .netrc and .authinfo rc parsing ;;; -;; autoload password +;; autoload encrypt (eval-and-compile - (autoload 'password-read "password")) + (autoload 'encrypt-find-model "encrypt") + (autoload 'encrypt-insert-file-contents "encrypt")) (defgroup netrc nil "Netrc configuration.") -(defcustom netrc-encrypting-method nil - "Decoding method used for the netrc file. -Use the OpenSSL symmetric ciphers here. Leave nil for no -decoding. Encrypt the file with netrc-encrypt, but make sure you -have set netrc-encrypting-method to a non-nil value." - :type '(choice - (const :tag "DES-3" "des3") - (const :tag "IDEA" "idea") - (const :tag "RC4" "rc4") - (string :tag "Explicit cipher name") - (const :tag "None" nil)) - :group 'netrc) - -(defcustom netrc-openssl-path (executable-find "openssl") - "File path of the OpenSSL shell." - :type '(choice (file :tag "Location of openssl") - (const :tag "openssl is not installed" nil)) - :group 'netrc) - -(defun netrc-encrypt (plain-file encrypted-file) - (interactive "fPlain File: \nFEncrypted File: ") - "Encrypt FILE to ENCRYPTED-FILE with netrc-encrypting-method cipher." - (when (and (file-exists-p plain-file) - (stringp encrypted-file) - netrc-encrypting-method - netrc-openssl-path) - (let ((buffer-file-coding-system 'binary) - (coding-system-for-read 'binary) - (coding-system-for-write 'binary) - (password - (password-read - (format "OpenSSL Password for cipher %s? " - netrc-encrypting-method) - (format "netrc-openssl-password-%s" - netrc-encrypting-method)))) - (when password - (with-temp-buffer - (insert-file-contents plain-file) - (setenv "NETRC_OPENSSL_PASSWORD" password) - (shell-command-on-region - (point-min) - (point-max) - (format "%s %s -pass env:NETRC_OPENSSL_PASSWORD -e" - netrc-openssl-path - netrc-encrypting-method) - t - t) - (write-file encrypted-file t)))))) +(defvar netrc-services-file "/etc/services" + "The name of the services file.") (defun netrc-parse (file) (interactive "fFile to Parse: ") @@ -98,30 +53,13 @@ have set netrc-encrypting-method to a non-nil value." (let ((tokens '("machine" "default" "login" "password" "account" "macdef" "force" "port")) + (encryption-model (encrypt-find-model file)) alist elem result pair) - (if (and netrc-encrypting-method - netrc-openssl-path) - (let ((buffer-file-coding-system 'binary) - (coding-system-for-read 'binary) - (coding-system-for-write 'binary) - (password - (password-read - (format "OpenSSL Password for cipher %s? " - netrc-encrypting-method) - (format "netrc-openssl-password-%s" - netrc-encrypting-method)))) - (when password - (insert-file-contents file) - (setenv "NETRC_OPENSSL_PASSWORD" password) - (shell-command-on-region - (point-min) - (point-max) - (format "%s %s -pass env:NETRC_OPENSSL_PASSWORD -d" - netrc-openssl-path - netrc-encrypting-method) - t - t))) + + (if encryption-model + (encrypt-insert-file-contents file encryption-model) (insert-file-contents file)) + (goto-char (point-min)) ;; Go through the file, line by line. (while (not (eobp)) @@ -186,16 +124,80 @@ Entries without port tokens default to DEFAULTPORT." (when result (setq result (nreverse result)) (while (and result - (not (equal (or port defaultport "nntp") - (or (netrc-get (car result) "port") - defaultport "nntp")))) + (not (netrc-port-equal + (or port defaultport "nntp") + (or (netrc-get (car result) "port") + defaultport "nntp")))) (pop result)) (car result)))) +(defun netrc-machine-user-or-password (mode authinfo-file-or-list machines ports defaults) + "Get the user name or password according to MODE from AUTHINFO-FILE-OR-LIST. +Matches a machine from MACHINES and a port from PORTS, giving +default ports DEFAULTS to `netrc-machine'. + +MODE can be \"login\" or \"password\", suitable for passing to +`netrc-get'." + (let ((authinfo-list (if (stringp authinfo-file-or-list) + (netrc-parse authinfo-file-or-list) + authinfo-file-or-list)) + (ports (or ports '(nil))) + (defaults (or defaults '(nil))) + info) + (dolist (machine machines) + (dolist (default defaults) + (dolist (port ports) + (let ((alist (netrc-machine authinfo-list machine port default))) + (setq info (or (netrc-get alist mode) info)))))) + info)) + (defun netrc-get (alist type) "Return the value of token TYPE from ALIST." (cdr (assoc type alist))) +(defun netrc-port-equal (port1 port2) + (when (numberp port1) + (setq port1 (or (netrc-find-service-name port1) port1))) + (when (numberp port2) + (setq port2 (or (netrc-find-service-name port2) port2))) + (equal port1 port2)) + +(defun netrc-parse-services () + (when (file-exists-p netrc-services-file) + (let ((services nil)) + (with-temp-buffer + (insert-file-contents netrc-services-file) + (while (search-forward "#" nil t) + (delete-region (1- (point)) (line-end-position))) + (goto-char (point-min)) + (while (re-search-forward + "^ *\\([^ \n\t]+\\)[ \t]+\\([0-9]+\\)/\\([^ \t\n]+\\)" nil t) + (push (list (match-string 1) (string-to-number (match-string 2)) + (intern (downcase (match-string 3)))) + services)) + (nreverse services))))) + +(defun netrc-find-service-name (number &optional type) + (let ((services (netrc-parse-services)) + service) + (setq type (or type 'tcp)) + (while (and (setq service (pop services)) + (not (and (= number (cadr service)) + (eq type (caddr service))))) + ) + (car service))) + +(defun netrc-find-service-number (name &optional type) + (let ((services (netrc-parse-services)) + service) + (setq type (or type 'tcp)) + (while (and (setq service (pop services)) + (not (and (string= name (car service)) + (eq type (caddr service))))) + ) + (cadr service))) + (provide 'netrc) +;;; arch-tag: af9929cc-2d12-482f-936e-eb4366f9fa55 ;;; netrc.el ends here diff --git a/lisp/nnagent.el b/lisp/nnagent.el index 21b9f97..5d5cd2a 100644 --- a/lisp/nnagent.el +++ b/lisp/nnagent.el @@ -103,7 +103,7 @@ (defun nnagent-request-type (group article) (unless (stringp article) - (let ((gnus-plugged t)) + (let ((gnus-agent nil)) (if (not (gnus-check-backend-function 'request-type (car gnus-command-method))) 'unknown @@ -122,9 +122,14 @@ (deffoo nnagent-request-set-mark (group action server) (with-temp-buffer - (insert (format "(%s-request-set-mark \"%s\" '%s \"%s\")\n" - (nth 0 gnus-command-method) group action - (or server (nth 1 gnus-command-method)))) + (insert "(gnus-agent-synchronize-group-flags \"" + group + "\" '") + (gnus-pp action) + (insert " \"" + (gnus-method-to-server gnus-command-method) + "\"") + (insert ")\n") (append-to-file (point-min) (point-max) (gnus-agent-lib-file "flags"))) nil) @@ -209,10 +214,10 @@ (list (nnagent-server server)))) (deffoo nnagent-request-move-article - (article group server accept-form &optional last) + (article group server accept-form &optional last move-is-internal) (nnoo-parent-function 'nnagent 'nnml-request-move-article (list article group (nnagent-server server) - accept-form last))) + accept-form last move-is-internal))) (deffoo nnagent-request-rename-group (group new-name &optional server) (nnoo-parent-function 'nnagent 'nnml-request-rename-group @@ -247,4 +252,5 @@ (provide 'nnagent) +;;; arch-tag: af710b77-f816-4969-af31-6fd94fb42245 ;;; nnagent.el ends here diff --git a/lisp/nnbabyl.el b/lisp/nnbabyl.el index ad84c5c..076f451 100644 --- a/lisp/nnbabyl.el +++ b/lisp/nnbabyl.el @@ -305,7 +305,7 @@ (nconc rest articles)))) (deffoo nnbabyl-request-move-article - (article group server accept-form &optional last) + (article group server accept-form &optional last move-is-internal) (let ((buf (get-buffer-create " *nnbabyl move*")) result) (and @@ -665,4 +665,5 @@ (provide 'nnbabyl) +;;; arch-tag: aa7ddedb-8c07-4c0e-beb0-58e795c2b81b ;;; nnbabyl.el ends here diff --git a/lisp/nndb.el b/lisp/nndb.el index efd0a9c..082f169 100644 --- a/lisp/nndb.el +++ b/lisp/nndb.el @@ -60,12 +60,10 @@ (eval-when-compile (require 'cl)) (eval-and-compile - (unless (fboundp 'open-network-stream) - (require 'tcp))) - -(eval-when-compile (require 'cl)) - -(eval-and-compile + (autoload 'news-setup "rnewspost") + (autoload 'news-reply-mode "rnewspost") + (autoload 'cancel-timer "timer") + (autoload 'telnet "telnet" nil t) (autoload 'telnet-send-input "telnet" nil t) (autoload 'gnus-declare-backend "gnus-start")) @@ -248,7 +246,7 @@ expiry mechanism." (nndb-request-expire-articles-local articles group server force))) (deffoo nndb-request-move-article - (article group server accept-form &optional last) + (article group server accept-form &optional last move-is-internal) "Move ARTICLE (a number) from GROUP on SERVER. Evals ACCEPT-FORM in current buffer, where the article is. Optional LAST is ignored." @@ -323,4 +321,5 @@ Optional LAST is ignored." (provide 'nndb) +;;; arch-tag: 83bd6fb4-58d9-4fed-a901-c6c625ad5f8a ;;; nndb.el ends here diff --git a/lisp/nndiary.el b/lisp/nndiary.el index 28cf37e..2aeb55f 100644 --- a/lisp/nndiary.el +++ b/lisp/nndiary.el @@ -223,6 +223,7 @@ (defgroup nndiary nil "The Gnus Diary backend." + :version "22.1" :group 'gnus-diary) (defcustom nndiary-mail-sources @@ -723,7 +724,7 @@ all. This may very well take some time.") (nconc rest articles))) (deffoo nndiary-request-move-article - (article group server accept-form &optional last) + (article group server accept-form &optional last move-is-internal) (let ((buf (get-buffer-create " *nndiary move*")) result) (nndiary-possibly-change-directory group server) @@ -759,7 +760,7 @@ all. This may very well take some time.") (when (nndiary-schedule) (let (result) (when nnmail-cache-accepted-message-ids - (nnmail-cache-insert (nnmail-fetch-field "message-id") + (nnmail-cache-insert (nnmail-fetch-field "message-id") group (nnmail-fetch-field "subject"))) (if (stringp group) @@ -1213,9 +1214,7 @@ all. This may very well take some time.") (push (list group (cons (or (caar files) (1+ last)) (max last - (or (let ((f files)) - (while (cdr f) (setq f (cdr f))) - (caar f)) + (or (caar (last files)) 0)))) nndiary-group-alist))) @@ -1708,4 +1707,5 @@ all. This may very well take some time.") (provide 'nndiary) +;;; arch-tag: 9c542b95-92e7-4ace-a038-330ab296e203 ;;; nndiary.el ends here diff --git a/lisp/nndir.el b/lisp/nndir.el index f1a6635..b72a152 100644 --- a/lisp/nndir.el +++ b/lisp/nndir.el @@ -98,4 +98,5 @@ (provide 'nndir) +;;; arch-tag: 56f09f68-0e4e-4816-818a-df80b4a394c8 ;;; nndir.el ends here diff --git a/lisp/nndoc.el b/lisp/nndoc.el index a76065d..47a3cbd 100644 --- a/lisp/nndoc.el +++ b/lisp/nndoc.el @@ -1,5 +1,5 @@ ;;; nndoc.el --- single file access for Gnus -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -130,8 +130,10 @@ from the document.") (article-transform-function . nndoc-transform-lanl-gov-announce) (subtype preprints guess)) (rfc822-forward - (article-begin . "^\n") - (body-end-function . nndoc-rfc822-forward-body-end-function)) + (article-begin . "^\n+") + (body-end-function . nndoc-rfc822-forward-body-end-function) + (generate-head-function . nndoc-rfc822-forward-generate-head) + (generate-article-function . nndoc-rfc822-forward-generate-article)) (outlook (article-begin-function . nndoc-outlook-article-begin) (body-end . "\0")) @@ -492,6 +494,29 @@ from the document.") (defun nndoc-rfc822-forward-body-end-function () (goto-char (point-max))) +(defun nndoc-rfc822-forward-generate-article (article &optional head) + (let ((entry (cdr (assq article nndoc-dissection-alist))) + (begin (point)) + encoding) + (with-current-buffer nndoc-current-buffer + (save-restriction + (message-narrow-to-head) + (setq encoding (message-fetch-field "content-transfer-encoding")))) + (insert-buffer-substring nndoc-current-buffer (car entry) (nth 3 entry)) + (when encoding + (save-restriction + (narrow-to-region begin (point-max)) + (mm-decode-content-transfer-encoding + (intern (downcase (mail-header-strip encoding)))))) + (when head + (goto-char begin) + (when (search-forward "\n\n" nil t) + (delete-region (1- (point)) (point-max))))) + t) + +(defun nndoc-rfc822-forward-generate-head (article) + (nndoc-rfc822-forward-generate-article article 'head)) + (defun nndoc-mime-parts-type-p () (let ((case-fold-search t) (limit (search-forward "\n\n" nil t))) @@ -998,4 +1023,5 @@ symbol in the alist." (provide 'nndoc) +;;; arch-tag: f5c2970e-0387-47ac-a0b3-6cc317dffabe ;;; nndoc.el ends here diff --git a/lisp/nndraft.el b/lisp/nndraft.el index 5685084..95ff037 100644 --- a/lisp/nndraft.el +++ b/lisp/nndraft.el @@ -196,8 +196,8 @@ 'nnmh-request-group (list group server dont-check))) -(deffoo nndraft-request-move-article (article group server - accept-form &optional last) +(deffoo nndraft-request-move-article (article group server accept-form + &optional last move-is-internal) (nndraft-possibly-change-group group) (let ((buf (get-buffer-create " *nndraft move*")) result) @@ -307,4 +307,5 @@ (provide 'nndraft) +;;; arch-tag: 3ce26ca0-41cb-48b1-8703-4dad35e188aa ;;; nndraft.el ends here diff --git a/lisp/nneething.el b/lisp/nneething.el index e013acb..e3b3d34 100644 --- a/lisp/nneething.el +++ b/lisp/nneething.el @@ -37,7 +37,8 @@ (nnoo-declare nneething) -(defvoo nneething-map-file-directory "~/.nneething/" +(defvoo nneething-map-file-directory + (nnheader-concat gnus-directory ".nneething/") "Where nneething stores the map files.") (defvoo nneething-map-file ".nneething" @@ -422,9 +423,10 @@ included.") (if (numberp article) (if (setq fname (cadr (assq article nneething-map))) (expand-file-name fname dir) - (mm-make-temp-file (expand-file-name "nneething" dir))) + (make-temp-name (expand-file-name "nneething" dir))) (expand-file-name article dir)))) (provide 'nneething) +;;; arch-tag: 1277f386-88f2-4459-bb24-f3f45962a6c5 ;;; nneething.el ends here diff --git a/lisp/nnfolder.el b/lisp/nnfolder.el index 8ed01d7..9b25ea1 100644 --- a/lisp/nnfolder.el +++ b/lisp/nnfolder.el @@ -1,5 +1,5 @@ ;;; nnfolder.el --- mail folder access for Gnus -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Simon Josefsson (adding MARKS) @@ -370,10 +370,11 @@ the group. Then the marks file will be regenerated properly by Gnus.") (deffoo nnfolder-request-create-group (group &optional server args) (nnfolder-possibly-change-group nil server) (nnmail-activate 'nnfolder) - (when group - (unless (assoc group nnfolder-group-alist) - (push (list group (cons 1 0)) nnfolder-group-alist) - (nnfolder-save-active nnfolder-group-alist nnfolder-active-file) + (when (and group + (not (assoc group nnfolder-group-alist))) + (push (list group (cons 1 0)) nnfolder-group-alist) + (nnfolder-save-active nnfolder-group-alist nnfolder-active-file) + (save-current-buffer (nnfolder-read-folder group))) t) @@ -466,8 +467,8 @@ the group. Then the marks file will be regenerated properly by Gnus.") (nnfolder-save-active nnfolder-group-alist nnfolder-active-file) (gnus-sorted-difference articles (nreverse deleted-articles))))) -(deffoo nnfolder-request-move-article (article group server - accept-form &optional last) +(deffoo nnfolder-request-move-article (article group server accept-form + &optional last move-is-internal) (save-excursion (let ((buf (get-buffer-create " *nnfolder move*")) result) @@ -872,7 +873,7 @@ deleted. Point is left where the deleted region was." (buffer (set-buffer (let ((nnheader-file-coding-system nnfolder-file-coding-system)) - (nnheader-find-file-noselect file))))) + (nnheader-find-file-noselect file t))))) (mm-enable-multibyte) ;; Use multibyte buffer for future copying. (if (equal (cadr (assoc group nnfolder-scantime-alist)) (nth 5 (file-attributes file))) @@ -1027,9 +1028,7 @@ This command does not work if you use short group names." (when (not (message-mail-file-mbox-p file)) (ignore-errors (delete-file file))))) - (let ((files (directory-files nnfolder-directory)) - file) - (while (setq file (pop files)) + (dolist (file (directory-files nnfolder-directory)) (when (and (not (backup-file-name-p file)) (message-mail-file-mbox-p (nnheader-concat nnfolder-directory file))) @@ -1044,7 +1043,7 @@ This command does not work if you use short group names." (nnfolder-possibly-change-folder file) (nnfolder-possibly-change-group file) (nnfolder-close-group file)))) - (nnheader-message 5 ""))) + (nnheader-message 5 "")) (defun nnfolder-group-pathname (group) "Make file name for GROUP." @@ -1272,4 +1271,5 @@ This command does not work if you use short group names." (provide 'nnfolder) +;;; arch-tag: a040d0f4-4f4e-445f-8972-839575c5f7e6 ;;; nnfolder.el ends here diff --git a/lisp/nngateway.el b/lisp/nngateway.el index 6059dcf..f690369 100644 --- a/lisp/nngateway.el +++ b/lisp/nngateway.el @@ -91,4 +91,5 @@ parameter -- the gateway address.") (provide 'nngateway) +;;; arch-tag: f7ecb92e-b10c-43d5-9a9b-1314233341fc ;;; nngateway.el ends here diff --git a/lisp/nnheader.el b/lisp/nnheader.el index 9e12f11..e4b7746 100644 --- a/lisp/nnheader.el +++ b/lisp/nnheader.el @@ -1,7 +1,7 @@ ;;; nnheader.el --- header access macros for Gnus and its backends ;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, -;; 1997, 1998, 2000, 2001, 2002, 2003 +;; 1997, 1998, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Masanobu UMEDA @@ -58,7 +58,7 @@ they will keep on jabbering all the time." :group 'gnus-server :type 'boolean) -(defvar nnheader-max-head-length 4096 +(defvar nnheader-max-head-length 8192 "*Max length of the head of articles. Value is an integer, nil, or t. nil means read in chunks of a file @@ -74,7 +74,15 @@ Integer values will in effect be rounded up to the nearest multiple of (defvar nnheader-read-timeout (if (string-match "windows-nt\\|os/2\\|emx\\|cygwin" (symbol-name system-type)) - 1.0 ; why? + ;; http://thread.gmane.org/v9655t3pjo.fsf@marauder.physik.uni-ulm.de + ;; + ;; IIRC, values lower than 1.0 didn't/don't work on Windows/DOS. + ;; + ;; There should probably be a runtime test to determine the timing + ;; resolution, or a primitive to report it. I don't know off-hand + ;; what's possible. Perhaps better, maybe the Windows/DOS primitive + ;; could round up non-zero timeouts to a minimum of 1.0? + 1.0 0.1) "How long nntp should wait between checking for the end of output. Shorter values mean quicker response, but are more CPU intensive.") @@ -216,12 +224,16 @@ on your system, you could say something like: (defvar nnheader-fake-message-id 1) -(defsubst nnheader-generate-fake-message-id () - (concat "fake+none+" (int-to-string (incf nnheader-fake-message-id)))) +(defsubst nnheader-generate-fake-message-id (&optional number) + (if (numberp number) + (format "fake+none+%s+%d" gnus-newsgroup-name number) + (format "fake+none+%s+%s" + gnus-newsgroup-name + (int-to-string (incf nnheader-fake-message-id))))) (defsubst nnheader-fake-message-id-p (id) (save-match-data ; regular message-id's are <.*> - (string-match "\\`fake\\+none\\+[0-9]+\\'" id))) + (string-match "\\`fake\\+none\\+.*\\+[0-9]+\\'" id))) ;; Parsing headers and NOV lines. @@ -283,7 +295,7 @@ on your system, you could say something like: (or (search-forward ">" (point-at-eol) t) (point))) ;; If there was no message-id, we just fake one to make ;; subsequent routines simpler. - (nnheader-generate-fake-message-id))) + (nnheader-generate-fake-message-id number))) ;; References. (progn (goto-char p) @@ -381,20 +393,28 @@ on your system, you could say something like: out))) out)) -(defmacro nnheader-nov-read-message-id () - '(let ((id (nnheader-nov-field))) +(defvar nnheader-uniquify-message-id nil) + +(defmacro nnheader-nov-read-message-id (&optional number) + `(let ((id (nnheader-nov-field))) (if (string-match "^<[^>]+>$" id) - id - (nnheader-generate-fake-message-id)))) + ,(if nnheader-uniquify-message-id + `(if (string-match "__[^@]+@" id) + (concat (substring id 0 (match-beginning 0)) + (substring id (1- (match-end 0)))) + id) + 'id) + (nnheader-generate-fake-message-id ,number)))) (defun nnheader-parse-nov () - (let ((eol (point-at-eol))) + (let ((eol (point-at-eol)) + (number (nnheader-nov-read-integer))) (vector - (nnheader-nov-read-integer) ; number + number ; number (nnheader-nov-field) ; subject (nnheader-nov-field) ; from (nnheader-nov-field) ; date - (nnheader-nov-read-message-id) ; id + (nnheader-nov-read-message-id number) ; id (nnheader-nov-field) ; refs (nnheader-nov-read-integer) ; chars (nnheader-nov-read-integer) ; lines @@ -641,6 +661,14 @@ the line could be found." (point-max))) (goto-char (point-min))) +(defun nnheader-get-lines-and-char () + "Return the number of lines and chars in the article body." + (goto-char (point-min)) + (if (not (re-search-forward "\n\r?\n" nil t)) + (list 0 0) + (list (count-lines (point) (point-max)) + (- (point-max) (point))))) + (defun nnheader-remove-body () "Remove the body from an article in this current buffer." (goto-char (point-min)) @@ -941,6 +969,8 @@ find-file-hooks, etc. (nnheader-insert-file-contents file))))))) (defun nnheader-find-file-noselect (&rest args) + "Open a file with some variables bound. +See `find-file-noselect' for the arguments." (let ((format-alist nil) (auto-mode-alist (mm-auto-mode-alist)) (default-major-mode 'fundamental-mode) @@ -1022,4 +1052,5 @@ find-file-hooks, etc. (provide 'nnheader) +;;; arch-tag: a9c4b7d9-52ae-4ec9-b196-dfd93124d202 ;;; nnheader.el ends here diff --git a/lisp/nnheaderxm.el b/lisp/nnheaderxm.el index 2694ddf..34ecb84 100644 --- a/lisp/nnheaderxm.el +++ b/lisp/nnheaderxm.el @@ -27,12 +27,12 @@ ;;; Code: -(require 'run-at-time) +(require 'timer-funcs) (defalias 'nnheader-cancel-timer 'delete-itimer) -(defalias 'nnheader-cancel-function-timers 'ignore) (defalias 'nnheader-string-as-multibyte 'identity) (provide 'nnheaderxm) +;;; arch-tag: ee2b3387-d3ca-4de6-9b64-304d838706dd ;;; nnheaderxm.el ends here diff --git a/lisp/nnimap.el b/lisp/nnimap.el index 9c5d0a7..12f9ef8 100644 --- a/lisp/nnimap.el +++ b/lisp/nnimap.el @@ -1,5 +1,5 @@ ;;; nnimap.el --- imap backend for Gnus -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Simon Josefsson @@ -211,6 +211,7 @@ variable is the symbol `default' the default behaviour is used (which currently is nil, unless you use a statistical spam.el test); if this variable is another non-nil value bodies will be downloaded." + :version "22.1" :group 'nnimap :type '(choice (const :tag "Let system decide" deault) boolean)) @@ -219,9 +220,10 @@ will be downloaded." (defcustom nnimap-close-asynchronous t "Close mailboxes asynchronously in `nnimap-close-group'. -This means that errors cought by nnimap when closing the mailbox will +This means that errors caught by nnimap when closing the mailbox will not prevent Gnus from updating the group status, which may be harmful. However, it increases speed." + :version "22.1" :type 'boolean :group 'nnimap) @@ -230,6 +232,7 @@ However, it increases speed." This increases the speed of closing mailboxes (quiting group) but may decrease the speed of selecting another mailbox later. Re-selecting the same mailbox will be faster though." + :version "22.1" :type 'boolean :group 'nnimap) @@ -242,6 +245,7 @@ more carefully for new mail. In summary, the default is O((1-p)*k+p*n) and changing it to nil makes it O(n). If p is small, then the default is probably faster." + :version "22.1" :type 'boolean :group 'nnimap) @@ -391,11 +395,13 @@ just like \"ticked\" articles, in other IMAP clients.") (string :format "Login: %v")) (cons :format "%v" (const :format "" "password") - (string :format "Password: %v"))))))) + (string :format "Password: %v")))))) + :group 'nnimap) (defcustom nnimap-prune-cache t "If non-nil, nnimap check whether articles still exist on server before using data stored in NOV cache." - :type 'boolean) + :type 'boolean + :group 'nnimap) (defvar nnimap-request-list-method 'imap-mailbox-list "Method to use to request a list of all folders from the server. @@ -440,7 +446,11 @@ An example plist would be '(\"name\" \"Gnus\" \"version\" gnus-version-number (plist :key-type string :value-type string))) (defcustom nnimap-debug nil - "If non-nil, random debug spews are placed in *nnimap-debug* buffer." + "If non-nil, random debug spews are placed in *nnimap-debug* buffer. +Note that username, passwords and other privacy sensitive +information (such as e-mail) may be stored in the *nnimap-debug* +buffer. It is not written to disk, however. Do not enable this +variable unless you are comfortable with that." :group 'nnimap :type 'boolean) @@ -469,6 +479,14 @@ An example plist would be '(\"name\" \"Gnus\" \"version\" gnus-version-number "Return buffer for SERVER, if nil use current server." (cadr (assoc (or server nnimap-current-server) nnimap-server-buffer-alist))) +(defun nnimap-remove-server-from-buffer-alist (server list) + "Remove SERVER from LIST." + (let (l) + (dolist (e list) + (unless (equal server (car-safe e)) + (push e l))) + l)) + (defun nnimap-possibly-change-server (server) "Return buffer for SERVER, changing the current server as a side-effect. If SERVER is nil, uses the current server." @@ -587,7 +605,7 @@ If EXAMINE is non-nil the group is selected read-only." (with-temp-buffer (buffer-disable-undo) (insert headers) - (let ((head (nnheader-parse-naked-head))) + (let ((head (nnheader-parse-naked-head uid))) (mail-header-set-number head uid) (mail-header-set-chars head chars) (mail-header-set-lines head lines) @@ -692,6 +710,8 @@ If EXAMINE is non-nil the group is selected read-only." (if (imap-capability 'IMAP4rev1) (format "BODY.PEEK[HEADER.FIELDS %s])" headers) (format "RFC822.HEADER.LINES %s)" headers))))) + (with-current-buffer nntp-server-buffer + (sort-numeric-fields 1 (point-min) (point-max))) (and (numberp nnmail-large-newsgroup) (> nnimap-length nnmail-large-newsgroup) (nnheader-message 6 "nnimap: Retrieving headers...done"))))) @@ -753,19 +773,34 @@ If EXAMINE is non-nil the group is selected read-only." (imap-capability 'IMAP4rev1 nnimap-server-buffer)) (imap-close nnimap-server-buffer) (nnheader-report 'nnimap "Server %s is not IMAP4 compliant" server)) - (let* ((list (gnus-parse-netrc nnimap-authinfo-file)) - (port (if nnimap-server-port - (int-to-string nnimap-server-port) - "imap")) - (alist (or (gnus-netrc-machine list server port "imap") - (gnus-netrc-machine list - (or nnimap-server-address - nnimap-address) - port "imap"))) - (user (gnus-netrc-get alist "login")) - (passwd (gnus-netrc-get alist "password"))) + (let* ((list (progn (gnus-message 7 "Parsing authinfo file `%s'." + nnimap-authinfo-file) + (netrc-parse nnimap-authinfo-file))) + (port (if nnimap-server-port + (int-to-string nnimap-server-port) + "imap")) + (user (netrc-machine-user-or-password + "login" + list + (list server + (or nnimap-server-address + nnimap-address)) + (list port) + (list "imap" "imaps"))) + (passwd (netrc-machine-user-or-password + "password" + list + (list server + (or nnimap-server-address + nnimap-address)) + (list port) + (list "imap" "imaps")))) (if (imap-authenticate user passwd nnimap-server-buffer) - (prog1 + (prog2 + (setq nnimap-server-buffer-alist + (nnimap-remove-server-from-buffer-alist + server + nnimap-server-buffer-alist)) (push (list server nnimap-server-buffer) nnimap-server-buffer-alist) (imap-id nnimap-id nnimap-server-buffer) @@ -795,7 +830,7 @@ If EXAMINE is non-nil the group is selected read-only." (or (and nnimap-server-buffer (imap-opened nnimap-server-buffer) (if (with-current-buffer nnimap-server-buffer - (memq imap-state '(auth select examine))) + (memq imap-state '(auth selected examine))) t (imap-close nnimap-server-buffer) (nnimap-open-connection server))) @@ -822,7 +857,9 @@ Return nil if the server couldn't be closed for some reason." (setq nnimap-server-buffer nil nnimap-current-server nil nnimap-server-buffer-alist - (delq server nnimap-server-buffer-alist))) + (nnimap-remove-server-from-buffer-alist + server + nnimap-server-buffer-alist))) (nnoo-close-server 'nnimap server))) (deffoo nnimap-request-close () @@ -840,6 +877,11 @@ function is generally only called when Gnus is shutting down." (nnoo-status-message 'nnimap server))) (defun nnimap-demule (string) + ;; BEWARE: we used to use string-as-multibyte here which is braindead + ;; because it will turn accidental emacs-mule-valid byte sequences + ;; into multibyte chars. --Stef + ;; Reverted, braindead got 7.5 out of 10 on imdb, so it can't be + ;; that bad. --Simon (funcall (if (and (fboundp 'string-as-multibyte) (subrp (symbol-function 'string-as-multibyte))) 'string-as-multibyte @@ -848,7 +890,7 @@ function is generally only called when Gnus is shutting down." (defun nnimap-make-callback (article gnus-callback buffer) "Return a callback function." - `(lambda () + `(lambda () (nnimap-callback ,article ,gnus-callback ,buffer))) (defun nnimap-callback (article gnus-callback buffer) @@ -898,8 +940,8 @@ function is generally only called when Gnus is shutting down." (imap-error-text nnimap-server-buffer)) (cons group article))) (add-hook 'imap-fetch-data-hook - (nnimap-make-callback article - nnheader-callback-function + (nnimap-make-callback article + nnheader-callback-function nntp-server-buffer)) (imap-fetch-asynch article part nil nnimap-server-buffer) (cons group article)))))) @@ -952,7 +994,7 @@ function is generally only called when Gnus is shutting down." "Update the unseen count in `nnimap-mailbox-info'." (gnus-sethash (gnus-group-prefixed-name group server) - (let ((old (gnus-gethash-safe (gnus-group-prefixed-name group server) + (let ((old (gnus-gethash-safe (gnus-group-prefixed-name group server) nnimap-mailbox-info))) (list (nth 0 old) (nth 1 old) (imap-mailbox-status group 'unseen nnimap-server-buffer) @@ -1065,7 +1107,7 @@ function is generally only called when Gnus is shutting down." 'asyncgroups 'slowgroups) (list group (imap-mailbox-status-asynch - group '(uidvalidity uidnext unseen) + group '(uidvalidity uidnext unseen) nnimap-server-buffer)))) (dolist (asyncgroup asyncgroups) (let ((group (nth 0 asyncgroup)) @@ -1076,7 +1118,7 @@ function is generally only called when Gnus is shutting down." (nth 0 (gnus-gethash (gnus-group-prefixed-name group server) nnimap-mailbox-info)) - (imap-mailbox-get 'uidvalidity group + (imap-mailbox-get 'uidvalidity group nnimap-server-buffer))) (not (string= (nth 1 (gnus-gethash (gnus-group-prefixed-name @@ -1332,7 +1374,7 @@ function is generally only called when Gnus is shutting down." (let (msgid) (and (setq msgid (nnmail-fetch-field "message-id")) - (nnmail-cache-insert msgid + (nnmail-cache-insert msgid to-group (nnmail-fetch-field "subject")))))) ;; Add the group-art list to the history list. @@ -1400,8 +1442,10 @@ function is generally only called when Gnus is shutting down." (list (- ms 1) (+ (expt 2 16) ls)) (list ms ls)))) +(eval-when-compile (require 'parse-time)) (defun nnimap-date-days-ago (daysago) "Return date, in format \"3-Aug-1998\", for DAYSAGO days ago." + (require 'parse-time) (let* ((time (nnimap-time-substract (current-time) (days-to-time daysago))) (date (format-time-string (format "%%d-%s-%%Y" @@ -1440,12 +1484,12 @@ function is generally only called when Gnus is shutting down." nnmail-expiry-wait))) (cond ((or force (eq days 'immediate)) (let ((oldarts (imap-search - (concat "UID " + (concat "UID " (imap-range-to-message-set artseq))))) (when oldarts (nnimap-expiry-target oldarts group server) (when (imap-message-flags-add - (imap-range-to-message-set + (imap-range-to-message-set (gnus-compress-sequence oldarts)) "\\Deleted") (setq articles (gnus-set-difference articles oldarts)))))) @@ -1459,15 +1503,15 @@ function is generally only called when Gnus is shutting down." (when oldarts (nnimap-expiry-target oldarts group server) (when (imap-message-flags-add - (imap-range-to-message-set + (imap-range-to-message-set (gnus-compress-sequence oldarts)) "\\Deleted") - (setq articles (gnus-set-difference + (setq articles (gnus-set-difference articles oldarts))))))))))) ;; return articles not deleted articles) -(deffoo nnimap-request-move-article (article group server - accept-form &optional last) +(deffoo nnimap-request-move-article (article group server accept-form + &optional last move-is-internal) (when (nnimap-possibly-change-server server) (save-excursion (let ((buf (get-buffer-create " *nnimap move*")) @@ -1475,7 +1519,13 @@ function is generally only called when Gnus is shutting down." (nnimap-current-move-group group) (nnimap-current-move-server nnimap-current-server) result) - (and (nnimap-request-article article group server) + (gnus-message 10 "nnimap-request-move-article: this is an %s move" + (if move-is-internal + "internal" + "external")) + ;; request the article only when the move is NOT internal + (and (or move-is-internal + (nnimap-request-article article group server)) (save-excursion (set-buffer buf) (buffer-disable-undo (current-buffer)) @@ -1705,4 +1755,5 @@ be used in a STORE FLAGS command." (provide 'nnimap) +;; arch-tag: 2b001f20-3ff9-4094-a0ad-46807c1ba70b ;;; nnimap.el ends here diff --git a/lisp/nnkiboze.el b/lisp/nnkiboze.el index 12c3b29..f14f6ca 100644 --- a/lisp/nnkiboze.el +++ b/lisp/nnkiboze.el @@ -389,4 +389,5 @@ Finds out what articles are to be part of the nnkiboze groups." (provide 'nnkiboze) +;;; arch-tag: 66068271-bdc9-4801-bcde-779702e73a05 ;;; nnkiboze.el ends here diff --git a/lisp/nnlistserv.el b/lisp/nnlistserv.el index 6391dd4..770bb02 100644 --- a/lisp/nnlistserv.el +++ b/lisp/nnlistserv.el @@ -1,6 +1,6 @@ ;;; nnlistserv.el --- retrieving articles via web mailing list archives -;; Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +;; Copyright (C) 1997, 1998, 1999, 2000, 2004 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail @@ -149,4 +149,5 @@ (provide 'nnlistserv) +;;; arch-tag: 7705176f-d332-4a5e-a520-d0d319445617 ;;; nnlistserv.el ends here diff --git a/lisp/nnmail.el b/lisp/nnmail.el index 2e19009..b522c1c 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -1,5 +1,5 @@ ;;; nnmail.el --- mail support functions for the Gnus mail backends -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -118,6 +118,7 @@ If nil, the first match found will be used." (defcustom nnmail-split-fancy-with-parent-ignore-groups nil "Regexp that matches group names to be ignored when applying `nnmail-split-fancy-with-parent'. This can also be a list of regexps." + :version "22.1" :group 'nnmail-split :type '(choice (const :tag "none" nil) (regexp :value ".*") @@ -126,6 +127,7 @@ This can also be a list of regexps." (defcustom nnmail-cache-ignore-groups nil "Regexp that matches group names to be ignored when inserting message ids into the cache (`nnmail-cache-insert'). This can also be a list of regexps." + :version "22.1" :group 'nnmail-split :type '(choice (const :tag "none" nil) (regexp :value ".*") @@ -223,6 +225,7 @@ From header will be expired to the group \"nnfolder:Work\"; articles containing the sting \"IMPORTANT\" in the Subject header will be expired to the group \"nnfolder:IMPORTANT.YYYY.MMM\"; and everything else will be expired to \"nnfolder:Archive-YYYY\"." + :version "22.1" :group 'nnmail-expire :type '(repeat (list (choice :tag "Match against" (string :tag "Header") @@ -351,6 +354,7 @@ discarded after running the split process." (defcustom nnmail-spool-hook nil "*A hook called when a new article is spooled." + :version "22.1" :group 'nnmail :type 'hook) @@ -365,14 +369,14 @@ messages will be shown to indicate the current status." (define-widget 'nnmail-lazy 'default "Base widget for recursive datastructures. -This is copy of the `lazy' widget in Emacs 21.4 provided for compatibility." +This is copy of the `lazy' widget in Emacs 22.1 provided for compatibility." :format "%{%t%}: %v" :convert-widget 'widget-value-convert-widget :value-create (lambda (widget) (let ((value (widget-get widget :value)) (type (widget-get widget :type))) - (widget-put widget :children - (list (widget-create-child-value + (widget-put widget :children + (list (widget-create-child-value widget (widget-convert type) value))))) :value-delete 'widget-children-value-delete :value-get (lambda (widget) @@ -404,7 +408,7 @@ This is copy of the `lazy' widget in Emacs 21.4 provided for compatibility." (list :tag "Function with fixed arguments (:)" :value (:) (const :format "" :value :) - function + function (editable-list :inline t (sexp :tag "Arg")) ) (list :tag "Function with split arguments (!)" @@ -412,11 +416,11 @@ This is copy of the `lazy' widget in Emacs 21.4 provided for compatibility." (const :format "" !) function (editable-list :inline t nnmail-split-fancy)) - (list :tag "Field match" - (choice :tag "Field" + (list :tag "Field match" + (choice :tag "Field" regexp symbol) (choice :tag "Match" - regexp + regexp (symbol :value mail)) (repeat :inline t :tag "Restrictions" @@ -549,7 +553,7 @@ parameter. It should return nil, `warn' or `delete'." :group 'nnmail :type '(repeat symbol)) -(defcustom nnmail-split-header-length-limit 512 +(defcustom nnmail-split-header-length-limit 2048 "Header lines longer than this limit are excluded from the split function." :version "21.1" :group 'nnmail @@ -557,11 +561,13 @@ parameter. It should return nil, `warn' or `delete'." (defcustom nnmail-mail-splitting-charset nil "Default charset to be used when splitting incoming mail." + :version "22.1" :group 'nnmail :type 'symbol) (defcustom nnmail-mail-splitting-decodes nil "Whether the nnmail splitting functionality should MIME decode headers." + :version "22.1" :group 'nnmail :type 'boolean) @@ -571,6 +577,15 @@ Normally, regexes given in `nnmail-split-fancy' are implicitly surrounded by \"\\=\\<...\\>\". If this variable is true, they are not implicitly\ surrounded by anything." + :version "22.1" + :group 'nnmail + :type 'boolean) + +(defcustom nnmail-split-lowercase-expanded t + "Whether to lowercase expanded entries (i.e. \\N) when splitting mails. +This avoids the creation of multiple groups when users send to an address +using different case (i.e. mailing-list@domain vs Mailing-List@Domain)." + :version "22.1" :group 'nnmail :type 'boolean) @@ -1464,7 +1479,10 @@ See the documentation for the variable `nnmail-split-fancy' for details." (setq N 0) (setq N (- c ?0))) (when (match-beginning N) - (push (buffer-substring (match-beginning N) (match-end N)) + (push (if nnmail-split-lowercase-expanded + (downcase (buffer-substring (match-beginning N) + (match-end N))) + (buffer-substring (match-beginning N) (match-end N))) expanded)))) (setq pos (1+ pos))) (if did-expand @@ -1557,7 +1575,7 @@ See the documentation for the variable `nnmail-split-fancy' for details." (when (stringp id) ;; this will handle cases like `B r' where the group is nil (let ((grp (or grp gnus-newsgroup-name "UNKNOWN"))) - (run-hook-with-args 'nnmail-spool-hook + (run-hook-with-args 'nnmail-spool-hook id grp subject sender)) (when nnmail-treat-duplicates ;; Store some information about the group this message is written @@ -1580,7 +1598,7 @@ See the documentation for the variable `nnmail-split-fancy' for details." (unless (and regexp (string-match regexp grp)) (insert id "\t" grp "\n"))) (insert id "\n")))))) - + (defun nnmail-cache-primary-mail-backend () (let ((be-list (cons gnus-select-method gnus-secondary-select-methods)) (be nil) @@ -1951,14 +1969,12 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (with-output-to-temp-buffer "*nnmail split history*" (with-current-buffer standard-output (fundamental-mode)) ; for Emacs 20.4+ - (let ((history nnmail-split-history) - elem) - (while (setq elem (pop history)) + (dolist (elem nnmail-split-history) (princ (mapconcat (lambda (ga) (concat (car ga) ":" (int-to-string (cdr ga)))) elem ", ")) - (princ "\n"))))) + (princ "\n")))) (defun nnmail-purge-split-history (group) "Remove all instances of GROUP from `nnmail-split-history'." @@ -1991,4 +2007,5 @@ Doesn't change point." (provide 'nnmail) +;;; arch-tag: fe8f671a-50db-428a-bb5d-f00462f72ed7 ;;; nnmail.el ends here diff --git a/lisp/nnmaildir.el b/lisp/nnmaildir.el index bd498a5..b4c799e 100644 --- a/lisp/nnmaildir.el +++ b/lisp/nnmaildir.el @@ -41,6 +41,8 @@ ;; copying, restoring, etc. ;; ;; Todo: +;; * When moving an article for expiry, copy all the marks except 'expire +;; from the original article. ;; * Add a hook for when moving messages from new/ to cur/, to support ;; nnmail's duplicate detection. ;; * Improve generated Xrefs, so crossposts are detectable. @@ -54,6 +56,7 @@ (put 'nnmaildir--with-work-buffer 'lisp-indent-function 0) (put 'nnmaildir--with-nov-buffer 'lisp-indent-function 0) (put 'nnmaildir--with-move-buffer 'lisp-indent-function 0) + (put 'nnmaildir--condcase 'lisp-indent-function 2) ) ] @@ -302,9 +305,18 @@ by nnmaildir-request-article.") (setq pos (match-end 0)))) string) +(defmacro nnmaildir--condcase (errsym body &rest handler) + `(condition-case ,errsym + (let ((system-messages-locale "C")) ,body) + (error . ,handler))) + (defun nnmaildir--emlink-p (err) (and (eq (car err) 'file-error) - (string= (caddr err) "too many links"))) + (string= (downcase (caddr err)) "too many links"))) + +(defun nnmaildir--enoent-p (err) + (and (eq (car err) 'file-error) + (string= (downcase (caddr err)) "no such file or directory"))) (defun nnmaildir--eexist-p (err) (eq (car err) 'file-already-exists)) @@ -336,21 +348,20 @@ by nnmaildir-request-article.") ;; and failed. (signal 'error `("Corrupt internal nnmaildir data" ,path-open))) (setq path-link (concat numdir (number-to-string number-link))) - (condition-case err + (nnmaildir--condcase err (progn (add-name-to-file path-open path-link) (throw 'return number-link)) - (error - (cond - ((nnmaildir--emlink-p err) - (setq make-new-file t - number-open number-link)) - ((nnmaildir--eexist-p err) - (let ((attr (file-attributes path-link))) - (if (/= (nth 10 attr) ino-open) - (setq number-open number-link - number-link 0)))) - (t (signal (car err) (cdr err)))))))))) + (cond + ((nnmaildir--emlink-p err) + (setq make-new-file t + number-open number-link)) + ((nnmaildir--eexist-p err) + (let ((attr (file-attributes path-link))) + (if (/= (nth 10 attr) ino-open) + (setq number-open number-link + number-link 0)))) + (t (signal (car err) (cdr err))))))))) (defun nnmaildir--update-nov (server group article) (let ((nnheader-file-coding-system 'binary) @@ -1019,7 +1030,7 @@ by nnmaildir-request-article.") (throw 'return nil)) (when (save-match-data (string-match "[\0/\t]" gname)) (setf (nnmaildir--srv-error nnmaildir--cur-server) - (concat "Illegal characters (null, tab, or /) in group name: " + (concat "Invalid characters (null, tab, or /) in group name: " gname)) (throw 'return nil)) (setq groups (nnmaildir--srv-groups nnmaildir--cur-server)) @@ -1064,7 +1075,7 @@ by nnmaildir-request-article.") (throw 'return nil)) (when (save-match-data (string-match "[\0/\t]" new-name)) (setf (nnmaildir--srv-error nnmaildir--cur-server) - (concat "Illegal characters (null, tab, or /) in group name: " + (concat "Invalid characters (null, tab, or /) in group name: " new-name)) (throw 'return nil)) (if (string-equal gname new-name) (throw 'return t)) @@ -1294,7 +1305,7 @@ by nnmaildir-request-article.") t))) (defun nnmaildir-request-move-article (article gname server accept-form - &optional last) + &optional last move-is-internal) (let ((group (nnmaildir--prepare server gname)) pgname suffix result nnmaildir--file deactivate-mark) (catch 'return @@ -1379,13 +1390,12 @@ by nnmaildir-request-article.") nnmaildir--cur-server) "24-hour timer expired") (throw 'return nil)))) - (condition-case nil - (add-name-to-file nnmaildir--file tmpfile) + (condition-case nil (add-name-to-file nnmaildir--file tmpfile) (error (write-region (point-min) (point-max) tmpfile nil 'no-message nil 'excl) (unix-sync))) ;; no fsync :( - (cancel-timer 24h) + (nnheader-cancel-timer 24h) (condition-case err (add-name-to-file tmpfile curfile) (error @@ -1510,7 +1520,12 @@ by nnmaildir-request-article.") (not (string-equal target pgname))) ;; Move it. (erase-buffer) (nnheader-insert-file-contents nnmaildir--file) - (gnus-request-accept-article target nil nil 'no-encode)) + (let ((group-art (gnus-request-accept-article + target nil nil 'no-encode))) + (when (consp group-art) + ;; Maybe also copy: dormant forward reply save tick + ;; (gnus-add-mark? gnus-request-set-mark?) + (gnus-group-mark-article-read target (cdr group-art))))) (if (equal target pgname) ;; Leave it here. (setq didnt (cons (nnmaildir--art-num article) didnt)) @@ -1540,22 +1555,19 @@ by nnmaildir-request-article.") (setq mdir (nnmaildir--subdir marksdir (symbol-name mark)) permarkfile (concat mdir ":") mfile (concat mdir (nnmaildir--art-prefix article))) - (condition-case err - (add-name-to-file permarkfile mfile) - (error - (cond - ((nnmaildir--eexist-p err)) - ((and (eq (car err) 'file-error) - (string= (caddr err) "no such file or directory")) - (nnmaildir--mkdir mdir) - (nnmaildir--mkfile permarkfile) - (add-name-to-file permarkfile mfile)) - ((nnmaildir--emlink-p err) - (let ((permarkfilenew (concat permarkfile "{new}"))) - (nnmaildir--mkfile permarkfilenew) - (rename-file permarkfilenew permarkfile 'replace) - (add-name-to-file permarkfile mfile))) - (t (signal (car err) (cdr err))))))) + (nnmaildir--condcase err (add-name-to-file permarkfile mfile) + (cond + ((nnmaildir--eexist-p err)) + ((nnmaildir--enoent-p err) + (nnmaildir--mkdir mdir) + (nnmaildir--mkfile permarkfile) + (add-name-to-file permarkfile mfile)) + ((nnmaildir--emlink-p err) + (let ((permarkfilenew (concat permarkfile "{new}"))) + (nnmaildir--mkfile permarkfilenew) + (rename-file permarkfilenew permarkfile 'replace) + (add-name-to-file permarkfile mfile))) + (t (signal (car err) (cdr err)))))) todo-marks)) set-action (lambda (article) (funcall add-action) @@ -1668,4 +1680,5 @@ by nnmaildir-request-article.") ;; fill-column: 77 ;; End: +;;; arch-tag: 0c4e44cd-dfde-4040-888e-5597ec771849 ;;; nnmaildir.el ends here diff --git a/lisp/nnmbox.el b/lisp/nnmbox.el index 8afd19a..93172b7 100644 --- a/lisp/nnmbox.el +++ b/lisp/nnmbox.el @@ -284,7 +284,7 @@ (nconc rest articles)))) (deffoo nnmbox-request-move-article - (article group server accept-form &optional last) + (article group server accept-form &optional last move-is-internal) (let ((buf (get-buffer-create " *nnmbox move*")) result) (and @@ -695,4 +695,5 @@ (provide 'nnmbox) +;;; arch-tag: 611dd95f-be37-413a-b3ae-8b059ba93659 ;;; nnmbox.el ends here diff --git a/lisp/nnmh.el b/lisp/nnmh.el index 4542443..7bc5221 100644 --- a/lisp/nnmh.el +++ b/lisp/nnmh.el @@ -211,7 +211,6 @@ as unread by Gnus.") (setq dir (expand-file-name dir)) ;; Recurse down all directories. (let ((dirs (and (file-readable-p dir) - (> (nth 1 (file-attributes (file-chase-links dir))) 2) (nnheader-directory-files dir t nil t))) rdir) ;; Recurse down directories. @@ -289,8 +288,8 @@ as unread by Gnus.") (deffoo nnmh-close-group (group &optional server) t) -(deffoo nnmh-request-move-article (article group server - accept-form &optional last) +(deffoo nnmh-request-move-article (article group server accept-form + &optional last move-is-internal) (let ((buf (get-buffer-create " *nnmh move*")) result) (and @@ -578,4 +577,5 @@ as unread by Gnus.") (provide 'nnmh) +;;; arch-tag: 36c12a98-3bad-44b3-9953-628078ef0e04 ;;; nnmh.el ends here diff --git a/lisp/nnml.el b/lisp/nnml.el index 8083de6..b99f47b 100644 --- a/lisp/nnml.el +++ b/lisp/nnml.el @@ -335,7 +335,7 @@ marks file will be regenerated properly by Gnus.") (nconc rest articles))) (deffoo nnml-request-move-article - (article group server accept-form &optional last) + (article group server accept-form &optional last move-is-internal) (let ((buf (get-buffer-create " *nnml move*")) result) (nnml-possibly-change-directory group server) @@ -445,10 +445,8 @@ marks file will be regenerated properly by Gnus.") nnml-current-directory t (concat nnheader-numerical-short-files "\\|" (regexp-quote nnml-nov-file-name) "$" - "\\|" (regexp-quote nnml-marks-file-name) "$"))) - article) - (while articles - (setq article (pop articles)) + "\\|" (regexp-quote nnml-marks-file-name) "$")))) + (dolist (article articles) (when (file-writable-p article) (nnheader-message 5 "Deleting article %s in %s..." article group) (funcall nnmail-delete-file-function article)))) @@ -473,12 +471,10 @@ marks file will be regenerated properly by Gnus.") ;; We move the articles file by file instead of renaming ;; the directory -- there may be subgroups in this group. ;; One might be more clever, I guess. - (let ((files (nnheader-article-to-file-alist old-dir))) - (while files - (rename-file - (concat old-dir (cdar files)) - (concat new-dir (cdar files))) - (pop files))) + (dolist (file (nnheader-article-to-file-alist old-dir)) + (rename-file + (concat old-dir (cdr file)) + (concat new-dir (cdr file)))) ;; Move .overview file. (let ((overview (concat old-dir nnml-nov-file-name))) (when (file-exists-p overview) @@ -770,12 +766,10 @@ marks file will be regenerated properly by Gnus.") (unless (member (file-truename dir) seen) (push (file-truename dir) seen) ;; We descend recursively - (let ((dirs (directory-files dir t nil t)) - dir) - (while (setq dir (pop dirs)) - (when (and (not (string-match "^\\." (file-name-nondirectory dir))) - (file-directory-p dir)) - (nnml-generate-nov-databases-1 dir seen)))) + (dolist (dir (directory-files dir t nil t)) + (when (and (not (string-match "^\\." (file-name-nondirectory dir))) + (file-directory-p dir)) + (nnml-generate-nov-databases-1 dir seen))) ;; Do this directory. (let ((files (sort (nnheader-article-to-file-alist dir) 'car-less-than-car))) @@ -802,9 +796,7 @@ marks file will be regenerated properly by Gnus.") (push (list group (cons (or (caar files) (1+ last)) (max last - (or (let ((f files)) - (while (cdr f) (setq f (cdr f))) - (caar f)) + (or (caar (last files)) 0)))) nnml-group-alist))) @@ -1018,4 +1010,5 @@ Use the nov database for the current group if available." (provide 'nnml) +;;; arch-tag: 52c97dc3-9735-45de-b439-9e4d23b52004 ;;; nnml.el ends here diff --git a/lisp/nnnil.el b/lisp/nnnil.el index 9e26160..88e471f 100644 --- a/lisp/nnnil.el +++ b/lisp/nnnil.el @@ -77,3 +77,5 @@ nil) (provide 'nnnil) + +;;; arch-tag: a982a1a3-bc5e-4fb1-a233-d7657a3e3257 diff --git a/lisp/nnoo.el b/lisp/nnoo.el index bb7704f..0fd980e 100644 --- a/lisp/nnoo.el +++ b/lisp/nnoo.el @@ -320,4 +320,5 @@ All functions will return nil and report an error." (provide 'nnoo) +;;; arch-tag: 0196b5ed-6f34-4778-a455-73a971f837e7 ;;; nnoo.el ends here diff --git a/lisp/nnrss.el b/lisp/nnrss.el index 0662862..cfe0e4b 100644 --- a/lisp/nnrss.el +++ b/lisp/nnrss.el @@ -1,5 +1,5 @@ ;;; nnrss.el --- interfacing with RSS -;; Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +;; Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: RSS @@ -36,9 +36,11 @@ (require 'time-date) (require 'rfc2231) (require 'mm-url) +(require 'rfc2047) +(require 'mml) (eval-when-compile (ignore-errors - (require 'xml))) + (require 'xml))) (eval '(require 'xml)) (nnoo-declare nnrss) @@ -78,11 +80,29 @@ The arguments are (ENTRY GROUP ARTICLE). ENTRY is the record of the current headline. GROUP is the group name. ARTICLE is the article number of the current headline.") +(defvar nnrss-file-coding-system mm-universal-coding-system + "Coding system used when reading and writing files.") + +(defvar nnrss-compatible-encoding-alist '((iso-8859-1 . windows-1252)) + "Alist of encodings and those supersets. +The cdr of each element is used to decode data if it is available when +the car is what the data specify as the encoding. Or, the car is used +for decoding when the cdr that the data specify is not available.") + (nnoo-define-basics nnrss) ;;; Interface functions +(defsubst nnrss-format-string (string) + (gnus-replace-in-string string " *\n *" " ")) + +(defun nnrss-decode-group-name (group) + (if (and group (mm-coding-system-p 'utf-8)) + (setq group (mm-decode-coding-string group 'utf-8)) + group)) + (deffoo nnrss-retrieve-headers (articles &optional group server fetch-old) + (setq group (nnrss-decode-group-name group)) (nnrss-possibly-change-group group server) (let (e) (save-excursion @@ -91,21 +111,26 @@ ARTICLE is the article number of the current headline.") (dolist (article articles) (if (setq e (assq article nnrss-group-data)) (insert (number-to-string (car e)) "\t" ;; number - (if (nth 3 e) - (nnrss-format-string (nth 3 e)) "") - "\t" ;; subject - (if (nth 4 e) - (nnrss-format-string (nth 4 e)) - "(nobody)") - "\t" ;;from + ;; subject + (or (nth 3 e) "") + "\t" + ;; from + (or (nth 4 e) "(nobody)") + "\t" + ;; date (or (nth 5 e) "") - "\t" ;; date + "\t" + ;; id (format "<%d@%s.nnrss>" (car e) group) - "\t" ;; id - "\t" ;; refs - "-1" "\t" ;; chars - "-1" "\t" ;; lines - "" "\t" ;; Xref + "\t" + ;; refs + "\t" + ;; chars + "-1" "\t" + ;; lines + "-1" "\t" + ;; Xref + "" "\t" (if (and (nth 6 e) (memq nnrss-description-field nnmail-extra-headers)) @@ -126,69 +151,110 @@ ARTICLE is the article number of the current headline.") 'nov) (deffoo nnrss-request-group (group &optional server dont-check) + (setq group (nnrss-decode-group-name group)) + (nnheader-message 6 "nnrss: Requesting %s..." group) (nnrss-possibly-change-group group server) - (if dont-check - t - (nnrss-check-group group server) - (nnheader-report 'nnrss "Opened group %s" group) - (nnheader-insert - "211 %d %d %d %s\n" nnrss-group-max nnrss-group-min nnrss-group-max - (prin1-to-string group) - t))) + (prog1 + (if dont-check + t + (nnrss-check-group group server) + (nnheader-report 'nnrss "Opened group %s" group) + (nnheader-insert + "211 %d %d %d %s\n" nnrss-group-max nnrss-group-min nnrss-group-max + (prin1-to-string group) + t)) + (nnheader-message 6 "nnrss: Requesting %s...done" group))) (deffoo nnrss-close-group (group &optional server) t) (deffoo nnrss-request-article (article &optional group server buffer) + (setq group (nnrss-decode-group-name group)) + (when (stringp article) + (setq article (if (string-match "\\`<\\([0-9]+\\)@" article) + (string-to-number (match-string 1 article)) + 0))) (nnrss-possibly-change-group group server) (let ((e (assq article nnrss-group-data)) - (boundary "=-=-=-=-=-=-=-=-=-") (nntp-server-buffer (or buffer nntp-server-buffer)) post err) (when e - (catch 'error - (with-current-buffer nntp-server-buffer - (erase-buffer) - (goto-char (point-min)) - (insert "Mime-Version: 1.0\nContent-Type: multipart/alternative; boundary=\"" boundary "\"\n") - (if group - (insert "Newsgroups: " group "\n")) - (if (nth 3 e) - (insert "Subject: " (nnrss-format-string (nth 3 e)) "\n")) - (if (nth 4 e) - (insert "From: " (nnrss-format-string (nth 4 e)) "\n")) - (if (nth 5 e) - (insert "Date: " (nnrss-format-string (nth 5 e)) "\n")) - (insert "Message-ID: " (format "<%d@%s.nnrss>" (car e) group) "\n") - (insert "\n") - (let ((text (if (nth 6 e) - (nnrss-string-as-multibyte (nth 6 e)))) - (link (if (nth 2 e) - (nth 2 e)))) - (insert "\n\n--" boundary "\nContent-Type: text/plain\n\n") - (let ((point (point))) - (when text - (insert text) - (goto-char point) - (while (re-search-forward "\n" nil t) - (replace-match " ")) - (goto-char (point-max)) - (insert "\n\n")) - (when link - (insert link))) - (insert "\n\n--" boundary "\nContent-Type: text/html\n\n") - (let ((point (point))) - (when text - (insert "\n" text "\n") - (goto-char point) - (while (re-search-forward "\n" nil t) - (replace-match " ")) - (goto-char (point-max)) - (insert "\n\n")) - (when link - (insert "

    link

    \n")))) - (when nnrss-content-function - (funcall nnrss-content-function e group article))))) + (with-current-buffer nntp-server-buffer + (erase-buffer) + (if group + (insert "Newsgroups: " group "\n")) + (if (nth 3 e) + (insert "Subject: " (nth 3 e) "\n")) + (if (nth 4 e) + (insert "From: " (nth 4 e) "\n")) + (if (nth 5 e) + (insert "Date: " (nnrss-format-string (nth 5 e)) "\n")) + (let ((header (buffer-string)) + (text (if (nth 6 e) + (mapconcat 'identity + (delete "" (split-string (nth 6 e) "\n+")) + " "))) + (link (nth 2 e)) + (enclosure (nth 7 e)) + ;; Enable encoding of Newsgroups header in XEmacs. + (default-enable-multibyte-characters t) + (rfc2047-header-encoding-alist + (if (mm-coding-system-p 'utf-8) + (cons '("Newsgroups" . utf-8) + rfc2047-header-encoding-alist) + rfc2047-header-encoding-alist)) + rfc2047-encode-encoded-words body) + (when (or text link enclosure) + (insert "\n") + (insert "<#multipart type=alternative>\n" + "<#part type=\"text/plain\">\n") + (setq body (point)) + (when text + (insert text "\n") + (when (or link enclosure) + (insert "\n"))) + (when link + (insert link "\n")) + (when enclosure + (insert (car enclosure) " " + (nth 2 enclosure) " " + (nth 3 enclosure) "\n")) + (setq body (buffer-substring body (point))) + (insert "<#/part>\n" + "<#part type=\"text/html\">\n" + "\n") + (when text + (insert text "\n")) + (when link + (insert "

    link

    \n")) + (when enclosure + (insert "

    " + (cadr enclosure) " " (nth 2 enclosure) + " " (nth 3 enclosure) "

    \n")) + (insert "\n" + "<#/part>\n" + "<#/multipart>\n")) + (condition-case nil + (mml-to-mime) + (error + (erase-buffer) + (insert header + "Content-Type: text/plain; charset=gnus-decoded\n" + "Content-Transfer-Encoding: 8bit\n\n" + body) + (nnheader-message + 3 "Warning - there might be invalid characters")))) + (goto-char (point-min)) + (search-forward "\n\n") + (forward-line -1) + (insert (format "Message-ID: <%d@%s.nnrss>\n" + (car e) + (let ((rfc2047-encoding-type 'mime) + rfc2047-encode-max-chars) + (rfc2047-encode-string + (gnus-replace-in-string group "[\t\n ]+" "_"))))) + (when nnrss-content-function + (funcall nnrss-content-function e group article)))) (cond (err (nnheader-report 'nnrss err)) @@ -211,6 +277,7 @@ ARTICLE is the article number of the current headline.") (deffoo nnrss-request-expire-articles (articles group &optional server force) + (setq group (nnrss-decode-group-name group)) (nnrss-possibly-change-group group server) (let (e days not-expirable changed) (dolist (art articles) @@ -228,12 +295,18 @@ ARTICLE is the article number of the current headline.") not-expirable)) (deffoo nnrss-request-delete-group (group &optional force server) + (setq group (nnrss-decode-group-name group)) (nnrss-possibly-change-group group server) + (let (elem) + ;; There may be two or more entries in `nnrss-group-alist' since + ;; this function didn't delete them formerly. + (while (setq elem (assoc group nnrss-group-alist)) + (setq nnrss-group-alist (delq elem nnrss-group-alist)))) (setq nnrss-server-data (delq (assoc group nnrss-server-data) nnrss-server-data)) (nnrss-save-server-data server) (ignore-errors - (delete-file (nnrss-make-filename group server))) + (delete-file (nnrss-make-filename group server))) t) (deffoo nnrss-request-list-newsgroups (&optional server) @@ -250,34 +323,67 @@ ARTICLE is the article number of the current headline.") ;;; Internal functions (eval-when-compile (defun xml-rpc-method-call (&rest args))) + +(defun nnrss-get-encoding () + "Return an encoding attribute specified in the current xml contents. +If `nnrss-compatible-encoding-alist' specifies the compatible encoding, +it is used instead. If the xml contents doesn't specify the encoding, +return `utf-8' which is the default encoding for xml if it is available, +otherwise return nil." + (goto-char (point-min)) + (if (re-search-forward + "<\\?[^>]*encoding=\\(?:\"\\([^\">]+\\)\"\\|'\\([^'>]+\\)'\\)" + nil t) + (let ((encoding (intern (downcase (or (match-string 1) + (match-string 2)))))) + (or + (mm-coding-system-p (cdr (assq encoding + nnrss-compatible-encoding-alist))) + (mm-coding-system-p encoding) + (mm-coding-system-p (car (rassq encoding + nnrss-compatible-encoding-alist))))) + (mm-coding-system-p 'utf-8))) + (defun nnrss-fetch (url &optional local) "Fetch URL and put it in a the expected Lisp structure." - (with-temp-buffer - ;some CVS versions of url.el need this to close the connection quickly - (let* (xmlform htmlform) + (mm-with-unibyte-buffer + ;;some CVS versions of url.el need this to close the connection quickly + (let (cs xmlform htmlform) ;; bit o' work necessary for w3 pre-cvs and post-cvs (if local (let ((coding-system-for-read 'binary)) (insert-file-contents url)) - (mm-url-insert url)) - -;; Because xml-parse-region can't deal with anything that isn't -;; xml and w3-parse-buffer can't deal with some xml, we have to -;; parse with xml-parse-region first and, if that fails, parse -;; with w3-parse-buffer. Yuck. Eventually, someone should find out -;; why w3-parse-buffer fails to parse some well-formed xml and -;; fix it. - - (condition-case err - (setq xmlform (xml-parse-region (point-min) (point-max))) - (error (if (fboundp 'w3-parse-buffer) - (setq htmlform (caddar (w3-parse-buffer - (current-buffer)))) - (message "nnrss: Not valid XML and w3 parse not available (%s)" - url)))) - (if htmlform - htmlform - xmlform)))) + ;; FIXME: shouldn't binding `coding-system-for-read' be moved + ;; to `mm-url-insert'? + (let ((coding-system-for-read 'binary)) + (mm-url-insert url))) + (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)) + (goto-char (point-min)) + + ;; Because xml-parse-region can't deal with anything that isn't + ;; xml and w3-parse-buffer can't deal with some xml, we have to + ;; parse with xml-parse-region first and, if that fails, parse + ;; with w3-parse-buffer. Yuck. Eventually, someone should find out + ;; why w3-parse-buffer fails to parse some well-formed xml and + ;; fix it. + + (condition-case err1 + (setq xmlform (xml-parse-region (point-min) (point-max))) + (error + (condition-case err2 + (setq htmlform (caddar (w3-parse-buffer + (current-buffer)))) + (error + (message "\ +nnrss: %s: Not valid XML %s and w3-parse doesn't work %s" + url err1 err2))))) + (if htmlform + htmlform + xmlform)))) (defun nnrss-possibly-change-group (&optional group server) (when (and server @@ -290,9 +396,8 @@ ARTICLE is the article number of the current headline.") (defvar nnrss-extra-categories '(nnrss-snarf-moreover-categories)) (defun nnrss-generate-active () - (if (y-or-n-p "Fetch extra categories? ") - (dolist (func nnrss-extra-categories) - (funcall func))) + (when (y-or-n-p "Fetch extra categories? ") + (mapc 'funcall nnrss-extra-categories)) (save-excursion (set-buffer nntp-server-buffer) (erase-buffer) @@ -308,14 +413,23 @@ ARTICLE is the article number of the current headline.") (setq nnrss-server-data nil) (let ((file (nnrss-make-filename "nnrss" server))) (when (file-exists-p file) - (let ((coding-system-for-read 'binary)) - (load file nil nil t))))) + ;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII + ;; file names. So, we use `insert-file-contents' instead. + (mm-with-multibyte-buffer + (let ((coding-system-for-read nnrss-file-coding-system) + (file-name-coding-system nnmail-pathname-coding-system)) + (insert-file-contents file) + (eval-region (point-min) (point-max))))))) (defun nnrss-save-server-data (server) (gnus-make-directory nnrss-directory) - (let ((coding-system-for-write 'binary)) + (let ((coding-system-for-write nnrss-file-coding-system) + (file-name-coding-system nnmail-pathname-coding-system)) (with-temp-file (nnrss-make-filename "nnrss" server) + (insert (format ";; -*- coding: %s; -*-\n" + nnrss-file-coding-system)) (gnus-prin1 `(setq nnrss-group-alist ',nnrss-group-alist)) + (insert "\n") (gnus-prin1 `(setq nnrss-server-data ',nnrss-server-data))))) (defun nnrss-read-group-data (group server) @@ -328,10 +442,15 @@ ARTICLE is the article number of the current headline.") (setq nnrss-group-min (+ nnrss-group-max 1))) (let ((file (nnrss-make-filename group server))) (when (file-exists-p file) - (let ((coding-system-for-read 'binary)) - (load file nil t t)) + ;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII + ;; file names. So, we use `insert-file-contents' instead. + (mm-with-multibyte-buffer + (let ((coding-system-for-read nnrss-file-coding-system) + (file-name-coding-system nnmail-pathname-coding-system)) + (insert-file-contents file) + (eval-region (point-min) (point-max)))) (dolist (e nnrss-group-data) - (puthash (or (nth 2 e) (nth 3 e)) t nnrss-group-hashtb) + (puthash (or (nth 2 e) (nth 6 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))) @@ -339,8 +458,11 @@ ARTICLE is the article number of the current headline.") (defun nnrss-save-group-data (group server) (gnus-make-directory nnrss-directory) - (let ((coding-system-for-write 'binary)) + (let ((coding-system-for-write nnrss-file-coding-system) + (file-name-coding-system nnmail-pathname-coding-system)) (with-temp-file (nnrss-make-filename group server) + (insert (format ";; -*- coding: %s; -*-\n" + nnrss-file-coding-system)) (gnus-prin1 `(setq nnrss-group-data ',nnrss-group-data))))) (defun nnrss-make-filename (name server) @@ -372,24 +494,41 @@ ARTICLE is the article number of the current headline.") (mm-with-unibyte-current-buffer (mm-url-insert url))) -(defun nnrss-decode-entities-unibyte-string (string) +(defun nnrss-decode-entities-string (string) (if string - (mm-with-unibyte-buffer + (mm-with-multibyte-buffer (insert string) (mm-url-decode-entities-nbsp) (buffer-string)))) (defalias 'nnrss-insert 'nnrss-insert-w3) -(if (featurep 'xemacs) - (defalias 'nnrss-string-as-multibyte 'identity) - (defalias 'nnrss-string-as-multibyte 'string-as-multibyte)) +(defun nnrss-mime-encode-string (string) + (mm-with-multibyte-buffer + (insert string) + (mm-url-decode-entities-nbsp) + (goto-char (point-min)) + (while (re-search-forward "[\t\n ]+" nil t) + (replace-match " ")) + (goto-char (point-min)) + (skip-chars-forward " ") + (delete-region (point-min) (point)) + (goto-char (point-max)) + (skip-chars-forward " ") + (delete-region (point) (point-max)) + (let ((rfc2047-encoding-type 'mime) + rfc2047-encode-max-chars) + (rfc2047-encode-region (point-min) (point-max))) + (goto-char (point-min)) + (while (search-forward "\n" nil t) + (delete-backward-char 1)) + (buffer-string))) ;;; Snarf functions (defun nnrss-check-group (group server) - (let (file xml subject url extra changed author - date rss-ns rdf-ns content-ns dc-ns) + (let (file xml subject url extra changed author date + enclosure rss-ns rdf-ns content-ns dc-ns) (if (and nnrss-use-local (file-exists-p (setq file (expand-file-name (nnrss-translate-file-chars @@ -400,11 +539,11 @@ ARTICLE is the article number of the current headline.") (second (assoc group nnrss-group-alist)))) (unless url (setq url - (cdr - (assoc 'href - (nnrss-discover-feed - (read-string - (format "URL to search for %s: " group) "http://"))))) + (cdr + (assoc 'href + (nnrss-discover-feed + (read-string + (format "URL to search for %s: " group) "http://"))))) (let ((pair (assoc group nnrss-server-data))) (if pair (setcdr (cdr pair) (list url)) @@ -421,13 +560,15 @@ ARTICLE is the article number of the current headline.") (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-unibyte-string + (if (setq url (nnrss-decode-entities-string (nnrss-node-text rss-ns 'link (cddr item)))) (not (gethash url nnrss-group-hashtb)) - (setq subject (nnrss-node-text rss-ns 'title item)) - (not (gethash subject nnrss-group-hashtb)))) - (setq subject (or subject (nnrss-node-text rss-ns 'title item))) - (setq extra (or (nnrss-node-text content-ns 'encoded item) + (setq extra (or (nnrss-node-text content-ns 'encoded item) + (nnrss-node-text rss-ns 'description item))) + (not (gethash extra nnrss-group-hashtb)))) + (setq subject (nnrss-node-text rss-ns 'title item)) + (setq extra (or extra + (nnrss-node-text content-ns 'encoded item) (nnrss-node-text rss-ns 'description item))) (setq author (or (nnrss-node-text rss-ns 'author item) (nnrss-node-text dc-ns 'creator item) @@ -435,19 +576,41 @@ ARTICLE is the article number of the current headline.") (setq date (or (nnrss-node-text dc-ns 'date item) (nnrss-node-text rss-ns 'pubDate item) (message-make-date))) + (when (setq enclosure (cadr (assq (intern (concat rss-ns "enclosure")) item))) + (let ((url (cdr (assq 'url enclosure))) + (len (cdr (assq 'length enclosure))) + (type (cdr (assq 'type enclosure))) + (name)) + (setq len + (if (and len (integerp (setq len (string-to-number len)))) + ;; actually already in `ls-lisp-format-file-size' but + ;; probably not worth to require it for one function + (do ((size (/ len 1.0) (/ size 1024.0)) + (post-fixes (list "" "k" "M" "G" "T" "P" "E") + (cdr post-fixes))) + ((< size 1024) + (format "%.1f%s" size (car post-fixes)))) + "0")) + (setq url (or url "")) + (setq name (if (string-match "/\\([^/]*\\)$" url) + (match-string 1 url) + "file")) + (setq type (or type "")) + (setq enclosure (list url name len type)))) (push (list (incf nnrss-group-max) (current-time) url - (and subject (nnrss-decode-entities-unibyte-string subject)) - (and author (nnrss-decode-entities-unibyte-string author)) + (and subject (nnrss-mime-encode-string subject)) + (and author (nnrss-mime-encode-string author)) date - (and extra (nnrss-decode-entities-unibyte-string extra))) + (and extra (nnrss-decode-entities-string extra)) + enclosure) nnrss-group-data) - (puthash (or url subject) t nnrss-group-hashtb) + (puthash (or url extra) t nnrss-group-hashtb) (setq changed t)) - (setq subject nil)) + (setq extra nil)) (when changed (nnrss-save-group-data group server) (let ((pair (assoc group nnrss-server-data))) @@ -462,12 +625,12 @@ Read the file and attempt to subscribe to each Feed in the file." (interactive "fImport file: ") (mapcar (lambda (node) (gnus-group-make-rss-group - (cdr (assq 'xmlUrl (cadr node))))) + (cdr (assq 'xmlUrl (cadr node))))) (nnrss-find-el 'outline - (progn - (find-file opml-file) - (xml-parse-region (point-min) - (point-max)))))) + (progn + (find-file opml-file) + (xml-parse-region (point-min) + (point-max)))))) (defun nnrss-opml-export () "OPML subscription export. @@ -475,26 +638,22 @@ Export subscriptions to a buffer in OPML Format." (interactive) (with-current-buffer (get-buffer-create "*OPML Export*") (mm-set-buffer-file-coding-system 'utf-8) - (insert (concat - "\n" - "\n" - "\n" - " \n" - " mySubscriptions\n" - " " (format-time-string "%a, %d %b %Y %T %z") - "\n" - " " user-mail-address "\n" - " " (user-full-name) "\n" - " \n" - " \n")) - (mapc (lambda (sub) - (insert (concat - " \n"))) - nnrss-group-alist) - (insert (concat - " \n" - "\n"))) + (insert "\n" + "\n" + "\n" + " \n" + " mySubscriptions\n" + " " (format-time-string "%a, %d %b %Y %T %z") + "\n" + " " user-mail-address "\n" + " " (user-full-name) "\n" + " \n" + " \n") + (dolist (sub nnrss-group-alist) + (insert " \n")) + (insert " \n" + "\n")) (pop-to-buffer "*OPML Export*") (when (fboundp 'sgml-mode) (sgml-mode))) @@ -545,17 +704,17 @@ It is useful when `(setq nnrss-use-local t)'." (if changed (nnrss-save-server-data "")))) -(defun nnrss-format-string (string) - (gnus-replace-in-string (nnrss-string-as-multibyte string) " *\n *" " ")) - (defun nnrss-node-text (namespace local-name element) (let* ((node (assq (intern (concat namespace (symbol-name local-name))) element)) (text (if (and node (listp node)) (nnrss-node-just-text node) node)) - (cleaned-text (if text (gnus-replace-in-string - text "^[\000-\037\177]+\\|^ +\\| +$" "")))) + (cleaned-text (if text + (gnus-replace-in-string + (gnus-replace-in-string + text "^[\000-\037\177]+\\|^ +\\| +$" "") + "\r\n" "\n")))) (if (string-equal "" cleaned-text) nil cleaned-text))) @@ -568,24 +727,27 @@ It is useful when `(setq nnrss-use-local t)'." (defun nnrss-find-el (tag data &optional found-list) "Find the all matching elements in the data. Careful with this on large documents!" - (when (listp data) - (mapc (lambda (bit) - (when (car-safe bit) - (when (equal tag (car bit)) - (setq found-list - (append found-list - (list bit)))) - (if (and (listp (car-safe (caddr bit))) - (not (stringp (caddr bit)))) - (setq found-list - (append found-list - (nnrss-find-el - tag (caddr bit)))) - (setq found-list - (append found-list - (nnrss-find-el - tag (cddr bit))))))) - data)) + (when (consp data) + (dolist (bit data) + (when (car-safe bit) + (when (equal tag (car bit)) + ;; Old xml.el may return a list of string. + (when (and (consp (caddr bit)) + (stringp (caaddr bit))) + (setcar (cddr bit) (caaddr bit))) + (setq found-list + (append found-list + (list bit)))) + (if (and (consp (car-safe (caddr bit))) + (not (stringp (caddr bit)))) + (setq found-list + (append found-list + (nnrss-find-el + tag (caddr bit)))) + (setq found-list + (append found-list + (nnrss-find-el + tag (cddr bit)))))))) found-list) (defun nnrss-rsslink-p (el) @@ -611,12 +773,11 @@ DATA should be the output of `xml-parse-region' or (cdr (assoc 'href (cadr ahref)))) (nnrss-find-el 'a data))) -(defmacro nnrss-match-macro (base-uri item - onsite-list offsite-list) +(defmacro nnrss-match-macro (base-uri item onsite-list offsite-list) `(cond ((or (string-match (concat "^" ,base-uri) ,item) - (not (string-match "://" ,item))) - (setq ,onsite-list (append ,onsite-list (list ,item)))) - (t (setq ,offsite-list (append ,offsite-list (list ,item)))))) + (not (string-match "://" ,item))) + (setq ,onsite-list (append ,onsite-list (list ,item)))) + (t (setq ,offsite-list (append ,offsite-list (list ,item)))))) (defun nnrss-order-hrefs (base-uri hrefs) "Given a list of hrefs, sort them using the following priorities: @@ -632,27 +793,26 @@ whether they are `offsite' or `onsite'." rss-onsite-in rdf-onsite-in xml-onsite-in rss-offsite-end rdf-offsite-end xml-offsite-end rss-offsite-in rdf-offsite-in xml-offsite-in) - (mapc (lambda (href) - (if (not (null href)) - (cond ((string-match "\\.rss$" href) - (nnrss-match-macro - base-uri href rss-onsite-end rss-offsite-end)) - ((string-match "\\.rdf$" href) - (nnrss-match-macro - base-uri href rdf-onsite-end rdf-offsite-end)) - ((string-match "\\.xml$" href) - (nnrss-match-macro - base-uri href xml-onsite-end xml-offsite-end)) - ((string-match "rss" href) - (nnrss-match-macro - base-uri href rss-onsite-in rss-offsite-in)) - ((string-match "rdf" href) - (nnrss-match-macro - base-uri href rdf-onsite-in rdf-offsite-in)) - ((string-match "xml" href) - (nnrss-match-macro - base-uri href xml-onsite-in xml-offsite-in))))) - hrefs) + (dolist (href hrefs) + (cond ((null href)) + ((string-match "\\.rss$" href) + (nnrss-match-macro + base-uri href rss-onsite-end rss-offsite-end)) + ((string-match "\\.rdf$" href) + (nnrss-match-macro + base-uri href rdf-onsite-end rdf-offsite-end)) + ((string-match "\\.xml$" href) + (nnrss-match-macro + base-uri href xml-onsite-end xml-offsite-end)) + ((string-match "rss" href) + (nnrss-match-macro + base-uri href rss-onsite-in rss-offsite-in)) + ((string-match "rdf" href) + (nnrss-match-macro + base-uri href rdf-onsite-in rdf-offsite-in)) + ((string-match "xml" href) + (nnrss-match-macro + base-uri href xml-onsite-in xml-offsite-in)))) (append rss-onsite-end rdf-onsite-end xml-onsite-end rss-onsite-in rdf-onsite-in xml-onsite-in @@ -689,17 +849,17 @@ whether they are `offsite' or `onsite'." (hrefs (nnrss-order-hrefs base-uri (nnrss-extract-hrefs parsed-page))) (rss-link nil)) - (while (and (eq rss-link nil) (not (eq hrefs nil))) - (let ((href-data (nnrss-fetch (car hrefs)))) - (if (nnrss-rss-p href-data) - (let* ((rss-ns (nnrss-get-namespace-prefix href-data "http://purl.org/rss/1.0/"))) - (setq rss-link (nnrss-rss-title-description - rss-ns href-data (car hrefs)))) - (setq hrefs (cdr hrefs))))) - (if rss-link rss-link + (while (and (eq rss-link nil) (not (eq hrefs nil))) + (let ((href-data (nnrss-fetch (car hrefs)))) + (if (nnrss-rss-p href-data) + (let* ((rss-ns (nnrss-get-namespace-prefix href-data "http://purl.org/rss/1.0/"))) + (setq rss-link (nnrss-rss-title-description + rss-ns href-data (car hrefs)))) + (setq hrefs (cdr hrefs))))) + (if rss-link rss-link ;; 4. check syndic8 - (nnrss-find-rss-via-syndic8 url)))))))) + (nnrss-find-rss-via-syndic8 url)))))))) (defun nnrss-find-rss-via-syndic8 (url) "Query syndic8 for the rss feeds it has for URL." @@ -786,3 +946,4 @@ prefix), return the prefix." ;;; nnrss.el ends here +;;; arch-tag: 12910c07-0cdf-44fb-8d2c-416ded64c267 diff --git a/lisp/nnslashdot.el b/lisp/nnslashdot.el index 5fe81fb..e203de4 100644 --- a/lisp/nnslashdot.el +++ b/lisp/nnslashdot.el @@ -1,5 +1,6 @@ ;;; nnslashdot.el --- interfacing with Slashdot -;; Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -253,8 +254,7 @@ (when (numberp article) (if (= article 1) (progn - (re-search-forward - "Posted by") + (search-forward "Posted by") (search-forward "
    ") (setq contents (buffer-substring @@ -468,11 +468,9 @@ (insert-file-contents file) (goto-char (point-min)) (setq nnslashdot-groups (read (current-buffer)))) - (if (and nnslashdot-groups (< (length (car nnslashdot-groups)) 5)) - (let ((groups nnslashdot-groups)) - (while groups - (nnslashdot-make-tuple (car groups) 5) - (setq groups (cdr groups)))))))) + (when (and nnslashdot-groups (< (length (car nnslashdot-groups)) 5)) + (dolist (group nnslashdot-groups) + (nnslashdot-make-tuple group 5)))))) (defun nnslashdot-write-groups () (with-temp-file (expand-file-name "groups" nnslashdot-directory) @@ -514,4 +512,5 @@ (provide 'nnslashdot) +;;; arch-tag: aa73df7a-f7e6-4eef-bdea-5ce2f8c691b3 ;;; nnslashdot.el ends here diff --git a/lisp/nnsoup.el b/lisp/nnsoup.el index 009a1d3..fa24abe 100644 --- a/lisp/nnsoup.el +++ b/lisp/nnsoup.el @@ -369,9 +369,7 @@ backend for the messages.") entry e min max) (while (setq e (cdr (setq entry (pop alist)))) (setq min (caaar e)) - (while (cdr e) - (setq e (cdr e))) - (setq max (cdar (car e))) + (setq max (cdar (car (last e)))) (setcdr entry (cons (cons min max) (cdr entry))))) (setq nnsoup-group-alist-touched t)) nnsoup-group-alist)) @@ -556,9 +554,8 @@ backend for the messages.") (defun nnsoup-unpack-packets () "Unpack all packets in `nnsoup-packet-directory'." (let ((packets (directory-files - nnsoup-packet-directory t nnsoup-packet-regexp)) - packet) - (while (setq packet (pop packets)) + nnsoup-packet-directory t nnsoup-packet-regexp))) + (dolist (packet packets) (nnheader-message 5 "nnsoup: unpacking %s..." packet) (if (not (gnus-soup-unpack-packet nnsoup-tmp-directory nnsoup-unpacker packet)) @@ -757,20 +754,18 @@ backend for the messages.") (string-to-int (match-string 1 f2))))))) active group lines ident elem min) (set-buffer (get-buffer-create " *nnsoup work*")) - (while files - (nnheader-message 5 "Doing %s..." (car files)) + (dolist (file files) + (nnheader-message 5 "Doing %s..." file) (erase-buffer) - (nnheader-insert-file-contents (car files)) + (nnheader-insert-file-contents file) (goto-char (point-min)) (if (not (re-search-forward "^[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t *\\(Xref: \\)? *[^ ]* \\([^ ]+\\):[0-9]" nil t)) (setq group "unknown") (setq group (match-string 2))) (setq lines (count-lines (point-min) (point-max))) (setq ident (progn (string-match - "/\\([0-9]+\\)\\." (car files)) - (substring - (car files) (match-beginning 1) - (match-end 1)))) + "/\\([0-9]+\\)\\." file) + (match-string 1 file))) (if (not (setq elem (assoc group active))) (push (list group (cons 1 lines) (list (cons 1 lines) @@ -781,8 +776,7 @@ backend for the messages.") (list (cons (1+ (setq min (cdadr elem))) (+ min lines)) (vector ident group "ucm" "" lines)))) - (setcdr (cadr elem) (+ min lines))) - (setq files (cdr files))) + (setcdr (cadr elem) (+ min lines)))) (nnheader-message 5 "") (setq nnsoup-group-alist active) (nnsoup-write-active-file t))) @@ -799,9 +793,9 @@ backend for the messages.") nnsoup-group-alist))) (regexp "\\.MSG$\\|\\.IDX$") (files (directory-files nnsoup-directory nil regexp)) - non-files file) + non-files) ;; Find all files that aren't known by nnsoup. - (while (setq file (pop files)) + (dolist (file files) (string-match regexp file) (unless (member (substring file 0 (match-beginning 0)) known) (push file non-files))) @@ -814,4 +808,5 @@ backend for the messages.") (provide 'nnsoup) +;;; arch-tag: b0451389-5703-4450-9425-f66f6b38c828 ;;; nnsoup.el ends here diff --git a/lisp/nnspool.el b/lisp/nnspool.el index cafc796..004b875 100644 --- a/lisp/nnspool.el +++ b/lisp/nnspool.el @@ -44,7 +44,10 @@ This is most commonly `inews' or `injnews'.") "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/") @@ -248,8 +251,7 @@ there.") (if dir (nnheader-insert "211 %d %d %d %s\n" (length dir) (car dir) - (progn (while (cdr dir) (setq dir (cdr dir))) (car dir)) - group) + (car (last dir)) group) (nnheader-report 'nnspool "Empty group %s" group) (nnheader-insert "211 0 0 0 %s\n" group)))))) @@ -308,9 +310,8 @@ there.") groups) (zerop (forward-line -1)))) (erase-buffer) - (while groups - (insert (car groups) " 0 0 y\n") - (setq groups (cdr groups)))) + (dolist (group groups) + (insert group " 0 0 y\n"))) t) nil)) @@ -397,8 +398,7 @@ there.") (<= last (car arts))) (pop arts)) ;; The articles in `arts' are missing from the buffer. - (while arts - (nnspool-insert-nov-head (pop arts))) + (mapc 'nnspool-insert-nov-head arts) t)))))))))) (defun nnspool-insert-nov-head (article) @@ -418,8 +418,7 @@ there.") (defun nnspool-sift-nov-with-sed (articles file) (let ((first (car articles)) - (last (progn (while (cdr articles) (setq articles (cdr articles))) - (car articles)))) + (last (car (last articles)))) (call-process "awk" nil t nil (format "BEGIN {firstmsg=%d; lastmsg=%d;}\n $1 >= firstmsg && $1 <= lastmsg {print;}" (1- first) (1+ last)) @@ -428,16 +427,12 @@ there.") ;; Fixed by fdc@cliwe.ping.de (Frank D. Cringle). ;; Find out what group an article identified by a Message-ID is in. (defun nnspool-find-id (id) - (save-excursion - (set-buffer (get-buffer-create " *nnspool work*")) - (erase-buffer) + (with-temp-buffer (ignore-errors (call-process "grep" nil t nil (regexp-quote id) nnspool-history-file)) (goto-char (point-min)) - (prog1 - (when (looking-at "<[^>]+>[ \t]+[-0-9~]+[ \t]+\\([^ /\t\n]+\\)/\\([0-9]+\\)[ \t\n]") - (cons (match-string 1) (string-to-int (match-string 2)))) - (kill-buffer (current-buffer))))) + (when (looking-at "<[^>]+>[ \t]+[-0-9~]+[ \t]+\\([^ /\t\n]+\\)/\\([0-9]+\\)[ \t\n]") + (cons (match-string 1) (string-to-int (match-string 2)))))) (defun nnspool-find-file (file) "Insert FILE in server buffer safely." @@ -464,4 +459,5 @@ there.") (provide 'nnspool) +;;; arch-tag: bdac8d27-2934-4eee-bad0-49e6b90c0d05 ;;; nnspool.el ends here diff --git a/lisp/nntp.el b/lisp/nntp.el index b23c334..bd8591c 100644 --- a/lisp/nntp.el +++ b/lisp/nntp.el @@ -29,11 +29,16 @@ (require 'nnheader) (require 'nnoo) (require 'gnus-util) +(require 'gnus) (nnoo-declare nntp) (eval-when-compile (require 'cl)) +(defgroup nntp nil + "NNTP access for Gnus." + :group 'gnus) + (defvoo nntp-address nil "Address of the physical nntp server.") @@ -189,8 +194,24 @@ server there that you can connect to. See also (defvoo nntp-coding-system-for-write 'binary "*Coding system to write to NNTP.") +;; Marks +(defvoo nntp-marks-is-evil nil + "*If non-nil, Gnus will never generate and use marks file for nntp groups. +See `nnml-marks-is-evil' for more information.") + +(defvoo nntp-marks-file-name ".marks") +(defvoo nntp-marks nil) +(defvar nntp-marks-modtime (gnus-make-hashtable)) + +(defcustom nntp-marks-directory + (nnheader-concat gnus-directory "marks/") + "*The directory where marks for nntp groups will be stored." + :group 'gnus + :type 'directory) + (defcustom nntp-authinfo-file "~/.authinfo" ".netrc-like file that holds nntp authinfo passwords." + :group 'nntp :type '(choice file (repeat :tag "Entries" @@ -1009,6 +1030,54 @@ command whose response triggered the error." (deffoo nntp-asynchronous-p () t) +(deffoo nntp-request-set-mark (group actions &optional server) + (unless nntp-marks-is-evil + (nntp-possibly-create-directory group server) + (nntp-open-marks group server) + (dolist (action actions) + (let ((range (nth 0 action)) + (what (nth 1 action)) + (marks (nth 2 action))) + (assert (or (eq what 'add) (eq what 'del)) nil + "Unknown request-set-mark action: %s" what) + (dolist (mark marks) + (setq nntp-marks (gnus-update-alist-soft + mark + (funcall (if (eq what 'add) 'gnus-range-add + 'gnus-remove-from-range) + (cdr (assoc mark nntp-marks)) range) + nntp-marks))))) + (nntp-save-marks group server)) + nil) + +(deffoo nntp-request-update-info (group info &optional server) + (unless nntp-marks-is-evil + (nntp-possibly-create-directory group server) + (when (nntp-marks-changed-p group server) + (nnheader-message 8 "Updating marks for %s..." group) + (nntp-open-marks group server) + ;; Update info using `nntp-marks'. + (mapc (lambda (pred) + (unless (memq (cdr pred) gnus-article-unpropagated-mark-lists) + (gnus-info-set-marks + info + (gnus-update-alist-soft + (cdr pred) + (cdr (assq (cdr pred) nntp-marks)) + (gnus-info-marks info)) + t))) + gnus-article-mark-lists) + (let ((seen (cdr (assq 'read nntp-marks)))) + (gnus-info-set-read info + (if (and (integerp (car seen)) + (null (cdr seen))) + (list (cons (car seen) (car seen))) + seen))) + (nnheader-message 8 "Updating marks for %s...done" group))) + nil) + + + ;;; Hooky functions. (defun nntp-send-mode-reader () @@ -1026,11 +1095,11 @@ and a password. If SEND-IF-FORCE, only send authinfo to the server if the .authinfo file has the FORCE token." - (let* ((list (gnus-parse-netrc nntp-authinfo-file)) - (alist (gnus-netrc-machine list nntp-address "nntp")) - (force (gnus-netrc-get alist "force")) - (user (or (gnus-netrc-get alist "login") nntp-authinfo-user)) - (passwd (gnus-netrc-get alist "password"))) + (let* ((list (netrc-parse nntp-authinfo-file)) + (alist (netrc-machine list nntp-address "nntp")) + (force (netrc-get alist "force")) + (user (or (netrc-get alist "login") nntp-authinfo-user)) + (passwd (netrc-get alist "password"))) (when (or (not send-if-force) force) (unless user @@ -1183,12 +1252,9 @@ password contained in '~/.nntp-authinfo'." "Find out what the name of the server we have connected to is." ;; Wait for the status string to arrive. (setq nntp-server-type (buffer-string)) - (let ((alist nntp-server-action-alist) - (case-fold-search t) - entry) + (let ((case-fold-search t)) ;; Run server-specific commands. - (while alist - (setq entry (pop alist)) + (dolist (entry nntp-server-action-alist) (when (string-match (car entry) nntp-server-type) (if (and (listp (cadr entry)) (not (eq 'lambda (caadr entry)))) @@ -1906,6 +1972,82 @@ Please refer to the following variables to customize the connection: (delete-region (point) (point-max))) proc))) +;; Marks handling + +(defun nntp-marks-directory (server) + (expand-file-name server nntp-marks-directory)) + +(defun nntp-possibly-create-directory (group server) + (let ((dir (nnmail-group-pathname + group (nntp-marks-directory server)))) + (unless (file-exists-p dir) + (make-directory (directory-file-name dir) t) + (nnheader-message 5 "Creating nntp marks directory %s" dir)))) + +(autoload 'time-less-p "time-date") + +(defun nntp-marks-changed-p (group server) + (let ((file (expand-file-name + nntp-marks-file-name + (nnmail-group-pathname + group (nntp-marks-directory server))))) + (if (null (gnus-gethash file nntp-marks-modtime)) + t ;; never looked at marks file, assume it has changed + (time-less-p (gnus-gethash file nntp-marks-modtime) + (nth 5 (file-attributes file)))))) + +(defun nntp-save-marks (group server) + (let ((file-name-coding-system nnmail-pathname-coding-system) + (file (expand-file-name + nntp-marks-file-name + (nnmail-group-pathname + group (nntp-marks-directory server))))) + (condition-case err + (progn + (nntp-possibly-create-directory group server) + (with-temp-file file + (erase-buffer) + (gnus-prin1 nntp-marks) + (insert "\n")) + (gnus-sethash file + (nth 5 (file-attributes file)) + nntp-marks-modtime)) + (error (or (gnus-yes-or-no-p + (format "Could not write to %s (%s). Continue? " file err)) + (error "Cannot write to %s (%s)" file err)))))) + +(defun nntp-open-marks (group server) + (let ((file (expand-file-name + nntp-marks-file-name + (nnmail-group-pathname + group (nntp-marks-directory server))))) + (if (file-exists-p file) + (condition-case err + (with-temp-buffer + (gnus-sethash file (nth 5 (file-attributes file)) + nntp-marks-modtime) + (nnheader-insert-file-contents file) + (setq nntp-marks (read (current-buffer))) + (dolist (el gnus-article-unpropagated-mark-lists) + (setq nntp-marks (gnus-remassoc el nntp-marks)))) + (error (or (gnus-yes-or-no-p + (format "Error reading nntp marks file %s (%s). Continuing will use marks from .newsrc.eld. Continue? " file err)) + (error "Cannot read nntp marks file %s (%s)" file err)))) + ;; User didn't have a .marks file. Probably first time + ;; user of the .marks stuff. Bootstrap it from .newsrc.eld. + (let ((info (gnus-get-info + (gnus-group-prefixed-name + group + (gnus-server-to-method (format "nntp:%s" server)))))) + (nnheader-message 7 "Bootstrapping marks for %s..." group) + (setq nntp-marks (gnus-info-marks info)) + (push (cons 'read (gnus-info-read info)) nntp-marks) + (dolist (el gnus-article-unpropagated-mark-lists) + (setq nntp-marks (gnus-remassoc el nntp-marks))) + (nntp-save-marks group server) + (nnheader-message 7 "Bootstrapping marks for %s...done" group))))) + (provide 'nntp) +;;; arch-tag: 8655466a-b1b5-4929-9c45-7b1b2e767271 ;;; nntp.el ends here diff --git a/lisp/nnultimate.el b/lisp/nnultimate.el index bab703b..42fbc13 100644 --- a/lisp/nnultimate.el +++ b/lisp/nnultimate.el @@ -39,6 +39,7 @@ (require 'mm-util) (require 'mm-url) (require 'nnweb) +(require 'parse-time) (autoload 'w3-parse-buffer "w3-parse") (nnoo-declare nnultimate) @@ -476,4 +477,5 @@ ;; coding: iso-8859-1 ;; End: +;;; arch-tag: ab6bfc45-8fe1-4647-9c78-41050eb152b8 ;;; nnultimate.el ends here diff --git a/lisp/nnvirtual.el b/lisp/nnvirtual.el index 6657369..c63ab8b 100644 --- a/lisp/nnvirtual.el +++ b/lisp/nnvirtual.el @@ -383,14 +383,11 @@ component group will show up when you enter the virtual group.") (defun nnvirtual-convert-headers () "Convert HEAD headers into NOV headers." - (save-excursion - (set-buffer nntp-server-buffer) + (with-current-buffer nntp-server-buffer (let* ((dependencies (make-vector 100 0)) - (headers (gnus-get-newsgroup-headers dependencies)) - header) + (headers (gnus-get-newsgroup-headers dependencies))) (erase-buffer) - (while (setq header (pop headers)) - (nnheader-insert-nov header))))) + (mapc 'nnheader-insert-nov headers)))) (defun nnvirtual-update-xref-header (group article prefix system-name) @@ -464,7 +461,7 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components." (nnvirtual-partition-sequence (cdr ml))))) (gnus-info-marks (gnus-get-info (nnvirtual-current-group)))))) - mark type groups carticles info entry) + type groups info) ;; Ok, atomically move all of the (un)read info, clear any old ;; marks, and move all of the current marks. This way if someone @@ -473,13 +470,12 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components." ;; move (un)read ;; bind for workaround guns-update-read-articles (let ((gnus-newsgroup-active nil)) - (while (setq entry (pop unreads)) + (dolist (entry unreads) (gnus-update-read-articles (car entry) (cdr entry)))) ;; clear all existing marks on the component groups - (setq groups nnvirtual-component-groups) - (while groups - (when (and (setq info (gnus-get-info (pop groups))) + (dolist (group nnvirtual-component-groups) + (when (and (setq info (gnus-get-info group)) (gnus-info-marks info)) (gnus-info-set-marks info @@ -490,18 +486,17 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components." ;; Ok, currently type-marks is an assq list with keys of a mark type, ;; with data of an assq list with keys of component group names ;; and the articles which correspond to that key/group pair. - (while (setq mark (pop type-marks)) + (dolist (mark type-marks) (setq type (car mark)) (setq groups (cdr mark)) - (while (setq carticles (pop groups)) + (dolist (carticles groups) (gnus-add-marked-articles (car carticles) type (cdr carticles) nil t)))) ;; possibly update the display, it is really slow (when update-p - (setq groups nnvirtual-component-groups) - (while groups - (gnus-group-update-group (pop groups) t)))))) + (dolist (group nnvirtual-component-groups) + (gnus-group-update-group group t)))))) (defun nnvirtual-current-group () @@ -783,10 +778,9 @@ based on the marks on the component groups." ;; Remove any empty marks lists, and store. (setq nnvirtual-mapping-marks nil) - (while marks - (if (cdr (car marks)) - (push (car marks) nnvirtual-mapping-marks)) - (setq marks (cdr marks))) + (dolist (mark marks) + (when (cdr mark) + (push mark nnvirtual-mapping-marks))) ;; We need to convert the unreads to reads. We compress the ;; sequence as we go, otherwise it could be huge. @@ -817,4 +811,5 @@ based on the marks on the component groups." (provide 'nnvirtual) +;;; arch-tag: ca8c8ad9-1bd8-4b0f-9722-90dc645a45f5 ;;; nnvirtual.el ends here diff --git a/lisp/nnwarchive.el b/lisp/nnwarchive.el index f20e5ac..a9d0d51 100644 --- a/lisp/nnwarchive.el +++ b/lisp/nnwarchive.el @@ -723,4 +723,5 @@ (provide 'nnwarchive) +;;; arch-tag: 1ab7a15c-777a-40e0-95c0-0c41b3963578 ;;; nnwarchive.el ends here diff --git a/lisp/nnweb.el b/lisp/nnweb.el index 85d03d5..d5f7f13 100644 --- a/lisp/nnweb.el +++ b/lisp/nnweb.el @@ -1,5 +1,5 @@ ;;; nnweb.el --- retrieving articles via web search engines -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -54,11 +54,12 @@ Valid types include `google', `dejanews', and `gmane'.") (defvar nnweb-type-definition '((google (article . ignore) - (id . "http://groups.google.com/groups?selm=%s&output=gplain") + (id . "http://groups.google.de/groups?selm=%s&output=gplain") (reference . identity) (map . nnweb-google-create-mapping) (search . nnweb-google-search) - (address . "http://groups.google.com/groups") + (address . "http://groups.google.de/groups") + (base . "http://groups.google.de") (identifier . nnweb-google-identity)) (dejanews ;; alias of google (article . ignore) @@ -67,6 +68,7 @@ Valid types include `google', `dejanews', and `gmane'.") (map . nnweb-google-create-mapping) (search . nnweb-google-search) (address . "http://groups.google.com/groups") + (base . "http://groups.google.com") (identifier . nnweb-google-identity)) (gmane (article . nnweb-gmane-wash-article) @@ -349,7 +351,7 @@ Valid types include `google', `dejanews', and `gmane'.") "a href=/groups\\(\\?[^ \">]*selm=\\([^ &\">]+\\)\\)" nil t) (setq mid (match-string 2) url (format - "http://groups.google.com/groups?selm=%s&output=gplain" mid)) + (nnweb-definition 'id) mid)) (narrow-to-region (search-forward ">" nil t) (search-forward "" nil t)) (mm-url-remove-markup) @@ -420,7 +422,7 @@ Valid types include `google', `dejanews', and `gmane'.") (>= i nnweb-max-hits)) (setq more nil) ;; Yup, there are more articles - (setq more (concat "http://groups.google.com" (match-string 1))) + (setq more (concat (nnweb-definition 'base) (match-string 1))) (when more (erase-buffer) (mm-url-insert more)))) @@ -435,9 +437,9 @@ Valid types include `google', `dejanews', and `gmane'.") "?" (mm-url-encode-www-form-urlencoded `(("q" . ,search) - ("num". "100") + ("num" . "100") ("hq" . "") - ("hl" . "") + ("hl" . "en") ("lr" . "") ("safe" . "off") ("sites" . "groups"))))) @@ -489,7 +491,7 @@ Valid types include `google', `dejanews', and `gmane'.") (defun nnweb-gmane-wash-article () (let ((case-fold-search t)) (goto-char (point-min)) - (re-search-forward "" nil t) + (search-forward "" nil t) (delete-region (point-min) (point)) (goto-char (point-min)) (while (looking-at "^
  • \\([^ ]+\\).*
  • ") @@ -587,4 +589,5 @@ Valid types include `google', `dejanews', and `gmane'.") (provide 'nnweb) +;;; arch-tag: f59307eb-c90f-479f-b7d2-dbd8bf51b697 ;;; nnweb.el ends here diff --git a/lisp/nnwfm.el b/lisp/nnwfm.el index 318cb88..d42730c 100644 --- a/lisp/nnwfm.el +++ b/lisp/nnwfm.el @@ -428,4 +428,5 @@ ;; coding: iso-8859-1 ;; End: +;;; arch-tag: d813966a-4211-4557-ad11-d1ac2bc86536 ;;; nnwfm.el ends here diff --git a/lisp/ntlm.el b/lisp/ntlm.el index 84522c5..e57d3b6 100644 --- a/lisp/ntlm.el +++ b/lisp/ntlm.el @@ -533,4 +533,5 @@ into a Unicode string. PASSWD is truncated to 128 bytes if longer." (provide 'ntlm) +;;; arch-tag: 348ace18-f8e2-4176-8fe9-d9ab4e96f296 ;;; ntlm.el ends here diff --git a/lisp/parse-time.el b/lisp/parse-time.el index 34dd3fd..b847048 100644 --- a/lisp/parse-time.el +++ b/lisp/parse-time.el @@ -211,4 +211,5 @@ unknown are returned as nil." (provide 'parse-time) +;;; arch-tag: 07066094-45a8-4c68-b307-86195e2c1103 ;;; parse-time.el ends here diff --git a/lisp/password.el b/lisp/password.el index 4683a9c..7d10192 100644 --- a/lisp/password.el +++ b/lisp/password.el @@ -35,7 +35,14 @@ ;; ;; (password-cache-add "test" "foo") ;; => nil -;; + +;; Note the previous two can be replaced with: +;; (password-read-and-add "Password? " "test") +;; ;; Minibuffer prompt for password. +;; => "foo" +;; ;; "foo" is now cached with key "test" + + ;; (password-read "Password? " "test") ;; ;; No minibuffer prompt ;; => "foo" @@ -53,7 +60,7 @@ ;;; Code: (when (featurep 'xemacs) - (require 'run-at-time)) + (require 'timer-funcs)) (eval-when-compile (require 'cl)) @@ -83,6 +90,15 @@ The variable `password-cache' control whether the cache is used." (symbol-value (intern-soft key password-data))) (read-passwd prompt))) +(defun password-read-and-add (prompt &optional key) + "Read password, for use with KEY, from user, or from cache if wanted. +Then store the password in the cache. Uses `password-read' and +`password-cache-add'." + (let ((password (password-read prompt key))) + (when (and password key) + (password-cache-add key password)) + password)) + (defun password-cache-remove (key) "Remove password indexed by KEY from password cache. This is typically run be a timer setup from `password-cache-add', @@ -99,13 +115,14 @@ user again." "Add password to cache. The password is removed by a timer after `password-cache-expiry' seconds." - (set (intern key password-data) password) - (when password-cache-expiry + (when (and password-cache-expiry (null (intern-soft key password-data))) (run-at-time password-cache-expiry nil #'password-cache-remove key)) + (set (intern key password-data) password) nil) (provide 'password) +;;; arch-tag: ab160494-16c8-4c68-a4a1-73eebf6686e5 ;;; password.el ends here diff --git a/lisp/pgg-def.el b/lisp/pgg-def.el index 45dd5ab..d6cce0d 100644 --- a/lisp/pgg-def.el +++ b/lisp/pgg-def.el @@ -27,7 +27,8 @@ (defgroup pgg () "Glue for the various PGP implementations." - :group 'mime) + :group 'mime + :version "22.1") (defcustom pgg-default-scheme 'gpg "Default PGP scheme." @@ -48,6 +49,7 @@ (defcustom pgg-query-keyserver nil "Whether PGG queries keyservers for missing keys when verifying messages." + :version "22.1" :group 'pgg :type 'boolean) @@ -85,4 +87,5 @@ Whether the passphrase is cached at all is controlled by (provide 'pgg-def) +;;; arch-tag: c425f3ab-ed75-4055-bb46-431a418c94b7 ;;; pgg-def.el ends here diff --git a/lisp/pgg-gpg.el b/lisp/pgg-gpg.el index d453abf..2b3e521 100644 --- a/lisp/pgg-gpg.el +++ b/lisp/pgg-gpg.el @@ -270,4 +270,5 @@ If optional argument SIGN is non-nil, do a combined sign and encrypt." (provide 'pgg-gpg) +;;; arch-tag: 2aa5d5d8-93a0-4865-9312-33e29830e000 ;;; pgg-gpg.el ends here diff --git a/lisp/pgg-parse.el b/lisp/pgg-parse.el index 9c2a3a4..dbdb0cb 100644 --- a/lisp/pgg-parse.el +++ b/lisp/pgg-parse.el @@ -510,4 +510,5 @@ (provide 'pgg-parse) +;;; arch-tag: 16c2eb82-1313-4a7c-a70f-420709b5b43e ;;; pgg-parse.el ends here diff --git a/lisp/pgg-pgp.el b/lisp/pgg-pgp.el index 4eb76ee..0d7dfac 100644 --- a/lisp/pgg-pgp.el +++ b/lisp/pgg-pgp.el @@ -148,14 +148,16 @@ Bourne shell or its equivalent \(not tcsh) is needed for \"2>\"." (defun pgg-pgp-decrypt-region (start end) "Decrypt the current region between START and END." (let* ((pgg-pgp-user-id (or pgg-pgp-user-id pgg-default-user-id)) + (key (pgg-pgp-lookup-key pgg-pgp-user-id 'encrypt)) (passphrase (pgg-read-passphrase - (format "PGP passphrase for %s: " pgg-pgp-user-id) - (pgg-pgp-lookup-key pgg-pgp-user-id 'encrypt))) + (format "PGP passphrase for %s: " pgg-pgp-user-id) key)) (args '("+verbose=1" "+batchmode" "+language=us" "-f"))) (pgg-pgp-process-region start end passphrase pgg-pgp-program args) - (pgg-process-when-success nil))) + (pgg-process-when-success + (if pgg-cache-passphrase + (pgg-add-passphrase-cache key passphrase))))) (defun pgg-pgp-sign-region (start end &optional clearsign) "Make detached signature from text between START and END." @@ -194,9 +196,11 @@ Bourne shell or its equivalent \(not tcsh) is needed for \"2>\"." jka-compr-compression-info-list jam-zcat-filename-list) (write-region start end orig-file))) (set-default-file-modes orig-mode)) - (when (stringp signature) - (copy-file signature (setq signature (concat orig-file ".asc"))) - (setq args (append args (list signature orig-file)))) + (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)))) (pgg-pgp-process-region (point)(point) nil pgg-pgp-program args) (delete-file orig-file) (if signature (delete-file signature)) @@ -236,4 +240,5 @@ Bourne shell or its equivalent \(not tcsh) is needed for \"2>\"." (provide 'pgg-pgp) +;;; arch-tag: 076b7801-37b2-49a6-97c3-218fdecde33c ;;; pgg-pgp.el ends here diff --git a/lisp/pgg-pgp5.el b/lisp/pgg-pgp5.el index c18671f..372cf48 100644 --- a/lisp/pgg-pgp5.el +++ b/lisp/pgg-pgp5.el @@ -1,6 +1,6 @@ ;;; pgg-pgp5.el --- PGP 5.* support for PGG. -;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/11/02 @@ -142,7 +142,7 @@ Bourne shell or its equivalent \(not tcsh) is needed for \"2>\"." (buffer-substring (match-end 0)(progn (end-of-line)(point))))) 2))))) -(defun pgg-pgp5-encrypt-region (start end recipients) +(defun pgg-pgp5-encrypt-region (start end recipients &optional sign) "Encrypt the current region between START and END." (let* ((pgg-pgp5-user-id (or pgg-pgp5-user-id pgg-default-user-id)) (args @@ -245,4 +245,5 @@ Bourne shell or its equivalent \(not tcsh) is needed for \"2>\"." (provide 'pgg-pgp5) +;;; arch-tag: 3dbd1073-6b3a-466c-9f55-5c587ffa6d7b ;;; pgg-pgp5.el ends here diff --git a/lisp/pgg.el b/lisp/pgg.el index 50dc3ea..abb49a9 100644 --- a/lisp/pgg.el +++ b/lisp/pgg.el @@ -376,4 +376,5 @@ within the region." (provide 'pgg) +;;; arch-tag: 9cc705dd-1e6a-4c90-8dce-c3561f9a2cf4 ;;; pgg.el ends here diff --git a/lisp/pop3.el b/lisp/pop3.el index 81d9f94..d3e6fea 100644 --- a/lisp/pop3.el +++ b/lisp/pop3.el @@ -1,6 +1,6 @@ ;;; pop3.el --- Post Office Protocol (RFC 1460) interface -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: Richard L. Pieri @@ -36,24 +36,64 @@ ;;; Code: (require 'mail-utils) -(require 'nnheader) -(defvar pop3-maildrop (or (user-login-name) (getenv "LOGNAME") (getenv "USER") nil) - "*POP3 maildrop.") -(defvar pop3-mailhost (or (getenv "MAILHOST") nil) - "*POP3 mailhost.") -(defvar pop3-port 110 - "*POP3 port.") - -(defvar pop3-password-required t - "*Non-nil if a password is required when connecting to POP server.") +(defgroup pop3 nil + "Post Office Protocol" + :group 'mail + :group 'mail-source) + +(defcustom pop3-maildrop (or (user-login-name) + (getenv "LOGNAME") + (getenv "USER")) + "*POP3 maildrop." + :version "22.1" ;; Oort Gnus + :type 'string + :group 'pop3) + +(defcustom pop3-mailhost (or (getenv "MAILHOST") ;; nil -> mismatch + "pop3") + "*POP3 mailhost." + :version "22.1" ;; Oort Gnus + :type 'string + :group 'pop3) + +(defcustom pop3-port 110 + "*POP3 port." + :version "22.1" ;; Oort Gnus + :type 'number + :group 'pop3) + +(defcustom pop3-password-required t + "*Non-nil if a password is required when connecting to POP server." + :version "22.1" ;; Oort Gnus + :type 'boolean + :group 'pop3) + +;; Should this be customizable? (defvar pop3-password nil "*Password to use when connecting to POP server.") -(defvar pop3-authentication-scheme 'pass +(defcustom pop3-authentication-scheme 'pass "*POP3 authentication scheme. Defaults to 'pass, for the standard USER/PASS authentication. Other valid -values are 'apop.") +values are 'apop." + :version "22.1" ;; Oort Gnus + :type '(choice (const :tag "USER/PASS" pass) + (const :tag "APOP" apop)) + :group 'pop3) + +(defcustom pop3-leave-mail-on-server nil + "*Non-nil if the mail is to be left on the POP server after fetching. + +If `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 "22.1" ;; Oort Gnus + :type 'boolean + :group 'pop3) (defvar pop3-timestamp nil "Timestamp returned when initially connected to the POP server. @@ -62,6 +102,32 @@ Used for APOP authentication.") (defvar pop3-read-point nil) (defvar pop3-debug nil) +;; Borrowed from nnheader-accept-process-output in nnheader.el. +(defvar pop3-read-timeout + (if (string-match "windows-nt\\|os/2\\|emx\\|cygwin" + (symbol-name system-type)) + ;; http://thread.gmane.org/v9655t3pjo.fsf@marauder.physik.uni-ulm.de + ;; + ;; IIRC, values lower than 1.0 didn't/don't work on Windows/DOS. + ;; + ;; There should probably be a runtime test to determine the timing + ;; resolution, or a primitive to report it. I don't know off-hand + ;; what's possible. Perhaps better, maybe the Windows/DOS primitive + ;; could round up non-zero timeouts to a minimum of 1.0? + 1.0 + 0.1) + "How long pop3 should wait between checking for the end of output. +Shorter values mean quicker response, but are more CPU intensive.") + +;; Borrowed from nnheader-accept-process-output in nnheader.el. +(defun pop3-accept-process-output (process) + (accept-process-output + process + (truncate pop3-read-timeout) + (truncate (* (- pop3-read-timeout + (truncate pop3-read-timeout)) + 1000)))) + (defun pop3-movemail (&optional crashbox) "Transfer contents of a maildrop to the specified CRASHBOX." (or crashbox (setq crashbox (expand-file-name "~/.crashbox"))) @@ -69,8 +135,7 @@ Used for APOP authentication.") (crashbuf (get-buffer-create " *pop3-retr*")) (n 1) message-count - (pop3-password pop3-password) - ) + (pop3-password pop3-password)) ;; for debugging only (if pop3-debug (switch-to-buffer (process-buffer process))) ;; query for password @@ -98,7 +163,8 @@ Used for APOP authentication.") (goto-char (point-min)) (forward-line 50) (delete-region (point-min) (point)))) - (pop3-dele process n) + (unless pop3-leave-mail-on-server + (pop3-dele process n)) (setq n (+ 1 n)) (if pop3-debug (sit-for 1) (sit-for 0.1)) ) @@ -111,8 +177,7 @@ Used for APOP authentication.") "Return the number of messages in the maildrop." (let* ((process (pop3-open-server pop3-mailhost pop3-port)) message-count - (pop3-password pop3-password) - ) + (pop3-password pop3-password)) ;; for debugging only (if pop3-debug (switch-to-buffer (process-buffer process))) ;; query for password @@ -156,15 +221,14 @@ Returns the process associated with the connection." (insert output))) (defun pop3-send-command (process command) - (set-buffer (process-buffer process)) - (goto-char (point-max)) -;; (if (= (aref command 0) ?P) -;; (insert "PASS \r\n") -;; (insert command "\r\n")) - (setq pop3-read-point (point)) - (goto-char (point-max)) - (process-send-string process (concat command "\r\n")) - ) + (set-buffer (process-buffer process)) + (goto-char (point-max)) + ;; (if (= (aref command 0) ?P) + ;; (insert "PASS \r\n") + ;; (insert command "\r\n")) + (setq pop3-read-point (point)) + (goto-char (point-max)) + (process-send-string process (concat command "\r\n"))) (defun pop3-read-response (process &optional return) "Read the response from the server. @@ -176,7 +240,7 @@ Return the response string if optional second argument is non-nil." (goto-char pop3-read-point) (while (and (memq (process-status process) '(open run)) (not (search-forward "\r\n" nil t))) - (nnheader-accept-process-output process) + (pop3-accept-process-output process) (goto-char pop3-read-point)) (setq match-end (point)) (goto-char pop3-read-point) @@ -334,29 +398,16 @@ This function currently does nothing.") (save-excursion (set-buffer (process-buffer process)) (while (not (re-search-forward "^\\.\r\n" nil t)) - ;; Fixme: Shouldn't depend on nnheader. - (nnheader-accept-process-output process) - ;; bill@att.com ... to save wear and tear on the heap - ;; uncommented because the condensed version below is a problem for - ;; some. - (if (> (buffer-size) 20000) (sleep-for 1)) - (if (> (buffer-size) 50000) (sleep-for 1)) - (if (> (buffer-size) 100000) (sleep-for 1)) - (if (> (buffer-size) 200000) (sleep-for 1)) - (if (> (buffer-size) 500000) (sleep-for 1)) - ;; bill@att.com - ;; condensed into: - ;; (sometimes causes problems for really large messages.) -; (if (> (buffer-size) 20000) (sleep-for (/ (buffer-size) 20000))) + (pop3-accept-process-output process) (goto-char start)) (setq pop3-read-point (point-marker)) -;; this code does not seem to work for some POP servers... -;; and I cannot figure out why not. -; (goto-char (match-beginning 0)) -; (backward-char 2) -; (if (not (looking-at "\r\n")) -; (insert "\r\n")) -; (re-search-forward "\\.\r\n") + ;; this code does not seem to work for some POP servers... + ;; and I cannot figure out why not. + ;; (goto-char (match-beginning 0)) + ;; (backward-char 2) + ;; (if (not (looking-at "\r\n")) + ;; (insert "\r\n")) + ;; (re-search-forward "\\.\r\n") (goto-char (match-beginning 0)) (setq end (point-marker)) (pop3-clean-region start end) @@ -486,4 +537,5 @@ and close the connection." (provide 'pop3) +;;; arch-tag: 2facc142-1d74-498e-82af-4659b64cac12 ;;; pop3.el ends here diff --git a/lisp/qp.el b/lisp/qp.el index f87ec66..1004abe 100644 --- a/lisp/qp.el +++ b/lisp/qp.el @@ -1,6 +1,7 @@ ;;; qp.el --- Quoted-Printable functions -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: mail, extensions @@ -100,20 +101,15 @@ You should probably avoid non-ASCII characters in this arg. If `mm-use-ultra-safe-encoding' is set, fold lines unconditionally and encode lines starting with \"From\"." (interactive "r") - (save-excursion - (goto-char from) - (if (fboundp 'string-to-multibyte) ; Emacs 22 - (if (re-search-forward (string-to-multibyte "[^\x0-\x7f\x80-\xff]") - to t) - ;; Fixme: This is somewhat misleading. - (error "Multibyte character in QP encoding region")) - (if (re-search-forward (mm-string-as-multibyte "[^\0-\377]") to t) - (error "Multibyte character in QP encoding region")))) (unless class ;; Avoid using 8bit characters. = is \075. ;; Equivalent to "^\000-\007\013\015-\037\200-\377=" (setq class "\010-\012\014\040-\074\076-\177")) (save-excursion + (goto-char from) + (if (re-search-forward (mm-string-to-multibyte "[^\x0-\x7f\x80-\xff]") + to t) + (error "Multibyte character in QP encoding region")) (save-restriction (narrow-to-region from to) ;; Encode all the non-ascii and control characters. @@ -168,4 +164,5 @@ encode lines starting with \"From\"." (provide 'qp) +;;; arch-tag: db89e52a-e4a1-4b69-926f-f434f04216ba ;;; qp.el ends here diff --git a/lisp/rfc1843.el b/lisp/rfc1843.el index b0b8f8e..f43bfc0 100644 --- a/lisp/rfc1843.el +++ b/lisp/rfc1843.el @@ -181,4 +181,5 @@ ftp://ftp.math.psu.edu/pub/simpson/chinese/hzp/hzp.doc" (provide 'rfc1843) +;;; arch-tag: 5149c301-a6ca-4731-9c9d-ba616e2cb687 ;;; rfc1843.el ends here diff --git a/lisp/rfc2045.el b/lisp/rfc2045.el index ba3116b..cd7cc4b 100644 --- a/lisp/rfc2045.el +++ b/lisp/rfc2045.el @@ -40,4 +40,5 @@ (provide 'rfc2045) +;;; arch-tag: 9ca54127-97bc-432c-b6e2-8c59cadba306 ;;; rfc2045.el ends here diff --git a/lisp/rfc2047.el b/lisp/rfc2047.el index 3b4cfda..c768ae0 100644 --- a/lisp/rfc2047.el +++ b/lisp/rfc2047.el @@ -1,5 +1,7 @@ ;;; rfc2047.el --- functions for encoding and decoding rfc2047 messages -;; Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. + +;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko @@ -33,6 +35,7 @@ (require 'qp) (require 'mm-util) +(require 'ietf-drums) ;; Fixme: Avoid this (used for mail-parse-charset) mm dependence on gnus. (require 'mail-prsvr) (require 'base64) @@ -42,7 +45,7 @@ '(("Newsgroups" . nil) ("Followup-To" . nil) ("Message-ID" . nil) - ("\\(Resent-\\)?\\(From\\|Cc\\|To\\|Bcc\\|Reply-To\\|Sender\ + ("\\(Resent-\\)?\\(From\\|Cc\\|To\\|Bcc\\|\\(In-\\)?Reply-To\\|Sender\ \\|Mail-Followup-To\\|Mail-Copies-To\\|Approved\\)" . address-mime) (t . mime)) "*Header/encoding method alist. @@ -87,12 +90,15 @@ The values can be: Valid encodings are nil, `Q' and `B'. These indicate binary (no) encoding, quoted-printable and base64 respectively.") -(defvar rfc2047-encoding-function-alist - '((Q . rfc2047-q-encode-region) - (B . rfc2047-b-encode-region) - (nil . ignore)) +(defvar rfc2047-encode-function-alist + '((Q . rfc2047-q-encode-string) + (B . rfc2047-b-encode-string) + (nil . identity)) "Alist of RFC2047 encodings to encoding functions.") +(defvar rfc2047-encode-encoded-words t + "Whether encoded words should be encoded again.") + ;;; ;;; Functions for encoding RFC2047 messages ;;; @@ -134,7 +140,7 @@ This is either `base64' or `quoted-printable'." (save-restriction (rfc2047-narrow-to-field) (re-search-forward ":[ \t\n]*" nil t) - (buffer-substring (point) (point-max))))) + (buffer-substring-no-properties (point) (point-max))))) (defvar rfc2047-encoding-type 'address-mime "The type of encoding done by `rfc2047-encode-region'. @@ -154,24 +160,25 @@ Should be called narrowed to the head of the message." (rfc2047-narrow-to-field) (if (not (rfc2047-encodable-p)) (prog1 - (if (and (eq (mm-body-7-or-8) '8bit) - (mm-multibyte-p) - (mm-coding-system-p - (car message-posting-charset))) - ;; 8 bit must be decoded. - (mm-encode-coding-region - (point-min) (point-max) - (mm-charset-to-coding-system - (car message-posting-charset)))) + (if (and (eq (mm-body-7-or-8) '8bit) + (mm-multibyte-p) + (mm-coding-system-p + (car message-posting-charset))) + ;; 8 bit must be decoded. + (mm-encode-coding-region + (point-min) (point-max) + (mm-charset-to-coding-system + (car message-posting-charset)))) ;; No encoding necessary, but folding is nice - (rfc2047-fold-region - (save-excursion - (goto-char (point-min)) - (skip-chars-forward "^:") - (when (looking-at ": ") - (forward-char 2)) - (point)) - (point-max))) + (when nil + (rfc2047-fold-region + (save-excursion + (goto-char (point-min)) + (skip-chars-forward "^:") + (when (looking-at ": ") + (forward-char 2)) + (point)) + (point-max)))) ;; We found something that may perhaps be encoded. (setq method nil alist rfc2047-header-encoding-alist) @@ -181,7 +188,6 @@ Should be called narrowed to the head of the message." (eq (car elem) t)) (setq alist nil method (cdr elem)))) - (goto-char (point-min)) (re-search-forward "^[^:]+: *" nil t) (cond ((eq method 'address-mime) @@ -235,8 +241,13 @@ The buffer may be narrowed." (require 'message) ; for message-posting-charset (let ((charsets (mm-find-mime-charset-region (point-min) (point-max)))) - (and charsets - (not (equal charsets (list (car message-posting-charset))))))) + (goto-char (point-min)) + (or (and rfc2047-encode-encoded-words + (prog1 + (search-forward "=?" nil t) + (goto-char (point-min)))) + (and charsets + (not (equal charsets (list (car message-posting-charset)))))))) ;; Use this syntax table when parsing into regions that may need ;; encoding. Double quotes are string delimiters, backslash is @@ -260,8 +271,8 @@ The buffer may be narrowed." table)))) (modify-syntax-entry ?\\ "\\" table) (modify-syntax-entry ?\" "\"" table) - (modify-syntax-entry ?\( "." table) - (modify-syntax-entry ?\) "." table) + (modify-syntax-entry ?\( "(" table) + (modify-syntax-entry ?\) ")" table) (modify-syntax-entry ?\< "." table) (modify-syntax-entry ?\> "." table) (modify-syntax-entry ?\[ "." table) @@ -278,183 +289,341 @@ By default, the region is treated as containing RFC2822 addresses. Dynamically bind `rfc2047-encoding-type' to change that." (save-restriction (narrow-to-region b e) - (if (eq 'mime rfc2047-encoding-type) - ;; Simple case. Treat as single word after any initial ASCII - ;; part and before any tailing ASCII part. The leading ASCII - ;; is relevant for instance in Subject headers with `Re:' for - ;; interoperability with non-MIME clients, and we might as - ;; well avoid the tail too. - (progn - (goto-char (point-min)) - ;; Does it need encoding? - (skip-chars-forward "\000-\177") - (unless (eobp) - (skip-chars-backward "^ \n") ; beginning of space-delimited word - (rfc2047-encode (point) (progn - (goto-char e) - (skip-chars-backward "\000-\177") - (skip-chars-forward "^ \n") - ;; end of space-delimited word - (point))))) - ;; `address-mime' case -- take care of quoted words, comments. - (with-syntax-table rfc2047-syntax-table - (let ((start) ; start of current token - end ; end of current token - ;; Whether there's an encoded word before the current - ;; token, either immediately or separated by space. - last-encoded) + (let ((encodable-regexp (if rfc2047-encode-encoded-words + "[^\000-\177]+\\|=\\?" + "[^\000-\177]+")) + start ; start of current token + end begin csyntax + ;; Whether there's an encoded word before the current token, + ;; either immediately or separated by space. + last-encoded + (orig-text (buffer-substring-no-properties b e))) + (if (eq 'mime rfc2047-encoding-type) + ;; Simple case. Continuous words in which all those contain + ;; non-ASCII characters are encoded collectively. Encoding + ;; ASCII words, including `Re:' used in Subject headers, is + ;; avoided for interoperability with non-MIME clients and + ;; for making it easy to find keywords. + (progn + (goto-char (point-min)) + (while (progn (skip-chars-forward " \t\n") + (not (eobp))) + (setq start (point)) + (while (and (looking-at "[ \t\n]*\\([^ \t\n]+\\)") + (progn + (setq end (match-end 0)) + (re-search-forward encodable-regexp end t))) + (goto-char end)) + (if (> (point) start) + (rfc2047-encode start (point)) + (goto-char end)))) + ;; `address-mime' case -- take care of quoted words, comments. + (with-syntax-table rfc2047-syntax-table (goto-char (point-min)) - (condition-case nil ; in case of unbalanced quotes + (condition-case err ; in case of unbalanced quotes ;; Look for rfc2822-style: sequences of atoms, quoted ;; strings, specials, whitespace. (Specials mustn't be ;; encoded.) (while (not (eobp)) - (setq start (point)) ;; Skip whitespace. - (unless (= 0 (skip-chars-forward " \t\n")) - (setq start (point))) + (skip-chars-forward " \t\n") + (setq start (point)) (cond ((not (char-after))) ; eob ;; else token start - ((eq ?\" (char-syntax (char-after))) + ((eq ?\" (setq csyntax (char-syntax (char-after)))) ;; Quoted word. (forward-sexp) (setq end (point)) ;; Does it need encoding? (goto-char start) - (skip-chars-forward "\000-\177" end) - (if (= end (point)) - (setq last-encoded nil) - ;; It needs encoding. Strip the quotes first, - ;; since encoded words can't occur in quotes. - (goto-char end) - (delete-backward-char 1) - (goto-char start) - (delete-char 1) - (when last-encoded - ;; There was a preceding quoted word. We need - ;; to include any separating whitespace in this - ;; word to avoid it getting lost. - (skip-chars-backward " \t") - ;; A space is needed between the encoded words. - (insert ? ) - (setq start (point) - end (1+ end))) - ;; Adjust the end position for the deleted quotes. - (rfc2047-encode start (- end 2)) - (setq last-encoded t))) ; record that it was encoded - ((eq ?. (char-syntax (char-after))) + (if (re-search-forward encodable-regexp end 'move) + ;; It needs encoding. Strip the quotes first, + ;; since encoded words can't occur in quotes. + (progn + (goto-char end) + (delete-backward-char 1) + (goto-char start) + (delete-char 1) + (when last-encoded + ;; There was a preceding quoted word. We need + ;; to include any separating whitespace in this + ;; word to avoid it getting lost. + (skip-chars-backward " \t") + ;; A space is needed between the encoded words. + (insert ? ) + (setq start (point) + end (1+ end))) + ;; Adjust the end position for the deleted quotes. + (rfc2047-encode start (- end 2)) + (setq last-encoded t)) ; record that it was encoded + (setq last-encoded nil))) + ((eq ?. csyntax) ;; Skip other delimiters, but record that they've ;; potentially separated quoted words. (forward-char) (setq last-encoded nil)) + ((eq ?\) csyntax) + (error "Unbalanced parentheses")) + ((eq ?\( csyntax) + ;; Look for the end of parentheses. + (forward-list) + ;; Encode text as an unstructured field. + (let ((rfc2047-encoding-type 'mime)) + (rfc2047-encode-region (1+ start) (1- (point)))) + (skip-chars-forward ")")) (t ; normal token/whitespace sequence ;; Find the end. - (forward-word 1) - (skip-chars-backward " \t") + ;; Skip one ASCII word, or encode continuous words + ;; in which all those contain non-ASCII characters. + (setq end nil) + (while (not (or end (eobp))) + (when (looking-at "[\000-\177]+") + (setq begin (point) + end (match-end 0)) + (when (progn + (while (and (or (re-search-forward + "[ \t\n]\\|\\Sw" end 'move) + (setq end nil)) + (eq ?\\ (char-syntax (char-before)))) + ;; Skip backslash-quoted characters. + (forward-char)) + end) + (setq end (match-beginning 0)) + (if rfc2047-encode-encoded-words + (progn + (goto-char begin) + (when (search-forward "=?" end 'move) + (goto-char (match-beginning 0)) + (setq end nil))) + (goto-char end)))) + ;; Where the value nil of `end' means there may be + ;; text to have to be encoded following the point. + ;; Otherwise, the point reached to the end of ASCII + ;; words separated by whitespace or a special char. + (unless end + (when (looking-at encodable-regexp) + (goto-char (setq begin (match-end 0))) + (while (and (looking-at "[ \t\n]+\\([^ \t\n]+\\)") + (setq end (match-end 0)) + (progn + (while (re-search-forward + encodable-regexp end t)) + (< begin (point))) + (goto-char begin) + (or (not (re-search-forward "\\Sw" end t)) + (progn + (goto-char (match-beginning 0)) + nil))) + (goto-char end)) + (when (looking-at "[^ \t\n]+") + (setq end (match-end 0)) + (if (re-search-forward "\\Sw+" end t) + ;; There are special characters better + ;; to be encoded so that MTAs may parse + ;; them safely. + (cond ((= end (point))) + ((looking-at (concat "\\sw*\\(" + encodable-regexp + "\\)")) + (setq end nil)) + (t + (goto-char (1- (match-end 0))) + (unless (= (point) (match-beginning 0)) + ;; Separate encodable text and + ;; delimiter. + (insert " ")))) + (goto-char end) + (skip-chars-forward " \t\n") + (if (and (looking-at "[^ \t\n]+") + (string-match encodable-regexp + (match-string 0))) + (setq end nil) + (goto-char end))))))) + (skip-chars-backward " \t\n") (setq end (point)) - ;; Deal with encoding and leading space as for - ;; quoted words. (goto-char start) - (skip-chars-forward "\000-\177" end) - (if (= end (point)) - (setq last-encoded nil) - (when last-encoded - (goto-char start) - (skip-chars-backward " \t") - (insert ? ) - (setq start (point) - end (1+ end))) - (rfc2047-encode start end) - (setq last-encoded t))))) + (if (re-search-forward encodable-regexp end 'move) + (progn + (unless (memq (char-before start) '(nil ?\t ? )) + (if (progn + (goto-char start) + (skip-chars-backward "^ \t\n") + (and (looking-at "\\Sw+") + (= (match-end 0) start))) + ;; Also encode bogus delimiters. + (setq start (point)) + ;; Separate encodable text and delimiter. + (goto-char start) + (insert " ") + (setq start (1+ start) + end (1+ end)))) + (rfc2047-encode start end) + (setq last-encoded t)) + (setq last-encoded nil))))) (error - (error "Invalid data for rfc2047 encoding: %s" - (buffer-substring b e))))))) - (rfc2047-fold-region b (point)))) + (if (or debug-on-quit debug-on-error) + (signal (car err) (cdr err)) + (error "Invalid data for rfc2047 encoding: %s" + (mm-replace-in-string orig-text "[ \t\n]+" " ")))))))) + (rfc2047-fold-region b (point)) + (goto-char (point-max)))) (defun rfc2047-encode-string (string) "Encode words in STRING. By default, the string is treated as containing addresses (see `rfc2047-encoding-type')." - (with-temp-buffer + (mm-with-multibyte-buffer (insert string) (rfc2047-encode-region (point-min) (point-max)) (buffer-string))) +(defvar rfc2047-encode-max-chars 76 + "Maximum characters of each header line that contain encoded-words. +If it is nil, encoded-words will not be folded. Too small value may +cause an error. Don't change this for no particular reason.") + +(defun rfc2047-encode-1 (column string cs encoder start crest tail + &optional eword) + "Subroutine used by `rfc2047-encode'." + (cond ((string-equal string "") + (or eword "")) + ((not rfc2047-encode-max-chars) + (concat start + (funcall encoder (if cs + (mm-encode-coding-string string cs) + string)) + "?=")) + ((>= column rfc2047-encode-max-chars) + (when eword + (cond ((string-match "\n[ \t]+\\'" eword) + ;; Reomove a superfluous empty line. + (setq eword (substring eword 0 (match-beginning 0)))) + ((string-match "(+\\'" eword) + ;; Break the line before the open parenthesis. + (setq crest (concat crest (match-string 0 eword)) + eword (substring eword 0 (match-beginning 0)))))) + (rfc2047-encode-1 (length crest) string cs encoder start " " tail + (concat eword "\n" crest))) + (t + (let ((index 0) + (limit (1- (length string))) + (prev "") + next len) + (while (and prev + (<= index limit)) + (setq next (concat start + (funcall encoder + (if cs + (mm-encode-coding-string + (substring string 0 (1+ index)) + cs) + (substring string 0 (1+ index)))) + "?=") + len (+ column (length next))) + (if (> len rfc2047-encode-max-chars) + (setq next prev + prev nil) + (if (or (< index limit) + (<= (+ len (or (string-match "\n" tail) + (length tail))) + rfc2047-encode-max-chars)) + (setq prev next + index (1+ index)) + (if (string-match "\\`)+" tail) + ;; Break the line after the close parenthesis. + (setq tail (concat (substring tail 0 (match-end 0)) + "\n " + (substring tail (match-end 0))) + prev next + index (1+ index)) + (setq next prev + prev nil))))) + (if (> index limit) + (concat eword next tail) + (if (= 0 index) + (if (and eword + (string-match "(+\\'" eword)) + (setq crest (concat crest (match-string 0 eword)) + eword (substring eword 0 (match-beginning 0))) + (setq eword (concat eword next))) + (setq crest " " + eword (concat eword next))) + (when (string-match "\n[ \t]+\\'" eword) + ;; Reomove a superfluous empty line. + (setq eword (substring eword 0 (match-beginning 0)))) + (rfc2047-encode-1 (length crest) (substring string index) + cs encoder start " " tail + (concat eword "\n" crest))))))) + (defun rfc2047-encode (b e) "Encode the word(s) in the region B to E. -By default, the region is treated as containing addresses (see -`rfc2047-encoding-type')." - (let* ((mime-charset (mm-find-mime-charset-region b e)) - (cs (if (> (length mime-charset) 1) - ;; Fixme: Instead of this, try to break region into - ;; parts that can be encoded separately. - (error "Can't rfc2047-encode `%s'" - (buffer-substring b e)) - (setq mime-charset (car mime-charset)) - (mm-charset-to-coding-system mime-charset))) - ;; Fixme: Better, calculate the number of non-ASCII - ;; characters, at least for 8-bit charsets. - (encoding (or (cdr (assq mime-charset +Point moves to the end of the region." + (let ((mime-charset (or (mm-find-mime-charset-region b e) (list 'us-ascii))) + cs encoding tail crest eword) + (cond ((> (length mime-charset) 1) + (error "Can't rfc2047-encode `%s'" + (buffer-substring-no-properties b e))) + ((= (length mime-charset) 1) + (setq mime-charset (car mime-charset) + cs (mm-charset-to-coding-system mime-charset)) + (unless (and (mm-multibyte-p) + (mm-coding-system-p cs)) + (setq cs nil)) + (save-restriction + (narrow-to-region b e) + (setq encoding + (or (cdr (assq mime-charset rfc2047-charset-encoding-alist)) ;; For the charsets that don't have a preferred ;; encoding, choose the one that's shorter. - (save-restriction - (narrow-to-region b e) - (if (eq (rfc2047-qp-or-base64) 'base64) - 'B - 'Q)))) - (start (concat - "=?" (downcase (symbol-name mime-charset)) "?" - (downcase (symbol-name encoding)) "?")) - (factor (case mime-charset - ((iso-8859-5 iso-8859-7 iso-8859-8 koi8-r) 1) - ((big5 gb2312 euc-kr) 2) - (utf-8 4) - (t 8))) - (pre (- b (save-restriction - (widen) - (point-at-bol)))) - ;; encoded-words must not be longer than 75 characters, - ;; including charset, encoding etc. This leaves us with - ;; 75 - (length start) - 2 - 2 characters. The last 2 is for - ;; possible base64 padding. In the worst case (iso-2022-*) - ;; each character expands to 8 bytes which is expanded by a - ;; factor of 4/3 by base64 encoding. - (length (floor (- 75 (length start) 4) (* factor (/ 4.0 3.0)))) - ;; Limit line length to 76 characters. - (length1 (max 1 (floor (- 76 (length start) 4 pre) - (* factor (/ 4.0 3.0))))) - (first t)) - (if mime-charset - (save-restriction - (narrow-to-region b e) - (when (eq encoding 'B) - ;; break into lines before encoding - (goto-char (point-min)) - (while (not (eobp)) - (if first - (progn - (goto-char (min (point-max) (+ length1 (point)))) - (setq first nil)) - (goto-char (min (point-max) (+ length (point))))) - (unless (eobp) - (insert ?\n))) - (setq first t)) - (if (and (mm-multibyte-p) - (mm-coding-system-p cs)) - (mm-encode-coding-region (point-min) (point-max) cs)) - (funcall (cdr (assq encoding rfc2047-encoding-function-alist)) - (point-min) (point-max)) - (goto-char (point-min)) - (while (not (eobp)) - (unless first - (insert ? )) - (setq first nil) - (insert start) - (end-of-line) - (insert "?=") - (forward-line 1)))))) + (if (eq (rfc2047-qp-or-base64) 'base64) + 'B + 'Q))) + (widen) + (goto-char e) + (skip-chars-forward "^ \t\n") + ;; `tail' may contain a close parenthesis. + (setq tail (buffer-substring-no-properties e (point))) + (goto-char b) + (setq b (point-marker) + e (set-marker (make-marker) e)) + (rfc2047-fold-region (point-at-bol) b) + (goto-char b) + (skip-chars-backward "^ \t\n") + (unless (= 0 (skip-chars-backward " \t")) + ;; `crest' may contain whitespace and an open parenthesis. + (setq crest (buffer-substring-no-properties (point) b))) + (setq eword (rfc2047-encode-1 + (- b (point-at-bol)) + (mm-replace-in-string + (buffer-substring-no-properties b e) + "\n\\([ \t]?\\)" "\\1") + cs + (or (cdr (assq encoding + rfc2047-encode-function-alist)) + 'identity) + (concat "=?" (downcase (symbol-name mime-charset)) + "?" (upcase (symbol-name encoding)) "?") + (or crest " ") + tail)) + (delete-region (if (eq (aref eword 0) ?\n) + (if (bolp) + ;; The line was folded before encoding. + (1- (point)) + (point)) + (goto-char b)) + (+ e (length tail))) + ;; `eword' contains `crest' and `tail'. + (insert eword) + (set-marker b nil) + (set-marker e nil) + (unless (or (/= 0 (length tail)) + (eobp) + (looking-at "[ \t\n)]")) + (insert " ")))) + (t + (goto-char e))))) (defun rfc2047-fold-field () "Fold the current header field." @@ -480,6 +649,7 @@ By default, the region is treated as containing addresses (see (goto-char (or break qword-break)) (setq break nil qword-break nil) + (skip-chars-backward " \t") (if (looking-at "[ \t]") (insert ?\n) (insert "\n ")) @@ -501,10 +671,8 @@ By default, the region is treated as containing addresses (see (forward-char 1)) ((memq (char-after) '(? ?\t)) (skip-chars-forward " \t") - (if first - ;; Don't break just after the header name. - (setq first nil) - (setq break (1- (point))))) + (unless first ;; Don't break just after the header name. + (setq break (point)))) ((not break) (if (not (looking-at "=\\?[^=]")) (if (eq (char-after) ?=) @@ -515,15 +683,17 @@ By default, the region is treated as containing addresses (see (setq qword-break (point))) (skip-chars-forward "^ \t\n\r"))) (t - (skip-chars-forward "^ \t\n\r")))) + (skip-chars-forward "^ \t\n\r"))) + (setq first nil)) (when (and (or break qword-break) (> (- (point) bol) 76)) (goto-char (or break qword-break)) (setq break nil qword-break nil) - (if (looking-at "[ \t]") - (insert ?\n) - (insert "\n ")) + (if (or (> 0 (skip-chars-backward " \t")) + (looking-at "[ \t]")) + (insert ?\n) + (insert "\n ")) (setq bol (1- (point))) ;; Don't break before the first non-LWSP characters. (skip-chars-forward " \t") @@ -558,48 +728,48 @@ By default, the region is treated as containing addresses (see (setq eol (point-at-eol)) (forward-line 1))))) -(defun rfc2047-b-encode-region (b e) - "Base64-encode the header contained in region B to E." - (save-restriction - (narrow-to-region (goto-char b) e) - (while (not (eobp)) - (base64-encode-region (point) (progn (end-of-line) (point)) t) - (if (and (bolp) (eolp)) - (delete-backward-char 1)) - (forward-line)))) - -(defun rfc2047-q-encode-region (b e) - "Quoted-printable-encode the header in region B to E." - (save-excursion - (save-restriction - (narrow-to-region (goto-char b) e) - (let ((bol (save-restriction - (widen) - (point-at-bol)))) - (quoted-printable-encode-region - b e nil - ;; = (\075), _ (\137), ? (\077) are used in the encoded word. - ;; Avoid using 8bit characters. - ;; This list excludes `especials' (see the RFC2047 syntax), - ;; meaning that some characters in non-structured fields will - ;; get encoded when they con't need to be. The following is - ;; what it used to be. -;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?" -;;; "\010\012\014\040-\074\076\100-\136\140-\177") - "-\b\n\f !#-'*+0-9A-Z\\^`-~\d") - (subst-char-in-region (point-min) (point-max) ? ?_) - ;; The size of QP encapsulation is about 20, so set limit to - ;; 56=76-20. - (unless (< (- (point-max) (point-min)) 56) - ;; Don't break if it could fit in one line. - ;; Let rfc2047-encode-region break it later. - (goto-char (1+ (point-min))) - (while (and (not (bobp)) (not (eobp))) - (goto-char (min (point-max) (+ 56 bol))) - (search-backward "=" (- (point) 2) t) - (unless (or (bobp) (eobp)) - (insert ?\n) - (setq bol (point))))))))) +(defun rfc2047-b-encode-string (string) + "Base64-encode the header contained in STRING." + (base64-encode-string string t)) + +(defun rfc2047-q-encode-string (string) + "Quoted-printable-encode the header in STRING." + (mm-with-unibyte-buffer + (insert string) + (quoted-printable-encode-region + (point-min) (point-max) nil + ;; = (\075), _ (\137), ? (\077) are used in the encoded word. + ;; Avoid using 8bit characters. + ;; This list excludes `especials' (see the RFC2047 syntax), + ;; meaning that some characters in non-structured fields will + ;; get encoded when they con't need to be. The following is + ;; what it used to be. + ;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?" + ;;; "\010\012\014\040-\074\076\100-\136\140-\177") + "-\b\n\f !#-'*+0-9A-Z\\^`-~\d") + (subst-char-in-region (point-min) (point-max) ? ?_) + (buffer-string))) + +(defun rfc2047-encode-parameter (param value) + "Return and PARAM=VALUE string encoded in the RFC2047-like style. +This is a replacement for the `rfc2231-encode-string' function. + +When attaching files as MIME parts, we should use the RFC2231 encoding +to specify the file names containing non-ASCII characters. However, +many mail softwares don't support it in practice and recipients won't +be able to extract files with correct names. Instead, the RFC2047-like +encoding is acceptable generally. This function provides the very +RFC2047-like encoding, resigning to such a regrettable trend. To use +it, put the following line in your ~/.gnus.el file: + +\(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter) +" + (let* ((rfc2047-encoding-type 'mime) + (rfc2047-encode-max-chars nil) + (string (rfc2047-encode-string value))) + (if (string-match (concat "[" ietf-drums-tspecials "]") string) + (format "%s=%S" param string) + (concat param "=" string)))) ;;; ;;; Functions for decoding RFC2047 messages @@ -610,6 +780,9 @@ By default, the region is treated as containing addresses (see "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(?:\\*[^?]+\\)?\ \\?\\(B\\|Q\\)\\?\\([!->@-~ ]*\\)\\?=")) +(defvar rfc2047-quote-decoded-words-containing-tspecials nil + "If non-nil, quote decoded words containing special characters.") + ;; Fixme: This should decode in place, not cons intermediate strings. ;; Also check whether it needs to worry about delimiting fields like ;; encoding. @@ -644,14 +817,66 @@ By default, the region is treated as containing addresses (see (insert (rfc2047-parse-and-decode (prog1 (match-string 0) - (delete-region (match-beginning 0) (match-end 0))))) - ;; Remove newlines between decoded words, though such things - ;; essentially must not be there. + (delete-region e (match-end 0))))) + (while (looking-at rfc2047-encoded-word-regexp) + (insert (rfc2047-parse-and-decode + (prog1 + (match-string 0) + (delete-region (point) (match-end 0)))))) (save-restriction (narrow-to-region e (point)) (goto-char e) + ;; Remove newlines between decoded words, though such + ;; things essentially must not be there. (while (re-search-forward "[\n\r]+" nil t) (replace-match " ")) + ;; Quote decoded words if there are special characters + ;; which might violate RFC2822. + (when (and rfc2047-quote-decoded-words-containing-tspecials + (let ((regexp (car (rassq + 'address-mime + rfc2047-header-encoding-alist)))) + (when regexp + (save-restriction + (widen) + (beginning-of-line) + (while (and (memq (char-after) '(? ?\t)) + (zerop (forward-line -1)))) + (looking-at regexp))))) + (let (quoted) + (goto-char e) + (skip-chars-forward " \t") + (setq start (point)) + (setq quoted (eq (char-after) ?\")) + (goto-char (point-max)) + (skip-chars-backward " \t") + (if (setq quoted (and quoted + (> (point) (1+ start)) + (eq (char-before) ?\"))) + (progn + (backward-char) + (setq start (1+ start) + end (point-marker))) + (setq end (point-marker))) + (goto-char start) + (while (search-forward "\"" end t) + (when (prog2 + (backward-char) + (zerop (% (skip-chars-backward "\\\\") 2)) + (goto-char (match-beginning 0))) + (insert "\\")) + (forward-char)) + (when (and (not quoted) + (progn + (goto-char start) + (re-search-forward + (concat "[" ietf-drums-tspecials "]") + end t))) + (goto-char start) + (insert "\"") + (goto-char end) + (insert "\"")) + (set-marker end nil))) (goto-char (point-max))) (when (and (mm-multibyte-p) mail-parse-charset @@ -750,9 +975,8 @@ If your Emacs implementation can't decode CHARSET, return nil." (memq 'gnus-unknown mail-parse-ignored-charsets)) (setq cs (mm-charset-to-coding-system mail-parse-charset))) (when cs - (when (and (eq cs 'ascii) - mail-parse-charset) - (setq cs mail-parse-charset)) + (when (eq cs 'ascii) + (setq cs (or mail-parse-charset 'raw-text))) (mm-decode-coding-string (cond ((char-equal ?B encoding) @@ -766,4 +990,5 @@ If your Emacs implementation can't decode CHARSET, return nil." (provide 'rfc2047) +;;; arch-tag: a07fe3d4-22b5-4c4a-bd89-b1f82d5d36f6 ;;; rfc2047.el ends here diff --git a/lisp/rfc2104.el b/lisp/rfc2104.el index 5496a4f..a70ba16 100644 --- a/lisp/rfc2104.el +++ b/lisp/rfc2104.el @@ -114,4 +114,5 @@ (provide 'rfc2104) +;;; arch-tag: cf671d5c-a45f-4a09-815e-704e59e43950 ;;; rfc2104.el ends here diff --git a/lisp/rfc2231.el b/lisp/rfc2231.el index 7f3a014..8a20e19 100644 --- a/lisp/rfc2231.el +++ b/lisp/rfc2231.el @@ -1,6 +1,7 @@ ;;; rfc2231.el --- Functions for decoding rfc2231 headers -;; Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. @@ -56,6 +57,8 @@ The list will be on the form (mail-header-remove-comments string))) (let ((table (copy-syntax-table ietf-drums-syntax-table))) (modify-syntax-entry ?\' "w" table) + (modify-syntax-entry ?* " " table) + (modify-syntax-entry ?\; " " table) (modify-syntax-entry ?= " " table) ;; The following isn't valid, but one should be liberal ;; in what one receives. @@ -85,7 +88,6 @@ The list will be on the form (point) (progn (forward-sexp 1) (point)))))) (error "Invalid header: %s" string)) (setq c (char-after)) - (setq encoded nil) (when (eq c ?*) (forward-char 1) (setq c (char-after)) @@ -123,16 +125,22 @@ The list will be on the form (point) (progn (forward-sexp) (point))))) (t (error "Invalid header: %s" string))) - (when encoded - (setq value (rfc2231-decode-encoded-string value))) (if number (setq prev-attribute attribute prev-value (concat prev-value value)) - (push (cons attribute value) parameters)))) + (push (cons attribute + (if encoded + (rfc2231-decode-encoded-string value) + value)) + parameters)))) ;; Take care of any final continuations. (when prev-attribute - (push (cons prev-attribute prev-value) parameters)) + (push (cons prev-attribute + (if encoded + (rfc2231-decode-encoded-string prev-value) + prev-value)) + parameters)) (when type `(,type ,@(nreverse parameters))))))) @@ -221,4 +229,5 @@ These look like \"us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A\"." (provide 'rfc2231) +;;; arch-tag: c3ab751d-d108-406a-b301-68882ad8cd63 ;;; rfc2231.el ends here diff --git a/lisp/sasl-cram.el b/lisp/sasl-cram.el index 25d1082..219e5e8 100644 --- a/lisp/sasl-cram.el +++ b/lisp/sasl-cram.el @@ -48,4 +48,5 @@ (provide 'sasl-cram) +;;; arch-tag: 46cb281b-975a-4fe0-a39f-3018691b1b05 ;;; sasl-cram.el ends here diff --git a/lisp/sasl-digest.el b/lisp/sasl-digest.el index 9e061b7..f6d455e 100644 --- a/lisp/sasl-digest.el +++ b/lisp/sasl-digest.el @@ -153,4 +153,5 @@ charset algorithm cipher-opts auth-param)." (provide 'sasl-digest) +;;; arch-tag: 786e02ed-1bc4-4b3c-bf34-96c27e31084d ;;; sasl-digest.el ends here diff --git a/lisp/sasl-ntlm.el b/lisp/sasl-ntlm.el index 67b4c96..6554ee3 100644 --- a/lisp/sasl-ntlm.el +++ b/lisp/sasl-ntlm.el @@ -62,4 +62,5 @@ challenge stored in the 2nd element of STEP. Called from 'sasl-next-step." (provide 'sasl-ntlm) +;;; arch-tag: 1d9164c1-1df0-418f-b7ab-360157fd05dc ;;; sasl-ntlm.el ends here diff --git a/lisp/sasl.el b/lisp/sasl.el index 593f46b..9fe5e49 100644 --- a/lisp/sasl.el +++ b/lisp/sasl.el @@ -269,4 +269,5 @@ It contain at least 64 bits of entropy." (provide 'sasl) +;;; arch-tag: 8b3326fa-4978-4fda-93e2-cb2c6255f887 ;;; sasl.el ends here diff --git a/lisp/score-mode.el b/lisp/score-mode.el index 9e976e5..a54b57f 100644 --- a/lisp/score-mode.el +++ b/lisp/score-mode.el @@ -1,6 +1,6 @@ ;;; score-mode.el --- mode for editing Gnus score files -;; Copyright (C) 1996, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1996, 2001, 2004 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail @@ -28,6 +28,7 @@ (eval-when-compile (require 'cl)) (require 'mm-util) ; for mm-universal-coding-system +(require 'gnus-util) ; for gnus-pp (defvar gnus-score-mode-hook nil "*Hook run in score mode buffers.") @@ -94,7 +95,7 @@ This mode is an extended emacs-lisp mode. (let ((form (read (current-buffer)))) (erase-buffer) (let ((emacs-lisp-mode-syntax-table score-mode-syntax-table)) - (pp form (current-buffer)))) + (gnus-pp form))) (goto-char (point-min))) (defun gnus-score-edit-exit () @@ -113,4 +114,5 @@ This mode is an extended emacs-lisp mode. (provide 'score-mode) +;;; arch-tag: a74a416b-2505-4ad4-bc4e-a418c96b8845 ;;; score-mode.el ends here diff --git a/lisp/sha1.el b/lisp/sha1.el new file mode 100644 index 0000000..346bf9a --- /dev/null +++ b/lisp/sha1.el @@ -0,0 +1,442 @@ +;;; sha1.el --- SHA1 Secure Hash Algorithm in Emacs-Lisp + +;; Copyright (C) 1999, 2001, 2003, 2004 Free Software Foundation, Inc. + +;; Author: Shuhei KOBAYASHI +;; Keywords: SHA1, FIPS 180-1 + +;; This file is part of FLIM (Faithful Library about Internet Message). + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; This program is implemented from the definition of SHA-1 in FIPS PUB +;; 180-1 (Federal Information Processing Standards Publication 180-1), +;; "Announcing the Standard for SECURE HASH STANDARD". +;; +;; (EXCEPTION; two optimizations taken from GnuPG/cipher/sha1.c) +;; +;; Test cases from FIPS PUB 180-1. +;; +;; (sha1 "abc") +;; => a9993e364706816aba3e25717850c26c9cd0d89d +;; +;; (sha1 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") +;; => 84983e441c3bd26ebaae4aa1f95129e5e54670f1 +;; +;; (sha1 (make-string 1000000 ?a)) +;; => 34aa973cd4c4daa4f61eeb2bdbad27316534016f +;; +;; BUGS: +;; * It is assumed that length of input string is less than 2^29 bytes. +;; * It is caller's responsibility to make string (or region) unibyte. +;; +;; TODO: +;; * Rewrite from scratch! +;; This version is much faster than Keiichi Suzuki's another sha1.el, +;; but it is too dirty. + +;;; Code: + +(require 'hex-util) + +;;; +;;; external SHA1 function. +;;; + +(defgroup sha1 nil + "Elisp interface for SHA1 hash computation." + :version "22.1" + :group 'extensions) + +(defcustom sha1-maximum-internal-length 500 + "*Maximum length of message to use Lisp version of SHA1 function. +If message is longer than this, `sha1-program' is used instead. + +If this variable is set to 0, use external program only. +If this variable is set to nil, use internal function only." + :type 'integer + :group 'sha1) + +(defcustom sha1-program '("sha1sum") + "*Name of program to compute SHA1. +It must be a string \(program name\) or list of strings \(name and its args\)." + :type '(repeat string) + :group 'sha1) + +(defcustom sha1-use-external (condition-case () + (executable-find (car sha1-program)) + (error)) + "*Use external SHA1 program. +If this variable is set to nil, use internal function only." + :type 'boolean + :group 'sha1) + +(defun sha1-string-external (string &optional binary) + (let (prog args digest default-enable-multibyte-characters) + (if (consp sha1-program) + (setq prog (car sha1-program) + args (cdr sha1-program)) + (setq prog sha1-program + args nil)) + (with-temp-buffer + (insert string) + (apply (function call-process-region) + (point-min)(point-max) + prog t t nil args) + ;; SHA1 is 40 bytes long in hexadecimal form. + (setq digest (buffer-substring (point-min)(+ (point-min) 40)))) + (if binary + (decode-hex-string digest) + digest))) + +(defun sha1-region-external (beg end &optional binary) + (sha1-string-external (buffer-substring-no-properties beg end) binary)) + +;;; +;;; internal SHA1 function. +;;; + +(eval-when-compile + ;; optional second arg of string-to-number is new in v20. + (defconst sha1-K0-high 23170) ; (string-to-number "5A82" 16) + (defconst sha1-K0-low 31129) ; (string-to-number "7999" 16) + (defconst sha1-K1-high 28377) ; (string-to-number "6ED9" 16) + (defconst sha1-K1-low 60321) ; (string-to-number "EBA1" 16) + (defconst sha1-K2-high 36635) ; (string-to-number "8F1B" 16) + (defconst sha1-K2-low 48348) ; (string-to-number "BCDC" 16) + (defconst sha1-K3-high 51810) ; (string-to-number "CA62" 16) + (defconst sha1-K3-low 49622) ; (string-to-number "C1D6" 16) + +;;; original definition of sha1-F0. +;;; (defmacro sha1-F0 (B C D) +;;; (` (logior (logand (, B) (, C)) +;;; (logand (lognot (, B)) (, D))))) +;;; a little optimization from GnuPG/cipher/sha1.c. + (defmacro sha1-F0 (B C D) + (` (logxor (, D) (logand (, B) (logxor (, C) (, D)))))) + (defmacro sha1-F1 (B C D) + (` (logxor (, B) (, C) (, D)))) +;;; original definition of sha1-F2. +;;; (defmacro sha1-F2 (B C D) +;;; (` (logior (logand (, B) (, C)) +;;; (logand (, B) (, D)) +;;; (logand (, C) (, D))))) +;;; a little optimization from GnuPG/cipher/sha1.c. + (defmacro sha1-F2 (B C D) + (` (logior (logand (, B) (, C)) + (logand (, D) (logior (, B) (, C)))))) + (defmacro sha1-F3 (B C D) + (` (logxor (, B) (, C) (, D)))) + + (defmacro sha1-S1 (W-high W-low) + (` (let ((W-high (, W-high)) + (W-low (, W-low))) + (setq S1W-high (+ (% (* W-high 2) 65536) + (/ W-low (, (/ 65536 2))))) + (setq S1W-low (+ (/ W-high (, (/ 65536 2))) + (% (* W-low 2) 65536)))))) + (defmacro sha1-S5 (A-high A-low) + (` (progn + (setq S5A-high (+ (% (* (, A-high) 32) 65536) + (/ (, A-low) (, (/ 65536 32))))) + (setq S5A-low (+ (/ (, A-high) (, (/ 65536 32))) + (% (* (, A-low) 32) 65536)))))) + (defmacro sha1-S30 (B-high B-low) + (` (progn + (setq S30B-high (+ (/ (, B-high) 4) + (* (% (, B-low) 4) (, (/ 65536 4))))) + (setq S30B-low (+ (/ (, B-low) 4) + (* (% (, B-high) 4) (, (/ 65536 4)))))))) + + (defmacro sha1-OP (round) + (` (progn + (sha1-S5 sha1-A-high sha1-A-low) + (sha1-S30 sha1-B-high sha1-B-low) + (setq sha1-A-low (+ ((, (intern (format "sha1-F%d" round))) + sha1-B-low sha1-C-low sha1-D-low) + sha1-E-low + (, (symbol-value + (intern (format "sha1-K%d-low" round)))) + (aref block-low idx) + (progn + (setq sha1-E-low sha1-D-low) + (setq sha1-D-low sha1-C-low) + (setq sha1-C-low S30B-low) + (setq sha1-B-low sha1-A-low) + S5A-low))) + (setq carry (/ sha1-A-low 65536)) + (setq sha1-A-low (% sha1-A-low 65536)) + (setq sha1-A-high (% (+ ((, (intern (format "sha1-F%d" round))) + sha1-B-high sha1-C-high sha1-D-high) + sha1-E-high + (, (symbol-value + (intern (format "sha1-K%d-high" round)))) + (aref block-high idx) + (progn + (setq sha1-E-high sha1-D-high) + (setq sha1-D-high sha1-C-high) + (setq sha1-C-high S30B-high) + (setq sha1-B-high sha1-A-high) + S5A-high) + carry) + 65536))))) + + (defmacro sha1-add-to-H (H X) + (` (progn + (setq (, (intern (format "sha1-%s-low" H))) + (+ (, (intern (format "sha1-%s-low" H))) + (, (intern (format "sha1-%s-low" X))))) + (setq carry (/ (, (intern (format "sha1-%s-low" H))) 65536)) + (setq (, (intern (format "sha1-%s-low" H))) + (% (, (intern (format "sha1-%s-low" H))) 65536)) + (setq (, (intern (format "sha1-%s-high" H))) + (% (+ (, (intern (format "sha1-%s-high" H))) + (, (intern (format "sha1-%s-high" X))) + carry) + 65536))))) + ) + +;;; buffers (H0 H1 H2 H3 H4). +(defvar sha1-H0-high) +(defvar sha1-H0-low) +(defvar sha1-H1-high) +(defvar sha1-H1-low) +(defvar sha1-H2-high) +(defvar sha1-H2-low) +(defvar sha1-H3-high) +(defvar sha1-H3-low) +(defvar sha1-H4-high) +(defvar sha1-H4-low) + +(defun sha1-block (block-high block-low) + (let (;; step (c) --- initialize buffers (A B C D E). + (sha1-A-high sha1-H0-high) (sha1-A-low sha1-H0-low) + (sha1-B-high sha1-H1-high) (sha1-B-low sha1-H1-low) + (sha1-C-high sha1-H2-high) (sha1-C-low sha1-H2-low) + (sha1-D-high sha1-H3-high) (sha1-D-low sha1-H3-low) + (sha1-E-high sha1-H4-high) (sha1-E-low sha1-H4-low) + (idx 16)) + ;; step (b). + (let (;; temporary variables used in sha1-S1 macro. + S1W-high S1W-low) + (while (< idx 80) + (sha1-S1 (logxor (aref block-high (- idx 3)) + (aref block-high (- idx 8)) + (aref block-high (- idx 14)) + (aref block-high (- idx 16))) + (logxor (aref block-low (- idx 3)) + (aref block-low (- idx 8)) + (aref block-low (- idx 14)) + (aref block-low (- idx 16)))) + (aset block-high idx S1W-high) + (aset block-low idx S1W-low) + (setq idx (1+ idx)))) + ;; step (d). + (setq idx 0) + (let (;; temporary variables used in sha1-OP macro. + S5A-high S5A-low S30B-high S30B-low carry) + (while (< idx 20) (sha1-OP 0) (setq idx (1+ idx))) + (while (< idx 40) (sha1-OP 1) (setq idx (1+ idx))) + (while (< idx 60) (sha1-OP 2) (setq idx (1+ idx))) + (while (< idx 80) (sha1-OP 3) (setq idx (1+ idx)))) + ;; step (e). + (let (;; temporary variables used in sha1-add-to-H macro. + carry) + (sha1-add-to-H H0 A) + (sha1-add-to-H H1 B) + (sha1-add-to-H H2 C) + (sha1-add-to-H H3 D) + (sha1-add-to-H H4 E)))) + +(defun sha1-binary (string) + "Return the SHA1 of STRING in binary form." + (let (;; prepare buffers for a block. byte-length of block is 64. + ;; input block is split into two vectors. + ;; + ;; input block: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ... + ;; block-high: +-0-+ +-1-+ +-2-+ +-3-+ + ;; block-low: +-0-+ +-1-+ +-2-+ +-3-+ + ;; + ;; length of each vector is 80, and elements of each vector are + ;; 16bit integers. elements 0x10-0x4F of each vector are + ;; assigned later in `sha1-block'. + (block-high (eval-when-compile (make-vector 80 nil))) + (block-low (eval-when-compile (make-vector 80 nil)))) + (unwind-protect + (let* (;; byte-length of input string. + (len (length string)) + (lim (* (/ len 64) 64)) + (rem (% len 4)) + (idx 0)(pos 0)) + ;; initialize buffers (H0 H1 H2 H3 H4). + (setq sha1-H0-high 26437 ; (string-to-number "6745" 16) + sha1-H0-low 8961 ; (string-to-number "2301" 16) + sha1-H1-high 61389 ; (string-to-number "EFCD" 16) + sha1-H1-low 43913 ; (string-to-number "AB89" 16) + sha1-H2-high 39098 ; (string-to-number "98BA" 16) + sha1-H2-low 56574 ; (string-to-number "DCFE" 16) + sha1-H3-high 4146 ; (string-to-number "1032" 16) + sha1-H3-low 21622 ; (string-to-number "5476" 16) + sha1-H4-high 50130 ; (string-to-number "C3D2" 16) + sha1-H4-low 57840) ; (string-to-number "E1F0" 16) + ;; loop for each 64 bytes block. + (while (< pos lim) + ;; step (a). + (setq idx 0) + (while (< idx 16) + (aset block-high idx (+ (* (aref string pos) 256) + (aref string (1+ pos)))) + (setq pos (+ pos 2)) + (aset block-low idx (+ (* (aref string pos) 256) + (aref string (1+ pos)))) + (setq pos (+ pos 2)) + (setq idx (1+ idx))) + (sha1-block block-high block-low)) + ;; last block. + (if (prog1 + (< (- len lim) 56) + (setq lim (- len rem)) + (setq idx 0) + (while (< pos lim) + (aset block-high idx (+ (* (aref string pos) 256) + (aref string (1+ pos)))) + (setq pos (+ pos 2)) + (aset block-low idx (+ (* (aref string pos) 256) + (aref string (1+ pos)))) + (setq pos (+ pos 2)) + (setq idx (1+ idx))) + ;; this is the last (at most) 32bit word. + (cond + ((= rem 3) + (aset block-high idx (+ (* (aref string pos) 256) + (aref string (1+ pos)))) + (setq pos (+ pos 2)) + (aset block-low idx (+ (* (aref string pos) 256) + 128))) + ((= rem 2) + (aset block-high idx (+ (* (aref string pos) 256) + (aref string (1+ pos)))) + (aset block-low idx 32768)) + ((= rem 1) + (aset block-high idx (+ (* (aref string pos) 256) + 128)) + (aset block-low idx 0)) + (t ;; (= rem 0) + (aset block-high idx 32768) + (aset block-low idx 0))) + (setq idx (1+ idx)) + (while (< idx 16) + (aset block-high idx 0) + (aset block-low idx 0) + (setq idx (1+ idx)))) + ;; last block has enough room to write the length of string. + (progn + ;; write bit length of string to last 4 bytes of the block. + (aset block-low 15 (* (% len 8192) 8)) + (setq len (/ len 8192)) + (aset block-high 15 (% len 65536)) + ;; XXX: It is not practical to compute SHA1 of + ;; such a huge message on emacs. + ;; (setq len (/ len 65536)) ; for 64bit emacs. + ;; (aset block-low 14 (% len 65536)) + ;; (aset block-high 14 (/ len 65536)) + (sha1-block block-high block-low)) + ;; need one more block. + (sha1-block block-high block-low) + (fillarray block-high 0) + (fillarray block-low 0) + ;; write bit length of string to last 4 bytes of the block. + (aset block-low 15 (* (% len 8192) 8)) + (setq len (/ len 8192)) + (aset block-high 15 (% len 65536)) + ;; XXX: It is not practical to compute SHA1 of + ;; such a huge message on emacs. + ;; (setq len (/ len 65536)) ; for 64bit emacs. + ;; (aset block-low 14 (% len 65536)) + ;; (aset block-high 14 (/ len 65536)) + (sha1-block block-high block-low)) + ;; make output string (in binary form). + (let ((result (make-string 20 0))) + (aset result 0 (/ sha1-H0-high 256)) + (aset result 1 (% sha1-H0-high 256)) + (aset result 2 (/ sha1-H0-low 256)) + (aset result 3 (% sha1-H0-low 256)) + (aset result 4 (/ sha1-H1-high 256)) + (aset result 5 (% sha1-H1-high 256)) + (aset result 6 (/ sha1-H1-low 256)) + (aset result 7 (% sha1-H1-low 256)) + (aset result 8 (/ sha1-H2-high 256)) + (aset result 9 (% sha1-H2-high 256)) + (aset result 10 (/ sha1-H2-low 256)) + (aset result 11 (% sha1-H2-low 256)) + (aset result 12 (/ sha1-H3-high 256)) + (aset result 13 (% sha1-H3-high 256)) + (aset result 14 (/ sha1-H3-low 256)) + (aset result 15 (% sha1-H3-low 256)) + (aset result 16 (/ sha1-H4-high 256)) + (aset result 17 (% sha1-H4-high 256)) + (aset result 18 (/ sha1-H4-low 256)) + (aset result 19 (% sha1-H4-low 256)) + result)) + ;; do not leave a copy of input string. + (fillarray block-high nil) + (fillarray block-low nil)))) + +(defun sha1-string-internal (string &optional binary) + (if binary + (sha1-binary string) + (encode-hex-string (sha1-binary string)))) + +(defun sha1-region-internal (beg end &optional binary) + (sha1-string-internal (buffer-substring-no-properties beg end) binary)) + +;;; +;;; application interface. +;;; + +(defun sha1-region (beg end &optional binary) + (if (and sha1-use-external + sha1-maximum-internal-length + (> (abs (- end beg)) sha1-maximum-internal-length)) + (sha1-region-external beg end binary) + (sha1-region-internal beg end binary))) + +(defun sha1-string (string &optional binary) + (if (and sha1-use-external + sha1-maximum-internal-length + (> (length string) sha1-maximum-internal-length)) + (sha1-string-external string binary) + (sha1-string-internal string binary))) + +;;;###autoload +(defun sha1 (object &optional beg end binary) + "Return the SHA1 (Secure Hash Algorithm) of an object. +OBJECT is either a string or a buffer. +Optional arguments BEG and END denote buffer positions for computing the +hash of a portion of OBJECT. +If BINARY is non-nil, return a string in binary form." + (if (stringp object) + (sha1-string object binary) + (save-excursion + (set-buffer object) + (sha1-region (or beg (point-min)) (or end (point-max)) binary)))) + +(provide 'sha1) + +;;; arch-tag: c0f9abd0-ffc1-4557-aac6-ece7f2d4c901 +;;; sha1.el ends here diff --git a/lisp/sieve-manage.el b/lisp/sieve-manage.el index 63588b8..72e6ade 100644 --- a/lisp/sieve-manage.el +++ b/lisp/sieve-manage.el @@ -684,4 +684,5 @@ password is remembered in the buffer." (provide 'sieve-manage) +;;; arch-tag: 321c4640-1371-4495-9baf-8ccb71dd5bd1 ;; sieve-manage.el ends here diff --git a/lisp/sieve-mode.el b/lisp/sieve-mode.el index f105ced..68fd60c 100644 --- a/lisp/sieve-mode.el +++ b/lisp/sieve-mode.el @@ -200,4 +200,5 @@ Turning on Sieve mode runs `sieve-mode-hook'." (provide 'sieve-mode) +;;; arch-tag: 3b8ab76d-065d-4c52-b1e8-ab2ec21f2ace ;; sieve-mode.el ends here diff --git a/lisp/sieve.el b/lisp/sieve.el index 2b044ad..ffaaa07 100644 --- a/lisp/sieve.el +++ b/lisp/sieve.el @@ -1,5 +1,5 @@ ;;; sieve.el --- Utilities to manage sieve scripts -;; Copyright (C) 2001, 2003 Free Software Foundation, Inc. +;; Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc. ;; Author: Simon Josefsson @@ -65,6 +65,7 @@ (defgroup sieve nil "Manage sieve scripts." + :version "22.1" :group 'tools) (defcustom sieve-new-script "" @@ -143,7 +144,7 @@ require \"fileinto\"; (setq mode-name "SIEVE") (buffer-disable-undo (current-buffer)) (setq truncate-lines t) - (easy-menu-add-item nil nil sieve-manage-mode-menu)) + (easy-menu-add sieve-manage-mode-menu sieve-manage-mode-map)) (put 'sieve-manage-mode 'mode-class 'special) @@ -380,4 +381,5 @@ Server : " server ":" (or port "2000") " (provide 'sieve) +;;; arch-tag: 7f6a6d94-94e1-4654-ab9a-aee21b9b8a94 ;; sieve.el ends here diff --git a/lisp/smiley.el b/lisp/smiley.el index 8c1282d..27a5482 100644 --- a/lisp/smiley.el +++ b/lisp/smiley.el @@ -44,7 +44,7 @@ :group 'gnus-visual) ;; Maybe this should go. -(defcustom smiley-data-directory (nnheader-find-etc-directory "smilies") +(defcustom smiley-data-directory (nnheader-find-etc-directory "images/smilies") "*Location of the smiley faces files." :type 'directory :group 'smiley) @@ -78,6 +78,7 @@ regexp to replace with IMAGE. IMAGE is the name of a PBM file in (push "xpm" types)) types) "*List of suffixes on picon file names to try." + :version "22.1" :type '(repeat string) :group 'smiley) @@ -167,4 +168,5 @@ With arg, turn displaying on if and only if arg is positive." (provide 'smiley) +;;; arch-tag: 5beb161b-4321-40af-8ac9-876afb8ee818 ;;; smiley.el ends here diff --git a/lisp/smime-ldap.el b/lisp/smime-ldap.el new file mode 100644 index 0000000..24d3e4c --- /dev/null +++ b/lisp/smime-ldap.el @@ -0,0 +1,208 @@ +;;; smime-ldap.el --- client interface to LDAP for Emacs + +;; Copyright (C) 1998, 1999, 2000, 2005 Free Software Foundation, Inc. + +;; Author: Oscar Figueiredo +;; Maintainer: Arne J,Ax(Brgensen +;; Created: February 2005 +;; Keywords: comm + +;; 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., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; This file has a slightly changed implementation of Emacs 21.3's +;; ldap-search and ldap-search-internal from ldap.el. The changes are +;; made to achieve compatibility with OpenLDAP v2 and to make it +;; possible to retrieve LDAP attributes that are tagged ie ";binary". + +;; When Gnus drops support for Emacs 21.x this file can be removed and +;; smime.el changed to + +;; - (require 'smime-ldap) => (require 'ldap) +;; - (smime-ldap-search ...) => (ldap-search ...) + +;; If we are running in Emacs 22 or newer it just uses the build-in +;; version of ldap-search. + +;;; Code: + +(require 'ldap) + +(defun smime-ldap-search (filter &optional host attributes attrsonly withdn) + "Perform an LDAP search. +FILTER is the search filter in RFC1558 syntax. +HOST is the LDAP host on which to perform the search. +ATTRIBUTES are the specific attributes to retrieve, nil means +retrieve all. +ATTRSONLY, if non-nil, retrieves the attributes only, without +the associated values. +If WITHDN is non-nil, each entry in the result will be prepended with +its distinguished name WITHDN. +Additional search parameters can be specified through +`ldap-host-parameters-alist', which see." + (interactive "sFilter:") + (if (>= emacs-major-version 22) + (ldap-search filter host attributes attrsonly) + (or host + (setq host ldap-default-host) + (error "No LDAP host specified")) + (let ((host-plist (cdr (assoc host ldap-host-parameters-alist))) + result) + (setq result (smime-ldap-search-internal + (append host-plist + (list 'host host + 'filter filter + 'attributes attributes + 'attrsonly attrsonly + 'withdn withdn)))) + (if ldap-ignore-attribute-codings + result + (mapcar (function + (lambda (record) + (mapcar 'ldap-decode-attribute record))) + result))))) + +(defun smime-ldap-search-internal (search-plist) + "Perform a search on a LDAP server. +SEARCH-PLIST is a property list describing the search request. +Valid keys in that list are: +`host' is a string naming one or more (blank-separated) LDAP servers to +to try to connect to. Each host name may optionally be of the form HOST:PORT. +`filter' is a filter string for the search as described in RFC 1558. +`attributes' is a list of strings indicating which attributes to retrieve +for each matching entry. If nil, return all available attributes. +`attrsonly', if non-nil, indicates that only attributes are retrieved, +not their associated values. +`base' is the base for the search as described in RFC 1779. +`scope' is one of the three symbols `sub', `base' or `one'. +`binddn' is the distinguished name of the user to bind as (in RFC 1779 syntax). +`passwd' is the password to use for simple authentication. +`deref' is one of the symbols `never', `always', `search' or `find'. +`timelimit' is the timeout limit for the connection in seconds. +`sizelimit' is the maximum number of matches to return. +`withdn' if non-nil each entry in the result will be prepended with +its distinguished name DN. +The function returns a list of matching entries. Each entry is itself +an alist of attribute/value pairs." + (let ((buf (get-buffer-create " *ldap-search*")) + (bufval (get-buffer-create " *ldap-value*")) + (host (or (plist-get search-plist 'host) + ldap-default-host)) + (filter (plist-get search-plist 'filter)) + (attributes (plist-get search-plist 'attributes)) + (attrsonly (plist-get search-plist 'attrsonly)) + (base (or (plist-get search-plist 'base) + ldap-default-base)) + (scope (plist-get search-plist 'scope)) + (binddn (plist-get search-plist 'binddn)) + (passwd (plist-get search-plist 'passwd)) + (deref (plist-get search-plist 'deref)) + (timelimit (plist-get search-plist 'timelimit)) + (sizelimit (plist-get search-plist 'sizelimit)) + (withdn (plist-get search-plist 'withdn)) + (numres 0) + arglist dn name value record result) + (if (or (null filter) + (equal "" filter)) + (error "No search filter")) + (setq filter (cons filter attributes)) + (save-excursion + (set-buffer buf) + (erase-buffer) + (if (and host + (not (equal "" host))) + (setq arglist (nconc arglist (list (format "-h%s" host))))) + (if (and attrsonly + (not (equal "" attrsonly))) + (setq arglist (nconc arglist (list "-A")))) + (if (and base + (not (equal "" base))) + (setq arglist (nconc arglist (list (format "-b%s" base))))) + (if (and scope + (not (equal "" scope))) + (setq arglist (nconc arglist (list (format "-s%s" scope))))) + (if (and binddn + (not (equal "" binddn))) + (setq arglist (nconc arglist (list (format "-D%s" binddn))))) + (if (and passwd + (not (equal "" passwd))) + (setq arglist (nconc arglist (list (format "-w%s" passwd))))) + (if (and deref + (not (equal "" deref))) + (setq arglist (nconc arglist (list (format "-a%s" deref))))) + (if (and timelimit + (not (equal "" timelimit))) + (setq arglist (nconc arglist (list (format "-l%s" timelimit))))) + (if (and sizelimit + (not (equal "" sizelimit))) + (setq arglist (nconc arglist (list (format "-z%s" sizelimit))))) + (eval `(call-process ldap-ldapsearch-prog + nil + buf + nil + ,@arglist + "-tt" ; Write values to temp files + "-x" + "-LL" + ; ,@ldap-ldapsearch-args + ,@filter)) + (insert "\n") + (goto-char (point-min)) + + (while (re-search-forward "[\t\n\f]+ " nil t) + (replace-match "" nil nil)) + (goto-char (point-min)) + + (if (looking-at "usage") + (error "Incorrect ldapsearch invocation") + (message "Parsing results... ") + (while (progn + (skip-chars-forward " \t\n") + (not (eobp))) + (setq dn (buffer-substring (point) (save-excursion + (end-of-line) + (point)))) + (forward-line 1) + (while (looking-at (concat "^\\(\\w*\\)\\(;\\w*\\)?[=:\t ]+" + "\\(<[\t ]*file://\\)?\\(.*\\)$")) + (setq name (match-string 1) + value (match-string 4)) + (save-excursion + (set-buffer bufval) + (erase-buffer) + (insert-file-contents-literally value) + (delete-file value) + (setq value (buffer-substring (point-min) (point-max)))) + (setq record (cons (list name value) + record)) + (forward-line 1)) + (setq result (cons (if withdn + (cons dn (nreverse record)) + (nreverse record)) result)) + (setq record nil) + (skip-chars-forward " \t\n") + (message "Parsing results... %d" numres) + (1+ numres)) + (message "Parsing results... done") + (nreverse result))))) + +(provide 'smime-ldap) + +;; arch-tag: 87e6bc44-21fc-4e9b-a89b-f55f031f78f8 +;;; smime-ldap.el ends here diff --git a/lisp/smime.el b/lisp/smime.el index 1006e4d..7b2308f 100644 --- a/lisp/smime.el +++ b/lisp/smime.el @@ -1,5 +1,5 @@ ;;; smime.el --- S/MIME support library -;; Copyright (c) 2000, 2001, 2003 Free Software Foundation, Inc. +;; Copyright (c) 2000, 2001, 2003, 2005 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: SMIME X.509 PEM OpenSSL @@ -26,7 +26,7 @@ ;; This library perform S/MIME operations from within Emacs. ;; ;; Functions for fetching certificates from public repositories are -;; provided, currently only from DNS. LDAP support (via EUDC) is planned. +;; provided, currently from DNS and LDAP. ;; ;; It uses OpenSSL (tested with version 0.9.5a and 0.9.6) for signing, ;; encryption and decryption. @@ -115,10 +115,13 @@ ;; 2000-06-05 initial version, committed to Gnus CVS contrib/ ;; 2000-10-28 retrieve certificates via DNS CERT RRs ;; 2001-10-14 posted to gnu.emacs.sources +;; 2005-02-13 retrieve certificates via LDAP ;;; Code: (require 'dig) +(require 'smime-ldap) +(require 'password) (eval-when-compile (require 'cl)) (defgroup smime nil @@ -150,6 +153,7 @@ certificate." (defcustom smime-CA-file nil "*Files containing certificates for CAs you trust. File should contain certificates in PEM format." + :version "22.1" :type '(choice (const :tag "none" nil) file) :group 'smime) @@ -177,6 +181,7 @@ and the files themself should be in PEM format." (defcustom smime-encrypt-cipher "-des3" "*Cipher algorithm used for encryption." + :version "22.1" :type '(choice (const :tag "Triple DES" "-des3") (const :tag "DES" "-des") (const :tag "RC2 40 bits" "-rc2-40") @@ -208,10 +213,19 @@ At least OpenSSL version 0.9.7 is required for this to work." (defcustom smime-dns-server nil "*DNS server to query certificates from. If nil, use system defaults." + :version "22.1" :type '(choice (const :tag "System defaults") string) :group 'smime) +(defcustom smime-ldap-host-list nil + "A list of LDAP hosts with S/MIME user certificates. +If needed search base, binddn, passwd, etc. for the LDAP host +must be set in `ldap-host-parameters-alist'." + :type '(repeat (string :tag "Host name")) + :version "23.0" ;; No Gnus + :group 'smime) + (defvar smime-details-buffer "*OpenSSL output*") ;; Use mm-util? @@ -228,11 +242,13 @@ If nil, use system defaults." ;; Password dialog function -(defun smime-ask-passphrase () - "Asks the passphrase to unlock the secret key." +(defun smime-ask-passphrase (&optional cache-key) + "Asks the passphrase to unlock the secret key. +If `cache-key' and `password-cache' is non-nil then cache the +password under `cache-key'." (let ((passphrase - (read-passwd - "Passphrase for secret key (RET for no passphrase): "))) + (password-read-and-add + "Passphrase for secret key (RET for no passphrase): " cache-key))) (if (string= passphrase "") nil passphrase))) @@ -264,11 +280,11 @@ certificates to include in its caar. If no additional certificates is included, KEYFILE may be the file containing the PEM encoded private key and certificate itself." (smime-new-details-buffer) - (let ((keyfile (or (car-safe keyfile) keyfile)) - (certfiles (and (cdr-safe keyfile) (cadr keyfile))) - (buffer (generate-new-buffer (generate-new-buffer-name " *smime*"))) - (passphrase (smime-ask-passphrase)) - (tmpfile (smime-make-temp-file "smime"))) + (let* ((certfiles (and (cdr-safe keyfile) (cadr keyfile))) + (keyfile (or (car-safe keyfile) keyfile)) + (buffer (generate-new-buffer (generate-new-buffer-name " *smime*"))) + (passphrase (smime-ask-passphrase (expand-file-name keyfile))) + (tmpfile (smime-make-temp-file "smime"))) (if passphrase (setenv "GNUS_SMIME_PASSPHRASE" passphrase)) (prog1 @@ -329,16 +345,17 @@ is expected to contain of a PEM encoded certificate." KEYFILE should contain a PEM encoded key and certificate." (interactive) (with-current-buffer (or buffer (current-buffer)) - (smime-sign-region - (point-min) (point-max) - (if keyfile - keyfile - (smime-get-key-with-certs-by-email - (completing-read - (concat "Sign using which key? " - (if smime-keys (concat "(default " (caar smime-keys) ") ") - "")) - smime-keys nil nil (car-safe (car-safe smime-keys)))))))) + (unless (smime-sign-region + (point-min) (point-max) + (if keyfile + keyfile + (smime-get-key-with-certs-by-email + (completing-read + (concat "Sign using which key? " + (if smime-keys (concat "(default " (caar smime-keys) ") ") + "")) + smime-keys nil nil (car-safe (car-safe smime-keys)))))) + (error "Signing failed")))) (defun smime-encrypt-buffer (&optional certfiles buffer) "S/MIME encrypt BUFFER for recipients specified in CERTFILES. @@ -347,11 +364,12 @@ a PEM encoded key and certificate. Uses current buffer if BUFFER is nil." (interactive) (with-current-buffer (or buffer (current-buffer)) - (smime-encrypt-region - (point-min) (point-max) - (or certfiles - (list (read-file-name "Recipient's S/MIME certificate: " - smime-certificate-directory nil)))))) + (unless (smime-encrypt-region + (point-min) (point-max) + (or certfiles + (list (read-file-name "Recipient's S/MIME certificate: " + smime-certificate-directory nil)))) + (error "Encryption failed")))) ;; Verify+decrypt region @@ -399,7 +417,7 @@ Any details (stderr on success, stdout and stderr on error) are left in the buffer specified by `smime-details-buffer'." (smime-new-details-buffer) (let ((buffer (generate-new-buffer (generate-new-buffer-name " *smime*"))) - CAs (passphrase (smime-ask-passphrase)) + CAs (passphrase (smime-ask-passphrase (expand-file-name keyfile))) (tmpfile (smime-make-temp-file "smime"))) (if passphrase (setenv "GNUS_SMIME_PASSPHRASE" passphrase)) @@ -532,6 +550,7 @@ A string or a list of strings is returned." mailaddr)) (defun smime-cert-by-dns (mail) + "Find certificate via DNS for address MAIL." (let* ((dig-dns-server smime-dns-server) (digbuf (dig-invoke (smime-mail-to-domain mail) "cert" nil nil "+vc")) (retbuf (generate-new-buffer (format "*certificate for %s*" mail))) @@ -552,6 +571,35 @@ A string or a list of strings is returned." (kill-buffer digbuf) retbuf)) +(defun smime-cert-by-ldap-1 (mail host) + "Get cetificate for MAIL from the ldap server at HOST." + (let ((ldapresult (smime-ldap-search (concat "mail=" mail) + host '("userCertificate") nil)) + (retbuf (generate-new-buffer (format "*certificate for %s*" mail))) + cert) + (if (> (length ldapresult) 1) + (with-current-buffer retbuf + (setq cert (base64-encode-string (nth 1 (car (nth 1 ldapresult))) t)) + (insert "-----BEGIN CERTIFICATE-----\n") + (let ((i 0) (len (length cert))) + (while (> (- len 64) i) + (insert (substring cert i (+ i 64)) "\n") + (setq i (+ i 64))) + (insert (substring cert i len) "\n")) + (insert "-----END CERTIFICATE-----\n")) + (kill-buffer retbuf) + (setq retbuf nil)) + retbuf)) + +(defun smime-cert-by-ldap (mail) + "Find certificate via LDAP for address MAIL." + (if smime-ldap-host-list + (catch 'certbuf + (dolist (host smime-ldap-host-list) + (let ((retbuf (smime-cert-by-ldap-1 mail host))) + (when retbuf + (throw 'certbuf retbuf))))))) + ;; User interface. (defvar smime-buffer "*SMIME*") @@ -633,4 +681,5 @@ The following commands are available: (provide 'smime) +;;; arch-tag: e3f9b938-5085-4510-8a11-6625269c9a9e ;;; smime.el ends here diff --git a/lisp/spam-report.el b/lisp/spam-report.el index 6527817..b331164 100644 --- a/lisp/spam-report.el +++ b/lisp/spam-report.el @@ -43,7 +43,7 @@ If you are using spam.el, consider setting gnus-spam-process-newsgroups or the gnus-group-spam-exit-processor-report-gmane group/topic parameter instead." :type '(radio (const nil) - (regexp :format "%t: %v\n" :size 0 :value "^nntp\+.*:gmane\.")) + (regexp :value "^nntp\+.*:gmane\.")) :group 'spam-report) (defcustom spam-report-gmane-spam-header @@ -79,24 +79,59 @@ The function must accept the arguments `host' and `report'." :type 'file :group 'spam-report) +(defcustom spam-report-resend-to nil + "Email address that spam articles are resent to when reporting. +If not set, the user will be prompted to enter a value which will be +saved for future use." + :type 'string + :group 'spam-report) + (defvar spam-report-url-ping-temp-agent-function nil "Internal variable for `spam-report-agentize' and `spam-report-deagentize'. This variable will store the value of `spam-report-url-ping-function' from before `spam-report-agentize' was run, so that `spam-report-deagentize' can undo that change.") +(defun spam-report-resend (articles &optional ham) + "Report an article as spam by resending via email. +Reports is as ham when HAM is set." + (dolist (article articles) + (gnus-message 6 + "Reporting %s article %d to <%s>..." + (if ham "ham" "spam") + article spam-report-resend-to) + (unless spam-report-resend-to + (customize-set-variable + spam-report-resend-to + (read-from-minibuffer "email address to resend SPAM/HAM to? "))) + ;; This is ganked from the `gnus-summary-resend-message' function. + ;; It involves rendering the SPAM, which is undesirable, but there does + ;; not seem to be a nicer way to achieve this. + ;; select this particular article + (gnus-summary-select-article nil nil nil article) + ;; resend it to the destination address + (save-excursion + (set-buffer gnus-original-article-buffer) + (message-resend spam-report-resend-to)))) + +(defun spam-report-resend-ham (articles) + "Report an article as ham by resending via email." + (spam-report-resend articles t)) + (defun spam-report-gmane (&rest articles) - "Report an article as spam through Gmane" + "Report an article as spam through Gmane." + (interactive (gnus-summary-work-articles current-prefix-arg)) (dolist (article articles) (when (and gnus-newsgroup-name (or (null spam-report-gmane-regex) (string-match spam-report-gmane-regex gnus-newsgroup-name))) (gnus-message 6 "Reporting spam article %d to spam.gmane.org..." article) (if spam-report-gmane-use-article-number - (spam-report-url-ping "spam.gmane.org" - (format "/%s:%d" - (gnus-group-real-name gnus-newsgroup-name) - article)) + (spam-report-url-ping + "spam.gmane.org" + (format "/%s:%d" + (gnus-group-real-name gnus-newsgroup-name) + article)) (with-current-buffer nntp-server-buffer (gnus-request-head article gnus-newsgroup-name) (goto-char (point-min)) @@ -109,6 +144,7 @@ undo that change.") (gnus-message 3 "Could not find X-Report-Spam in article %d..." article))))))) + (defun spam-report-url-ping (host report) "Ping a host through HTTP, addressing a specific GET resource using the function specified by `spam-report-url-ping-function'." @@ -240,4 +276,5 @@ Process queued spam reports." (provide 'spam-report) +;;; arch-tag: f6683295-ec89-4ab5-8803-8cc842293022 ;;; spam-report.el ends here. diff --git a/lisp/spam-stat.el b/lisp/spam-stat.el index 0038731..1b1530d 100644 --- a/lisp/spam-stat.el +++ b/lisp/spam-stat.el @@ -129,6 +129,7 @@ Use the functions to build a dictionary of words and their statistical distribution in spam and non-spam mails. Then use a function to determine whether a buffer contains spam or not." + :version "22.1" :group 'gnus) (defcustom spam-stat-file "~/.spam-stat.el" @@ -167,7 +168,7 @@ no effect when spam-stat is invoked through spam.el." :type 'string :group 'spam-stat) -(defcustom spam-stat-split-fancy-spam-threshhold 0.9 +(defcustom spam-stat-split-fancy-spam-threshold 0.9 "Spam score threshold in spam-stat-split-fancy." :type 'number :group 'spam-stat) @@ -177,13 +178,36 @@ no effect when spam-stat is invoked through spam.el." :type 'hook :group 'spam-stat) +(defcustom spam-stat-score-buffer-user-functions nil + "List of additional scoring functions. +Called one by one on the buffer. + +If all of these functions return non-nil answers, these numerical +answers are added to the computed spam stat score on the buffer. If +you defun such functions, make sure they don't return the buffer in a +narrowed state or such: use, for example, `save-excursion'. Each of +your functions is also passed the initial spam-stat score which might +aid in your scoring. + +Also be careful when defining such functions. If they take a long +time, they will slow down your mail splitting. Thus, if the buffer is +large, don't forget to use smaller regions, by wrapping your work in, +say, `with-spam-stat-max-buffer-size'." + :type '(repeat sexp) + :group 'spam-stat) + (defcustom spam-stat-process-directory-age 90 "Max. age of files to be processed in directory, in days. When using `spam-stat-process-spam-directory' or `spam-stat-process-non-spam-directory', only files that have been touched in this many days will be considered. Without this filter, re-training spam-stat with several thousand messages -will start to take a very long time.") +will start to take a very long time." + :type 'number + :group 'spam-stat) + +(defvar spam-stat-last-saved-at nil + "Time stamp of last change of spam-stat-file on this run") (defvar spam-stat-syntax-table (let ((table (copy-syntax-table text-mode-syntax-table))) @@ -242,6 +266,9 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good', (defvar spam-stat-nbad 0 "The number of bad mails in the dictionary.") +(defvar spam-stat-error-holder nil + "A holder for condition-case errors while scoring buffers.") + (defsubst spam-stat-good (entry) "Return the number of times this word belongs to good mails." (aref entry 0)) @@ -383,7 +410,7 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good', ;; Saving and Loading (defun spam-stat-save (&optional force) - "Save the `spam-stat' hash table as Lisp file. + "Save the `spam-stat' hash table as lisp file. With a prefix argument save unconditionally." (interactive "P") (when (or force spam-stat-dirty) @@ -400,14 +427,25 @@ spam-stat (spam-stat-to-hash-table '(" spam-stat-ngood spam-stat-nbad)) (spam-stat-bad entry)))) spam-stat) (insert ")))")))) - (setq spam-stat-dirty nil))) + (message "Saved %s." spam-stat-file) + (setq spam-stat-dirty nil + spam-stat-last-saved-at (nth 5 (file-attributes spam-stat-file))))) (defun spam-stat-load () "Read the `spam-stat' hash table from disk." ;; TODO: maybe we should warn the user if spam-stat-dirty is t? (let ((coding-system-for-read spam-stat-coding-system)) - (load-file spam-stat-file)) - (setq spam-stat-dirty nil)) + (cond (spam-stat-dirty (message "Spam stat not loaded: spam-stat-dirty t")) + ((or (not (boundp 'spam-stat-last-saved-at)) + (null spam-stat-last-saved-at) + (not (equal spam-stat-last-saved-at + (nth 5 (file-attributes spam-stat-file))))) + (progn + (load-file spam-stat-file) + (setq spam-stat-dirty nil + spam-stat-last-saved-at + (nth 5 (file-attributes spam-stat-file))))) + (t (message "Spam stat file not loaded: no change in disk.."))))) (defun spam-stat-to-hash-table (entries) "Turn list ENTRIES into a hash table and store as `spam-stat'. @@ -461,29 +499,51 @@ where DIFF is the difference between SCORE and 0.5." result)) (defun spam-stat-score-buffer () - "Return a score describing the spam-probability for this buffer." + "Return a score describing the spam-probability for this buffer. +Add user supplied modifications if supplied." + (interactive) ; helps in debugging. (setq spam-stat-score-data (spam-stat-buffer-words-with-scores)) (let* ((probs (mapcar 'cadr spam-stat-score-data)) - (prod (apply #'* probs))) - (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x)) - probs)))))) + (prod (apply #'* probs)) + (score0 + (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x)) + probs))))) + (score1s + (condition-case + spam-stat-error-holder + (spam-stat-score-buffer-user score0) + (error nil))) + (ans + (if score1s (+ score0 score1s) score0))) + (when (interactive-p) + (message "%S" ans)) + ans)) + +(defun spam-stat-score-buffer-user (&rest args) + (let* ((scores + (mapcar + (lambda (fn) + (apply fn args)) + spam-stat-score-buffer-user-functions))) + (if (memq nil scores) nil + (apply #'+ scores)))) (defun spam-stat-split-fancy () "Return the name of the spam group if the current mail is spam. Use this function on `nnmail-split-fancy'. If you are interested in the raw data used for the last run of `spam-stat-score-buffer', check the variable `spam-stat-score-data'." - (condition-case var + (condition-case spam-stat-error-holder (progn (set-buffer spam-stat-buffer) (goto-char (point-min)) - (when (> (spam-stat-score-buffer) spam-stat-split-fancy-spam-threshhold) + (when (> (spam-stat-score-buffer) spam-stat-split-fancy-spam-threshold) (when (boundp 'nnmail-split-trace) (mapc (lambda (entry) (push entry nnmail-split-trace)) spam-stat-score-data)) spam-stat-split-fancy-spam-group)) - (error (message "Error in spam-stat-split-fancy: %S" var) + (error (message "Error in spam-stat-split-fancy: %S" spam-stat-error-holder) nil))) ;; Testing @@ -605,6 +665,9 @@ COUNT defaults to 5" (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) +;;; arch-tag: ff1d2200-8ddb-42fb-bb7b-1b5e20448554 ;;; spam-stat.el ends here diff --git a/lisp/spam-wash.el b/lisp/spam-wash.el index be91cdf..821da9e 100644 --- a/lisp/spam-wash.el +++ b/lisp/spam-wash.el @@ -71,4 +71,5 @@ (provide 'spam-wash) +;;; arch-tag: 3c7f94a7-c96d-4c77-bb59-950df12bc85f ;;; spam-wash.el ends here diff --git a/lisp/spam.el b/lisp/spam.el index f3d0c11..ee57514 100644 --- a/lisp/spam.el +++ b/lisp/spam.el @@ -32,12 +32,14 @@ ;;; Several TODO items are marked as such -;; TODO: spam scores, detection of spam in newsgroups, cross-server splitting, -;; remote processing, training through files +;; TODO: cross-server splitting, remote processing, training through files ;;; Code: +;;{{{ compilation directives and autoloads/requires + (eval-when-compile (require 'cl)) +(eval-when-compile (require 'spam-report)) (require 'gnus-sum) @@ -55,7 +57,8 @@ ;; autoload spam-report (eval-and-compile - (autoload 'spam-report-gmane "spam-report")) + (autoload 'spam-report-gmane "spam-report") + (autoload 'spam-report-resend "spam-report")) ;; autoload gnus-registry (eval-and-compile @@ -68,26 +71,36 @@ (eval-and-compile (autoload 'query-dns "dns")) -;;; Main parameters. +;;}}} + +;;{{{ Main parameters. +(defvar spam-backends nil + "List of spam.el backends with all the pertinent data. +Populated by spam-install-backend-super.") (defgroup spam nil - "Spam configuration.") + "Spam configuration." + :version "22.1") + +(defcustom spam-summary-exit-behavior 'default + "Exit behavior at the time of summary exit. +Note that setting the spam-use-move or spam-use-copy backends on +a group through group/topic parameters overrides this mechanism." + :type '(choice (const 'default :tag + "Move spam out of all groups. Move ham out of spam groups.") + (const 'move-all :tag + "Move spam out of all groups. Move ham out of all groups.") + (const 'move-none :tag + "Never move spam or ham out of any groups.")) + :group 'spam) (defcustom spam-directory (nnheader-concat gnus-directory "spam/") "Directory for spam whitelists and blacklists." :type 'directory :group 'spam) -(defcustom spam-move-spam-nonspam-groups-only t - "Whether spam should be moved in non-spam groups only. -When t, only ham and unclassified groups will have their spam moved -to the spam-process-destination. When nil, spam will also be moved from -spam groups." - :type 'boolean - :group 'spam) - -(defcustom spam-process-ham-in-nonham-groups nil - "Whether ham should be processed in non-ham groups." +(defcustom spam-mark-new-messages-in-spam-group-as-spam t + "Whether new messages in a spam group should get the spam-mark." :type 'boolean :group 'spam) @@ -108,11 +121,6 @@ Do not set this if you use `spam-split' in a fancy split :type 'boolean :group 'spam) -(defcustom spam-process-ham-in-spam-groups nil - "Whether ham should be processed in spam groups." - :type 'boolean - :group 'spam) - (defcustom spam-mark-only-unseen-as-spam t "Whether only unseen articles should be marked as spam in spam groups. When nil, all unread articles in a spam group are marked as @@ -275,6 +283,11 @@ them." :type 'boolean :group 'spam) +(defcustom spam-use-crm114 nil + "Whether the CRM114 Mailfilter should be used by `spam-split'." + :type 'boolean + :group 'spam) + (defcustom spam-install-hooks (or spam-use-dig spam-use-gmane-xref @@ -295,7 +308,8 @@ them." spam-use-BBDB-exclusive spam-use-ifile spam-use-stat - spam-use-spamoracle) + spam-use-spamoracle + spam-use-crm114) "Whether the spam hooks should be installed. Default to t if one of the spam-use-* variables is set." :group 'spam @@ -333,11 +347,22 @@ Only meaningful if you enable `spam-use-blackholes'." (defcustom spam-blackhole-good-server-regex nil "String matching IP addresses that should not be checked in the blackholes. Only meaningful if you enable `spam-use-blackholes'." - :type '(radio (const nil) - (regexp :format "%t: %v\n" :size 0)) + :type '(radio (const nil) regexp) :group 'spam) -(defcustom spam-face 'gnus-splash-face +(defface spam-face + '((((class color) (type tty) (background dark)) + (:foreground "gray80" :background "gray50")) + (((class color) (type tty) (background light)) + (:foreground "gray50" :background "gray80")) + (((class color) (background dark)) + (:foreground "ivory2")) + (((class color) (background light)) + (:foreground "ivory4")) + (t :inverse-video t)) + "Face for spam-marked articles.") + +(defcustom spam-face 'spam-face "Face for spam-marked articles." :type 'face :group 'spam) @@ -366,6 +391,14 @@ Only meaningful if you enable `spam-use-regex-body'." :type '(repeat (regexp :tag "Regular expression to match ham body")) :group 'spam) +(defcustom spam-summary-score-preferred-header nil + "Preferred header to use for spam-summary-score." + :type '(choice :tag "Header name" + (symbol :tag "SpamAssassin etc" X-Spam-Status) + (symbol :tag "Bogofilter" X-Bogosity) + (const :tag "No preference, take best guess." nil)) + :group 'spam) + (defgroup spam-ifile nil "Spam ifile configuration." :group 'spam) @@ -411,6 +444,8 @@ your main source of newsgroup names." (const :tag "Bogofilter is not installed")) :group 'spam-bogofilter) +(defvar spam-bogofilter-valid 'unknown "Is the bogofilter version valid?") + (defcustom spam-bogofilter-header "X-Bogosity" "The header that Bogofilter inserts in messages." :type 'string @@ -576,6 +611,53 @@ order for SpamAssassin to recognize the new registered spam." :type 'string :group 'spam-spamassassin) +(defgroup spam-crm114 nil + "Spam CRM114 Mailfilter configuration." + :group 'spam) + +(defcustom spam-crm114-program (executable-find "mailfilter.crm") + "File path of the CRM114 Mailfilter executable program." + :type '(choice (file :tag "Location of CRM114 Mailfilter") + (const :tag "CRM114 Mailfilter is not installed")) + :group 'spam-crm114) + +(defcustom spam-crm114-header "X-CRM114-Status" + "The header that CRM114 Mailfilter inserts in messages." + :type 'string + :group 'spam-crm114) + +(defcustom spam-crm114-spam-switch "--learnspam" + "The switch that CRM114 Mailfilter uses to register spam messages." + :type 'string + :group 'spam-crm114) + +(defcustom spam-crm114-ham-switch "--learnnonspam" + "The switch that CRM114 Mailfilter uses to register ham messages." + :type 'string + :group 'spam-crm114) + +(defcustom spam-crm114-spam-strong-switch "--UNKNOWN" + "The switch that CRM114 Mailfilter uses to unregister ham messages." + :type 'string + :group 'spam-crm114) + +(defcustom spam-crm114-ham-strong-switch "--UNKNOWN" + "The switch that CRM114 Mailfilter uses to unregister spam messages." + :type 'string + :group 'spam-crm114) + +(defcustom spam-crm114-positive-spam-header "^SPAM" + "The regex on `spam-crm114-header' for positive spam identification." + :type 'regexp + :group 'spam-crm114) + +(defcustom spam-crm114-database-directory nil + "Directory path of the CRM114 Mailfilter databases." + :type '(choice (directory + :tag "Location of the CRM114 Mailfilter database directory") + (const :tag "Use the default")) + :group 'spam-crm114) + ;;; Key bindings for spam control. (gnus-define-keys gnus-summary-mode-map @@ -593,11 +675,8 @@ order for SpamAssassin to recognize the new registered spam." :test 'equal) "Cache of spam detection entries.") -(defvar spam-old-ham-articles nil - "List of old ham articles, generated when a group is entered.") - -(defvar spam-old-spam-articles nil - "List of old spam articles, generated when a group is entered.") +(defvar spam-old-articles nil + "List of old ham and spam articles, generated when a group is entered.") (defvar spam-split-disabled nil "If non-nil, `spam-split' is disabled, and always returns nil.") @@ -607,7 +686,17 @@ order for SpamAssassin to recognize the new registered spam." `spam-split' will set this to nil or a spam-use-XYZ check if it finds ham or spam.") -;; convenience functions +;; internal variables for backends +;; TODO: find a way to create these on the fly in spam-install-backend-super +(defvar spam-use-copy nil) +(defvar spam-use-move nil) +(defvar spam-use-gmane nil) +(defvar spam-use-resend nil) + +;;}}} + +;;{{{ convenience functions + (defun spam-clear-cache (symbol) "Clear the spam-caches entry for a check." (remhash symbol spam-caches)) @@ -616,6 +705,20 @@ finds ham or spam.") "Logical A xor B." (and (or a b) (not (and a b)))) +(defun spam-set-difference (list1 list2) + "Return a set difference of LIST1 and LIST2. +When either list is nil, the other is returned." + (if (and list1 list2) + ;; we have two non-nil lists + (progn + (dolist (item (append list1 list2)) + (when (and (memq item list1) (memq item list2)) + (setq list1 (delq item list1)) + (setq list2 (delq item list2)))) + (append list1 list2)) + ;; if either of the lists was nil, return the other one + (if list1 list1 list2))) + (defun spam-group-ham-mark-p (group mark &optional spam) "Checks if MARK is considered a ham mark in GROUP." (when (stringp group) @@ -645,7 +748,7 @@ finds ham or spam.") (defun spam-group-spam-contents-p (group) "Is GROUP a spam group?" - (if (stringp group) + (if (and (stringp group) (< 0 (length group))) (or (member group spam-junk-mailgroups) (memq 'gnus-group-spam-classification-spam (gnus-parameter-spam-contents group))) @@ -658,97 +761,382 @@ finds ham or spam.") (gnus-parameter-spam-contents group)) nil)) -(defvar spam-list-of-processors - '((gnus-group-spam-exit-processor-report-gmane spam spam-use-gmane) - (gnus-group-spam-exit-processor-bogofilter spam spam-use-bogofilter) - (gnus-group-spam-exit-processor-bsfilter spam spam-use-bsfilter) - (gnus-group-spam-exit-processor-blacklist spam spam-use-blacklist) - (gnus-group-spam-exit-processor-ifile spam spam-use-ifile) - (gnus-group-spam-exit-processor-stat spam spam-use-stat) - (gnus-group-spam-exit-processor-spamoracle spam spam-use-spamoracle) - (gnus-group-spam-exit-processor-spamassassin spam spam-use-spamassassin) - (gnus-group-ham-exit-processor-ifile ham spam-use-ifile) - (gnus-group-ham-exit-processor-bogofilter ham spam-use-bogofilter) - (gnus-group-ham-exit-processor-bsfilter ham spam-use-bsfilter) - (gnus-group-ham-exit-processor-stat ham spam-use-stat) - (gnus-group-ham-exit-processor-whitelist ham spam-use-whitelist) - (gnus-group-ham-exit-processor-BBDB ham spam-use-BBDB) - (gnus-group-ham-exit-processor-copy ham spam-use-ham-copy) - (gnus-group-ham-exit-processor-spamassassin ham spam-use-spamassassin) - (gnus-group-ham-exit-processor-spamoracle ham spam-use-spamoracle)) - "The `spam-list-of-processors' list. -This list contains pairs associating a ham/spam exit processor -variable with a classification and a spam-use-* variable.") - -(defun spam-group-processor-p (group processor) - (if (and (stringp group) - (symbolp processor)) - (or (member processor (nth 0 (gnus-parameter-spam-process group))) - (spam-group-processor-multiple-p - group - (cdr-safe (assoc processor spam-list-of-processors)))) - nil)) - -(defun spam-group-processor-multiple-p (group processor-info) - (let* ((classification (nth 0 processor-info)) - (check (nth 1 processor-info)) - (parameters (nth 0 (gnus-parameter-spam-process group))) - found) - (dolist (parameter parameters) - (when (and (null found) - (listp parameter) - (eq classification (nth 0 parameter)) - (eq check (nth 1 parameter))) - (setq found t))) - found)) - -(defun spam-group-spam-processor-report-gmane-p (group) - (spam-group-processor-p group 'gnus-group-spam-exit-processor-report-gmane)) +(defun spam-classifications () + "Return list of valid classifications" + '(spam ham)) -(defun spam-group-spam-processor-bogofilter-p (group) - (spam-group-processor-p group 'gnus-group-spam-exit-processor-bogofilter)) - -(defun spam-group-spam-processor-blacklist-p (group) - (spam-group-processor-p group 'gnus-group-spam-exit-processor-blacklist)) - -(defun spam-group-spam-processor-ifile-p (group) - (spam-group-processor-p group 'gnus-group-spam-exit-processor-ifile)) - -(defun spam-group-ham-processor-ifile-p (group) - (spam-group-processor-p group 'gnus-group-ham-exit-processor-ifile)) +(defun spam-classification-valid-p (classification) + "Is CLASSIFICATION a valid spam/ham classification?" + (memq classification (spam-classifications))) -(defun spam-group-spam-processor-spamoracle-p (group) - (spam-group-processor-p group 'gnus-group-spam-exit-processor-spamoracle)) +(defun spam-backend-properties () + "Return list of valid classifications." + '(statistical mover check hrf srf huf suf)) -(defun spam-group-ham-processor-bogofilter-p (group) - (spam-group-processor-p group 'gnus-group-ham-exit-processor-bogofilter)) +(defun spam-backend-property-valid-p (property) + "Is PROPERTY a valid backend property?" + (memq property (spam-backend-properties))) -(defun spam-group-spam-processor-stat-p (group) - (spam-group-processor-p group 'gnus-group-spam-exit-processor-stat)) +(defun spam-backend-function-type-valid-p (type) + (or (eq type 'registration) + (eq type 'unregistration))) -(defun spam-group-ham-processor-stat-p (group) - (spam-group-processor-p group 'gnus-group-ham-exit-processor-stat)) +(defun spam-process-type-valid-p (process-type) + (or (eq process-type 'incoming) + (eq process-type 'process))) -(defun spam-group-ham-processor-whitelist-p (group) - (spam-group-processor-p group 'gnus-group-ham-exit-processor-whitelist)) +(defun spam-list-articles (articles classification) + (let ((mark-check (if (eq classification 'spam) + 'spam-group-spam-mark-p + 'spam-group-ham-mark-p)) + alist mark-cache-yes mark-cache-no) + (dolist (article articles) + (let ((mark (gnus-summary-article-mark article))) + (unless (or (memq mark mark-cache-yes) + (memq mark mark-cache-no)) + (if (funcall mark-check + gnus-newsgroup-name + mark) + (push mark mark-cache-yes) + (push mark mark-cache-no))) + (when (memq mark mark-cache-yes) + (push article alist)))) + alist)) -(defun spam-group-ham-processor-BBDB-p (group) - (spam-group-processor-p group 'gnus-group-ham-exit-processor-BBDB)) +;;}}} -(defun spam-group-ham-processor-copy-p (group) - (spam-group-processor-p group 'gnus-group-ham-exit-processor-copy)) +;;{{{ backend installation functions and procedures -(defun spam-group-ham-processor-spamoracle-p (group) - (spam-group-processor-p group 'gnus-group-ham-exit-processor-spamoracle)) +(defun spam-install-backend-super (backend &rest properties) + "Install BACKEND for spam.el. +Accepts incoming CHECK, ham registration function HRF, spam +registration function SRF, ham unregistration function HUF, spam +unregistration function SUF, and an indication whether the +backend is STATISTICAL." -(defun spam-report-articles-gmane (n) - "Report the current message as spam. -Respects the process/prefix convention." - (interactive "P") - (dolist (article (gnus-summary-work-articles n)) - (gnus-summary-remove-process-mark article) - (spam-report-gmane article))) + (setq spam-backends (add-to-list 'spam-backends backend)) + (while properties + (let ((property (pop properties)) + (value (pop properties))) + (if (spam-backend-property-valid-p property) + (put backend property value) + (gnus-error + 5 + "spam-install-backend-super got an invalid property %s" + property))))) +(defun spam-backend-list (&optional type) + "Return a list of all the backend symbols, constrained by TYPE. +When TYPE is 'non-mover, only non-mover backends are returned. +When TYPE is 'mover, only mover backends are returned." + (let (list) + (dolist (backend spam-backends) + (when (or + (null type) ;either no type was requested + ;; or the type is 'mover and the backend is a mover + (and + (eq type 'mover) + (spam-backend-mover-p backend)) + ;; or the type is 'non-mover and the backend is not a mover + (and + (eq type 'non-mover) + (not (spam-backend-mover-p backend)))) + (push backend list))) + list)) + +(defun spam-backend-check (backend) + "Get the check function for BACKEND. +Each individual check may return nil, t, or a mailgroup name. +The value nil means that the check does not yield a decision, and +so, that further checks are needed. The value t means that the +message is definitely not spam, and that further spam checks +should be inhibited. Otherwise, a mailgroup name or the symbol +'spam (depending on spam-split-symbolic-return) is returned where +the mail should go, and further checks are also inhibited. The +usual mailgroup name is the value of `spam-split-group', meaning +that the message is definitely a spam." + (get backend 'check)) + +(defun spam-backend-valid-p (backend) + "Is BACKEND valid?" + (member backend (spam-backend-list))) + +(defun spam-backend-info (backend) + "Return information about BACKEND." + (if (spam-backend-valid-p backend) + (let (info) + (setq info (format "Backend %s has the following properties:\n" + backend)) + (dolist (property (spam-backend-properties)) + (setq info (format "%s%s=%s\n" + info + property + (get backend property)))) + info) + (gnus-error 5 "spam-backend-info was asked about an invalid backend %s" + backend))) + +(defun spam-backend-function (backend classification type) + "Get the BACKEND function for CLASSIFICATION and TYPE. +TYPE is 'registration or 'unregistration. +CLASSIFICATION is 'ham or 'spam." + (if (and + (spam-classification-valid-p classification) + (spam-backend-function-type-valid-p type)) + (let ((retrieval + (intern + (format "spam-backend-%s-%s-function" + classification + type)))) + (funcall retrieval backend)) + (gnus-error + 5 + "%s was passed invalid backend %s, classification %s, or type %s" + "spam-backend-function" + backend + classification + type))) + +(defun spam-backend-article-list-property (classification + &optional unregister) + "Property name of article list with CLASSIFICATION and UNREGISTER." + (let* ((r (if unregister "unregister" "register")) + (prop (format "%s-%s" classification r))) + prop)) + +(defun spam-backend-get-article-todo-list (backend + classification + &optional unregister) + "Get the articles to be processed for BACKEND and CLASSIFICATION. +With UNREGISTER, get articles to be unregistered. +This is a temporary storage function - nothing here persists." + (get + backend + (intern (spam-backend-article-list-property classification unregister)))) + +(defun spam-backend-put-article-todo-list (backend classification list &optional unregister) + "Set the LIST of articles to be processed for BACKEND and CLASSIFICATION. +With UNREGISTER, set articles to be unregistered. +This is a temporary storage function - nothing here persists." + (put + backend + (intern (spam-backend-article-list-property classification unregister)) + list)) + +(defun spam-backend-ham-registration-function (backend) + "Get the ham registration function for BACKEND." + (get backend 'hrf)) + +(defun spam-backend-spam-registration-function (backend) + "Get the spam registration function for BACKEND." + (get backend 'srf)) + +(defun spam-backend-ham-unregistration-function (backend) + "Get the ham unregistration function for BACKEND." + (get backend 'huf)) + +(defun spam-backend-spam-unregistration-function (backend) + "Get the spam unregistration function for BACKEND." + (get backend 'suf)) + +(defun spam-backend-statistical-p (backend) + "Is BACKEND statistical?" + (get backend 'statistical)) + +(defun spam-backend-mover-p (backend) + "Is BACKEND a mover?" + (get backend 'mover)) + +(defun spam-install-backend-alias (backend alias) + "Add ALIAS to an existing BACKEND. +The previous backend settings for ALIAS are erased." + + ;; install alias with no properties at first + (spam-install-backend-super alias) + + (dolist (property (spam-backend-properties)) + (put alias property (get backend property)))) + +(defun spam-install-checkonly-backend (backend check) + "Install a BACKEND than can only CHECK for spam." + (spam-install-backend-super backend 'check check)) + +(defun spam-install-mover-backend (backend hrf srf huf suf) + "Install a BACKEND than can move articles at summary exit. +Accepts ham registration function HRF, spam registration function +SRF, ham unregistration function HUF, spam unregistration +function SUF. The backend has no incoming check and can't be +statistical." + (spam-install-backend-super + backend + 'hrf hrf 'srf srf 'huf huf 'suf suf 'mover t)) + +(defun spam-install-nocheck-backend (backend hrf srf huf suf) + "Install a BACKEND than has no check. +Accepts ham registration function HRF, spam registration function +SRF, ham unregistration function HUF, spam unregistration +function SUF. The backend has no incoming check and can't be +statistical (it could be, but in practice that doesn't happen)." + (spam-install-backend-super + backend + 'hrf hrf 'srf srf 'huf huf 'suf suf)) + +(defun spam-install-backend (backend check hrf srf huf suf) + "Install a BACKEND. +Accepts incoming CHECK, ham registration function HRF, spam +registration function SRF, ham unregistration function HUF, spam +unregistration function SUF. The backend won't be +statistical (use spam-install-statistical-backend for that)." + (spam-install-backend-super + backend + 'check check 'hrf hrf 'srf srf 'huf huf 'suf suf)) + +(defun spam-install-statistical-backend (backend check hrf srf huf suf) + "Install a BACKEND. +Accepts incoming CHECK, ham registration function HRF, spam +registration function SRF, ham unregistration function HUF, spam +unregistration function SUF. The backend will be +statistical (use spam-install-backend for non-statistical +backends)." + (spam-install-backend-super + backend + 'check check 'statistical t 'hrf hrf 'srf srf 'huf huf 'suf suf)) + +(defun spam-install-statistical-checkonly-backend (backend check) + "Install a statistical BACKEND than can only CHECK for spam." + (spam-install-backend-super + backend + 'check check 'statistical t)) + +;;}}} + +;;{{{ backend installations +(spam-install-checkonly-backend 'spam-use-blackholes + 'spam-check-blackholes) + +(spam-install-checkonly-backend 'spam-use-hashcash + 'spam-check-hashcash) + +(spam-install-checkonly-backend 'spam-use-spamassassin-headers + 'spam-check-spamassassin-headers) + +(spam-install-checkonly-backend 'spam-use-bogofilter-headers + 'spam-check-bogofilter-headers) + +(spam-install-checkonly-backend 'spam-use-bsfilter-headers + 'spam-check-bsfilter-headers) + +(spam-install-checkonly-backend 'spam-use-gmane-xref + 'spam-check-gmane-xref) + +(spam-install-checkonly-backend 'spam-use-regex-headers + 'spam-check-regex-headers) + +(spam-install-statistical-checkonly-backend 'spam-use-regex-body + 'spam-check-regex-body) + +;; TODO: NOTE: spam-use-ham-copy is now obsolete, use (ham spam-use-copy) instead +(spam-install-mover-backend 'spam-use-move + 'spam-move-ham-routine + 'spam-move-spam-routine + nil + nil) + +(spam-install-nocheck-backend 'spam-use-copy + 'spam-copy-ham-routine + 'spam-copy-spam-routine + nil + nil) + +(spam-install-nocheck-backend 'spam-use-gmane + nil + 'spam-report-gmane-register-routine + ;; does Gmane support unregistration? + nil + nil) + +(spam-install-nocheck-backend 'spam-use-resend + 'spam-report-resend-register-ham-routine + 'spam-report-resend-register-routine + nil + nil) + +(spam-install-backend 'spam-use-BBDB + 'spam-check-BBDB + 'spam-BBDB-register-routine + nil + 'spam-BBDB-unregister-routine + nil) + +(spam-install-backend-alias 'spam-use-BBDB 'spam-use-BBDB-exclusive) + +(spam-install-backend 'spam-use-blacklist + 'spam-check-blacklist + nil + 'spam-blacklist-register-routine + nil + 'spam-blacklist-unregister-routine) + +(spam-install-backend 'spam-use-whitelist + 'spam-check-whitelist + 'spam-whitelist-register-routine + nil + 'spam-whitelist-unregister-routine + nil) + +(spam-install-statistical-backend 'spam-use-ifile + 'spam-check-ifile + 'spam-ifile-register-ham-routine + 'spam-ifile-register-spam-routine + 'spam-ifile-unregister-ham-routine + 'spam-ifile-unregister-spam-routine) + +(spam-install-statistical-backend 'spam-use-spamoracle + 'spam-check-spamoracle + 'spam-spamoracle-learn-ham + 'spam-spamoracle-learn-spam + 'spam-spamoracle-unlearn-ham + 'spam-spamoracle-unlearn-spam) + +(spam-install-statistical-backend 'spam-use-stat + 'spam-check-stat + 'spam-stat-register-ham-routine + 'spam-stat-register-spam-routine + 'spam-stat-unregister-ham-routine + 'spam-stat-unregister-spam-routine) + +(spam-install-statistical-backend 'spam-use-spamassassin + 'spam-check-spamassassin + 'spam-spamassassin-register-ham-routine + 'spam-spamassassin-register-spam-routine + 'spam-spamassassin-unregister-ham-routine + 'spam-spamassassin-unregister-spam-routine) + +(spam-install-statistical-backend 'spam-use-bogofilter + 'spam-check-bogofilter + 'spam-bogofilter-register-ham-routine + 'spam-bogofilter-register-spam-routine + 'spam-bogofilter-unregister-ham-routine + 'spam-bogofilter-unregister-spam-routine) + +(spam-install-statistical-backend 'spam-use-bsfilter + 'spam-check-bsfilter + 'spam-bsfilter-register-ham-routine + 'spam-bsfilter-register-spam-routine + 'spam-bsfilter-unregister-ham-routine + 'spam-bsfilter-unregister-spam-routine) + +(spam-install-statistical-backend 'spam-use-crm114 + 'spam-check-crm114 + 'spam-crm114-register-ham-routine + 'spam-crm114-register-spam-routine + ;; does CRM114 Mailfilter support unregistration? + nil + nil) + +;;}}} + +;;{{{ scoring and summary formatting (defun spam-necessary-extra-headers () "Return the extra headers spam.el thinks are necessary." (let (list) @@ -756,11 +1144,14 @@ Respects the process/prefix convention." spam-use-spamassassin-headers spam-use-regex-headers) (push 'X-Spam-Status list)) + (when spam-use-bogofilter + (push 'X-Bogosity list)) list)) (defun spam-user-format-function-S (headers) (when headers - (spam-summary-score headers))) + (format "%3.2f" + (spam-summary-score headers spam-summary-score-preferred-header)))) (defun spam-article-sort-by-spam-status (h1 h2) "Sort articles by score." @@ -774,13 +1165,23 @@ Respects the process/prefix convention." result)) (defun spam-extra-header-to-number (header headers) - "Transform an extra header to a number." + "Transform an extra HEADER to a number, using list of HEADERS. +Note this has to be fast." (if (gnus-extra-header header headers) (cond ((eq header 'X-Spam-Status) (string-to-number (gnus-replace-in-string (gnus-extra-header header headers) ".*hits=" ""))) + ;; for CRM checking, it's probably faster to just do the string match + ((and spam-use-crm114 (string-match "( pR: \\([0-9.-]+\\)" header)) + (match-string 1 header)) + ((eq header 'X-Bogosity) + (string-to-number (gnus-replace-in-string + (gnus-replace-in-string + (gnus-extra-header header headers) + ".*spamicity=" "") + ",.*" ""))) (t nil)) nil)) @@ -807,15 +1208,118 @@ Will not return a nil score." (spam-spamassassin-score recheck)) ((or spam-use-bsfilter spam-use-bsfilter-headers) (spam-bsfilter-score recheck)) + (spam-use-crm114 + (spam-crm114-score)) (t (spam-bogofilter-score recheck)))) +;;}}} + +;;{{{ set up widening, processor checks + +;;; set up IMAP widening if it's necessary +(defun spam-setup-widening () + (when (spam-widening-needed-p) + (setq nnimap-split-download-body-default t))) + +(defun spam-widening-needed-p (&optional force-symbols) + (let (found) + (dolist (backend (spam-backend-list)) + (when (and (spam-backend-statistical-p backend) + (or (symbol-value backend) + (memq backend force-symbols))) + (setq found backend))) + found)) -;;; Summary entry and exit processing. +(defvar spam-list-of-processors + ;; note the nil processors are not defined in gnus.el + '((gnus-group-spam-exit-processor-bogofilter spam spam-use-bogofilter) + (gnus-group-spam-exit-processor-bsfilter spam spam-use-bsfilter) + (gnus-group-spam-exit-processor-blacklist spam spam-use-blacklist) + (gnus-group-spam-exit-processor-ifile spam spam-use-ifile) + (gnus-group-spam-exit-processor-stat spam spam-use-stat) + (gnus-group-spam-exit-processor-spamoracle spam spam-use-spamoracle) + (gnus-group-spam-exit-processor-spamassassin spam spam-use-spamassassin) + (gnus-group-ham-exit-processor-ifile ham spam-use-ifile) + (gnus-group-ham-exit-processor-bogofilter ham spam-use-bogofilter) + (gnus-group-ham-exit-processor-bsfilter ham spam-use-bsfilter) + (gnus-group-ham-exit-processor-stat ham spam-use-stat) + (gnus-group-ham-exit-processor-whitelist ham spam-use-whitelist) + (gnus-group-ham-exit-processor-BBDB ham spam-use-BBDB) + (gnus-group-ham-exit-processor-copy ham spam-use-ham-copy) + (gnus-group-ham-exit-processor-spamassassin ham spam-use-spamassassin) + (gnus-group-ham-exit-processor-spamoracle ham spam-use-spamoracle)) + "The OBSOLETE `spam-list-of-processors' list. +This list contains pairs associating the obsolete ham/spam exit +processor variables with a classification and a spam-use-* +variable. When the processor variable is nil, just the +classification and spam-use-* check variable are used. This is +superceded by the new spam backend code, so it's only consulted +for backwards compatibility.") + +(defun spam-group-processor-p (group backend &optional classification) + "Checks if GROUP has a BACKEND with CLASSIFICATION registered. +Also accepts the obsolete processors, which can be found in +gnus.el and in spam-list-of-processors. In the case of mover +backends, checks the setting of spam-summary-exit-behavior in +addition to the set values for the group." + (if (and (stringp group) + (symbolp backend)) + (let ((old-style (assq backend spam-list-of-processors)) + (parameters (nth 0 (gnus-parameter-spam-process group))) + found) + (if old-style ; old-style processor + (spam-group-processor-p group (nth 2 old-style) (nth 1 old-style)) + ;; now search for the parameter + (dolist (parameter parameters) + (when (and (null found) + (listp parameter) + (eq classification (nth 0 parameter)) + (eq backend (nth 1 parameter))) + (setq found t))) + + ;; now, if the parameter was not found, do the + ;; spam-summary-exit-behavior-logic for mover backends + (unless found + (when (spam-backend-mover-p backend) + (setq + found + (cond + ((eq spam-summary-exit-behavior 'move-all) t) + ((eq spam-summary-exit-behavior 'move-none) nil) + ((eq spam-summary-exit-behavior 'default) + (or (eq classification 'spam) ;move spam out of all groups + ;; move ham out of spam groups + (and (eq classification 'ham) + (spam-group-spam-contents-p group)))) + (t (gnus-error 5 "Unknown spam-summary-exit-behavior: %s" + spam-summary-exit-behavior)))))) + + found)) + nil)) + +;;}}} + +;;{{{ Summary entry and exit processing. + +(defun spam-mark-junk-as-spam-routine () + ;; check the global list of group names spam-junk-mailgroups and the + ;; group parameters + (when (spam-group-spam-contents-p gnus-newsgroup-name) + (gnus-message 6 "Marking %s articles as spam" + (if spam-mark-only-unseen-as-spam + "unseen" + "unread")) + (let ((articles (if spam-mark-only-unseen-as-spam + gnus-newsgroup-unseen + gnus-newsgroup-unreads))) + (if spam-mark-new-messages-in-spam-group-as-spam + (dolist (article articles) + (gnus-summary-mark-article article gnus-spam-mark)) + (gnus-message 9 "Did not mark new messages as spam."))))) (defun spam-summary-prepare () - (setq spam-old-ham-articles - (spam-list-articles gnus-newsgroup-articles 'ham)) - (setq spam-old-spam-articles - (spam-list-articles gnus-newsgroup-articles 'spam)) + (setq spam-old-articles + (list (cons 'ham (spam-list-articles gnus-newsgroup-articles 'ham)) + (cons 'spam (spam-list-articles gnus-newsgroup-articles 'spam)))) (spam-mark-junk-as-spam-routine)) ;; The spam processors are invoked for any group, spam or ham or neither @@ -823,157 +1327,78 @@ Will not return a nil score." (unless gnus-group-is-exiting-without-update-p (gnus-message 6 "Exiting summary buffer and applying spam rules") + ;; before we begin, remove any article limits +; (ignore-errors +; (gnus-summary-pop-limit t)) + ;; first of all, unregister any articles that are no longer ham or spam ;; we have to iterate over the processors, or else we'll be too slow - (dolist (classification '(spam ham)) - (let* ((old-articles (if (eq classification 'spam) - spam-old-spam-articles - spam-old-ham-articles)) + (dolist (classification (spam-classifications)) + (let* ((old-articles (cdr-safe (assq classification spam-old-articles))) (new-articles (spam-list-articles gnus-newsgroup-articles classification)) (changed-articles (spam-set-difference new-articles old-articles))) ;; now that we have the changed articles, we go through the processors - (dolist (processor-param spam-list-of-processors) - (let ((processor (nth 0 processor-param)) - (processor-classification (nth 1 processor-param)) - (check (nth 2 processor-param)) - unregister-list) + (dolist (backend (spam-backend-list)) + (let (unregister-list) (dolist (article changed-articles) (let ((id (spam-fetch-field-message-id-fast article))) (when (spam-log-unregistration-needed-p - id 'process classification check) + id 'process classification backend) (push article unregister-list)))) ;; call spam-register-routine with specific articles to unregister, ;; when there are articles to unregister and the check is enabled - (when (and unregister-list (symbol-value check)) - (spam-register-routine - classification check t unregister-list)))))) - - ;; find all the spam processors applicable to this group - (dolist (processor-param spam-list-of-processors) - (let ((processor (nth 0 processor-param)) - (classification (nth 1 processor-param)) - (check (nth 2 processor-param))) - (when (and (eq 'spam classification) - (spam-group-processor-p gnus-newsgroup-name processor)) - (spam-register-routine classification check)))) - - (unless (and spam-move-spam-nonspam-groups-only - (spam-group-spam-contents-p gnus-newsgroup-name)) - (gnus-message 6 "Marking spam as expired and moving it to %s" - (gnus-parameter-spam-process-destination - gnus-newsgroup-name)) - (spam-mark-spam-as-expired-and-move-routine - (gnus-parameter-spam-process-destination gnus-newsgroup-name))) - - ;; now we redo spam-mark-spam-as-expired-and-move-routine to only - ;; expire spam, in case the above did not expire them - (gnus-message 6 "Marking spam as expired without moving it") - (spam-mark-spam-as-expired-and-move-routine nil) - - (when (or (spam-group-ham-contents-p gnus-newsgroup-name) - (and (spam-group-spam-contents-p gnus-newsgroup-name) - spam-process-ham-in-spam-groups) - spam-process-ham-in-nonham-groups) - ;; find all the ham processors applicable to this group - (dolist (processor-param spam-list-of-processors) - (let ((processor (nth 0 processor-param)) - (classification (nth 1 processor-param)) - (check (nth 2 processor-param))) - (when (and (eq 'ham classification) - (spam-group-processor-p gnus-newsgroup-name processor)) - (spam-register-routine classification check))))) - - (when (spam-group-ham-processor-copy-p gnus-newsgroup-name) - (gnus-message 6 "Copying ham") - (spam-ham-copy-routine - (gnus-parameter-ham-process-destination gnus-newsgroup-name))) - - ;; now move all ham articles out of spam groups - (when (spam-group-spam-contents-p gnus-newsgroup-name) - (gnus-message 6 "Moving ham messages from spam group") - (spam-ham-move-routine - (gnus-parameter-ham-process-destination gnus-newsgroup-name)))) - - (setq spam-old-ham-articles nil) - (setq spam-old-spam-articles nil)) + (when (and unregister-list (symbol-value backend)) + (spam-backend-put-article-todo-list backend + classification + unregister-list + t)))))) -(defun spam-set-difference (list1 list2) - "Return a set difference of LIST1 and LIST2. -When either list is nil, the other is returned." - (if (and list1 list2) - ;; we have two non-nil lists - (progn - (dolist (item (append list1 list2)) - (when (and (memq item list1) (memq item list2)) - (setq list1 (delq item list1)) - (setq list2 (delq item list2)))) - (append list1 list2)) - ;; if either of the lists was nil, return the other one - (if list1 list1 list2))) + ;; do the non-moving backends first, then the moving ones + (dolist (backend-type '(non-mover mover)) + (dolist (classification (spam-classifications)) + (dolist (backend (spam-backend-list backend-type)) + (when (spam-group-processor-p + gnus-newsgroup-name + backend + classification) + (spam-backend-put-article-todo-list backend + classification + (spam-list-articles + gnus-newsgroup-articles + classification)))))) -(defun spam-mark-junk-as-spam-routine () - ;; check the global list of group names spam-junk-mailgroups and the - ;; group parameters - (when (spam-group-spam-contents-p gnus-newsgroup-name) - (gnus-message 6 "Marking %s articles as spam" - (if spam-mark-only-unseen-as-spam - "unseen" - "unread")) - (let ((articles (if spam-mark-only-unseen-as-spam - gnus-newsgroup-unseen - gnus-newsgroup-unreads))) - (dolist (article articles) - (gnus-summary-mark-article article gnus-spam-mark))))) - -(defun spam-mark-spam-as-expired-and-move-routine (&rest groups) - (if (and (car-safe groups) (listp (car-safe groups))) - (apply 'spam-mark-spam-as-expired-and-move-routine (car groups)) - (gnus-summary-kill-process-mark) - (let ((articles gnus-newsgroup-articles) - (backend-supports-deletions - (gnus-check-backend-function - 'request-move-article gnus-newsgroup-name)) - article tomove deletep) - (dolist (article articles) - (when (eq (gnus-summary-article-mark article) gnus-spam-mark) - (gnus-summary-mark-article article gnus-expirable-mark) - (push article tomove))) - - ;; now do the actual copies - (dolist (group groups) - (when (and tomove - (stringp group)) - (dolist (article tomove) - (gnus-summary-set-process-mark article)) - (when tomove - (if (or (not backend-supports-deletions) - (> (length groups) 1)) - (progn - (gnus-summary-copy-article nil group) - (setq deletep t)) - (gnus-summary-move-article nil group))))) + (spam-resolve-registrations-routine) ; do the registrations now + + ;; we mark all the leftover spam articles as expired at the end + (dolist (article (spam-list-articles + gnus-newsgroup-articles + 'spam)) + (gnus-summary-mark-article article gnus-expirable-mark))) + + (setq spam-old-articles nil)) + +;;}}} + +;;{{{ spam-use-move and spam-use-copy backend support functions - ;; now delete the articles, if there was a copy done, and the - ;; backend allows it - (when (and deletep backend-supports-deletions) - (dolist (article tomove) - (gnus-summary-set-process-mark article)) - (when tomove - (let ((gnus-novice-user nil)) ; don't ask me if I'm sure - (gnus-summary-delete-article nil)))) +(defun spam-copy-or-move-routine (copy groups articles classification) - (gnus-summary-yank-process-mark)))) + (when (and (car-safe groups) (listp (car-safe groups))) + (setq groups (pop groups))) -(defun spam-ham-copy-or-move-routine (copy groups) + (unless (listp groups) + (setq groups (list groups))) + + ;; remove the current process mark (gnus-summary-kill-process-mark) - (let ((todo (spam-list-articles gnus-newsgroup-articles 'ham)) - (backend-supports-deletions + + (let ((backend-supports-deletions (gnus-check-backend-function 'request-move-article gnus-newsgroup-name)) (respool-method (gnus-find-method-for-group gnus-newsgroup-name)) - article mark todo deletep respool) + article mark deletep respool) (when (member 'respool groups) (setq respool t) ; boolean for later @@ -981,47 +1406,88 @@ When either list is nil, the other is returned." ;; now do the actual move (dolist (group groups) - (when (and todo (stringp group)) - (dolist (article todo) - (when spam-mark-ham-unread-before-move-from-spam-group - (gnus-summary-mark-article article gnus-unread-mark)) - (gnus-summary-set-process-mark article)) - - (if respool ; respooling is with a "fake" group - (let ((spam-split-disabled - (or spam-split-disabled - spam-disable-spam-split-during-ham-respool))) - (gnus-summary-respool-article nil respool-method)) - (if (or (not backend-supports-deletions) ; else, we are not respooling - (> (length groups) 1)) - (progn ; if copying, copy and set deletep - (gnus-summary-copy-article nil group) - (setq deletep t)) - (gnus-summary-move-article nil group))))) ; else move articles - - ;; now delete the articles, unless a) copy is t, and there was a copy done - ;; b) a move was done to a single group - ;; c) backend-supports-deletions is nil - (unless copy - (when (and deletep backend-supports-deletions) - (dolist (article todo) - (gnus-summary-set-process-mark article)) - (when todo - (let ((gnus-novice-user nil)) ; don't ask me if I'm sure - (gnus-summary-delete-article nil)))))) - - (gnus-summary-yank-process-mark)) - -(defun spam-ham-copy-routine (&rest groups) - (if (and (car-safe groups) (listp (car-safe groups))) - (apply 'spam-ham-copy-routine (car groups)) - (spam-ham-copy-or-move-routine t groups))) - -(defun spam-ham-move-routine (&rest groups) - (if (and (car-safe groups) (listp (car-safe groups))) - (apply 'spam-ham-move-routine (car groups)) - (spam-ham-copy-or-move-routine nil groups))) + (when (and articles (stringp group)) + ;; first, mark the article with the process mark and, if needed, + ;; the unread or expired mark (for ham and spam respectively) + (dolist (article articles) + (when (and (eq classification 'ham) + spam-mark-ham-unread-before-move-from-spam-group) + (gnus-message 9 "Marking ham article %d unread before move" + article) + (gnus-summary-mark-article article gnus-unread-mark)) + (when (and (eq classification 'spam) + (not copy)) + (gnus-message 9 "Marking spam article %d expirable before move" + article) + (gnus-summary-mark-article article gnus-expirable-mark)) + (gnus-summary-set-process-mark article) + + (if respool ; respooling is with a "fake" group + (let ((spam-split-disabled + (or spam-split-disabled + (and (eq classification 'ham) + spam-disable-spam-split-during-ham-respool)))) + (gnus-message 9 "Respooling article %d with method %s" + article respool-method) + (gnus-summary-respool-article nil respool-method)) + (if (or (not backend-supports-deletions) ; else, we are not respooling + (> (length groups) 1)) + (progn ; if copying, copy and set deletep + (gnus-message 9 "Copying article %d to group %s" + article group) + (gnus-summary-copy-article nil group) + (setq deletep t)) + (gnus-message 9 "Moving article %d to group %s" + article group) + (gnus-summary-move-article nil group))))) ; else move articles + + ;; now delete the articles, unless a) copy is t, and there was a copy done + ;; b) a move was done to a single group + ;; c) backend-supports-deletions is nil + (unless copy + (when (and deletep backend-supports-deletions) + (dolist (article articles) + (gnus-summary-set-process-mark article) + (gnus-message 9 "Deleting article %d" article)) + (when articles + (let ((gnus-novice-user nil)) ; don't ask me if I'm sure + (gnus-summary-delete-article nil))))) + + (gnus-summary-yank-process-mark) + (length articles)))) + +(defun spam-copy-spam-routine (articles) + (spam-copy-or-move-routine + t + (gnus-parameter-spam-process-destination gnus-newsgroup-name) + articles + 'spam)) + +(defun spam-move-spam-routine (articles) + (spam-copy-or-move-routine + nil + (gnus-parameter-spam-process-destination gnus-newsgroup-name) + articles + 'spam)) + +(defun spam-copy-ham-routine (articles) + (spam-copy-or-move-routine + t + (gnus-parameter-ham-process-destination gnus-newsgroup-name) + articles + 'ham)) + +(defun spam-move-ham-routine (articles) + (spam-copy-or-move-routine + nil + (gnus-parameter-ham-process-destination gnus-newsgroup-name) + articles + 'ham)) + +;;}}} + +;;{{{ article and field retrieval code (defun spam-get-article-as-string (article) (when (numberp article) (with-temp-buffer @@ -1043,12 +1509,17 @@ When either list is nil, the other is returned." ;; nil))) (defun spam-fetch-field-fast (article field &optional prepared-data-header) - "Fetch a field quickly, using the internal gnus-data-list function" + "Fetch a FIELD for ARTICLE quickly, using the internal gnus-data-list function. +When PREPARED-DATA-HEADER is given, don't look in the Gnus data. +When FIELD is 'number, ARTICLE can be any number (since we want +to find it out)." (when (numberp article) (let* ((data-header (or prepared-data-header (spam-fetch-article-header article)))) (if (arrayp data-header) (cond + ((equal field 'number) + (mail-header-number data-header)) ((equal field 'from) (mail-header-from data-header)) ((equal field 'message-id) @@ -1064,6 +1535,10 @@ When either list is nil, the other is returned." ((equal field 'extra) (mail-header-extra data-header)) (t + (gnus-error + 5 + "spam-fetch-field-fast: unknown field %s requested" + field) nil)) (gnus-message 6 "Article %d has a nil data header" article))))) @@ -1080,7 +1555,8 @@ When either list is nil, the other is returned." (let ((dh (spam-fetch-article-header article))) (if dh (concat - (format + (format + ;; 80-character limit makes for strange constructs (concat "From: %s\nSubject: %s\nMessage-ID: %s\n" "Date: %s\nReferences: %s\nXref: %s\n") (spam-fetch-field-fast article 'from dh) @@ -1101,56 +1577,9 @@ When either list is nil, the other is returned." (set-buffer gnus-summary-buffer) (gnus-read-header article) (nth 3 (assq article gnus-newsgroup-data)))) +;;}}} - -;;;; Spam determination. - -(defvar spam-list-of-checks - '((spam-use-blacklist . spam-check-blacklist) - (spam-use-regex-headers . spam-check-regex-headers) - (spam-use-gmane-xref . spam-check-gmane-xref) - (spam-use-regex-body . spam-check-regex-body) - (spam-use-whitelist . spam-check-whitelist) - (spam-use-BBDB . spam-check-BBDB) - (spam-use-BBDB-exclusive . spam-check-BBDB) - (spam-use-ifile . spam-check-ifile) - (spam-use-spamoracle . spam-check-spamoracle) - (spam-use-stat . spam-check-stat) - (spam-use-blackholes . spam-check-blackholes) - (spam-use-hashcash . spam-check-hashcash) - (spam-use-spamassassin-headers . spam-check-spamassassin-headers) - (spam-use-spamassassin . spam-check-spamassassin) - (spam-use-bogofilter-headers . spam-check-bogofilter-headers) - (spam-use-bogofilter . spam-check-bogofilter) - (spam-use-bsfilter-headers . spam-check-bsfilter-headers) - (spam-use-bsfilter . spam-check-bsfilter)) - "The spam-list-of-checks list contains pairs associating a -parameter variable with a spam checking function. If the -parameter variable is true, then the checking function is called, -and its value decides what happens. Each individual check may -return nil, t, or a mailgroup name. The value nil means that the -check does not yield a decision, and so, that further checks are -needed. The value t means that the message is definitely not -spam, and that further spam checks should be inhibited. -Otherwise, a mailgroup name or the symbol 'spam (depending on -spam-split-symbolic-return) is returned where the mail should go, -and further checks are also inhibited. The usual mailgroup name -is the value of `spam-split-group', meaning that the message is -definitely a spam.") - -(defvar spam-list-of-statistical-checks - '(spam-use-ifile - spam-use-regex-body - spam-use-stat - spam-use-bogofilter - spam-use-bsfilter - spam-use-blackholes - spam-use-spamassassin - spam-use-spamoracle) - "The spam-list-of-statistical-checks list contains all the mail -splitters that need to have the full message body available. -Note that you should fetch extra headers if you don't like this, -e.g. fetch the 'Received' header for spam-use-blackholes.") +;;{{{ Spam determination. (defun spam-split (&rest specific-checks) "Split this message into the `spam' group if it is spam. @@ -1169,41 +1598,41 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (setq spam-split-group-choice check) (setq specific-checks (delq check specific-checks)))) - (let ((spam-split-group spam-split-group-choice)) + (let ((spam-split-group spam-split-group-choice) + (widening-needed-check (spam-widening-needed-p specific-checks))) (save-excursion (save-restriction - (dolist (check spam-list-of-statistical-checks) - (when (and (symbolp check) - (or (symbol-value check) - (memq check specific-checks))) - (widen) - (gnus-message 8 "spam-split: widening the buffer (%s requires it)" - (symbol-name check)) - (return))) - ;; (progn (widen) (debug (buffer-string))) - (let ((list-of-checks spam-list-of-checks) + (when widening-needed-check + (widen) + (gnus-message 8 "spam-split: widening the buffer (%s requires it)" + widening-needed-check)) + (let ((backends (spam-backend-list)) decision) - (while (and list-of-checks (not decision)) - (let ((pair (pop list-of-checks))) + (while (and backends (not decision)) + (let* ((backend (pop backends)) + (check-function (spam-backend-check backend)) + (spam-split-group (if spam-split-symbolic-return + 'spam + spam-split-group))) (when (or ;; either, given specific checks, this is one of them - (and specific-checks (memq (car pair) specific-checks)) + (memq backend specific-checks) ;; or, given no specific checks, spam-use-CHECK is set - (and (null specific-checks) (symbol-value (car pair)))) + (and (null specific-checks) (symbol-value backend))) (gnus-message 6 "spam-split: calling the %s function" - (symbol-name (cdr pair))) - (setq decision (funcall (cdr pair))) + check-function) + (setq decision (funcall check-function)) ;; if we got a decision at all, save the current check (when decision - (setq spam-split-last-successful-check (car pair))) + (setq spam-split-last-successful-check backend)) (when (eq decision 'spam) (unless spam-split-symbolic-return (gnus-error 5 (format "spam-split got %s but %s is nil" - (symbol-name decision) - (symbol-name spam-split-symbolic-return)))))))) + decision + spam-split-symbolic-return))))))) (if (eq decision t) (if spam-split-symbolic-return-positive 'ham nil) decision)))))))) @@ -1221,9 +1650,9 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." gnus-newsgroup-unseen)) article-cannot-be-faked) - (dolist (check spam-list-of-statistical-checks) - (when (and (symbolp check) - (memq check methods)) + + (dolist (backend methods) + (when (spam-backend-statistical-p backend) (setq article-cannot-be-faked t) (return))) @@ -1232,165 +1661,132 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (when (and autodetect (not (equal first-method 'none))) - (mapcar - (lambda (article) - (let ((id (spam-fetch-field-message-id-fast article)) - (subject (spam-fetch-field-subject-fast article)) - (sender (spam-fetch-field-from-fast article)) - registry-lookup) - - (unless id - (gnus-message 6 "Article %d has no message ID!" article)) + (mapcar + (lambda (article) + (let ((id (spam-fetch-field-message-id-fast article)) + (subject (spam-fetch-field-subject-fast article)) + (sender (spam-fetch-field-from-fast article)) + registry-lookup) + + (unless id + (gnus-message 6 "Article %d has no message ID!" article)) - (when (and id spam-log-to-registry) - (setq registry-lookup (spam-log-registration-type id 'incoming)) - (when registry-lookup - (gnus-message - 9 - "spam-find-spam: message %s was already registered incoming" - id))) - - (let* ((spam-split-symbolic-return t) - (spam-split-symbolic-return-positive t) - (fake-headers (spam-generate-fake-headers article)) - (split-return - (or registry-lookup - (with-temp-buffer - (if article-cannot-be-faked - (gnus-request-article-this-buffer - article - group) - ;; else, we fake the article - (when fake-headers (insert fake-headers))) - (if (or (null first-method) - (equal first-method 'default)) - (spam-split) - (apply 'spam-split methods)))))) - (if (equal split-return 'spam) - (gnus-summary-mark-article article gnus-spam-mark)) + (when (and id spam-log-to-registry) + (setq registry-lookup (spam-log-registration-type id 'incoming)) + (when registry-lookup + (gnus-message + 9 + "spam-find-spam: message %s was already registered incoming" + id))) + + (let* ((spam-split-symbolic-return t) + (spam-split-symbolic-return-positive t) + (fake-headers (spam-generate-fake-headers article)) + (split-return + (or registry-lookup + (with-temp-buffer + (if article-cannot-be-faked + (gnus-request-article-this-buffer + article + group) + ;; else, we fake the article + (when fake-headers (insert fake-headers))) + (if (or (null first-method) + (equal first-method 'default)) + (spam-split) + (apply 'spam-split methods)))))) + (if (equal split-return 'spam) + (gnus-summary-mark-article article gnus-spam-mark)) - (when (and id split-return spam-log-to-registry) - (when (zerop (gnus-registry-group-count id)) - (gnus-registry-add-group - id group subject sender)) + (when (and id split-return spam-log-to-registry) + (when (zerop (gnus-registry-group-count id)) + (gnus-registry-add-group + id group subject sender)) - (unless registry-lookup - (spam-log-processing-to-registry - id - 'incoming - split-return - spam-split-last-successful-check - group)))))) - articles)))) - -(defvar spam-registration-functions - ;; first the ham register, second the spam register function - ;; third the ham unregister, fourth the spam unregister function - '((spam-use-blacklist nil - spam-blacklist-register-routine - nil - spam-blacklist-unregister-routine) - (spam-use-whitelist spam-whitelist-register-routine - nil - spam-whitelist-unregister-routine - nil) - (spam-use-ham-copy nil - nil - nil - nil) - (spam-use-BBDB spam-BBDB-register-routine - nil - spam-BBDB-unregister-routine - nil) - (spam-use-ifile spam-ifile-register-ham-routine - spam-ifile-register-spam-routine - spam-ifile-unregister-ham-routine - spam-ifile-unregister-spam-routine) - (spam-use-spamoracle spam-spamoracle-learn-ham - spam-spamoracle-learn-spam - spam-spamoracle-unlearn-ham - spam-spamoracle-unlearn-spam) - (spam-use-stat spam-stat-register-ham-routine - spam-stat-register-spam-routine - spam-stat-unregister-ham-routine - spam-stat-unregister-spam-routine) - ;; note that spam-use-gmane is not a legitimate check - (spam-use-gmane nil - spam-report-gmane-register-routine - ;; does Gmane support unregistration? - nil - nil) - (spam-use-spamassassin spam-spamassassin-register-ham-routine - spam-spamassassin-register-spam-routine - spam-spamassassin-unregister-ham-routine - spam-spamassassin-unregister-spam-routine) - (spam-use-bogofilter spam-bogofilter-register-ham-routine - spam-bogofilter-register-spam-routine - spam-bogofilter-unregister-ham-routine - spam-bogofilter-unregister-spam-routine) - (spam-use-bsfilter spam-bsfilter-register-ham-routine - spam-bsfilter-register-spam-routine - spam-bsfilter-unregister-ham-routine - spam-bsfilter-unregister-spam-routine)) - "The spam-registration-functions list contains pairs -associating a parameter variable with the ham and spam -registration functions, and the ham and spam unregistration -functions") - -(defun spam-classification-valid-p (classification) - (or (eq classification 'spam) - (eq classification 'ham))) - -(defun spam-process-type-valid-p (process-type) - (or (eq process-type 'incoming) - (eq process-type 'process))) - -(defun spam-registration-check-valid-p (check) - (assoc check spam-registration-functions)) - -(defun spam-unregistration-check-valid-p (check) - (assoc check spam-registration-functions)) - -(defun spam-registration-function (classification check) - (let ((flist (cdr-safe (assoc check spam-registration-functions)))) - (if (eq classification 'spam) - (nth 1 flist) - (nth 0 flist)))) + (unless registry-lookup + (spam-log-processing-to-registry + id + 'incoming + split-return + spam-split-last-successful-check + group)))))) + articles)))) + +;;}}} + +;;{{{ registration/unregistration functions + +(defun spam-resolve-registrations-routine () + "Go through the backends and register or unregister articles as needed." + (dolist (backend-type '(non-mover mover)) + (dolist (classification (spam-classifications)) + (dolist (backend (spam-backend-list backend-type)) + (let ((rlist (spam-backend-get-article-todo-list + backend classification)) + (ulist (spam-backend-get-article-todo-list + backend classification t)) + (delcount 0)) + + ;; clear the old lists right away + (spam-backend-put-article-todo-list backend + classification + nil + nil) + (spam-backend-put-article-todo-list backend + classification + nil + t) + + ;; eliminate duplicates + (dolist (article (copy-sequence ulist)) + (when (memq article rlist) + (incf delcount) + (setq rlist (delq article rlist)) + (setq ulist (delq article ulist)))) + + (unless (zerop delcount) + (gnus-message + 9 + "%d messages were saved the trouble of unregistering and then registering" + delcount)) + + ;; unregister articles + (unless (zerop (length ulist)) + (let ((num (spam-unregister-routine classification backend ulist))) + (when (> num 0) + (gnus-message + 6 + "%d %s messages were unregistered by backend %s." + num + classification + backend)))) + + ;; register articles + (unless (zerop (length rlist)) + (let ((num (spam-register-routine classification backend rlist))) + (when (> num 0) + (gnus-message + 6 + "%d %s messages were registered by backend %s." + num + classification + backend))))))))) -(defun spam-unregistration-function (classification check) - (let ((flist (cdr-safe (assoc check spam-registration-functions)))) - (if (eq classification 'spam) - (nth 3 flist) - (nth 2 flist)))) - -(defun spam-list-articles (articles classification) - (let ((mark-check (if (eq classification 'spam) - 'spam-group-spam-mark-p - 'spam-group-ham-mark-p)) - alist mark-cache-yes mark-cache-no) - (dolist (article articles) - (let ((mark (gnus-summary-article-mark article))) - (unless (or (memq mark mark-cache-yes) - (memq mark mark-cache-no)) - (if (funcall mark-check - gnus-newsgroup-name - mark) - (push mark mark-cache-yes) - (push mark mark-cache-no))) - (when (memq mark mark-cache-yes) - (push article alist)))) - alist)) +(defun spam-unregister-routine (classification + backend + specific-articles) + (spam-register-routine classification backend specific-articles t)) (defun spam-register-routine (classification - check - &optional unregister - specific-articles) + backend + specific-articles + &optional unregister) (when (and (spam-classification-valid-p classification) - (spam-registration-check-valid-p check)) + (spam-backend-valid-p backend)) (let* ((register-function - (spam-registration-function classification check)) + (spam-backend-function backend classification 'registration)) (unregister-function - (spam-unregistration-function classification check)) + (spam-backend-function backend classification 'unregistration)) (run-function (if unregister unregister-function register-function)) @@ -1406,41 +1802,45 @@ functions") gnus-newsgroup-articles classification))) ;; process them - (gnus-message 5 "%s %d %s articles as %s using backend %s" - (if unregister "Unregistering" "Registering") - (length articles) - (if specific-articles "specific" "") - (symbol-name classification) - (symbol-name check)) - (funcall run-function articles) - ;; now log all the registrations (or undo them, depending on unregister) - (dolist (article articles) - (funcall log-function - (spam-fetch-field-message-id-fast article) - 'process - classification - check - gnus-newsgroup-name)))))) + (when (> (length articles) 0) + (gnus-message 5 "%s %d %s articles as %s using backend %s" + (if unregister "Unregistering" "Registering") + (length articles) + (if specific-articles "specific" "") + classification + backend) + (funcall run-function articles) + ;; now log all the registrations (or undo them, depending on + ;; unregister) + (dolist (article articles) + (funcall log-function + (spam-fetch-field-message-id-fast article) + 'process + classification + backend + gnus-newsgroup-name)))) + ;; return the number of articles processed + (length articles)))) ;;; log a ham- or spam-processor invocation to the registry -(defun spam-log-processing-to-registry (id type classification check group) +(defun spam-log-processing-to-registry (id type classification backend group) (when spam-log-to-registry (if (and (stringp id) (stringp group) (spam-process-type-valid-p type) (spam-classification-valid-p classification) - (spam-registration-check-valid-p check)) + (spam-backend-valid-p backend)) (let ((cell-list (cdr-safe (gnus-registry-fetch-extra id type))) - (cell (list classification check group))) + (cell (list classification backend group))) (push cell cell-list) (gnus-registry-store-extra-entry id type cell-list)) - (gnus-message - 5 - (format "%s call with bad ID, type, classification, spam-check, or group" + (gnus-error + 7 + (format "%s call with bad ID, type, classification, spam-backend, or group" "spam-log-processing-to-registry"))))) ;;; check if a ham- or spam-processor registration has been done @@ -1450,9 +1850,9 @@ functions") (spam-process-type-valid-p type)) (cdr-safe (gnus-registry-fetch-extra id type)) (progn - (gnus-message - 5 - (format "%s called with bad ID, type, classification, or spam-check" + (gnus-error + 7 + (format "%s called with bad ID, type, classification, or spam-backend" "spam-log-registered-p")) nil)))) @@ -1474,87 +1874,80 @@ functions") ;;; check if a ham- or spam-processor registration needs to be undone -(defun spam-log-unregistration-needed-p (id type classification check) +(defun spam-log-unregistration-needed-p (id type classification backend) (when spam-log-to-registry (if (and (stringp id) (spam-process-type-valid-p type) (spam-classification-valid-p classification) - (spam-registration-check-valid-p check)) + (spam-backend-valid-p backend)) (let ((cell-list (cdr-safe (gnus-registry-fetch-extra id type))) found) (dolist (cell cell-list) (unless found (when (and (eq classification (nth 0 cell)) - (eq check (nth 1 cell))) + (eq backend (nth 1 cell))) (setq found t)))) found) (progn - (gnus-message - 5 - (format "%s called with bad ID, type, classification, or spam-check" + (gnus-error + 7 + (format "%s called with bad ID, type, classification, or spam-backend" "spam-log-unregistration-needed-p")) nil)))) ;;; undo a ham- or spam-processor registration (the group is not used) -(defun spam-log-undo-registration (id type classification check &optional group) +(defun spam-log-undo-registration (id type classification backend &optional group) (when (and spam-log-to-registry - (spam-log-unregistration-needed-p id type classification check)) + (spam-log-unregistration-needed-p id type classification backend)) (if (and (stringp id) (spam-process-type-valid-p type) (spam-classification-valid-p classification) - (spam-registration-check-valid-p check)) + (spam-backend-valid-p backend)) (let ((cell-list (cdr-safe (gnus-registry-fetch-extra id type))) new-cell-list found) (dolist (cell cell-list) (unless (and (eq classification (nth 0 cell)) - (eq check (nth 1 cell))) + (eq backend (nth 1 cell))) (push cell new-cell-list))) (gnus-registry-store-extra-entry id type new-cell-list)) (progn - (gnus-message 6 (format "%s call with bad ID, type, spam-check, or group" - "spam-log-undo-registration")) + (gnus-error 7 (format "%s call with bad ID, type, spam-backend, or group" + "spam-log-undo-registration")) nil)))) -;;; set up IMAP widening if it's necessary -(defun spam-setup-widening () - (dolist (check spam-list-of-statistical-checks) - (when (symbol-value check) - (setq nnimap-split-download-body-default t)))) +;;}}} + +;;{{{ backend functions - -;;;; Gmane xrefs +;;{{{ Gmane xrefs (defun spam-check-gmane-xref () (let ((header (or (message-fetch-field "Xref") - (message-fetch-field "Newsgroups"))) - (spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group))) + (message-fetch-field "Newsgroups")))) (when header ; return nil when no header (when (string-match spam-gmane-xref-spam-group header) spam-split-group)))) - -;;;; Regex body +;;}}} + +;;{{{ Regex body (defun spam-check-regex-body () (let ((spam-regex-headers-ham spam-regex-body-ham) (spam-regex-headers-spam spam-regex-body-spam)) (spam-check-regex-headers t))) - -;;;; Regex headers +;;}}} + +;;{{{ Regex headers (defun spam-check-regex-headers (&optional body) (let ((type (if body "body" "header")) - (spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group)) ret found) (dolist (h-regex spam-regex-headers-ham) (unless found @@ -1571,8 +1964,9 @@ functions") (setq ret spam-split-group)))) ret)) - -;;;; Blackholes. +;;}}} + +;;{{{ Blackholes. (defun spam-reverse-ip-string (ip) (when (stringp ip) @@ -1583,9 +1977,6 @@ functions") (defun spam-check-blackholes () "Check the Received headers for blackholed relays." (let ((headers (message-fetch-field "received")) - (spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group)) ips matches) (when headers (with-temp-buffer @@ -1620,8 +2011,12 @@ functions") matches))))))))) (when matches spam-split-group))) - -;;;; Hashcash. +;;}}} + +;;{{{ Hashcash. + +(eval-when-compile + (autoload 'mail-check-payment "hashcash")) (condition-case nil (progn @@ -1631,105 +2026,106 @@ functions") "Check the headers for hashcash payments." (mail-check-payment))) ;mail-check-payment returns a boolean - (file-error (progn - (defalias 'mail-check-payment 'ignore) - (defalias 'spam-check-hashcash 'ignore)))) - -;;;; BBDB + (file-error)) +;;}}} + +;;{{{ BBDB ;;; original idea for spam-check-BBDB from Alexander Kotelnikov ;;; ;; all this is done inside a condition-case to trap errors -(condition-case nil - (progn - (require 'bbdb) - (require 'bbdb-com) - - ;; when the BBDB changes, we want to clear out our cache - (defun spam-clear-cache-BBDB (&rest immaterial) - (spam-clear-cache 'spam-use-BBDB)) - - (add-hook 'bbdb-change-hook 'spam-clear-cache-BBDB) - - (defun spam-enter-ham-BBDB (addresses &optional remove) - "Enter an address into the BBDB; implies ham (non-spam) sender" - (dolist (from addresses) - (when (stringp from) - (let* ((parsed-address (gnus-extract-address-components from)) - (name (or (nth 0 parsed-address) "Ham Sender")) - (remove-function (if remove - 'bbdb-delete-record-internal - 'ignore)) - (net-address (nth 1 parsed-address)) - (record (and net-address - (bbdb-search-simple nil net-address)))) - (when net-address - (gnus-message 6 "%s address %s %s BBDB" - (if remove "Deleting" "Adding") - from - (if remove "from" "to")) - (if record - (funcall remove-function record) - (bbdb-create-internal name nil net-address nil nil - "ham sender added by spam.el"))))))) - - (defun spam-BBDB-register-routine (articles &optional unregister) - (let (addresses) - (dolist (article articles) - (when (stringp (spam-fetch-field-from-fast article)) - (push (spam-fetch-field-from-fast article) addresses))) - ;; now do the register/unregister action - (spam-enter-ham-BBDB addresses unregister))) - - (defun spam-BBDB-unregister-routine (articles) - (spam-BBDB-register-routine articles t)) - - (defun spam-check-BBDB () - "Mail from people in the BBDB is classified as ham or non-spam" - (let ((who (message-fetch-field "from")) - (spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group)) - bbdb-cache bbdb-hashtable) - (when spam-cache-lookups - (setq bbdb-cache (gethash 'spam-use-BBDB spam-caches)) - (unless bbdb-cache - (setq bbdb-cache - ;; this is the expanded (bbdb-hashtable) macro - ;; without the debugging support - (with-current-buffer (bbdb-buffer) - (save-excursion - (save-window-excursion - (bbdb-records nil t) - bbdb-hashtable)))) - (puthash 'spam-use-BBDB bbdb-cache spam-caches))) - (when who - (setq who (nth 1 (gnus-extract-address-components who))) - (if - (if spam-cache-lookups - (symbol-value - (intern-soft who bbdb-cache)) - (bbdb-search-simple nil who)) - t - (if spam-use-BBDB-exclusive - spam-split-group - nil)))))) - - (file-error (progn - (defalias 'bbdb-search-simple 'ignore) - (defalias 'bbdb-records 'ignore) - (defalias 'bbdb-buffer 'ignore) - (defalias 'spam-check-BBDB 'ignore) - (defalias 'spam-BBDB-register-routine 'ignore) - (defalias 'spam-enter-ham-BBDB 'ignore) - (defalias 'bbdb-create-internal 'ignore) - (defalias 'bbdb-delete-record-internal 'ignore) - (defalias 'bbdb-records 'ignore)))) - - -;;;; ifile +(eval-when-compile + (autoload 'bbdb-buffer "bbdb") + (autoload 'bbdb-create-internal "bbdb") + (autoload 'bbdb-search-simple "bbdb")) + +(eval-and-compile + (when (condition-case nil + (progn + (require 'bbdb) + (require 'bbdb-com)) + (file-error + ;; `bbdb-records' should not be bound as an autoload function + ;; before loading bbdb because of `bbdb-hashtable-size'. + (defalias 'bbdb-records 'ignore) + (defalias 'spam-BBDB-register-routine 'ignore) + (defalias 'spam-enter-ham-BBDB 'ignore) + nil)) + + ;; when the BBDB changes, we want to clear out our cache + (defun spam-clear-cache-BBDB (&rest immaterial) + (spam-clear-cache 'spam-use-BBDB)) + + (add-hook 'bbdb-change-hook 'spam-clear-cache-BBDB) + + (defun spam-enter-ham-BBDB (addresses &optional remove) + "Enter an address into the BBDB; implies ham (non-spam) sender" + (dolist (from addresses) + (when (stringp from) + (let* ((parsed-address (gnus-extract-address-components from)) + (name (or (nth 0 parsed-address) "Ham Sender")) + (remove-function (if remove + 'bbdb-delete-record-internal + 'ignore)) + (net-address (nth 1 parsed-address)) + (record (and net-address + (bbdb-search-simple nil net-address)))) + (when net-address + (gnus-message 6 "%s address %s %s BBDB" + (if remove "Deleting" "Adding") + from + (if remove "from" "to")) + (if record + (funcall remove-function record) + (bbdb-create-internal name nil net-address nil nil + "ham sender added by spam.el"))))))) + + (defun spam-BBDB-register-routine (articles &optional unregister) + (let (addresses) + (dolist (article articles) + (when (stringp (spam-fetch-field-from-fast article)) + (push (spam-fetch-field-from-fast article) addresses))) + ;; now do the register/unregister action + (spam-enter-ham-BBDB addresses unregister))) + + (defun spam-BBDB-unregister-routine (articles) + (spam-BBDB-register-routine articles t)) + + (defun spam-check-BBDB () + "Mail from people in the BBDB is classified as ham or non-spam" + (let ((who (message-fetch-field "from")) + bbdb-cache bbdb-hashtable) + (when spam-cache-lookups + (setq bbdb-cache (gethash 'spam-use-BBDB spam-caches)) + (unless bbdb-cache + (setq bbdb-cache (make-vector 17 0)) ; a good starting hash value + ;; this is based on the expanded (bbdb-hashtable) macro + ;; without the debugging support + (with-current-buffer (bbdb-buffer) + (save-excursion + (save-window-excursion + (bbdb-records nil t) + (mapatoms + (lambda (symbol) + (intern (downcase (symbol-name symbol)) bbdb-cache)) + bbdb-hashtable)))) + (puthash 'spam-use-BBDB bbdb-cache spam-caches))) + (when who + (setq who (nth 1 (gnus-extract-address-components who))) + (if + (if spam-cache-lookups + (intern-soft (downcase who) bbdb-cache) + (bbdb-search-simple nil who)) + t + (if spam-use-BBDB-exclusive + spam-split-group + nil))))))) + +;;}}} + +;;{{{ ifile ;;; check the ifile backend; return nil if the mail was NOT classified ;;; as spam @@ -1744,9 +2140,6 @@ functions") (defun spam-check-ifile () "Check the ifile backend for the classification of this message." (let ((article-buffer-name (buffer-name)) - (spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group)) category return) (with-temp-buffer (let ((temp-buffer-name (buffer-name)) @@ -1799,73 +2192,68 @@ Uses `gnus-newsgroup-name' if category is nil (for ham registration)." (defun spam-ifile-unregister-ham-routine (articles) (spam-ifile-register-ham-routine articles t)) - -;;;; spam-stat +;;}}} -(condition-case nil - (progn - (let ((spam-stat-install-hooks nil)) - (require 'spam-stat)) - - (defun spam-check-stat () - "Check the spam-stat backend for the classification of this message" - (let ((spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group)) - (spam-stat-split-fancy-spam-group spam-split-group) ; override - (spam-stat-buffer (buffer-name)) ; stat the current buffer - category return) - (spam-stat-split-fancy))) - - (defun spam-stat-register-spam-routine (articles &optional unregister) - (dolist (article articles) - (let ((article-string (spam-get-article-as-string article))) - (with-temp-buffer - (insert article-string) - (if unregister - (spam-stat-buffer-change-to-non-spam) +;;{{{ spam-stat + +(eval-when-compile + (autoload 'spam-stat-buffer-change-to-non-spam "spam-stat") + (autoload 'spam-stat-buffer-change-to-spam "spam-stat") + (autoload 'spam-stat-buffer-is-non-spam "spam-stat") + (autoload 'spam-stat-buffer-is-spam "spam-stat") + (autoload 'spam-stat-load "spam-stat") + (autoload 'spam-stat-save "spam-stat") + (autoload 'spam-stat-split-fancy "spam-stat")) + +(eval-and-compile + (when (condition-case nil + (let ((spam-stat-install-hooks nil)) + (require 'spam-stat)) + (file-error + (defalias 'spam-stat-register-ham-routine 'ignore) + (defalias 'spam-stat-register-spam-routine 'ignore) + nil)) + + (defun spam-check-stat () + "Check the spam-stat backend for the classification of this message" + (let ((spam-stat-split-fancy-spam-group spam-split-group) ; override + (spam-stat-buffer (buffer-name)) ; stat the current buffer + category return) + (spam-stat-split-fancy))) + + (defun spam-stat-register-spam-routine (articles &optional unregister) + (dolist (article articles) + (let ((article-string (spam-get-article-as-string article))) + (with-temp-buffer + (insert article-string) + (if unregister + (spam-stat-buffer-change-to-non-spam) (spam-stat-buffer-is-spam)))))) - (defun spam-stat-unregister-spam-routine (articles) - (spam-stat-register-spam-routine articles t)) + (defun spam-stat-unregister-spam-routine (articles) + (spam-stat-register-spam-routine articles t)) - (defun spam-stat-register-ham-routine (articles &optional unregister) - (dolist (article articles) - (let ((article-string (spam-get-article-as-string article))) - (with-temp-buffer - (insert article-string) - (if unregister - (spam-stat-buffer-change-to-spam) + (defun spam-stat-register-ham-routine (articles &optional unregister) + (dolist (article articles) + (let ((article-string (spam-get-article-as-string article))) + (with-temp-buffer + (insert article-string) + (if unregister + (spam-stat-buffer-change-to-spam) (spam-stat-buffer-is-non-spam)))))) - (defun spam-stat-unregister-ham-routine (articles) - (spam-stat-register-ham-routine articles t)) - - (defun spam-maybe-spam-stat-load () - (when spam-use-stat (spam-stat-load))) + (defun spam-stat-unregister-ham-routine (articles) + (spam-stat-register-ham-routine articles t)) - (defun spam-maybe-spam-stat-save () - (when spam-use-stat (spam-stat-save)))) + (defun spam-maybe-spam-stat-load () + (when spam-use-stat (spam-stat-load))) - (file-error (progn - (defalias 'spam-stat-load 'ignore) - (defalias 'spam-stat-save 'ignore) - (defalias 'spam-maybe-spam-stat-load 'ignore) - (defalias 'spam-maybe-spam-stat-save 'ignore) - (defalias 'spam-stat-register-ham-routine 'ignore) - (defalias 'spam-stat-unregister-ham-routine 'ignore) - (defalias 'spam-stat-register-spam-routine 'ignore) - (defalias 'spam-stat-unregister-spam-routine 'ignore) - (defalias 'spam-stat-buffer-is-spam 'ignore) - (defalias 'spam-stat-buffer-change-to-spam 'ignore) - (defalias 'spam-stat-buffer-is-non-spam 'ignore) - (defalias 'spam-stat-buffer-change-to-non-spam 'ignore) - (defalias 'spam-stat-split-fancy 'ignore) - (defalias 'spam-check-stat 'ignore)))) + (defun spam-maybe-spam-stat-save () + (when spam-use-stat (spam-stat-save))))) - +;;}}} -;;;; Blacklists and whitelists. +;;{{{ Blacklists and whitelists. (defvar spam-whitelist-cache nil) (defvar spam-blacklist-cache nil) @@ -1950,25 +2338,20 @@ REMOVE not nil, remove the ADDRESSES." ;;; spam-split-group otherwise (defun spam-check-whitelist () ;; FIXME! Should it detect when file timestamps change? - (let ((spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group))) - (unless spam-whitelist-cache - (setq spam-whitelist-cache (spam-parse-list spam-whitelist))) - (if (spam-from-listed-p 'spam-use-whitelist) - t - (if spam-use-whitelist-exclusive - spam-split-group - nil)))) + (unless spam-whitelist-cache + (setq spam-whitelist-cache (spam-parse-list spam-whitelist))) + (if (spam-from-listed-p 'spam-use-whitelist) + t + (if spam-use-whitelist-exclusive + spam-split-group + nil))) (defun spam-check-blacklist () ;; FIXME! Should it detect when file timestamps change? - (let ((spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group))) - (unless spam-blacklist-cache - (setq spam-blacklist-cache (spam-parse-list spam-blacklist))) - (and (spam-from-listed-p 'spam-use-blacklist) spam-split-group))) + (unless spam-blacklist-cache + (setq spam-blacklist-cache (spam-parse-list spam-blacklist))) + (and (spam-from-listed-p 'spam-use-blacklist) + spam-split-group)) (defun spam-parse-list (file) (when (file-readable-p file) @@ -2041,19 +2424,30 @@ REMOVE not nil, remove the ADDRESSES." (defun spam-whitelist-register-routine (articles &optional unregister) (spam-filelist-register-routine articles nil unregister)) - -;;;; Spam-report glue +;;}}} + +;;{{{ Spam-report glue (gmane and resend reporting) (defun spam-report-gmane-register-routine (articles) (when articles (apply 'spam-report-gmane articles))) - -;;;; Bogofilter +(defun spam-report-resend-register-ham-routine (articles) + (spam-report-resend-register-routine articles t)) + +(defun spam-report-resend-register-routine (articles &optional ham) + (let* ((resend-to-gp + (if ham + (gnus-parameter-ham-resend-to gnus-newsgroup-name) + (gnus-parameter-spam-resend-to gnus-newsgroup-name))) + (spam-report-resend-to (or (car-safe resend-to-gp) + spam-report-resend-to))) + (spam-report-resend articles ham))) + +;;}}} + +;;{{{ Bogofilter (defun spam-check-bogofilter-headers (&optional score) - (let ((header (message-fetch-field spam-bogofilter-header)) - (spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group))) + (let ((header (message-fetch-field spam-bogofilter-header))) (when header ; return nil when no header (if score ; scoring mode (if (string-match "spamicity=\\([0-9.]+\\)" header) @@ -2078,46 +2472,59 @@ REMOVE not nil, remove the ADDRESSES." (message "Spamicity score %s" score) (or score "0")))) +(defun spam-verify-bogofilter () + "Verify the Bogofilter version is sufficient." + (when (eq spam-bogofilter-valid 'unknown) + (setq spam-bogofilter-valid + (not (string-match "^bogofilter version 0\\.\\([0-9]\\|1[01]\\)\\." + (shell-command-to-string + (format "%s -V" spam-bogofilter-path)))))) + spam-bogofilter-valid) + (defun spam-check-bogofilter (&optional score) - "Check the Bogofilter backend for the classification of this message" - (let ((article-buffer-name (buffer-name)) - (db spam-bogofilter-database-directory) + "Check the Bogofilter backend for the classification of this message." + (if (spam-verify-bogofilter) + (let ((article-buffer-name (buffer-name)) + (db spam-bogofilter-database-directory) + return) + (with-temp-buffer + (let ((temp-buffer-name (buffer-name))) + (save-excursion + (set-buffer article-buffer-name) + (apply 'call-process-region + (point-min) (point-max) + spam-bogofilter-path + nil temp-buffer-name nil + (if db `("-d" ,db "-v") `("-v")))) + (setq return (spam-check-bogofilter-headers score)))) return) - (with-temp-buffer - (let ((temp-buffer-name (buffer-name))) - (save-excursion - (set-buffer article-buffer-name) - (apply 'call-process-region - (point-min) (point-max) - spam-bogofilter-path - nil temp-buffer-name nil - (if db `("-d" ,db "-v") `("-v")))) - (setq return (spam-check-bogofilter-headers score)))) - return)) + (gnus-error "`spam.el' doesnt support obsolete bogofilter versions"))) (defun spam-bogofilter-register-with-bogofilter (articles spam &optional unregister) "Register an article, given as a string, as spam or non-spam." - (dolist (article articles) - (let ((article-string (spam-get-article-as-string article)) - (db spam-bogofilter-database-directory) - (switch (if unregister - (if spam - spam-bogofilter-spam-strong-switch - spam-bogofilter-ham-strong-switch) - (if spam - spam-bogofilter-spam-switch - spam-bogofilter-ham-switch)))) - (when (stringp article-string) - (with-temp-buffer - (insert article-string) - - (apply 'call-process-region - (point-min) (point-max) - spam-bogofilter-path - nil nil nil switch - (if db `("-d" ,db "-v") `("-v")))))))) + (if (spam-verify-bogofilter) + (dolist (article articles) + (let ((article-string (spam-get-article-as-string article)) + (db spam-bogofilter-database-directory) + (switch (if unregister + (if spam + spam-bogofilter-spam-strong-switch + spam-bogofilter-ham-strong-switch) + (if spam + spam-bogofilter-spam-switch + spam-bogofilter-ham-switch)))) + (when (stringp article-string) + (with-temp-buffer + (insert article-string) + + (apply 'call-process-region + (point-min) (point-max) + spam-bogofilter-path + nil nil nil switch + (if db `("-d" ,db "-v") `("-v"))))))) + (gnus-error "`spam.el' doesnt support obsolete bogofilter versions"))) (defun spam-bogofilter-register-spam-routine (articles &optional unregister) (spam-bogofilter-register-with-bogofilter articles t unregister)) @@ -2132,14 +2539,12 @@ REMOVE not nil, remove the ADDRESSES." (spam-bogofilter-register-ham-routine articles t)) - -;;;; spamoracle +;;}}} + +;;{{{ spamoracle (defun spam-check-spamoracle () "Run spamoracle on an article to determine whether it's spam." - (let ((article-buffer-name (buffer-name)) - (spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group))) + (let ((article-buffer-name (buffer-name))) (with-temp-buffer (let ((temp-buffer-name (buffer-name))) (save-excursion @@ -2195,8 +2600,9 @@ REMOVE not nil, remove the ADDRESSES." (defun spam-spamoracle-unlearn-spam (articles &optional unregister) (spam-spamoracle-learn-spam articles t)) - -;;;; SpamAssassin +;;}}} + +;;{{{ SpamAssassin ;;; based mostly on the bogofilter code (defun spam-check-spamassassin-headers (&optional score) "Check the SpamAssassin headers for the classification of this message." @@ -2207,10 +2613,7 @@ REMOVE not nil, remove the ADDRESSES." (match-string 1 header) "0"))) ;; spam detection mode - (let ((header (message-fetch-field spam-spamassassin-spam-flag-header)) - (spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group))) + (let ((header (message-fetch-field spam-spamassassin-spam-flag-header))) (when header ; return nil when no header (when (string-match spam-spamassassin-positive-spam-flag-header header) @@ -2286,17 +2689,15 @@ REMOVE not nil, remove the ADDRESSES." (defun spam-spamassassin-unregister-ham-routine (articles) (spam-spamassassin-register-with-sa-learn articles nil t)) - -;;;; Bsfilter +;;}}} + +;;{{{ Bsfilter ;;; based mostly on the bogofilter code (defun spam-check-bsfilter-headers (&optional score) (if score (or (nnmail-fetch-field spam-bsfilter-probability-header) "0") - (let ((header (nnmail-fetch-field spam-bsfilter-header)) - (spam-split-group (if spam-split-symbolic-return - 'spam - spam-split-group))) + (let ((header (nnmail-fetch-field spam-bsfilter-header))) (when header ; return nil when no header (when (string-match "YES" header) spam-split-group))))) @@ -2373,8 +2774,92 @@ REMOVE not nil, remove the ADDRESSES." (defun spam-bsfilter-unregister-ham-routine (articles) (spam-bsfilter-register-ham-routine articles t)) - -;;;; Hooks +;;}}} + +;;{{{ CRM114 Mailfilter +(defun spam-check-crm114-headers (&optional score) + (let ((header (message-fetch-field spam-crm114-header))) + (when header ; return nil when no header + (if score ; scoring mode + (if (string-match "( pR: \\([0-9.-]+\\)" header) + (match-string 1 header) + "0") + ;; spam detection mode + (when (string-match spam-crm114-positive-spam-header + header) + spam-split-group))))) + +;; return something sensible if the score can't be determined +(defun spam-crm114-score () + "Get the CRM114 Mailfilter pR" + (interactive) + (save-window-excursion + (gnus-summary-show-article t) + (set-buffer gnus-article-buffer) + (let ((score (or (spam-check-crm114-headers t) + (spam-check-crm114 t)))) + (gnus-summary-show-article) + (message "pR: %s" score) + (or score "0")))) + +(defun spam-check-crm114 (&optional score) + "Check the CRM114 Mailfilter backend for the classification of this message" + (let ((article-buffer-name (buffer-name)) + (db spam-crm114-database-directory) + return) + (with-temp-buffer + (let ((temp-buffer-name (buffer-name))) + (save-excursion + (set-buffer article-buffer-name) + (apply 'call-process-region + (point-min) (point-max) + spam-crm114-program + nil temp-buffer-name nil + (when db (list (concat "--fileprefix=" db))))) + (setq return (spam-check-crm114-headers score)))) + return)) + +(defun spam-crm114-register-with-crm114 (articles + spam + &optional unregister) + "Register an article, given as a string, as spam or non-spam." + (dolist (article articles) + (let ((article-string (spam-get-article-as-string article)) + (db spam-crm114-database-directory) + (switch (if unregister + (if spam + spam-crm114-spam-strong-switch + spam-crm114-ham-strong-switch) + (if spam + spam-crm114-spam-switch + spam-crm114-ham-switch)))) + (when (stringp article-string) + (with-temp-buffer + (insert article-string) + + (apply 'call-process-region + (point-min) (point-max) + spam-crm114-program + nil nil nil + (when db (list switch (concat "--fileprefix=" db))))))))) + +(defun spam-crm114-register-spam-routine (articles &optional unregister) + (spam-crm114-register-with-crm114 articles t unregister)) + +(defun spam-crm114-unregister-spam-routine (articles) + (spam-crm114-register-spam-routine articles t)) + +(defun spam-crm114-register-ham-routine (articles &optional unregister) + (spam-crm114-register-with-crm114 articles nil unregister)) + +(defun spam-crm114-unregister-ham-routine (articles) + (spam-crm114-register-ham-routine articles t)) + +;;}}} + +;;}}} + +;;{{{ Hooks ;;;###autoload (defun spam-initialize (&rest symbols) @@ -2416,9 +2901,13 @@ installed through spam-necessary-extra-headers." (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)) +;;}}} (provide 'spam) +;;; arch-tag: 07e6e0ca-ab0a-4412-b445-1f6c72a4f27f ;;; spam.el ends here diff --git a/lisp/starttls.el b/lisp/starttls.el index baf836f..f2b72fb 100644 --- a/lisp/starttls.el +++ b/lisp/starttls.el @@ -1,10 +1,11 @@ ;;; starttls.el --- STARTTLS functions -;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. ;; Author: Daiki Ueno +;; Author: Simon Josefsson ;; Created: 1999/11/20 -;; Keywords: TLS, SSL, OpenSSL, mail, news +;; Keywords: TLS, SSL, OpenSSL, GNUTLS, mail, news ;; This file is part of GNU Emacs. @@ -27,11 +28,93 @@ ;; This module defines some utility functions for STARTTLS profiles. -;; Get "starttls" from ftp://ftp.opaopa.org/pub/elisp/. - ;; [RFC 2595] "Using TLS with IMAP, POP3 and ACAP" ;; by Chris Newman (1999/06) +;; This file now contain a combination of the two previous +;; implementations both called "starttls.el". The first one is Daiki +;; Ueno's starttls.el which uses his own "starttls" command line tool, +;; and the second one is Simon Josefsson's starttls.el which uses +;; "gnutls-cli" from GNUTLS. +;; +;; If "starttls" is available, it is prefered by the code over +;; "gnutls-cli", for backwards compatibility. Use +;; `starttls-use-gnutls' to toggle between implementations if you have +;; both tools installed. It is recommended to use GNUTLS, though, as +;; it performs more verification of the certificates. + +;; The GNUTLS support require GNUTLS 0.9.90 (released 2003-10-08) or +;; later, from , or "starttls" +;; from . + +;; Usage is similar to `open-network-stream'. For example: +;; +;; (when (setq tmp (starttls-open-stream +;; "test" (current-buffer) "yxa.extundo.com" 25)) +;; (accept-process-output tmp 15) +;; (process-send-string tmp "STARTTLS\n") +;; (accept-process-output tmp 15) +;; (message "STARTTLS output:\n%s" (starttls-negotiate tmp)) +;; (process-send-string tmp "EHLO foo\n")) + +;; An example run yield the following output: +;; +;; 220 yxa.extundo.com ESMTP Sendmail 8.12.11/8.12.11/Debian-3; Wed, 26 May 2004 19:12:29 +0200; (No UCE/UBE) logging access from: c494102a.s-bi.bostream.se(OK)-c494102a.s-bi.bostream.se [217.215.27.65] +;; 220 2.0.0 Ready to start TLS +;; 250-yxa.extundo.com Hello c494102a.s-bi.bostream.se [217.215.27.65], pleased to meet you +;; 250-ENHANCEDSTATUSCODES +;; 250-PIPELINING +;; 250-EXPN +;; 250-VERB +;; 250-8BITMIME +;; 250-SIZE +;; 250-DSN +;; 250-ETRN +;; 250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN +;; 250-DELIVERBY +;; 250 HELP +;; nil +;; +;; With the message buffer containing: +;; +;; STARTTLS output: +;; *** Starting TLS handshake +;; - Server's trusted authorities: +;; [0]: C=SE,ST=Stockholm,L=Stockholm,O=YXA,OU=CA,CN=yxa.extundo.com,EMAIL=staff@yxa.extundo.com +;; - Certificate type: X.509 +;; - Got a certificate list of 2 certificates. +;; +;; - Certificate[0] info: +;; # The hostname in the certificate matches 'yxa.extundo.com'. +;; # valid since: Wed May 26 12:16:00 CEST 2004 +;; # expires at: Wed Jul 26 12:16:00 CEST 2023 +;; # serial number: 04 +;; # fingerprint: 7c 04 4b c1 fa 26 9b 5d 90 22 52 3c 65 3d 85 3a +;; # version: #1 +;; # public key algorithm: RSA +;; # Modulus: 1024 bits +;; # Subject's DN: C=SE,ST=Stockholm,L=Stockholm,O=YXA,OU=Mail server,CN=yxa.extundo.com,EMAIL=staff@yxa.extundo.com +;; # Issuer's DN: C=SE,ST=Stockholm,L=Stockholm,O=YXA,OU=CA,CN=yxa.extundo.com,EMAIL=staff@yxa.extundo.com +;; +;; - Certificate[1] info: +;; # valid since: Sun May 23 11:35:00 CEST 2004 +;; # expires at: Sun Jul 23 11:35:00 CEST 2023 +;; # serial number: 00 +;; # fingerprint: fc 76 d8 63 1a c9 0b 3b fa 40 fe ed 47 7a 58 ae +;; # version: #3 +;; # public key algorithm: RSA +;; # Modulus: 1024 bits +;; # Subject's DN: C=SE,ST=Stockholm,L=Stockholm,O=YXA,OU=CA,CN=yxa.extundo.com,EMAIL=staff@yxa.extundo.com +;; # Issuer's DN: C=SE,ST=Stockholm,L=Stockholm,O=YXA,OU=CA,CN=yxa.extundo.com,EMAIL=staff@yxa.extundo.com +;; +;; - Peer's certificate issuer is unknown +;; - Peer's certificate is NOT trusted +;; - Version: TLS 1.0 +;; - Key Exchange: RSA +;; - Cipher: ARCFOUR 128 +;; - MAC: SHA +;; - Compression: NULL + ;;; Code: (defgroup starttls nil @@ -39,18 +122,148 @@ :version "21.1" :group 'mail) +(defcustom starttls-gnutls-program "gnutls-cli" + "Name of GNUTLS command line tool. +This program is used when GNUTLS is used, i.e. when +`starttls-use-gnutls' is non-nil." + :version "22.1" + :type 'string + :group 'starttls) + (defcustom starttls-program "starttls" - "The program to run in a subprocess to open an TLSv1 connection." + "The program to run in a subprocess to open an TLSv1 connection. +This program is used when the `starttls' command is used, +i.e. when `starttls-use-gnutls' is nil." :type 'string :group 'starttls) +(defcustom starttls-use-gnutls (not (executable-find starttls-program)) + "*Whether to use GNUTLS instead of the `starttls' command." + :version "22.1" + :type 'boolean + :group 'starttls) + (defcustom starttls-extra-args nil - "Extra arguments to `starttls-program'." + "Extra arguments to `starttls-program'. +This program is used when the `starttls' command is used, +i.e. when `starttls-use-gnutls' is nil." + :type '(repeat string) + :group 'starttls) + +(defcustom starttls-extra-arguments nil + "Extra arguments to `starttls-program'. +This program is used when GNUTLS is used, i.e. when +`starttls-use-gnutls' is non-nil. + +For example, non-TLS compliant servers may require +'(\"--protocols\" \"ssl3\"). Invoke \"gnutls-cli --help\" to +find out which parameters are available." + :version "22.1" :type '(repeat string) :group 'starttls) +(defcustom starttls-process-connection-type nil + "*Value for `process-connection-type' to use when starting STARTTLS process." + :version "22.1" + :type 'boolean + :group 'starttls) + +(defcustom starttls-connect "- Simple Client Mode:\n\n" + "*Regular expression indicating successful connection. +The default is what GNUTLS's \"gnutls-cli\" outputs." + ;; GNUTLS cli.c:main() print this string when it is starting to run + ;; in the application read/write phase. If the logic, or the string + ;; itself, is modified, this must be updated. + :version "22.1" + :type 'regexp + :group 'starttls) + +(defcustom starttls-failure "\\*\\*\\* Handshake has failed" + "*Regular expression indicating failed TLS handshake. +The default is what GNUTLS's \"gnutls-cli\" outputs." + ;; GNUTLS cli.c:do_handshake() print this string on failure. If the + ;; logic, or the string itself, is modified, this must be updated. + :version "22.1" + :type 'regexp + :group 'starttls) + +(defcustom starttls-success "- Compression: " + "*Regular expression indicating completed TLS handshakes. +The default is what GNUTLS's \"gnutls-cli\" outputs." + ;; GNUTLS cli.c:do_handshake() calls, on success, + ;; common.c:print_info(), that unconditionally print this string + ;; last. If that logic, or the string itself, is modified, this + ;; must be updated. + :version "22.1" + :type 'regexp + :group 'starttls) + +(defun starttls-negotiate-gnutls (process) + "Negotiate TLS on process opened by `open-starttls-stream'. +This should typically only be done once. It typically return a +multi-line informational message with information about the +handshake, or NIL on failure." + (let (buffer info old-max done-ok done-bad) + (if (null (setq buffer (process-buffer process))) + ;; XXX How to remove/extract the TLS negotiation junk? + (signal-process (process-id process) 'SIGALRM) + (with-current-buffer buffer + (save-excursion + (setq old-max (goto-char (point-max))) + (signal-process (process-id process) 'SIGALRM) + (while (and (processp process) + (eq (process-status process) 'run) + (save-excursion + (goto-char old-max) + (not (or (setq done-ok (re-search-forward + starttls-success nil t)) + (setq done-bad (re-search-forward + starttls-failure nil t)))))) + (accept-process-output process 1 100) + (sit-for 0.1)) + (setq info (buffer-substring-no-properties old-max (point-max))) + (delete-region old-max (point-max)) + (if (or (and done-ok (not done-bad)) + ;; Prevent mitm that fake success msg after failure msg. + (and done-ok done-bad (< done-ok done-bad))) + info + (message "STARTTLS negotiation failed: %s" info) + nil)))))) + (defun starttls-negotiate (process) - (signal-process (process-id process) 'SIGALRM)) + (if starttls-use-gnutls + (starttls-negotiate-gnutls process) + (signal-process (process-id process) 'SIGALRM))) + +(defun starttls-open-stream-gnutls (name buffer host service) + (message "Opening STARTTLS connection to `%s'..." host) + (let* (done + (old-max (with-current-buffer buffer (point-max))) + (process-connection-type starttls-process-connection-type) + (process (apply #'start-process name buffer + starttls-gnutls-program "-s" host + "-p" (if (integerp service) + (int-to-string service) + service) + starttls-extra-arguments))) + (process-kill-without-query process) + (while (and (processp process) + (eq (process-status process) 'run) + (save-excursion + (set-buffer buffer) + (goto-char old-max) + (not (setq done (re-search-forward + starttls-connect nil t))))) + (accept-process-output process 0 100) + (sit-for 0.1)) + (if done + (with-current-buffer buffer + (delete-region old-max done)) + (delete-process process) + (setq process nil)) + (message "Opening STARTTLS connection to `%s'...%s" + host (if done "done" "failed")) + process)) (defun starttls-open-stream (name buffer host service) "Open a TLS connection for a service to a host. @@ -66,14 +279,17 @@ BUFFER is the buffer (or `buffer-name') to associate with the process. Third arg is name of the host to connect to, or its IP address. Fourth arg SERVICE is name of the service desired, or an integer specifying a port number to connect to." - (let* ((process-connection-type nil) - (process (apply #'start-process - name buffer starttls-program - host (format "%s" service) - starttls-extra-args))) - (process-kill-without-query process) - process)) + (if starttls-use-gnutls + (starttls-open-stream-gnutls name buffer host service) + (let* ((process-connection-type starttls-process-connection-type) + (process (apply #'start-process + name buffer starttls-program + host (format "%s" service) + starttls-extra-args))) + (process-kill-without-query process) + process))) (provide 'starttls) +;;; arch-tag: 648b3bd8-63bd-47f5-904c-7c819aea2297 ;;; starttls.el ends here diff --git a/lisp/time-date.el b/lisp/time-date.el index 5ab131c..06701cc 100644 --- a/lisp/time-date.el +++ b/lisp/time-date.el @@ -1,5 +1,6 @@ ;;; time-date.el --- Date and time handling functions -;; Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Masanobu Umeda @@ -24,9 +25,71 @@ ;;; Commentary: +;; Time values come in three formats. The oldest format is a cons +;; cell of the form (HIGH . LOW). This format is obsolete, but still +;; supported. The two other formats are the lists (HIGH LOW) and +;; (HIGH LOW MICRO). The first two formats specify HIGH * 2^16 + LOW +;; seconds; the third format specifies HIGH * 2^16 + LOW + MICRO / +;; 1000000 seconds. We should have 0 <= MICRO < 1000000 and 0 <= LOW +;; < 2^16. If the time value represents a point in time, then HIGH is +;; nonnegative. If the time value is a time difference, then HIGH can +;; be negative as well. The macro `with-decoded-time-value' and the +;; function `encode-time-value' make it easier to deal with these +;; three formats. See `time-subtract' for an example of how to use +;; them. + ;;; Code: -(require 'parse-time) +(defmacro with-decoded-time-value (varlist &rest body) + "Decode a time value and bind it according to VARLIST, then eval BODY. + +The value of the last form in BODY is returned. + +Each element of the list VARLIST is a list of the form +\(HIGH-SYMBOL LOW-SYMBOL MICRO-SYMBOL [TYPE-SYMBOL] TIME-VALUE). +The time value TIME-VALUE is decoded and the result it bound to +the symbols HIGH-SYMBOL, LOW-SYMBOL and MICRO-SYMBOL. + +The optional TYPE-SYMBOL is bound to the type of the time value. +Type 0 is the cons cell (HIGH . LOW), type 1 is the list (HIGH +LOW), and type 3 is the list (HIGH LOW MICRO)." + (declare (indent 1) + (debug ((&rest (symbolp symbolp symbolp &or [symbolp form] form)) + body))) + (if varlist + (let* ((elt (pop varlist)) + (high (pop elt)) + (low (pop elt)) + (micro (pop elt)) + (type (unless (eq (length elt) 1) + (pop elt))) + (time-value (car elt)) + (gensym (make-symbol "time"))) + `(let* ,(append `((,gensym ,time-value) + (,high (pop ,gensym)) + ,low ,micro) + (when type `(,type))) + (if (consp ,gensym) + (progn + (setq ,low (pop ,gensym)) + (if ,gensym + ,(append `(setq ,micro (car ,gensym)) + (when type `(,type 2))) + ,(append `(setq ,micro 0) + (when type `(,type 1))))) + ,(append `(setq ,low ,gensym ,micro 0) + (when type `(,type 0)))) + (with-decoded-time-value ,varlist ,@body))) + `(progn ,@body))) + +(defun encode-time-value (high low micro type) + "Encode HIGH, LOW, and MICRO into a time value of type TYPE. +Type 0 is the cons cell (HIGH . LOW), type 1 is the list (HIGH LOW), +and type 3 is the list (HIGH LOW MICRO)." + (cond + ((eq type 0) (cons high low)) + ((eq type 1) (list high low)) + ((eq type 2) (list high low micro)))) (autoload 'timezone-make-date-arpa-standard "timezone") @@ -48,9 +111,10 @@ (defun time-to-seconds (time) "Convert time value TIME to a floating point number. You can use `float-time' instead." - (+ (* (car time) 65536.0) - (cadr time) - (/ (or (nth 2 time) 0) 1000000.0))) + (with-decoded-time-value ((high low micro time)) + (+ (* 1.0 high 65536) + low + (/ micro 1000000.0)))) ;;;###autoload (defun seconds-to-time (seconds) @@ -62,19 +126,22 @@ You can use `float-time' instead." ;;;###autoload (defun time-less-p (t1 t2) "Say whether time value T1 is less than time value T2." - (or (< (car t1) (car t2)) - (and (= (car t1) (car t2)) - (< (nth 1 t1) (nth 1 t2))))) + (with-decoded-time-value ((high1 low1 micro1 t1) + (high2 low2 micro2 t2)) + (or (< high1 high2) + (and (= high1 high2) + (or (< low1 low2) + (and (= low1 low2) + (< micro1 micro2))))))) ;;;###autoload (defun days-to-time (days) "Convert DAYS into a time value." (let* ((seconds (* 1.0 days 60 60 24)) - (rest (expt 2 16)) - (ms (condition-case nil (floor (/ seconds rest)) - (range-error (expt 2 16))))) - (list ms (condition-case nil (round (- seconds (* ms rest))) - (range-error (expt 2 16)))))) + (high (condition-case nil (floor (/ seconds 65536)) + (range-error most-positive-fixnum)))) + (list high (condition-case nil (floor (- seconds (* 1.0 high 65536))) + (range-error 65535))))) ;;;###autoload (defun time-since (time) @@ -83,11 +150,7 @@ TIME should be either a time value or a date-time string." (when (stringp time) ;; Convert date strings to internal time. (setq time (date-to-time time))) - (let* ((current (current-time)) - (rest (when (< (nth 1 current) (nth 1 time)) - (expt 2 16)))) - (list (- (+ (car current) (if rest -1 0)) (car time)) - (- (+ (or rest 0) (nth 1 current)) (nth 1 time))))) + (time-subtract (current-time) time)) ;;;###autoload (defalias 'subtract-time 'time-subtract) @@ -96,37 +159,36 @@ TIME should be either a time value or a date-time string." (defun time-subtract (t1 t2) "Subtract two time values. Return the difference in the format of a time value." - (let ((borrow (< (cadr t1) (cadr t2)))) - (list (- (car t1) (car t2) (if borrow 1 0)) - (- (+ (if borrow 65536 0) (cadr t1)) (cadr t2))))) + (with-decoded-time-value ((high low micro type t1) + (high2 low2 micro2 type2 t2)) + (setq high (- high high2) + low (- low low2) + micro (- micro micro2) + type (max type type2)) + (when (< micro 0) + (setq low (1- low) + micro (+ micro 1000000))) + (when (< low 0) + (setq high (1- high) + low (+ low 65536))) + (encode-time-value high low micro type))) ;;;###autoload (defun time-add (t1 t2) "Add two time values. One should represent a time difference." - (let ((high (car t1)) - (low (if (consp (cdr t1)) (nth 1 t1) (cdr t1))) - (micro (if (numberp (car-safe (cdr-safe (cdr t1)))) - (nth 2 t1) - 0)) - (high2 (car t2)) - (low2 (if (consp (cdr t2)) (nth 1 t2) (cdr t2))) - (micro2 (if (numberp (car-safe (cdr-safe (cdr t2)))) - (nth 2 t2) - 0))) - ;; Add - (setq micro (+ micro micro2)) - (setq low (+ low low2)) - (setq high (+ high high2)) - - ;; Normalize - ;; `/' rounds towards zero while `mod' returns a positive number, - ;; so we can't rely on (= a (+ (* 100 (/ a 100)) (mod a 100))). - (setq low (+ low (/ micro 1000000) (if (< micro 0) -1 0))) - (setq micro (mod micro 1000000)) - (setq high (+ high (/ low 65536) (if (< low 0) -1 0))) - (setq low (logand low 65535)) - - (list high low micro))) + (with-decoded-time-value ((high low micro type t1) + (high2 low2 micro2 type2 t2)) + (setq high (+ high high2) + low (+ low low2) + micro (+ micro micro2) + type (max type type2)) + (when (>= micro 1000000) + (setq low (1+ low) + micro (- micro 1000000))) + (when (>= low 65536) + (setq high (1+ high) + low (- low 65536))) + (encode-time-value high low micro type))) ;;;###autoload (defun date-to-day (date) @@ -179,7 +241,7 @@ The Gregorian date Sunday, December 31, 1bce is imaginary." (defun time-to-number-of-days (time) "Return the number of days represented by TIME. The number of days will be returned as a floating point number." - (/ (+ (* 1.0 65536 (car time)) (cadr time)) (* 60 60 24))) + (/ (time-to-seconds time) (* 60 60 24))) ;;;###autoload (defun safe-date-to-time (date) @@ -191,4 +253,5 @@ If DATE is malformed, return a time value of zeros." (provide 'time-date) +;;; arch-tag: addcf07b-b20a-465b-af72-550b8ac5190f ;;; time-date.el ends here diff --git a/lisp/tls.el b/lisp/tls.el index af05ff2..fd74738 100644 --- a/lisp/tls.el +++ b/lisp/tls.el @@ -1,6 +1,6 @@ ;;; tls.el --- TLS/SSL support via wrapper around GnuTLS -;; Copyright (C) 2003 Free Software Foundation, Inc. +;; Copyright (C) 1996-1999, 2003, 2004 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: comm, tls, gnutls, ssl @@ -67,15 +67,47 @@ after successful negotiation." (defcustom tls-process-connection-type nil "*Value for `process-connection-type' to use when starting TLS process." + :version "22.1" :type 'boolean :group 'tls) (defcustom tls-success "- Handshake was completed" "*Regular expression indicating completed TLS handshakes. The default is what GNUTLS's \"gnutls-cli\" outputs." + :version "22.1" :type 'regexp :group 'tls) +(defcustom tls-certtool-program (executable-find "certtool") + "Name of GnuTLS certtool. +Used by `tls-certificate-information'." + :version "22.1" + :type '(repeat string) + :group 'tls) + +(defun tls-certificate-information (der) + "Parse X.509 certificate in DER format into an assoc list." + (let ((certificate (concat "-----BEGIN CERTIFICATE-----\n" + (base64-encode-string der) + "\n-----END CERTIFICATE-----\n")) + (exit-code 0)) + (with-current-buffer (get-buffer-create " *certtool*") + (erase-buffer) + (insert certificate) + (setq exit-code (condition-case () + (call-process-region (point-min) (point-max) + tls-certtool-program + t (list (current-buffer) nil) t + "--certificate-info") + (error -1))) + (if (/= exit-code 0) + nil + (let ((vals nil)) + (goto-char (point-min)) + (while (re-search-forward "^\\([^:]+\\): \\(.*\\)" nil t) + (push (cons (match-string 1) (match-string 2)) vals)) + (nreverse vals)))))) + (defun open-tls-stream (name buffer host service) "Open a TLS connection for a service to a host. Returns a subprocess-object to represent the connection. @@ -124,4 +156,5 @@ specifying a port number to connect to." (provide 'tls) +;;; arch-tag: 5596d1c4-facc-4bc4-94a9-9863b928d7ac ;;; tls.el ends here diff --git a/lisp/utf7.el b/lisp/utf7.el index 70186b0..65f364a 100644 --- a/lisp/utf7.el +++ b/lisp/utf7.el @@ -59,7 +59,7 @@ ;; $ echo "a+£"|iconv -f iso-8859-1 -t utf-7 ;; a+-+AKM ;; -;; -- fx +;; -- fx ;;; Code: @@ -78,7 +78,7 @@ (defconst utf7-utf-16-coding-system (cond ((mm-coding-system-p 'utf-16-be-no-signature) ; Mule-UCS 'utf-16-be-no-signature) - ((and (mm-coding-system-p 'utf-16-be) ; Emacs 21.4 (?), Emacs 22 + ((and (mm-coding-system-p 'utf-16-be) ; Emacs 22.1 ;; Avoid versions with BOM. (= 2 (length (encode-coding-string "a" 'utf-16-be)))) 'utf-16-be) @@ -224,4 +224,5 @@ Characters are in raw byte pairs in narrowed buffer." (provide 'utf7) +;;; arch-tag: 96078b55-85c7-4161-aed2-932c24b282c7 ;;; utf7.el ends here diff --git a/lisp/uudecode.el b/lisp/uudecode.el index 5b74b5a..01c2db3 100644 --- a/lisp/uudecode.el +++ b/lisp/uudecode.el @@ -50,6 +50,7 @@ input and write the converted data to its standard output." (defcustom uudecode-use-external (executable-find uudecode-decoder-program) "*Use external uudecode program." + :version "22.1" :group 'gnus-extract :type 'boolean) @@ -211,4 +212,5 @@ If FILE-NAME is non-nil, save the result to FILE-NAME." (provide 'uudecode) +;;; arch-tag: e1f09ed5-62b4-4677-9f13-4e81c4fe8ce3 ;;; uudecode.el ends here diff --git a/lisp/webmail.el b/lisp/webmail.el index b98bb69..b967013 100644 --- a/lisp/webmail.el +++ b/lisp/webmail.el @@ -1,5 +1,5 @@ ;;; webmail.el --- interface of web mail -;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: hotmail netaddress my-deja netscape @@ -196,7 +196,7 @@ (insert "\n---------------- A bug at " str " ------------------\n") (mapcar #'(lambda (sym) (if (boundp sym) - (pp `(setq ,sym ',(eval sym)) (current-buffer)))) + (gnus-pp `(setq ,sym ',(eval sym))))) '(webmail-type user)) (insert "---------------- webmail buffer ------------------\n\n") (insert-buffer-substring webmail-buffer) @@ -1149,4 +1149,5 @@ (provide 'webmail) +;;; arch-tag: f75a4558-a8f6-46ec-b1c3-7a6434b3dd71 ;;; webmail.el ends here diff --git a/lisp/yenc.el b/lisp/yenc.el index 3fea50f..ed0d950 100644 --- a/lisp/yenc.el +++ b/lisp/yenc.el @@ -117,4 +117,5 @@ (provide 'yenc) +;;; arch-tag: 74df17e8-6fa8-4071-9f7d-54d548d79d9a ;;; yenc.el ends here diff --git a/make.bat b/make.bat index dae69a8..672284b 100755 --- a/make.bat +++ b/make.bat @@ -135,6 +135,8 @@ if ErrorLevel 1 set ERROR=%ERROR%,sieve.texi if ErrorLevel 1 set ERROR=%ERROR%,pgg.texi %EMACSINFO% message.texi if ErrorLevel 1 set ERROR=%ERROR%,message.texi +%EMACSINFO% sasl.texi +if ErrorLevel 1 set ERROR=%ERROR%,sasl.texi if not "%2" == "/copy" goto nocopy if not exist %GNUS_INFO_DIR%\nul mkdir %GNUS_INFO_DIR% @@ -158,6 +160,8 @@ xcopy /R /Q /Y sieve %GNUS_INFO_DIR% if ErrorLevel 1 set ERROR=%ERROR%,copy-sieve-info xcopy /R /Q /Y pgg %GNUS_INFO_DIR% if ErrorLevel 1 set ERROR=%ERROR%,copy-pgg-info +xcopy /R /Q /Y sasl %GNUS_INFO_DIR% +if ErrorLevel 1 set ERROR=%ERROR%,copy-sasl-info echo. echo *************************************************************************** @@ -167,6 +171,7 @@ echo * if they aren't already there: echo * echo * * PGG: (pgg). Emacs interface to various PGP implementations. echo * * Sieve: (sieve). Managing Sieve scripts in Emacs. +echo * * SASL: (sasl). The Emacs SASL library. echo *************************************************************************** echo. @@ -181,9 +186,13 @@ if ErrorLevel 1 set ERROR=%ERROR%,copy-etc-gnus-tut-txt if not exist %GNUS_ETC_DIR%\gnus\nul mkdir %GNUS_ETC_DIR%\gnus xcopy /R /Q /Y .\gnus\* %GNUS_ETC_DIR%\gnus\ if ErrorLevel 1 set ERROR=%ERROR%,copy-etc-gnus-* -if not exist %GNUS_ETC_DIR%\smilies\nul mkdir %GNUS_ETC_DIR%\smilies -xcopy /R /Q /Y .\smilies\* %GNUS_ETC_DIR%\smilies\ -if ErrorLevel 1 set ERROR=%ERROR%,copy-etc-smilies-* +if not exist %GNUS_ETC_DIR%\images\nul mkdir %GNUS_ETC_DIR%\images +if not exist %GNUS_ETC_DIR%\images\gnus\nul mkdir %GNUS_ETC_DIR%\images\gnus +xcopy /R /Q /Y .\images\gnus\* %GNUS_ETC_DIR%\images\gnus\ +if ErrorLevel 1 set ERROR=%ERROR%,copy-etc-images-gnus-* +if not exist %GNUS_ETC_DIR%\images\smilies\nul mkdir %GNUS_ETC_DIR%\images\smilies +xcopy /R /Q /Y .\images\smilies\* %GNUS_ETC_DIR%\images\smilies\ +if ErrorLevel 1 set ERROR=%ERROR%,copy-etc-images-smilies-* goto warnings :nocopy @@ -286,3 +295,7 @@ set GNUS_INFO_DIR= set GNUS_ETC_DIR= set subdirwarning= set ERROR= + +goto skipArchTag + arch-tag: 502dd14c-acde-4f69-8e82-43203b12a82c +:skipArchTag diff --git a/mkinstalldirs b/mkinstalldirs index e72d449..149a038 100644 --- a/mkinstalldirs +++ b/mkinstalldirs @@ -4,8 +4,6 @@ # Created: 1993-05-16 # Public domain -# $Id: mkinstalldirs,v 7.1 2004/01/04 21:50:48 larsi Exp $ - errstatus=0 for file @@ -37,4 +35,5 @@ done exit $errstatus +# arch-tag: 40090a56-c506-4e64-a963-224cca4a7524 # mkinstalldirs ends here diff --git a/texi/ChangeLog b/texi/ChangeLog index ce2d608..83df189 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,467 @@ +2005-03-30 Reiner Steib + + * Makefile.in (gnus-booklet.dvi, gnus-booklet.pdf): Simplify. + (gnus-faq-texi): Renamed from gnus-faq.texi to avoid unsolicited + download. + +2005-03-29 Reiner Steib + + * Makefile.in (gnus-booklet.dvi, gnus-booklet.pdf) + (gnus-refcard.dvi, gnus-refcard.pdf): New targets replacing + refcard.* and booklet.*. + + * gnus-refcard.tex: Merged from refcard.tex and gnusref.tex. + Removed refcard.tex gnusref.tex booklet.tex bk-lt.tex bk-a4.tex. + + * gnus-logo.eps: Renamed from gnuslogo-booklet.eps. + gnuslogo-refcard.eps: Removed. + + * Makefile.in (gnus-faq.texi): Depend on xml2texi.*. Fix sed + command. + +2005-03-23 Reiner Steib + + * Makefile.in (gnus-faq-full-update, gnus-faq-clean) + (gnus-faq.texi): New targets. + (distclean): Remove some gnus-faq.* files. + + * xml2texi.sh: Mention requirements. + + * xml2texi.scm (boilerplate): Add "Do not modify ...". + + * gnus-faq.texi: Generated. + +2005-03-22 Reiner Steib + + * gnus-faq.texi: Generated from gnus-faq.xml using xml2texi.*. + + * message.texi, gnus.texi: Update copyright. + + * xml2texi.scm (+tag-for-gnus-faq-texi+): New variable. + (transform): Use it. From Karl Pfl,Ad(Bsterer with + minor modifications. + (boilerplate): Update copyright for the output file. + +2005-03-21 Reiner Steib + + * xml2texi.sh: Fix arch tag. + +2005-03-20 Reiner Steib + + * xml2texi.scm, xml2texi.sh: Added copyright. + (transform): Avoid redundant entries in @urefs. + (format-node): Don't insert optional arguments of @node. + +2005-03-20 Karl Pfl,Ad(Bsterer + + * xml2texi.scm, xml2texi.sh: New files. PLT Scheme program to + convert FAQ from xml to texi. + +2005-03-03 Reiner Steib + + * gnus.texi (Slow/Expensive Connection): Don't abbreviate "very". + +2005-02-14 Simon Josefsson + + * gnus-news.texi: Add. + +2005-02-10 Katsumi Yamaoka + + * gnus.texi (Using MIME): gnus-mime-copy-part supports the charset + stuff; gnus-mime-inline-part does the automatic decompression. + +2005-02-08 Teodor Zlatanov + + * gnus.texi (Spam ELisp Package Configuration Examples): + "training.ham" should be "training.spam" + +2005-02-02 Katsumi Yamaoka + + * message.texi (Mail Variables): Fix the default value for + message-send-mail-function. + +2005-02-01 Katsumi Yamaoka + + * gnus.texi (Optional Back End Functions): nntp-request-update-info + always returns nil exceptionally. + +2005-01-27 Lars Magne Ingebrigtsen + + * gnus.texi: Some edits based on comments from David Abrahams. + Bump version numbers. + +2005-01-24 Katsumi Yamaoka + + * gnus.texi (RSS): Fix the keystroke. + +2005-01-16 Simon Josefsson + + * gnus.texi (Article Washing): Add libidn URL. Suggested by + Michael Cook . + + * gnus-news.texi: Ditto. + +2005-01-16 Xavier Maillard (tiny change) + + * gnus-faq.texi ([4.1]): Typo. + +2005-01-15 Lars Magne Ingebrigtsen + + * gnus.texi (Topic Commands): Fix next/previous. + +2005-01-15 Simon Josefsson + + * gnus.texi (Article Washing): Mention `W i'. + + * gnus-news.texi: Mention De-IDNA washing. + +2005-01-06 Katsumi Yamaoka + + * message.texi (Reply): `message-reply-to-function' should return + a list. Suggested by ARISAWA Akihiro . + +2005-01-05 Katsumi Yamaoka + + * Makefile.in (.texi): Use LC_ALL instead of LANG. + (makeinfo): Ditto. + +2005-01-04 Jochen K,A|(Bpper + + * gnus.texi (Group Parameters): Slight extension of sieve + parameter description. + +2005-01-03 Reiner Steib + + * gnus-news.texi: Mention change new behavior of + `gnus-decay-scores'. Added some references. + + * gnus.texi (Score Decays): `gnus-decay-scores' can be a regexp + matching score files as well. + (Picons): Describe `gnus-picon-style'. + +2005-01-02 Romain Francoise + + * gnus-news.texi: Mention the new method used to hide headers. + Remove duplicate item about `/ r'. Add missing @code. + + * message.texi (Message Headers): Mention that headers are hidden + using narrowing, and how to expose them. + Update copyright. + +2005-01-02 Simon Josefsson + + * gnus-news.texi: Add. + +2004-12-26 Katsumi Yamaoka + + * gnus-news.texi: Addition. + + * gnus.texi (RSS): Addition. + +2004-12-24 Katsumi Yamaoka + + * Makefile.in (.texi): Set LANG=C to avoid NLS translations. + (makeinfo): Ditto. + +2004-12-08 Reiner Steib + + * gnusref.tex: Mention `gnus-summary-limit-to-recipient' and + `gnus-summary-sort-by-recipient'. + +2004-12-08 Reiner Steib + + * gnus-faq.texi ([5.1]): Added missing bracket. + + * message.texi (Various Message Variables): Mention that all mail + file variables are derived from `message-directory'. + + * gnus.texi (Splitting Mail): Clarify bogus group. + +2004-12-07 Teodor Zlatanov + + * gnus.texi (Filtering Spam Using The Spam ELisp Package) + (Spam ELisp Package Filtering of Incoming Mail) + (Spam ELisp Package Sorting and Score Display in Summary Buffer): + replace @code{spam.el} with @file{spam.el} where the file spam.el + is intended as the subject + +2004-12-06 Reiner Steib + + * gnus-news.texi: Mention `gnus-summary-limit-to-recipient' and + `gnus-summary-sort-by-recipient'. + + * gnus.texi (Filtering Spam Using The Spam ELisp Package): Index + `spam-initialize'. + (Limiting): Add `gnus-summary-limit-to-recipient'. + (Summary Sorting): Add `gnus-summary-sort-by-recipient'. + +2004-11-30 Simon Josefsson + + * gnus.texi (Misc Article): Add, suggested by Reiner Steib + . + +2004-11-26 Katsumi Yamaoka + + * gnus.texi (Finding the News): Markup fix. + +2004-11-25 Katsumi Yamaoka + + * gnus.texi (Finding the News): Add a note for NNTP marks. + Improved by Romain Francoise. + +2004-11-23 Romain Francoise + + * gnus.texi (NNTP marks): New node. + (NNTP): Move NNTP marks variables to the new node. + +2004-11-21 Jesper Harder + + * gnus.texi, gnus-news.texi, pgg.texi, sasl.texi: backend -> back + end. + + * gnus.texi (MIME Commands, Hashcash): Markup fix. + +2004-11-17 Teodor Zlatanov + + * gnus.texi: replaced @file{spam.el} with @code{spam.el} + everywhere for consistency. + (Filtering Spam Using The Spam ELisp Package): admonish again. + (Spam ELisp Package Sequence of Events): this is Gnus, say so. + Say "regular expression" instead of "regex." Admonish. Pick + other words to sound better (s/so/thus/). + (Spam ELisp Package Filtering of Incoming Mail): mention + statistical filters. Remove old TODO. + (Spam ELisp Package Sorting and Score Display in Summary Buffer): + new section on sorting and displaying the spam score + (BBDB Whitelists): mention spam-use-BBDB-exclusive is not a + backend but an alias to spam-use-BBDB + (Extending the Spam ELisp package): rewrite the example using the + new backend functionality. + +2004-11-16 Simon Josefsson + + * gnus.texi (NNTP): Mention nntp-marks-is-evil and + nntp-marks-directory, from Romain Francoise + . + +2004-11-14 Magnus Henoch + + * gnus.texi (Hashcash): New default value of + hashcash-default-payment. + +2004-10-26 Simon Josefsson + + * 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 + + * 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 + + * gnus.texi (Adaptive Scoring): Added gnus-adaptive-pretty-print. + +2004-10-15 Katsumi Yamaoka + + * message.texi (Canceling News): Add how to set a password. + +2004-10-10 Juri Linkov + + * gnus.texi (Top, Marking Articles): Join two menus in one node + because a node can have only one menu. + +2004-10-09 Juri Linkov + + * gnus.texi (Fancy Mail Splitting): Remove backslash in the + example of nnmail-split-fancy. + +2004-10-12 Reiner Steib + + * gnus-faq.texi ([5.9]): Improve code for reply-in-news. + +2004-10-12 Katsumi Yamaoka + + * gnus.texi (X-Face): Revert 2004-02-17 change. + (Slow Machine): Ditto. + +2004-10-02 Simon Josefsson + + * gnus.texi (documentencoding): Add, to avoid warnings. + +2004-09-30 Simon Josefsson + + * gnus-news.texi: Add. + + * message.texi (Mail Headers): Add. + + * gnus.texi (Hashcash): Fix. + +2004-09-29 Simon Josefsson + + * gnus-news.texi: Add. + +2004-09-29 Teodor Zlatanov + + * gnus.texi (Hashcash): changed location of library, also mention + that payments can be verified and fix the name of the + hashcash-path variable + +2004-09-23 Reiner Steib + + * gnus-faq.texi ([5.12]): Use 5.10 instead of 5.10.0. + +2004-09-14 Jesper Harder + + * gnus.texi: Markup fixes. + + * emacs-mime.texi (Display Customization): XEmacs -> Emacs. + +2004-09-11 Simon Josefsson + + * gnus-news.texi: Mention text/dns. + +2004-09-03 Katsumi Yamaoka + + * texi2latex.el (latexi-translate-file): Support @copying and + @insertcopying. + (latexi-copying-text): New variable. + (latexi-copying): New function. + (latexi-insertcopying): New function. + +2004-09-02 Reiner Steib + + * gnus-news.texi: Fix typo in previous commit. + + * gnus-news.el (gnus-news-makeinfo-switches): Add --no-validate to + allow unresolved references. + + * gnus-news.texi: Use xref. Add `gnus-picon-style'. + + * Makefile.in (GNUS-NEWS): Depend on gnus-news.el. + +2004-09-02 Simon Josefsson + + * gnus-news.texi: Comment out comment stuff. + Don't use xref's, GNUS-NEWS look wrong. + Add nntp marks stuff. + Add (copied from Oort Gnus GNUS-NEWS). + + * Makefile.in (GNUS-NEWS): Move to "..". + +2004-09-01 Katsumi Yamaoka + + * infohack.el: Support @copying and @insertcopying for Emacs 21.3 + and lesser and XEmacs. + +2004-08-31 Reiner Steib + + * emacs-mime.texi, gnus-faq.texi, gnus.texi, message.texi, + pgg.texi, sieve.texi: Use @copying and @insertcopying. + +2004-08-22 Reiner Steib + + * gnus.texi (Mail Source Specifiers): Describe + `pop3-leave-mail-on-server'. + +2004-08-17 Teodor Zlatanov + + * gnus.texi (IMAP): add comments about imaps synonym to imap in + netrc syntax + +2004-08-15 Simon Josefsson + + * gnus.texi (IMAP): Add example. Suggested and partially written + by Steinar Bang . + +2004-08-12 Katsumi Yamaoka + + * gnus.texi (Posting Styles): Addition. + +2004-08-06 Simon Josefsson + + * gnus-news.el (gnus-news-header-disclaimer): Fix. + + * gnus-news.texi: Add. + +2004-07-22 Katsumi Yamaoka + + * emacs-mime.texi (rfc2047): Update. + +2004-07-12 Katsumi Yamaoka + + * gnus.texi (Splitting Mail): Add nnmail-split-lowercase-expanded. + (Fancy Mail Splitting): Ditto. + +2004-07-02 Katsumi Yamaoka + + * emacs-mime.texi (Encoding Customization): Addition. + +2004-06-29 Katsumi Yamaoka + + * emacs-mime.texi (Encoding Customization): Add a note to the + mm-content-transfer-encoding-defaults entry. + +2004-06-28 Katsumi Yamaoka + + * emacs-mime.texi (Encoding Customization): Fix + mm-coding-system-priorities entry. + +2004-06-28 Jesper Harder + + * gnus.texi (Setting Process Marks): Fix `M P a' entry. + +2004-06-23 Katsumi Yamaoka + + * gnus.texi (Article Highlighting): Add + gnus-cite-ignore-quoted-from. + +2004-06-06 Lars Magne Ingebrigtsen + + * message.texi (Various Message Variables): Add. + +2004-06-02 Reiner Steib + + * gnus.texi (Mail Source Customization): Clarify + `mail-source-directory'. + +2004-05-28 Reiner Steib + + * gnus-faq.texi: Untabify. + ([6.3]): nnir.el is in contrib directory. + + * message.texi (News Headers): Clarify how a unique ID is created. + + * gnus.texi (Splitting Mail): Mention gnus-group-find-new-groups. + +2004-05-19 Andre Srinivasan + + * gnus.texi (Group Parameters): Added more on hooks. (Small + change.) + +2004-05-19 Reiner Steib + + * gnus.texi (Oort Gnus): Mention new behavior of `F' and `R' when + the region is active. + (Article Display): Add `gnus-picon-style'. + +2004-05-17 Lars Magne Ingebrigtsen + + * message.texi (Various Commands): Add. + +2004-05-10 Reiner Steib + + * gnus.texi (MIME Commands): Added + gnus-mime-display-multipart-as-mixed, + gnus-mime-display-multipart-alternative-as-mixed, + gnus-mime-display-multipart-related-as-mixed. + 2004-04-19 Katsumi Yamaoka * gnus.texi (SpamAssassin backend): Add it to the detailmenu. @@ -4321,3 +4785,5 @@ Thu Feb 25 00:28:49 1999 Shenghuo ZHU ;; Local Variables: ;; coding: iso-2022-7bit ;; End: + +;;; arch-tag: b5708f36-be16-423b-bcca-f70f5fb4781a diff --git a/texi/Makefile.in b/texi/Makefile.in index eefd57f..bad289c 100644 --- a/texi/Makefile.in +++ b/texi/Makefile.in @@ -19,6 +19,8 @@ INSTALL_DATA = @INSTALL_DATA@ SHELL = /bin/sh PAPERTYPE=a4 INFO_DEPS=gnus message emacs-mime sieve pgg sasl +REFCARD=gnus-refcard +LOGO=gnus-logo all: $(INFO_DEPS) @@ -28,7 +30,7 @@ most: texi2latex.elc latex latexps .texi: if test "x$(MAKEINFO)" != "xno" ; then \ - $(MAKEINFO) -I $(srcdir) --enable-encoding -o $* $<; \ + LC_ALL=C $(MAKEINFO) -I $(srcdir) --enable-encoding -o $* $<; \ else \ rm -f $@; \ $(EMACSINFO) $<; \ @@ -37,14 +39,14 @@ most: texi2latex.elc latex latexps # Files included in gnus.texi gnus.texi: gnus-faq.texi gnus-news.texi -# FIXME: Target should be in parent directory. A cvs commit script could -# automatically create it. -GNUS-NEWS: gnus-news.texi +# FIXME: A cvs commit script could automatically create it. +GNUS-NEWS: gnus-news.texi gnus-news.el $(EMACSCOMP) -l $(srcdir)/gnus-news.el -f batch-gnus-news $< $@ + mv $@ ../$@ -dvi: gnus.dvi message.dvi refcard.dvi emacs-mime.dvi sieve.dvi pgg.dvi sasl.dvi +dvi: gnus.dvi message.dvi $(REFCARD).dvi emacs-mime.dvi sieve.dvi pgg.dvi sasl.dvi -pdf: gnus.pdf message.pdf refcard.pdf emacs-mime.pdf sieve.pdf pgg.pdf sasl.pdf +pdf: gnus.pdf message.pdf $(REFCARD).pdf emacs-mime.pdf sieve.pdf pgg.pdf sasl.pdf .texi.dvi : sed -e '/@iflatex/,/@end iflatex/d' $< > gnustmp.texi @@ -61,31 +63,53 @@ pdf: gnus.pdf message.pdf refcard.pdf emacs-mime.pdf sieve.pdf pgg.pdf sasl.pdf cp gnustmp.pdf $*.pdf rm -f gnustmp.* -refcard.dvi: refcard.tex gnuslogo-refcard.eps gnusref.tex - TEXINPUTS=$(srcdir):$$TEXINPUTS $(LATEX) refcard.tex +$(LOGO).pdf: $(LOGO).eps + epstopdf $< --outfile=$@ -refcard.pdf: refcard.tex gnuslogo-refcard.eps gnusref.tex - epstopdf $(srcdir)/gnuslogo-refcard.eps --outfile=gnuslogo-refcard.pdf - TEXINPUTS=$(srcdir):$$TEXINPUTS $(PDFLATEX) refcard.tex +$(REFCARD).dvi: $(REFCARD).tex $(LOGO).eps + TEXINPUTS=$(srcdir):$$TEXINPUTS:: $(LATEX) $(REFCARD).tex -booklet.dvi: booklet.tex gnuslogo-refcard.eps gnusref.tex +$(REFCARD).pdf: $(REFCARD).tex $(LOGO).pdf + TEXINPUTS=$(srcdir):$$TEXINPUTS:: $(PDFLATEX) $(REFCARD).tex + +gnus-booklet.dvi: $(REFCARD).tex $(LOGO).eps if [ "$(PAPERTYPE)" == a4 ]; then \ - TEXINPUTS=$(srcdir):$$TEXINPUTS $(LATEX) bk-a4.tex && \ - mv bk-a4.dvi booklet.dvi ;\ + TEXINPUTS=$(srcdir):$$TEXINPUTS:: \ + $(LATEX) '\def\booklettrue{}\input{$(REFCARD)}' ;\ else \ - TEXINPUTS=$(srcdir):$$TEXINPUTS $(LATEX) bk-lt.tex && \ - mv bk-lt.dvi booklet.dvi;\ + TEXINPUTS=$(srcdir):$$TEXINPUTS:: \ + $(LATEX) '\def\booklettrue{}\def\letterpapertrue{}\input{$(REFCARD)}' ;\ fi + mv $(REFCARD).dvi $@ -booklet.pdf: booklet.tex gnuslogo-refcard.eps gnusref.tex - epstopdf $(srcdir)/gnuslogo-booklet.eps --outfile=gnuslogo-booklet.pdf +gnus-booklet.pdf: $(REFCARD).tex $(LOGO).pdf if [ "$(PAPERTYPE)" == a4 ]; then \ - TEXINPUTS=$(srcdir):$$TEXINPUTS $(PDFLATEX) bk-a4.tex &&\ - mv bk-a4.pdf booklet.pdf ;\ + TEXINPUTS=$(srcdir):$$TEXINPUTS:: \ + $(PDFLATEX) '\def\booklettrue{}\input{$(REFCARD)}' ;\ else \ - TEXINPUTS=$(srcdir):$$TEXINPUTS $(PDFLATEX) bk-lt.tex &&\ - mv bk-lt.pdf booklet.pdf ;\ + TEXINPUTS=$(srcdir):$$TEXINPUTS:: \ + $(PDFLATEX) '\def\booklettrue{}\def\letterpapertrue{}\input{$(REFCARD)}' ;\ fi + mv $(REFCARD).pdf $@ + +gnus-faq-full-update: gnus-faq-clean gnus-faq-texi + +gnus-faq.xml: + cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/gnus \ + co -p gnus-faq/src/gnus-faq.xml > $@.tmp + head -n 1 $@.tmp | grep '^<.xml version' || \ + { echo "Update of $@ failed."; : rm $@.tmp; exit 1; } + mv $@.tmp $@ + +gnus-faq-texi: gnus-faq.xml xml2texi.sh xml2texi.scm + ./xml2texi.sh $< $@.tmp + @echo +# FIXME: This should be done in xml2texi.scm or gnus-faq.xml should be +# changed: + sed '/[$$]Id:.*[$$]/d' < $@.tmp > $@ + +gnus-faq-clean: + rm -f gnus-faq.xml gnus-faq.*.tmp gnus-faq.texi clean: rm -f *.[cgk]idx *.aux *.cp *.cps *.dvi *.dvi-x *.fn *.ky \ @@ -96,8 +120,8 @@ clean: thumbdta.tex xface.tex *.tpt gnus-manual-*.pdf gnus-manual-*.ps.gz makeinfo: - makeinfo --enable-encoding -o gnus gnus.texi - makeinfo --enable-encoding -o message message.texi + LC_ALL=C makeinfo --enable-encoding -o gnus gnus.texi + LC_ALL=C makeinfo --enable-encoding -o message message.texi texi2latex.elc: texi2latex.el srcdir=$(srcdir)/../lisp $(EMACSCOMP) -l $(srcdir)/../lisp/dgnushack.el --eval '(byte-compile-file "$(srcdir)/texi2latex.el")' @@ -187,6 +211,7 @@ distclean: veryclean rm -f message-[0-9] rm -f $(INFO_DEPS) rm -f gnusconfig.tex + rm -f gnus-faq.xml gnus-faq.*.tmp install: $(INFO_DEPS) $(SHELL) $(top_srcdir)/mkinstalldirs $(infodir) diff --git a/texi/doclicense.texi b/texi/doclicense.texi index d580caf..963bb05 100644 --- a/texi/doclicense.texi +++ b/texi/doclicense.texi @@ -366,3 +366,7 @@ If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. + +@ignore + arch-tag: 261f9376-a0f0-4e90-ba5b-06a297b6053d +@end ignore diff --git a/texi/emacs-mime.texi b/texi/emacs-mime.texi index 3de34ae..3316f25 100644 --- a/texi/emacs-mime.texi +++ b/texi/emacs-mime.texi @@ -5,23 +5,14 @@ @synindex fn cp @synindex vr cp @synindex pg cp -@dircategory Emacs -@direntry -* Emacs MIME: (emacs-mime). The MIME de/composition library. -@end direntry -@documentencoding ISO-8859-1 -@iftex -@finalout -@end iftex -@setchapternewpage odd - -@ifnottex +@copying This file documents the Emacs MIME interface functionality. -Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 +Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +@quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no @@ -38,40 +29,26 @@ This document is part of a collection distributed under the GNU Free Documentation License. If you want to distribute this document separately from the collection, you can do so by adding a copy of the license to the document, as described in section 6 of the license. -@end ifnottex +@end quotation +@end copying -@tex +@dircategory Emacs +@direntry +* Emacs MIME: (emacs-mime). Emacs MIME de/composition library. +@end direntry +@iftex +@finalout +@end iftex +@setchapternewpage odd @titlepage @title Emacs MIME Manual @author by Lars Magne Ingebrigtsen @page - @vskip 0pt plus 1filll -Copyright @copyright{} 1998, 1999, 2000, 2001, 2002, 2003 Free Software -Foundation, Inc. - -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or -any later version published by the Free Software Foundation; with the -Invariant Sections being none, with the Front-Cover texts being ``A GNU -Manual'', and with the Back-Cover Texts as in (a) below. A copy of the -license is included in the section entitled ``GNU Free Documentation -License'' in the Emacs manual. - -(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify -this GNU Manual, like GNU software. Copies published by the Free -Software Foundation raise funds for GNU development.'' - -This document is part of a collection distributed under the GNU Free -Documentation License. If you want to distribute this document -separately from the collection, you can do so by adding a copy of the -license to the document, as described in section 6 of the license. +@insertcopying @end titlepage -@page - -@end tex @node Top @top Emacs MIME @@ -351,7 +328,7 @@ you could say something like: @item mm-inline-large-images @vindex mm-inline-large-images -When displaying inline images that are larger than the window, XEmacs +When displaying inline images that are larger than the window, Emacs does not enable scrolling, which means that you cannot see the whole image. To prevent this, the library tries to determine the image size before displaying it inline, and if it doesn't fit the window, the @@ -837,12 +814,12 @@ by using the @code{encoding} @acronym{MML} tag (@pxref{MML Definition}). @vindex mm-coding-system-priorities Prioritize coding systems to use for outgoing messages. The default is @code{nil}, which means to use the defaults in Emacs. It is a list of -coding system symbols (aliases of coding systems does not work, use -@kbd{M-x describe-coding-system} to make sure you are not specifying -an alias in this variable). For example, if you have configured Emacs +coding system symbols (aliases of coding systems are also allowed, use +@kbd{M-x describe-coding-system} to make sure you are specifying correct +coding system names). For example, if you have configured Emacs to prefer UTF-8, but wish that outgoing messages should be sent in ISO-8859-1 if possible, you can set this variable to -@code{(iso-latin-1)}. You can override this setting on a per-message +@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}). @item mm-content-transfer-encoding-defaults @@ -852,8 +829,18 @@ used except, e.g., when other requirements force a safer encoding (digitally signed messages require 7bit encoding). Besides the normal @acronym{MIME} encodings, @code{qp-or-base64} may be used to indicate that for each case the most efficient of quoted-printable and base64 should be -used. You can override this setting on a per-message basis by using -the @code{encoding} @acronym{MML} tag (@pxref{MML Definition}). +used. + +@code{qp-or-base64} has another effect. It will fold long lines so that +MIME parts may not be broken by MTA. So do @code{quoted-printable} and +@code{base64}. + +Note that it affects body encoding only when a part is a raw forwarded +message (which will be made by @code{gnus-summary-mail-forward} with the +arg 2 for example) or is neither the @samp{text/*} type nor the +@samp{message/*} type. Even though in those cases, you can override +this setting on a per-message basis by using the @code{encoding} +@acronym{MML} tag (@pxref{MML Definition}). @item mm-use-ultra-safe-encoding @vindex mm-use-ultra-safe-encoding @@ -1326,11 +1313,6 @@ library does. The following variables are tweakable: @table @code -@item rfc2047-default-charset -@vindex rfc2047-default-charset -Characters in this charset should not be decoded by this library. -This defaults to @code{iso-8859-1}. - @item rfc2047-header-encoding-alist @vindex rfc2047-header-encoding-alist This is an alist of header / encoding-type pairs. Its main purpose is @@ -1338,9 +1320,10 @@ to prevent encoding of certain headers. The keys can either be header regexps, or @code{t}. -The values can be either @code{nil}, in which case the header(s) in -question won't be encoded, or @code{mime}, which means that they will be -encoded. +The values can be @code{nil}, in which case the header(s) in question +won't be encoded, @code{mime}, which means that they will be encoded, or +@code{address-mime}, which means the header(s) will be encoded carefully +assuming they contain addresses. @item rfc2047-charset-encoding-alist @vindex rfc2047-charset-encoding-alist @@ -1348,22 +1331,20 @@ RFC2047 specifies two forms of encoding---@code{Q} (a Quoted-Printable-like encoding) and @code{B} (base64). This alist specifies which charset should use which encoding. -@item rfc2047-encoding-function-alist -@vindex rfc2047-encoding-function-alist +@item rfc2047-encode-function-alist +@vindex rfc2047-encode-function-alist This is an alist of encoding / function pairs. The encodings are @code{Q}, @code{B} and @code{nil}. -@item rfc2047-q-encoding-alist -@vindex rfc2047-q-encoding-alist -The @code{Q} encoding isn't quite the same for all headers. Some -headers allow a narrower range of characters, and that is what this -variable is for. It's an alist of header regexps / allowable character -ranges. - @item rfc2047-encoded-word-regexp @vindex rfc2047-encoded-word-regexp When decoding words, this library looks for matches to this regexp. +@item rfc2047-encode-encoded-words +@vindex rfc2047-encode-encoded-words +The boolean variable specifies whether encoded words +(e.g. @samp{=?hello?=}) should be encoded again. + @end table Those were the variables, and these are this functions: @@ -1394,6 +1375,24 @@ Decode the encoded words in the region. @findex rfc2047-decode-string Decode a string and return the results. +@item rfc2047-encode-parameter +@findex rfc2047-encode-parameter +Encode a parameter in the RFC2047-like style. This is a replacement for +the @code{rfc2231-encode-string} function. @xref{rfc2231}. + +When attaching files as @acronym{MIME} parts, we should use the RFC2231 +encoding to specify the file names containing non-@acronym{ASCII} +characters. However, many mail softwares don't support it in practice +and recipients won't be able to extract files with correct names. +Instead, the RFC2047-like encoding is acceptable generally. This +function provides the very RFC2047-like encoding, resigning to such a +regrettable trend. To use it, put the following line in your +@file{~/.gnus.el} file: + +@lisp +(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter) +@end lisp + @end table @@ -1796,3 +1795,7 @@ Documentation of the text/plain format parameter for flowed text. @c mode: texinfo @c coding: iso-8859-1 @c End: + +@ignore + arch-tag: c7ef2fd0-a91c-4e10-aa52-c1a2b11b1a8d +@end ignore diff --git a/texi/gnus-faq.texi b/texi/gnus-faq.texi index f6e4cf8..742227b 100644 --- a/texi/gnus-faq.texi +++ b/texi/gnus-faq.texi @@ -1,210 +1,203 @@ -@c Insert "\input texinfo" at 1st line before texing this file alone. -@c -*-texinfo-*- -@c Copyright (C) 1995, 2001, 2003, 2004 Free Software Foundation, Inc. +@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 +@c Do not modify this file, it was generated from gnus-faq.xml, available from +@c . +@c @setfilename gnus-faq.info - -@c Frequently Asked Questions, FAQ - Introduction, Emacs for Heathens, Top +@settitle Frequently Asked Questions +@c %**end of header +@c @node Frequently Asked Questions -@comment node-name, next, previous, up - -@c @chapter Frequently Asked Questions @section Frequently Asked Questions -@cindex FAQ -@cindex Frequently Asked Questions - -@c - Uncomment @chapter, comment @section -@c - run (texinfo-every-node-update) -@c - revert it. @menu -* FAQ - Introduction:: About Gnus and this FAQ. -* FAQ 1 - Installation:: Installation of Gnus. -* FAQ 2 - Startup / Group buffer:: Start up questions and the first - buffer Gnus shows you. -* FAQ 3 - Getting messages:: Making Gnus read your mail and news. -* FAQ 4 - Reading messages:: How to efficiently read messages. -* FAQ 5 - Composing messages:: Composing mails or Usenet postings. -* FAQ 6 - Old messages:: Importing, archiving, searching - and deleting messages. -* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while offline. -* FAQ 8 - Getting help:: When this FAQ isn't enough. -* FAQ 9 - Tuning Gnus:: How to make Gnus faster. -* FAQ - Glossary:: Terms used in the FAQ explained. +* FAQ - Changes:: +* FAQ - Introduction:: About Gnus and this FAQ. +* FAQ 1 - Installation FAQ:: Installation of Gnus. +* FAQ 2 - Startup / Group buffer:: Start up questions and the + first buffer Gnus shows you. +* FAQ 3 - Getting Messages:: Making Gnus read your mail + and news. +* FAQ 4 - Reading messages:: How to efficiently read + messages. +* FAQ 5 - Composing messages:: Composing mails or Usenet + postings. +* FAQ 6 - Old messages:: Importing, archiving, + searching and deleting messages. +* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while + offline. +* FAQ 8 - Getting help:: When this FAQ isn't enough. +* FAQ 9 - Tuning Gnus:: How to make Gnus faster. +* FAQ - Glossary:: Terms used in the FAQ + explained. @end menu - @subheading Abstract - This is the new Gnus Frequently Asked Questions list. If you have a -Web browser, the official hypertext version is at -@uref{http://my.gnus.org/FAQ/}, the Docbook source is available from -@uref{http://sourceforge.net/projects/gnus/}. - +This is the new Gnus Frequently Asked Questions list. +If you have a Web browser, the official hypertext version is at +@uref{http://my.gnus.org/FAQ/}, +the Docbook source is available from +@uref{http://sourceforge.net/projects/gnus/, http://sourceforge.net}. - Please submit features and suggestions to the - @email{faq-discuss@@my.gnus.org,FAQ discussion list}. - The list is protected against junk mail with - @uref{http://smarden.org/qconfirm/index.html,qconfirm, qconfirm}. As - a subscriber, your submissions will automatically pass. You can - also subscribe to the list by sending a blank email to - @email{faq-discuss-subscribe@@my.gnus.org} - and - @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss,browse - the archive, browse the archive}. - -@node FAQ - Introduction, FAQ 1 - Installation, Frequently Asked Questions, Frequently Asked Questions -@comment node-name, next, previous, up -@heading Introduction +Please submit features and suggestions to the +@email{faq-discuss@@my.gnus.org, FAQ discussion list}. +The list is protected against junk mail with +@uref{http://smarden.org/qconfirm/index.html, qconfirm}. As +a subscriber, your submissions will automatically pass. You can +also subscribe to the list by sending a blank email to +@email{faq-discuss-subscribe@@my.gnus.org, faq-discuss-subscribe@@my.gnus.org} +and @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss, browse +the archive}. -This is the Gnus Frequently Asked Questions list. +@node FAQ - Changes +@subheading Changes -Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented - as a part of Emacs. It's been around in some form for almost a decade - now, and has been distributed as a standard part of Emacs for much of - that time. Gnus 5 is the latest (and greatest) incarnation. The - original version was called GNUS, and was written by Masanobu UMEDA. - When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and - decided to rewrite Gnus. - - Its biggest strength is the fact that it is extremely - customizable. It is somewhat intimidating at first glance, but - most of the complexity can be ignored until you're ready to take - advantage of it. If you receive a reasonable volume of e-mail - (you're on various mailing lists), or you would like to read - high-volume mailing lists but cannot keep up with them, or read - high volume newsgroups or are just bored, then Gnus is what you - want. - - This FAQ was maintained by Justin Sheehy until March 2002. He - would like to thank Steve Baur and Per Abrahamsen for doing a wonderful - job with this FAQ before him. We would like to do the same - thanks, - Justin! - - If you have a Web browser, the official hypertext version is at:@* - @uref{http://my.gnus.org/FAQ/}. - This version is much nicer than the unofficial hypertext - versions that are archived at Utrecht, Oxford, Smart Pages, Ohio - State, and other FAQ archives. See the resources question below - if you want information on obtaining it in another format. - - The information contained here was compiled with the assistance - of the Gnus development mailing list, and any errors or - misprints are the my.gnus.org team's fault, sorry. +@itemize @bullet + +@item +Updated FAQ to reflect release of Gnus 5.10 and start of +No Gnus development. +@end itemize +@node FAQ - Introduction +@subheading Introduction + +This is the Gnus Frequently Asked Questions list. -@ifnottex -@node FAQ 1 - Installation, FAQ 2 - Startup / Group buffer, FAQ - Introduction, Frequently Asked Questions -@end ifnottex -@subsection Installation +Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented +as a part of Emacs. It's been around in some form for almost a decade +now, and has been distributed as a standard part of Emacs for much of +that time. Gnus 5 is the latest (and greatest) incarnation. The +original version was called GNUS, and was written by Masanobu UMEDA. +When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and +decided to rewrite Gnus. + +Its biggest strength is the fact that it is extremely +customizable. It is somewhat intimidating at first glance, but +most of the complexity can be ignored until you're ready to take +advantage of it. If you receive a reasonable volume of e-mail +(you're on various mailing lists), or you would like to read +high-volume mailing lists but cannot keep up with them, or read +high volume newsgroups or are just bored, then Gnus is what you +want. + +This FAQ was maintained by Justin Sheehy until March 2002. He +would like to thank Steve Baur and Per Abrahamsen for doing a wonderful +job with this FAQ before him. We would like to do the same - thanks, +Justin! + +If you have a Web browser, the official hypertext version is at: +@uref{http://my.gnus.org/FAQ/}. +This version is much nicer than the unofficial hypertext +versions that are archived at Utrecht, Oxford, Smart Pages, Ohio +State, and other FAQ archives. See the resources question below +if you want information on obtaining it in another format. + +The information contained here was compiled with the assistance +of the Gnus development mailing list, and any errors or +misprints are the my.gnus.org team's fault, sorry. + +@node FAQ 1 - Installation FAQ +@subsection Installation FAQ @menu -* [1.1]:: What is the latest version of Gnus? -* [1.2]:: What's new in 5.10.0? -* [1.3]:: Where and how to get Gnus? -* [1.4]:: What to do with the tarball now? -* [1.5]:: Which version of Emacs do I need? -* [1.6]:: How do I run Gnus on both Emacs and XEmacs? +* [1.1]:: What is the latest version of Gnus? +* [1.2]:: What's new in 5.10? +* [1.3]:: Where and how to get Gnus? +* [1.4]:: What to do with the tarball now? +* [1.5]:: I sometimes read references to No Gnus and Oort Gnus, what + are those? +* [1.6]:: Which version of Emacs do I need? +* [1.7]:: How do I run Gnus on both Emacs and XEmacs? @end menu - -@ifnottex -@node [1.1], [1.2], FAQ 1 - Installation, FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.1: +@node [1.1] +@subsubheading Question 1.1 What is the latest version of Gnus? -Answer: +@subsubheading Answer - Jingle please: Gnus 5.10.0 is released, get it while it's - hot! As well as the step in version number is rather - small, Gnus 5.10 has tons of new features which you - shouldn't miss, however if you are cautious, you might - prefer to stay with 5.8.8 respectively 5.9 (they are - basically the same) until some bugfix releases are out. - -@ifnottex -@node [1.2], [1.3], [1.1], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.2: +Jingle please: Gnus 5.10 is released, get it while it's +hot! As well as the step in version number is rather +small, Gnus 5.10 has tons of new features which you +shouldn't miss. The current release (5.10.6) should be at +least as stable as the latest release of the 5.8 series. -What's new in 5.10.0? +@node [1.2] +@subsubheading Question 1.2 -Answer: +What's new in 5.10? - First of all, you should have a look into the file - GNUS-NEWS in the toplevel directory of the Gnus tarball, - there the most important changes are listed. Here's a - short list of the changes I find especially - important/interesting: - +@subsubheading Answer - +First of all, you should have a look into the file +GNUS-NEWS in the toplevel directory of the Gnus tarball, +there the most important changes are listed. Here's a +short list of the changes I find especially +important/interesting: -@itemize @bullet{} +@itemize @bullet @item - Major rewrite of the Gnus agent, Gnus agent is now - active by default. - +Major rewrite of the Gnus agent, Gnus agent is now +active by default. + @item - Many new article washing functions for dealing with - ugly formatted articles. - +Many new article washing functions for dealing with +ugly formatted articles. + @item - Anti Spam features. - +Anti Spam features. + @item - message-utils now included in Gnus. - +Message-utils now included in Gnus. + @item - New format specifiers for summary lines, e.g. %B for - a complex trn-style thread tree. - +New format specifiers for summary lines, e.g. %B for +a complex trn-style thread tree. @end itemize - -@ifnottex -@node [1.3], [1.4], [1.2], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.3: + +@node [1.3] +@subsubheading Question 1.3 Where and how to get Gnus? -Answer: +@subsubheading Answer - The latest released version of Gnus isn't included in - Emacs 21 and until now it also isn't available through the - package system of XEmacs 21.4, therefor you should get the - Gnus tarball 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}. - -@ifnottex -@node [1.4], [1.5], [1.3], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.4: +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 +@uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. +If you use XEmacs instead of Emacs you can use XEmacs' +package system instead. - What to do with the tarball now? - +@node [1.4] +@subsubheading Question 1.4 -Answer: - - Untar it via @samp{tar xvzf gnus.tar.gz} and do the common - @samp{./configure; make; make install} circle. - (under MS-Windows either get the Cygwin environment from - @uref{http://www.cygwin.com} - which allows you to do what's described above or unpack the - tarball with some packer (e.g. Winace from - @uref{http://www.winace.com}) - and use the batch-file make.bat included in the tarball to install - Gnus. If you don't want to (or aren't allowed to) install Gnus - system-wide, you can install it in your home directory and add the - following lines to your ~/.xemacs/init.el or ~/.emacs: - +What to do with the tarball now? + +@subsubheading Answer + +Untar it via @samp{tar xvzf gnus.tar.gz} and do the common +@samp{./configure; make; make install} circle. +(under MS-Windows either get the Cygwin environment from +@uref{http://www.cygwin.com} +which allows you to do what's described above or unpack the +tarball with some packer (e.g. Winace from +@uref{http://www.winace.com}) +and use the batch-file make.bat included in the tarball to install +Gnus.) If you don't want to (or aren't allowed to) install Gnus +system-wide, you can install it in your home directory and add the +following lines to your ~/.xemacs/init.el or ~/.emacs: @example (add-to-list 'load-path "/path/to/gnus/lisp") @@ -212,436 +205,395 @@ Answer: (add-to-list 'Info-directory-list "/path/to/gnus/texi/") (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/")) @end example - @noindent - Make sure that you don't have any Gnus related stuff - before this line, on MS Windows use something like - "C:/path/to/lisp" (yes, "/"). - -@ifnottex -@node [1.5], [1.6], [1.4], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.5: + +Make sure that you don't have any Gnus related stuff +before this line, on MS Windows use something like +"C:/path/to/lisp" (yes, "/"). + +@node [1.5] +@subsubheading Question 1.5 + +I sometimes read references to No Gnus and Oort Gnus, +what are those? + +@subsubheading Answer + +Oort Gnus was the name of the development version of +Gnus, which became Gnus 5.10 in autumn 2003. No Gnus is +the name of the current development version which will +once become Gnus 5.12 or Gnus 6. (If you're wondering why +not 5.11, the odd version numbers are normally used for +the Gnus versions bundled with Emacs) + +@node [1.6] +@subsubheading Question 1.6 Which version of Emacs do I need? -Answer: +@subsubheading Answer - Gnus 5.10.0 requires an Emacs version that is greater - than or equal to Emacs 20.7 or XEmacs 21.1. - -@ifnottex -@node [1.6], , [1.5], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.6: +Gnus 5.10 requires an Emacs version that is greater +than or equal to Emacs 20.7 or XEmacs 21.1. The +development versions of Gnus (aka No Gnus) require Emacs +21 or XEmacs 21.4. + +@node [1.7] +@subsubheading Question 1.7 How do I run Gnus on both Emacs and XEmacs? -Answer: +@subsubheading Answer - You can't use the same copy of Gnus in both as the Lisp - files are byte-compiled to a format which is different - depending on which Emacs did the compilation. Get one copy - of Gnus for Emacs and one for XEmacs. - -@ifnottex -@node FAQ 2 - Startup / Group buffer, FAQ 3 - Getting messages, FAQ 1 - Installation, Frequently Asked Questions -@end ifnottex +You can't use the same copy of Gnus in both as the Lisp +files are byte-compiled to a format which is different +depending on which Emacs did the compilation. Get one copy +of Gnus for Emacs and one for XEmacs. + +@node FAQ 2 - Startup / Group buffer @subsection Startup / Group buffer @menu -* [2.1]:: Every time I start Gnus I get a message - "Gnus auto-save file exists. Do you want to read it?", - what does this mean and how to prevent it? -* [2.2]:: Gnus doesn't remember which groups I'm subscribed to, what's this? -* [2.3]:: How to change the format of the lines in Group buffer? -* [2.4]:: My group buffer becomes a bit crowded, is there a way to sort my - groups into categories so I can easier browse through them? -* [2.5]:: How to manually sort the groups in Group buffer? How to sort the - groups in a topic? +* [2.1]:: Every time I start Gnus I get a message "Gnus auto-save + file exists. Do you want to read it?", what does this mean and + how to prevent it? +* [2.2]:: Gnus doesn't remember which groups I'm subscribed to, + what's this? +* [2.3]:: How to change the format of the lines in Group buffer? +* [2.4]:: My group buffer becomes a bit crowded, is there a way to + sort my groups into categories so I can easier browse through + them? +* [2.5]:: How to manually sort the groups in Group buffer? How to + sort the groups in a topic? @end menu -@ifnottex -@node [2.1], [2.2], FAQ 2 - Startup / Group buffer, FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.1: +@node [2.1] +@subsubheading Question 2.1 - Every time I start Gnus I get a message "Gnus auto-save - file exists. Do you want to read it?", what does this mean - and how to prevent it? - +Every time I start Gnus I get a message "Gnus auto-save +file exists. Do you want to read it?", what does this mean +and how to prevent it? -Answer: +@subsubheading Answer - This message means that the last time you used Gnus, it - wasn't properly exited and therefor couldn't write its - informations to disk (e.g. which messages you read), you - are now asked if you want to restore those informations - from the auto-save file. - +This message means that the last time you used Gnus, it +wasn't properly exited and therefor couldn't write its +informations to disk (e.g. which messages you read), you +are now asked if you want to restore those informations +from the auto-save file. - To prevent this message make sure you exit Gnus - via @samp{q} in group buffer instead of - just killing Emacs. - -@ifnottex -@node [2.2], [2.3], [2.1], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question: 2.2 +To prevent this message make sure you exit Gnus +via @samp{q} in group buffer instead of +just killing Emacs. - Gnus doesn't remember which groups I'm subscribed to, - what's this? - +@node [2.2] +@subsubheading Question 2.2 -Answer: +Gnus doesn't remember which groups I'm subscribed to, +what's this? - You get the message described in the q/a pair above while - starting Gnus, right? It's an other symptom for the same - problem, so read the answer above. - -@ifnottex -@node [2.3], [2.4], [2.2], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.3: +@subsubheading Answer - How to change the format of the lines in Group buffer? - +You get the message described in the q/a pair above while +starting Gnus, right? It's an other symptom for the same +problem, so read the answer above. -Answer: +@node [2.3] +@subsubheading Question 2.3 - You've got to tweak the value of the variable - gnus-group-line-format. See the manual node "Group Line - Specification" for information on how to do this. An - example for this (guess from whose .gnus :-)): - +How to change the format of the lines in Group buffer? -@example +@subsubheading Answer +You've got to tweak the value of the variable +gnus-group-line-format. See the manual node "Group Line +Specification" for information on how to do this. An +example for this (guess from whose .gnus :-)): + +@example (setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n") - @end example - -@ifnottex -@node [2.4], [2.5], [2.3], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.4: - - My group buffer becomes a bit crowded, is there a way to - sort my groups into categories so I can easier browse - through them? - +@noindent -Answer: +@node [2.4] +@subsubheading Question 2.4 - Gnus offers the topic mode, it allows you to sort your - groups in, well, topics, e.g. all groups dealing with - Linux under the topic linux, all dealing with music under - the topic music and all dealing with scottish music under - the topic scottish which is a subtopic of music. - +My group buffer becomes a bit crowded, is there a way to +sort my groups into categories so I can easier browse +through them? - To enter topic mode, just hit t while in Group buffer. Now - you can use @samp{T n} to create a topic - at point and @samp{T m} to move a group to - a specific topic. For more commands see the manual or the - menu. You might want to include the %P specifier at the - beginning of your gnus-group-line-format variable to have - the groups nicely indented. - -@ifnottex -@node [2.5], , [2.4], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.5: +@subsubheading Answer - How to manually sort the groups in Group buffer? How to - sort the groups in a topic? - +Gnus offers the topic mode, it allows you to sort your +groups in, well, topics, e.g. all groups dealing with +Linux under the topic linux, all dealing with music under +the topic music and all dealing with scottish music under +the topic scottish which is a subtopic of music. -Answer: +To enter topic mode, just hit t while in Group buffer. Now +you can use @samp{T n} to create a topic +at point and @samp{T m} to move a group to +a specific topic. For more commands see the manual or the +menu. You might want to include the %P specifier at the +beginning of your gnus-group-line-format variable to have +the groups nicely indented. - Move point over the group you want to move and - hit @samp{C-k}, now move point to the - place where you want the group to be and - hit @samp{C-y}. - -@ifnottex -@node FAQ 3 - Getting messages, FAQ 4 - Reading messages, FAQ 2 - Startup / Group buffer, Frequently Asked Questions -@end ifnottex -@subsection Getting messages +@node [2.5] +@subsubheading Question 2.5 + +How to manually sort the groups in Group buffer? How to +sort the groups in a topic? + +@subsubheading Answer + +Move point over the group you want to move and +hit @samp{C-k}, now move point to the +place where you want the group to be and +hit @samp{C-y}. + +@node FAQ 3 - Getting Messages +@subsection Getting Messages @menu -* [3.1]:: I just installed Gnus, started it via M-x gnus but it only says - "nntp (news) open error", what to do? -* [3.2]:: I'm working under Windows and have no idea what ~/.gnus means. -* [3.3]:: My news server requires authentication, how to store user name - and password on disk? -* [3.4]:: Gnus seems to start up OK, but I can't find out how to - subscribe to a group. -* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed to - post on this server as well as I am, what's that? -* [3.6]:: I want Gnus to fetch news from several servers, is this possible? -* [3.7]:: And how about local spool files? -* [3.8]:: OK, reading news works now, but I want to be able to read my mail - with Gnus, too. How to do it? -* [3.9]:: And what about IMAP? -* [3.10]:: At the office we use one of those MS Exchange servers, - can I use Gnus to read my mail from it? -* [3.11]:: Can I tell Gnus not to delete the mails on the server - it retrieves via POP3? +* [3.1]:: I just installed Gnus, started it via @samp{M-x gnus} + but it only says "nntp (news) open error", what to do? +* [3.2]:: I'm working under Windows and have no idea what ~/.gnus.el + means. +* [3.3]:: My news server requires authentication, how to store user + name and password on disk? +* [3.4]:: Gnus seems to start up OK, but I can't find out how to + subscribe to a group. +* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed + to post on this server as well as I am, what's that? +* [3.6]:: I want Gnus to fetch news from several servers, is this + possible? +* [3.7]:: And how about local spool files? +* [3.8]:: OK, reading news works now, but I want to be able to read + my mail with Gnus, too. How to do it? +* [3.9]:: And what about IMAP? +* [3.10]:: At the office we use one of those MS Exchange servers, can + I use Gnus to read my mail from it? +* [3.11]:: Can I tell Gnus not to delete the mails on the server it + retrieves via POP3? @end menu -@ifnottex -@node [3.1], [3.2], FAQ 3 - Getting messages, FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.1: +@node [3.1] +@subsubheading Question 3.1 - I just installed Gnus, started it via - @samp{M-x gnus} - but it only says "nntp (news) open error", what to do? - +I just installed Gnus, started it via +@samp{M-x gnus} +but it only says "nntp (news) open error", what to do? -Answer: +@subsubheading Answer - You've got to tell Gnus where to fetch the news from. Read - the documentation for information on how to do this. As a - first start, put those lines in ~/.gnus: - +You've got to tell Gnus where to fetch the news from. Read +the documentation for information on how to do this. As a +first start, put those lines in ~/.gnus.el: @example (setq gnus-select-method '(nntp "news.yourprovider.net")) (setq user-mail-address "you@@yourprovider.net") (setq user-full-name "Your Name") @end example - -@ifnottex -@node [3.2], [3.3], [3.1], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.2: - - I'm working under Windows and have no idea what ~/.gnus means. - +@noindent -Answer: - - The ~/ means the home directory where Gnus and Emacs look for the -configuration files. However, you don't really need to know what this -means, it suffices that Emacs knows what it means :-) You can type -@samp{C-x C-f ~/.gnus RET } (yes, with the forward slash, even on -Windows), and Emacs will open the right file for you. (It will most -likely be new, and thus empty.) However, I'd discourage you from -doing so, since the directory Emacs chooses will most certainly not be -what you want, so let's do it the correct way. The first thing you've -got to do is to create a suitable directory (no blanks in directory -name please) e.g. @file{c:\myhome}. Then you must set the environment -variable HOME to this directory. To do this under Win9x or Me include -the line - +@node [3.2] +@subsubheading Question 3.2 + +I'm working under Windows and have no idea what ~/.gnus.el means. + +@subsubheading Answer + +The ~/ means the home directory where Gnus and Emacs look +for the configuration files. However, you don't really +need to know what this means, it suffices that Emacs knows +what it means :-) You can type +@samp{C-x C-f ~/.gnus.el RET } +(yes, with the forward slash, even on Windows), and +Emacs will open the right file for you. (It will most +likely be new, and thus empty.) +However, I'd discourage you from doing so, since the +directory Emacs chooses will most certainly not be what +you want, so let's do it the correct way. +The first thing you've got to do is to +create a suitable directory (no blanks in directory name +please) e.g. c:\myhome. Then you must set the environment +variable HOME to this directory. To do this under Win9x +or Me include the line @example - SET HOME=C:\myhome - @end example - @noindent - in your autoexec.bat and reboot. Under NT, 2000 and XP, - hit Winkey+Pause/Break to enter system options (if it - doesn't work, go to Control Panel -> System). There you'll - find the possibility to set environment variables, create - a new one with name HOME and value @file{c:\myhome}, a reboot is - not necessary. - - Now to create ~/.gnus, say - @samp{C-x C-f ~/.gnus RET C-x C-s}. - in Emacs. - -@ifnottex -@node [3.3], [3.4], [3.2], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.3: +in your autoexec.bat and reboot. Under NT, 2000 and XP, +hit Winkey+Pause/Break to enter system options (if it +doesn't work, go to Control Panel -> System). There you'll +find the possibility to set environment variables, create +a new one with name HOME and value C:\myhome, a reboot is +not necessary. - My news server requires authentication, how to store - user name and password on disk? - +Now to create ~/.gnus.el, say +@samp{C-x C-f ~/.gnus.el RET C-x C-s}. +in Emacs. -Answer: +@node [3.3] +@subsubheading Question 3.3 - Create a file ~/.authinfo which includes for each server a line like this - +My news server requires authentication, how to store +user name and password on disk? + +@subsubheading Answer + +Create a file ~/.authinfo which includes for each server a line like this @example machine news.yourprovider.net login YourUserName password YourPassword @end example - @noindent . - Make sure that the file isn't readable to others if you - work on a OS which is capable of doing so. (Under Unix - say - +Make sure that the file isn't readable to others if you +work on a OS which is capable of doing so. (Under Unix +say @example chmod 600 ~/.authinfo @end example - @noindent - in a shell.) - -@ifnottex -@node [3.4], [3.5], [3.3], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.4: - Gnus seems to start up OK, but I can't find out how to - subscribe to a group. - +in a shell.) -Answer: +@node [3.4] +@subsubheading Question 3.4 - If you know the name of the group say @samp{U - name.of.group RET} in group buffer (use the - tab-completion Luke). Otherwise hit ^ in group buffer, - this brings you to the server buffer. Now place point (the - cursor) over the server which carries the group you want, - hit @samp{RET}, move point to the group - you want to subscribe to and say @samp{u} - to subscribe to it. - -@ifnottex -@node [3.5], [3.6], [3.4], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.5: +Gnus seems to start up OK, but I can't find out how to +subscribe to a group. - Gnus doesn't show all groups / Gnus says I'm not allowed to - post on this server as well as I am, what's that? - +@subsubheading Answer -Answer: +If you know the name of the group say @samp{U +name.of.group RET} in group buffer (use the +tab-completion Luke). Otherwise hit ^ in group buffer, +this brings you to the server buffer. Now place point (the +cursor) over the server which carries the group you want, +hit @samp{RET}, move point to the group +you want to subscribe to and say @samp{u} +to subscribe to it. - Some providers allow restricted anonymous access and full - access only after authorization. To make Gnus send authinfo - to those servers append - +@node [3.5] +@subsubheading Question 3.5 + +Gnus doesn't show all groups / Gnus says I'm not allowed to +post on this server as well as I am, what's that? + +@subsubheading Answer + +Some providers allow restricted anonymous access and full +access only after authorization. To make Gnus send authinfo +to those servers append @example force yes @end example - - @noindent - to the line for those servers in ~/.authinfo. -@ifnottex -@node [3.6], [3.7], [3.5], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.6: +to the line for those servers in ~/.authinfo. - I want Gnus to fetch news from several servers, is this possible? - +@node [3.6] +@subsubheading Question 3.6 -Answer: +I want Gnus to fetch news from several servers, is this possible? - Of course. You can specify more sources for articles in the - variable gnus-secondary-select-methods. Add something like - this in ~/.gnus: - +@subsubheading Answer + +Of course. You can specify more sources for articles in the +variable gnus-secondary-select-methods. Add something like +this in ~/.gnus.el: @example -(add-to-list 'gnus-secondary-select-methods - '(nntp "news.yourSecondProvider.net")) -(add-to-list 'gnus-secondary-select-methods - '(nntp "news.yourThirdProvider.net")) +(add-to-list 'gnus-secondary-select-methods + '(nntp "news.yourSecondProvider.net")) +(add-to-list 'gnus-secondary-select-methods + '(nntp "news.yourThirdProvider.net")) @end example - -@ifnottex -@node [3.7], [3.8], [3.6], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.7: +@noindent - And how about local spool files? - +@node [3.7] +@subsubheading Question 3.7 -Answer: +And how about local spool files? - No problem, this is just one more select method called - nnspool, so you want this: - +@subsubheading Answer + +No problem, this is just one more select method called +nnspool, so you want this: @example (add-to-list 'gnus-secondary-select-methods '(nnspool "")) @end example - @noindent - Or this if you don't want an NNTP Server as primary news source: - + +Or this if you don't want an NNTP Server as primary news source: @example (setq gnus-select-method '(nnspool "")) @end example - @noindent - Gnus will look for the spool file in /usr/spool/news, if you - want something different, change the line above to something like this: - + +Gnus will look for the spool file in /usr/spool/news, if you +want something different, change the line above to something like this: @example (add-to-list 'gnus-secondary-select-methods - '(nnspool "" (nnspool-directory "/usr/local/myspoolddir"))) + '(nnspool "" + (nnspool-directory "/usr/local/myspoolddir"))) @end example - @noindent - This sets the spool directory for this server only. - You might have to specify more stuff like the program used - to post articles, see the Gnus manual on how to do this. - -@ifnottex -@node [3.8], [3.9], [3.7], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.8: - OK, reading news works now, but I want to be able to read my mail - with Gnus, too. How to do it? - - -Answer: - - That's a bit harder since there are many possible sources - for mail, many possible ways for storing mail and many - different ways for sending mail. The most common cases are - these: 1: You want to read your mail from a pop3 server and - send them directly to a SMTP Server 2: Some program like - fetchmail retrieves your mail and stores it on disk from - where Gnus shall read it. Outgoing mail is sent by - Sendmail, Postfix or some other MTA. Sometimes, you even - need a combination of the above cases. - - - However, the first thing to do is to tell Gnus in which way - it should store the mail, in Gnus terminology which back end - to use. Gnus supports many different back ends, the most - commonly used one is nnml. It stores every mail in one file - and is therefor quite fast. However you might prefer a one - file per group approach if your file system has problems with - many small files, the nnfolder back end is then probably the - choice for you. To use nnml add the following to ~/.gnus: - +This sets the spool directory for this server only. +You might have to specify more stuff like the program used +to post articles, see the Gnus manual on how to do this. + +@node [3.8] +@subsubheading Question 3.8 + +OK, reading news works now, but I want to be able to read my mail +with Gnus, too. How to do it? + +@subsubheading Answer + +That's a bit harder since there are many possible sources +for mail, many possible ways for storing mail and many +different ways for sending mail. The most common cases are +these: 1: You want to read your mail from a pop3 server and +send them directly to a SMTP Server 2: Some program like +fetchmail retrieves your mail and stores it on disk from +where Gnus shall read it. Outgoing mail is sent by +Sendmail, Postfix or some other MTA. Sometimes, you even +need a combination of the above cases. + +However, the first thing to do is to tell Gnus in which way +it should store the mail, in Gnus terminology which back end +to use. Gnus supports many different back ends, the most +commonly used one is nnml. It stores every mail in one file +and is therefor quite fast. However you might prefer a one +file per group approach if your file system has problems with +many small files, the nnfolder back end is then probably the +choice for you. To use nnml add the following to ~/.gnus.el: @example (add-to-list 'gnus-secondary-select-methods '(nnml "")) @end example - @noindent - As you might have guessed, if you want nnfolder, it's - + +As you might have guessed, if you want nnfolder, it's @example (add-to-list 'gnus-secondary-select-methods '(nnfolder "")) @end example - +@noindent - Now we need to tell Gnus, where to get it's mail from. If - it's a POP3 server, then you need something like this: - +Now we need to tell Gnus, where to get it's mail from. If +it's a POP3 server, then you need something like this: @example (eval-after-load "mail-source" @@ -649,75 +601,68 @@ Answer: :user "yourUserName" :password "yourPassword"))) @end example - @noindent - Make sure ~/.gnus isn't readable to others if you store - your password there. If you want to read your mail from a - traditional spool file on your local machine, it's - + +Make sure ~/.gnus.el isn't readable to others if you store +your password there. If you want to read your mail from a +traditional spool file on your local machine, it's @example (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(file :path "/path/to/spool/file"))) + '(add-to-list 'mail-sources '(file :path "/path/to/spool/file")) @end example - @noindent - If it's a Maildir, with one file per message as used by - postfix, Qmail and (optionally) fetchmail it's - + +If it's a Maildir, with one file per message as used by +postfix, Qmail and (optionally) fetchmail it's @example (eval-after-load "mail-source" '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/" :subdirs ("cur" "new"))) @end example - @noindent - And finally if you want to read your mail from several files - in one directory, for example because procmail already split your - mail, it's - + +And finally if you want to read your mail from several files +in one directory, for example because procmail already split your +mail, it's @example (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(directory :path "/path/to/procmail-dir/" - :suffix ".prcml")) + '(add-to-list 'mail-sources + '(directory :path "/path/to/procmail-dir/" + :suffix ".prcml"))) @end example - @noindent - Where :suffix ".prcml" tells Gnus only to use files with the - suffix .prcml. - - OK, now you only need to tell Gnus how to send mail. If you - want to send mail via sendmail (or whichever MTA is playing - the role of sendmail on your system), you don't need to do - anything. However, if you want to send your mail to an - SMTP Server you need the following in your ~/.gnus - +Where :suffix ".prcml" tells Gnus only to use files with the +suffix .prcml. + +OK, now you only need to tell Gnus how to send mail. If you +want to send mail via sendmail (or whichever MTA is playing +the role of sendmail on your system), you don't need to do +anything. However, if you want to send your mail to an +SMTP Server you need the following in your ~/.gnus.el @example (setq send-mail-function 'smtpmail-send-it) (setq message-send-mail-function 'smtpmail-send-it) (setq smtpmail-default-smtp-server "smtp.yourProvider.net") @end example - -@ifnottex -@node [3.9], [3.10], [3.8], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.9: +@noindent - And what about IMAP? - +@node [3.9] +@subsubheading Question 3.9 -Answer: +And what about IMAP? - There are two ways of using IMAP with Gnus. The first one is - to use IMAP like POP3, that means Gnus fetches the mail from - the IMAP server and stores it on disk. If you want to do - this (you don't really want to do this) add the following to - ~/.gnus - +@subsubheading Answer + +There are two ways of using IMAP with Gnus. The first one is +to use IMAP like POP3, that means Gnus fetches the mail from +the IMAP server and stores it on disk. If you want to do +this (you don't really want to do this) add the following to +~/.gnus.el @example (add-to-list 'mail-sources '(imap :server "mail.mycorp.com" @@ -728,249 +673,215 @@ Answer: :mailbox "INBOX" :fetchflag "\\Seen")) @end example - @noindent - You might have to tweak the values for stream and/or - authentification, 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 - follow a different approach. You've got to add the nnimap - back end to your select method and give the information - about the server there. - +You might have to tweak the values for stream and/or +authentification, 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 +follow a different approach. You've got to add the nnimap +back end to your select method and give the information +about the server there. @example -(add-to-list - 'gnus-secondary-select-methods - '(nnimap "Give the baby a name" - (nnimap-address "imap.yourProvider.net") - (nnimap-port 143) - (nnimap-list-pattern "archive.*"))) +(add-to-list 'gnus-secondary-select-methods + '(nnimap "Give the baby a name" + (nnimap-address "imap.yourProvider.net") + (nnimap-port 143) + (nnimap-list-pattern "archive.*"))) @end example - @noindent - Again, you might have to specify how to authenticate to the - server if Gnus can't guess the correct way, see the Manual - Node "IMAP" for detailed information. - -@ifnottex -@node [3.10], [3.11], [3.9], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.10: - At the office we use one of those MS Exchange servers, can I use - Gnus to read my mail from it? - - -Answer: - - Offer your administrator a pair of new running shoes for - activating IMAP on the server and follow the instructions - above. - -@ifnottex -@node [3.11], , [3.10], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.11: - - Can I tell Gnus not to delete the mails on the server it - retrieves via POP3? - - -Answer: - - First of all, that's not the way POP3 is intended to work, - if you have the possibility, you should use the IMAP - Protocol if you want your messages to stay on the - server. Nevertheless there might be situations where you - need the feature, but sadly Gnus itself has no predefined - functionality to do so. - - - However this is Gnus county so there are possibilities to - achieve what you want. The easiest way is to get an external - program which retrieves copies of the mail and stores them - on disk, so Gnus can read it from there. On Unix systems you - could use e.g. fetchmail for this, on MS Windows you can use - Hamster, an excellent local news and mail server. - - - The other solution would be, to replace the method Gnus - uses to get mail from POP3 servers by one which is capable - of leaving the mail on the server. If you use XEmacs, get - the package mail-lib, it includes an enhanced pop3.el, - look in the file, there's documentation on how to tell - Gnus to use it and not to delete the retrieved mail. For - GNU Emacs look for the file epop3.el which can do the same - (If you know the home of this file, please send me an - e-mail). You can also tell Gnus to use an external program - (e.g. fetchmail) to fetch your mail, see the info node - "Mail Source Specifiers" in the Gnus manual on how to do - it. - - -@ifnottex -@node FAQ 4 - Reading messages, FAQ 5 - Composing messages, FAQ 3 - Getting messages, Frequently Asked Questions -@end ifnottex +Again, you might have to specify how to authenticate to the +server if Gnus can't guess the correct way, see the Manual +Node "IMAP" for detailed information. + +@node [3.10] +@subsubheading Question 3.10 + +At the office we use one of those MS Exchange servers, can I use +Gnus to read my mail from it? + +@subsubheading Answer + +Offer your administrator a pair of new running shoes for +activating IMAP on the server and follow the instructions +above. + +@node [3.11] +@subsubheading Question 3.11 + +Can I tell Gnus not to delete the mails on the server it +retrieves via POP3? + +@subsubheading Answer + +First of all, that's not the way POP3 is intended to work, +if you have the possibility, you should use the IMAP +Protocol if you want your messages to stay on the +server. Nevertheless there might be situations where you +need the feature, but sadly Gnus itself has no predefined +functionality to do so. + +However this is Gnus county so there are possibilities to +achieve what you want. The easiest way is to get an external +program which retrieves copies of the mail and stores them +on disk, so Gnus can read it from there. On Unix systems you +could use e.g. fetchmail for this, on MS Windows you can use +Hamster, an excellent local news and mail server. + +The other solution would be, to replace the method Gnus +uses to get mail from POP3 servers by one which is capable +of leaving the mail on the server. If you use XEmacs, get +the package mail-lib, it includes an enhanced pop3.el, +look in the file, there's documentation on how to tell +Gnus to use it and not to delete the retrieved mail. For +GNU Emacs look for the file epop3.el which can do the same +(If you know the home of this file, please send me an +e-mail). You can also tell Gnus to use an external program +(e.g. fetchmail) to fetch your mail, see the info node +"Mail Source Specifiers" in the Gnus manual on how to do +it. + +@node FAQ 4 - Reading messages @subsection Reading messages @menu -* [4.1]:: When I enter a group, all read messages are gone. - How to view them again? -* [4.2]:: How to tell Gnus to show an important message every time - I enter a group, even when it's read? -* [4.3]:: How to view the headers of a message? -* [4.4]:: How to view the raw unformatted message? -* [4.5]:: How can I change the headers Gnus displays by default at the - top of the article buffer? -* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the - text part if it's available. How to do it? -* [4.7]:: Can I use some other browser than w3 to render my HTML-mails? -* [4.8]:: Is there anything I can do to make poorly formatted mails - more readable? -* [4.9]:: Is there a way to automatically ignore posts by specific authors - or with specific words in the subject? And can I highlight more - interesting ones in some way? -* [4.10]:: How can I disable threading in some (e.g. mail-) groups, or set - other variables specific for some groups? -* [4.11]:: Can I highlight messages written by me and follow-ups to those? -* [4.12]:: The number of total messages in a group which Gnus displays in - group buffer is by far to high, especially in mail groups. - Is this a bug? -* [4.13]:: I don't like the layout of summary and article buffer, - how to change it? Perhaps even a three pane display? -* [4.14]:: I don't like the way the Summary buffer looks, how to tweak it? -* [4.15]:: How to split incoming mails in several groups? +* [4.1]:: When I enter a group, all read messages are gone. How to + view them again? +* [4.2]:: How to tell Gnus to show an important message every time I + enter a group, even when it's read? +* [4.3]:: How to view the headers of a message? +* [4.4]:: How to view the raw unformatted message? +* [4.5]:: How can I change the headers Gnus displays by default at + the top of the article buffer? +* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the + text part if it's available. How to do it? +* [4.7]:: Can I use some other browser than w3 to render my + HTML-mails? +* [4.8]:: Is there anything I can do to make poorly formatted mails + more readable? +* [4.9]:: Is there a way to automatically ignore posts by specific + authors or with specific words in the subject? And can I highlight + more interesting ones in some way? +* [4.10]:: How can I disable threading in some (e.g. mail-) groups, + or set other variables specific for some groups? +* [4.11]:: Can I highlight messages written by me and follow-ups to + those? +* [4.12]:: The number of total messages in a group which Gnus + displays in group buffer is by far to high, especially in mail + groups. Is this a bug? +* [4.13]:: I don't like the layout of summary and article buffer, how + to change it? Perhaps even a three pane display? +* [4.14]:: I don't like the way the Summary buffer looks, how to + tweak it? +* [4.15]:: How to split incoming mails in several groups? @end menu -@ifnottex -@node [4.1], [4.2], FAQ 4 - Reading messages, FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.1: +@node [4.1] +@subsubheading Question 4.1 - When I enter a group, all read messages are gone. How to view them again? - +When I enter a group, all read messages are gone. How to view them again? -Answer: +@subsubheading Answer - If you enter the group by saying - @samp{RET} - in summary buffer with point over the group, only unread and ticked messages are loaded. Say - @samp{C-u RET} - instead to load all available messages. If you want only the e.g. 300 newest say - @samp{C-u 300 RET} - +If you enter the group by saying +@samp{RET} +in group buffer with point over the group, only unread and ticked messages are loaded. Say +@samp{C-u RET} +instead to load all available messages. If you want only the e.g. 300 newest say +@samp{C-u 300 RET} - Loading only unread messages can be annoying if you have threaded view enabled, say - +Loading only unread messages can be annoying if you have threaded view enabled, say @example (setq gnus-fetch-old-headers 'some) @end example - - @noindent - in ~/.gnus to load enough old articles to prevent teared threads, replace 'some with t to load - all articles (Warning: Both settings enlarge the amount of data which is - fetched when you enter a group and slow down the process of entering a group). +in ~/.gnus.el to load enough old articles to prevent teared threads, replace 'some with t to load +all articles (Warning: Both settings enlarge the amount of data which is +fetched when you enter a group and slow down the process of entering a group). - If you already use Gnus 5.10.0, you can say - @samp{/o N} - In summary buffer to load the last N messages, this feature is not available in 5.8.8 - +If you already use Gnus 5.10, you can say +@samp{/o N} +In summary buffer to load the last N messages, this feature is not available in 5.8.8 - If you don't want all old messages, but the parent of the message you're just reading, - you can say @samp{^}, if you want to retrieve the whole thread - the message you're just reading belongs to, @samp{A T} is your friend. - -@ifnottex -@node [4.2], [4.3], [4.1], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.2: +If you don't want all old messages, but the parent of the message you're just reading, +you can say @samp{^}, if you want to retrieve the whole thread +the message you're just reading belongs to, @samp{A T} is your friend. - How to tell Gnus to show an important message every time I - enter a group, even when it's read? - +@node [4.2] +@subsubheading Question 4.2 -Answer: +How to tell Gnus to show an important message every time I +enter a group, even when it's read? - You can tick important messages. To do this hit - @samp{u} while point is in summary buffer - over the message. When you want to remove the mark, hit - either @samp{d} (this deletes the tick - mark and set's unread mark) or @samp{M c} - (which deletes all marks for the message). - -@ifnottex -@node [4.3], [4.4], [4.2], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.3: +@subsubheading Answer - How to view the headers of a message? - +You can tick important messages. To do this hit +@samp{u} while point is in summary buffer +over the message. When you want to remove the mark, hit +either @samp{d} (this deletes the tick +mark and set's unread mark) or @samp{M c} +(which deletes all marks for the message). -Answer: +@node [4.3] +@subsubheading Question 4.3 - Say @samp{t} - to show all headers, one more - @samp{t} - hides them again. - -@ifnottex -@node [4.4], [4.5], [4.3], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.4: +How to view the headers of a message? - How to view the raw unformatted message? - +@subsubheading Answer -Answer: +Say @samp{t} +to show all headers, one more +@samp{t} +hides them again. - Say - @samp{C-u g} - to show the raw message - @samp{g} - returns to normal view. - -@ifnottex -@node [4.5], [4.6], [4.4], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.5: +@node [4.4] +@subsubheading Question 4.4 - How can I change the headers Gnus displays by default at - the top of the article buffer? - +How to view the raw unformatted message? -Answer: +@subsubheading Answer + +Say +@samp{C-u g} +to show the raw message +@samp{g} +returns to normal view. + +@node [4.5] +@subsubheading Question 4.5 + +How can I change the headers Gnus displays by default at +the top of the article buffer? + +@subsubheading Answer + +The variable gnus-visible-headers controls which headers +are shown, its value is a regular expression, header lines +which match it are shown. So if you want author, subject, +date, and if the header exists, Followup-To and MUA / NUA +say this in ~/.gnus.el: - The variable gnus-visible-headers controls which headers - are shown, its value is a regular expression, header lines - which match it are shown. So if you want author, subject, - date, and if the header exists, Followup-To and MUA / NUA - say this in ~/.gnus: - @example -(setq gnus-visible-headers - "^\\(From:\\|Subject:\\|Date:\\|Followup-To:\ -\\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)") +(setq gnus-visible-headers + '("^From" "^Subject" "^Date" "^Newsgroups" "^Followup-To" + "^User-Agent" "^X-Newsreader" "^X-Mailer")) @end example - -@ifnottex -@node [4.6], [4.7], [4.5], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.6: +@noindent - I'd like Gnus NOT to render HTML-mails but show me the - text part if it's available. How to do it? - +@node [4.6] +@subsubheading Question 4.6 -Answer: +I'd like Gnus NOT to render HTML-mails but show me the +text part if it's available. How to do it? - Say - +@subsubheading Answer + +Say @example (eval-after-load "mm-decode" @@ -978,240 +889,206 @@ Answer: (add-to-list 'mm-discouraged-alternatives "text/html") (add-to-list 'mm-discouraged-alternatives "text/richtext"))) @end example - @noindent - in ~/.gnus. If you don't want HTML rendered, even if there's no text alternative add - + +in ~/.gnus.el. If you don't want HTML rendered, even if there's no text alternative add @example (setq mm-automatic-display (remove "text/html" mm-automatic-display)) @end example - @noindent - too. - -@ifnottex -@node [4.7], [4.8], [4.6], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.7: - Can I use some other browser than w3 to render my HTML-mails? - +too. -Answer: +@node [4.7] +@subsubheading Question 4.7 - Only if you use Gnus 5.10.0 or younger. In this case you've got the - choice between w3, w3m, links, lynx and html2text, which - one is used can be specified in the variable - mm-text-html-renderer, so if you want links to render your - mail say - +Can I use some other browser than w3 to render my HTML-mails? + +@subsubheading Answer + +Only if you use Gnus 5.10 or younger. In this case you've got the +choice between w3, w3m, links, lynx and html2text, which +one is used can be specified in the variable +mm-text-html-renderer, so if you want links to render your +mail say @example (setq mm-text-html-renderer 'links) @end example - -@ifnottex -@node [4.8], [4.9], [4.7], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.8: - - Is there anything I can do to make poorly formatted mails - more readable? - - -Answer: - - Gnus offers you several functions to "wash" incoming mail, - you can find them if you browse through the menu, item Article->Washing. The most - interesting ones are probably "Wrap long lines" ( - @samp{W w} - ), "Decode ROT13" ( - @samp{W r} - ) and "Outlook Deuglify" which repairs the dumb quoting used - by many users of Microsoft products ( - @samp{W Y f} gives you full deuglify. - See @samp{W Y C-h} or - have a look at the menus for other deuglifications). - Outlook deuglify is only available since Gnus 5.10.0. - -@ifnottex -@node [4.9], [4.10], [4.8], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.9: - - Is there a way to automatically ignore posts by specific - authors or with specific words in the subject? And can I - highlight more interesting ones in some way? - - -Answer: - - You want Scoring. Scoring means, that you define rules - which assign each message an integer value. Depending on - the value the message is highlighted in summary buffer (if - it's high, say +2000) or automatically marked read (if the - value is low, say -800) or some other action happens. - - - There are basically three ways of setting up rules which assign - the scoring-value to messages. The first and easiest way is to set - up rules based on the article you are just reading. Say you're - reading a message by a guy who always writes nonsense and you want - to ignore his messages in the future. Hit - @samp{L}, to set up a rule which lowers the score. - Now Gnus asks you which the criteria for lowering the Score shall - be. Hit @samp{?} twice to see all possibilities, - we want @samp{a} which means the author (the from - header). Now Gnus wants to know which kind of matching we want. - Hit either @samp{e} for an exact match or - @samp{s} for substring-match and delete afterwards - everything but the name to score down all authors with the given - name no matter which email address is used. Now you need to tell - Gnus when to apply the rule and how long it should last, hit e.g. - @samp{p} to apply the rule now and let it last - forever. If you want to raise the score instead of lowering it say - @samp{I} instead of @samp{L}. - +@noindent - You can also set up rules by hand. To do this say @samp{V - f} in summary buffer. Then you are asked for the name - of the score file, it's name.of.group.SCORE for rules valid in - only one group or all.Score for rules valid in all groups. See the - Gnus manual for the exact syntax, basically it's one big list - whose elements are lists again. the first element of those lists - is the header to score on, then one more list with what to match, - which score to assign, when to expire the rule and how to do the - matching. If you find me very interesting, you could e.g. add the - following to your all.Score: - +@node [4.8] +@subsubheading Question 4.8 + +Is there anything I can do to make poorly formatted mails +more readable? + +@subsubheading Answer + +Gnus offers you several functions to "wash" incoming mail, you can +find them if you browse through the menu, item +Article->Washing. The most interesting ones are probably "Wrap +long lines" (@samp{W w}), "Decode ROT13" +(@samp{W r}) and "Outlook Deuglify" which repairs +the dumb quoting used by many users of Microsoft products +(@samp{W Y f} gives you full deuglify. +See @samp{W Y C-h} or have a look at the menus for +other deuglifications). Outlook deuglify is only available since +Gnus 5.10. + +@node [4.9] +@subsubheading Question 4.9 + +Is there a way to automatically ignore posts by specific +authors or with specific words in the subject? And can I +highlight more interesting ones in some way? + +@subsubheading Answer + +You want Scoring. Scoring means, that you define rules +which assign each message an integer value. Depending on +the value the message is highlighted in summary buffer (if +it's high, say +2000) or automatically marked read (if the +value is low, say -800) or some other action happens. + +There are basically three ways of setting up rules which assign +the scoring-value to messages. The first and easiest way is to set +up rules based on the article you are just reading. Say you're +reading a message by a guy who always writes nonsense and you want +to ignore his messages in the future. Hit +@samp{L}, to set up a rule which lowers the score. +Now Gnus asks you which the criteria for lowering the Score shall +be. Hit @samp{?} twice to see all possibilities, +we want @samp{a} which means the author (the from +header). Now Gnus wants to know which kind of matching we want. +Hit either @samp{e} for an exact match or +@samp{s} for substring-match and delete afterwards +everything but the name to score down all authors with the given +name no matter which email address is used. Now you need to tell +Gnus when to apply the rule and how long it should last, hit e.g. +@samp{p} to apply the rule now and let it last +forever. If you want to raise the score instead of lowering it say +@samp{I} instead of @samp{L}. + +You can also set up rules by hand. To do this say @samp{V +f} in summary buffer. Then you are asked for the name +of the score file, it's name.of.group.SCORE for rules valid in +only one group or all.Score for rules valid in all groups. See the +Gnus manual for the exact syntax, basically it's one big list +whose elements are lists again. the first element of those lists +is the header to score on, then one more list with what to match, +which score to assign, when to expire the rule and how to do the +matching. If you find me very interesting, you could e.g. add the +following to your all.Score: @example (("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s)) ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s))) @end example - @noindent - This would add 999 to the score of messages written by me - and 500 to the score of messages which are a (possibly - indirect) answer to a message written by me. Of course - nobody with a sane mind would do this :-) - - The third alternative is adaptive scoring. This means Gnus - watches you and tries to find out what you find - interesting and what annoying and sets up rules - which reflect this. Adaptive scoring can be a huge help - when reading high traffic groups. If you want to activate - adaptive scoring say - +This would add 999 to the score of messages written by me +and 500 to the score of messages which are a (possibly +indirect) answer to a message written by me. Of course +nobody with a sane mind would do this :-) + +The third alternative is adaptive scoring. This means Gnus +watches you and tries to find out what you find +interesting and what annoying and sets up rules +which reflect this. Adaptive scoring can be a huge help +when reading high traffic groups. If you want to activate +adaptive scoring say @example (setq gnus-use-adaptive-scoring t) @end example - @noindent - in ~/.gnus. - -@ifnottex -@node [4.10], [4.11], [4.9], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.10: - How can I disable threading in some (e.g. mail-) groups, or - set other variables specific for some groups? - +in ~/.gnus.el. -Answer: +@node [4.10] +@subsubheading Question 4.10 - While in group buffer move point over the group and hit - @samp{G c}, this opens a buffer where you - can set options for the group. At the bottom of the buffer - you'll find an item that allows you to set variables - locally for the group. To disable threading enter - gnus-show-threads as name of variable and nil as - value. Hit button done at the top of the buffer when - you're ready. - -@ifnottex -@node [4.11], [4.12], [4.10], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.11: +How can I disable threading in some (e.g. mail-) groups, or +set other variables specific for some groups? - Can I highlight messages written by me and follow-ups to - those? - +@subsubheading Answer -Answer: +While in group buffer move point over the group and hit +@samp{G c}, this opens a buffer where you +can set options for the group. At the bottom of the buffer +you'll find an item that allows you to set variables +locally for the group. To disable threading enter +gnus-show-threads as name of variable and nil as +value. Hit button done at the top of the buffer when +you're ready. - Stop those "Can I ..." questions, the answer is always yes - in Gnus Country :-). It's a three step process: First we - make faces (specifications of how summary-line shall look - like) for those postings, then we'll give them some - special score and finally we'll tell Gnus to use the new - faces. You can find detailed instructions on how to do it on - @uref{http://my.gnus.org/Members/dzimmerm/HowTo%2C2002-07-25%2C1027619165012198456/view,my.gnus.org} - -@ifnottex -@node [4.12], [4.13], [4.11], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.12: - - The number of total messages in a group which Gnus - displays in group buffer is by far to high, especially in - mail groups. Is this a bug? - +@node [4.11] +@subsubheading Question 4.11 -Answer: - - No, that's a matter of design of Gnus, fixing this would - mean reimplementation of major parts of Gnus' - back ends. Gnus thinks "highest-article-number - - lowest-article-number = total-number-of-articles". This - works OK for Usenet groups, but if you delete and move - many messages in mail groups, this fails. To cure the - symptom, enter the group via @samp{C-u RET} - (this makes Gnus get all messages), then - hit @samp{M P b} to mark all messages and - then say @samp{B m name.of.group} to move - all messages to the group they have been in before, they - get new message numbers in this process and the count is - right again (until you delete and move your mail to other - groups again). - -@ifnottex -@node [4.13], [4.14], [4.12], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.13: +Can I highlight messages written by me and follow-ups to +those? - I don't like the layout of summary and article buffer, how - to change it? Perhaps even a three pane display? - +@subsubheading Answer -Answer: +Stop those "Can I ..." questions, the answer is always yes +in Gnus Country :-). It's a three step process: First we +make faces (specifications of how summary-line shall look +like) for those postings, then we'll give them some +special score and finally we'll tell Gnus to use the new +faces. You can find detailed instructions on how to do it on +@uref{http://my.gnus.org/node/view/224, my.gnus.org} - You can control the windows configuration by calling the - function gnus-add-configuration. The syntax is a bit - complicated but explained very well in the manual node - "Window Layout". Some popular examples: - +@node [4.12] +@subsubheading Question 4.12 - Instead 25% summary 75% article buffer 35% summary and 65% - article (the 1.0 for article means "take the remaining - space"): - +The number of total messages in a group which Gnus +displays in group buffer is by far to high, especially in +mail groups. Is this a bug? + +@subsubheading Answer + +No, that's a matter of design of Gnus, fixing this would +mean reimplementation of major parts of Gnus' +back ends. Gnus thinks "highest-article-number - +lowest-article-number = total-number-of-articles". This +works OK for Usenet groups, but if you delete and move +many messages in mail groups, this fails. To cure the +symptom, enter the group via @samp{C-u RET} +(this makes Gnus get all messages), then +hit @samp{M P b} to mark all messages and +then say @samp{B m name.of.group} to move +all messages to the group they have been in before, they +get new message numbers in this process and the count is +right again (until you delete and move your mail to other +groups again). + +@node [4.13] +@subsubheading Question 4.13 + +I don't like the layout of summary and article buffer, how +to change it? Perhaps even a three pane display? + +@subsubheading Answer + +You can control the windows configuration by calling the +function gnus-add-configuration. The syntax is a bit +complicated but explained very well in the manual node +"Window Layout". Some popular examples: + +Instead 25% summary 75% article buffer 35% summary and 65% +article (the 1.0 for article means "take the remaining +space"): @example -(gnus-add-configuration - '(article (vertical 1.0 - (summary .35 point) - (article 1.0)))) +(gnus-add-configuration + '(article (vertical 1.0 (summary .35 point) (article 1.0)))) @end example - +@noindent - A three pane layout, Group buffer on the left, summary - buffer top-right, article buffer bottom-right: - +A three pane layout, Group buffer on the left, summary +buffer top-right, article buffer bottom-right: @example (gnus-add-configuration @@ -1228,46 +1105,40 @@ Answer: (vertical 25 (group 1.0)) (vertical 1.0 - (summary 1.0 point))))) + (summary 1.0 point))))) @end example - -@ifnottex -@node [4.14], [4.15], [4.13], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.14: +@noindent - I don't like the way the Summary buffer looks, how to tweak it? - +@node [4.14] +@subsubheading Question 4.14 -Answer: - - You've got to play around with the variable - gnus-summary-line-format. It's value is a string of - symbols which stand for things like author, date, subject - etc. A list of the available specifiers can be found in the - manual node "Summary Buffer Lines" and the often forgotten - node "Formatting Variables" and it's sub-nodes. There - you'll find useful things like positioning the cursor and - tabulators which allow you a summary in table form, but - sadly hard tabulators are broken in 5.8.8. - +I don't like the way the Summary buffer looks, how to tweak it? - Since 5.10.0, Gnus offers you some very nice new specifiers, - e.g. %B which draws a thread-tree and %&user-date which - gives you a date where the details are dependent of the - articles age. Here's an example which uses both: - +@subsubheading Answer + +You've got to play around with the variable +gnus-summary-line-format. It's value is a string of +symbols which stand for things like author, date, subject +etc. A list of the available specifiers can be found in the +manual node "Summary Buffer Lines" and the often forgotten +node "Formatting Variables" and it's sub-nodes. There +you'll find useful things like positioning the cursor and +tabulators which allow you a summary in table form, but +sadly hard tabulators are broken in 5.8.8. + +Since 5.10, Gnus offers you some very nice new specifiers, +e.g. %B which draws a thread-tree and %&user-date which +gives you a date where the details are dependent of the +articles age. Here's an example which uses both: @example -(setq gnus-summary-line-format - ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") +(setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") @end example - @noindent - resulting in: - -@smallexample +resulting in: + +@example :O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06 :O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12 :R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16 @@ -1280,54 +1151,48 @@ Answer: :R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57 :O \-> ... | 18 |Kai Grossjohann | 0:35 :O \-> ... | 13 |Lars Magne Ingebrigt | 0:56 -@end smallexample - -@ifnottex -@node [4.15], , [4.14], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.15: +@end example +@noindent - How to split incoming mails in several groups? - +@node [4.15] +@subsubheading Question 4.15 -Answer: +How to split incoming mails in several groups? - Gnus offers two possibilities for splitting mail, the easy - nnmail-split-methods and the more powerful Fancy Mail - Splitting. I'll only talk about the first one, refer to - the manual, node "Fancy Mail Splitting" for the latter. - +@subsubheading Answer - The value of nnmail-split-methods is a list, each element - is a list which stands for a splitting rule. Each rule has - the form "group where matching articles should go to", - "regular expression which has to be matched", the first - rule which matches wins. The last rule must always be a - general rule (regular expression .*) which denotes where - articles should go which don't match any other rule. If - the folder doesn't exist yet, it will be created as soon - as an article lands there. By default the mail will be - send to all groups whose rules match. If you - don't want that (you probably don't want), say - +Gnus offers two possibilities for splitting mail, the easy +nnmail-split-methods and the more powerful Fancy Mail +Splitting. I'll only talk about the first one, refer to +the manual, node "Fancy Mail Splitting" for the latter. + +The value of nnmail-split-methods is a list, each element +is a list which stands for a splitting rule. Each rule has +the form "group where matching articles should go to", +"regular expression which has to be matched", the first +rule which matches wins. The last rule must always be a +general rule (regular expression .*) which denotes where +articles should go which don't match any other rule. If +the folder doesn't exist yet, it will be created as soon +as an article lands there. By default the mail will be +send to all groups whose rules match. If you +don't want that (you probably don't want), say @example (setq nnmail-crosspost nil) @end example - @noindent - in ~/.gnus. - - An example might be better than thousand words, so here's - my nnmail-split-methods. Note that I send duplicates in a - special group and that the default group is spam, since I - filter all mails out which are from some list I'm - subscribed to or which are addressed directly to me - before. Those rules kill about 80% of the Spam which - reaches me (Email addresses are changed to prevent spammers - from using them): - +in ~/.gnus.el. + +An example might be better than thousand words, so here's +my nnmail-split-methods. Note that I send duplicates in a +special group and that the default group is spam, since I +filter all mails out which are from some list I'm +subscribed to or which are addressed directly to me +before. Those rules kill about 80% of the Spam which +reaches me (Email addresses are changed to prevent spammers +from using them): @example (setq nnmail-split-methods @@ -1336,133 +1201,114 @@ Answer: ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@@socha.bla.*") ("tcsh" "^\\(To:\\|CC:\\).*localpart@@mx.gw.bla.*") ("BAfH" "^\\(To:\\|CC:\\).*localpart@@.*uni-muenchen.bla.*") - ("Hamster-src" - "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*") + ("Hamster-src" "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*") ("Tagesschau" "^From: tagesschau $") ("Replies" "^\\(CC:\\|To:\\).*localpart@@Frank-Schmitt.bla.*") - ("EK" - "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") - ("Spam" - "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") - ("Spam" - "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") - ("Spam" - "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") + ("EK" "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") + ("Spam" "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") + ("Spam" "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") + ("Spam" "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)") - ("Spam" - "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") - ("Spam" - "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") + ("Spam" "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") + ("Spam" "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") ("Spam" "^Delivered-To: GMX delivery to spamtrap@@gmx.bla$") ("Spam" "^Received: from link2buy.com") ("Spam" "^CC: .*azzrael@@t-online.bla") ("Spam" "^X-Mailer-Version: 1.50 BETA") ("Uni" "^\\(CC:\\|To:\\).*localpart@@uni-koblenz.bla.*") - ("Inbox" - "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)") + ("Inbox" "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)") ("Spam" ""))) @end example - +@noindent -@ifnottex -@node FAQ 5 - Composing messages, FAQ 6 - Old messages, FAQ 4 - Reading messages, Frequently Asked Questions -@end ifnottex +@node FAQ 5 - Composing messages @subsection Composing messages @menu -* [5.1]:: What are the basic commands I need to know for sending mail and - postings? -* [5.2]:: How to enable automatic word-wrap when composing messages? -* [5.3]:: How to set stuff like From, Organization, Reply-To, signature...? -* [5.4]:: Can I set things like From, Signature etc group based on the - group I post too? -* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly spell-checking? -* [5.6]:: Can I set the dictionary based on the group I'm posting to? -* [5.7]:: Is there some kind of address-book, so I needn't remember all - those email addresses? -* [5.8]:: Sometimes I see little images at the top of article buffer. - What's that and how can I send one with my postings, too? -* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. - Can Gnus warn me, when I'm replying by mail in newsgroups? -* [5.10]:: How to tell Gnus not to generate a sender header? -* [5.11]:: I want Gnus to locally store copies of my send mail and news, - how to do it? -* [5.12]:: People tell me my Message-IDs are not correct, - why aren't they and how to fix it? +* [5.1]:: What are the basic commands I need to know for sending + mail and postings? +* [5.2]:: How to enable automatic word-wrap when composing messages? +* [5.3]:: How to set stuff like From, Organization, Reply-To, + signature...? +* [5.4]:: Can I set things like From, Signature etc group based on + the group I post too? +* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly + spell-checking? +* [5.6]:: Can I set the dictionary based on the group I'm posting + to? +* [5.7]:: Is there some kind of address-book, so I needn't remember + all those email addresses? +* [5.8]:: Sometimes I see little images at the top of article + buffer. What's that and how can I send one with my postings, too? +* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. + Can Gnus warn me, when I'm replying by mail in newsgroups? +* [5.10]:: How to tell Gnus not to generate a sender header? +* [5.11]:: I want Gnus to locally store copies of my send mail and + news, how to do it? +* [5.12]:: People tell me my Message-IDs are not correct, why aren't + they and how to fix it? @end menu -@ifnottex -@node [5.1], [5.2], FAQ 5 - Composing messages, FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.1: +@node [5.1] +@subsubheading Question 5.1 - What are the basic commands I need to know for sending mail and postings? - +What are the basic commands I need to know for sending mail and postings? -Answer: - - To start composing a new mail hit @samp{m} - either in Group or Summary buffer, for a posting, it's - either @samp{a} in Group buffer and - filling the Newsgroups header manually - or @samp{a} in the Summary buffer of the - group where the posting shall be send to. Replying by mail - is - @samp{r} if you don't want to cite the - author, or import the cited text manually and - @samp{R} to cite the text of the original - message. For a follow up to a newsgroup, it's - @samp{f} and @samp{F} - (analog to @samp{r} and - @samp{R}. - +@subsubheading Answer - Enter new headers above the line saying "--text follows - this line--", enter the text below the line. When ready - hit @samp{C-c C-c}, to send the message, - if you want to finish it later hit @samp{C-c - C-d} to save it in the drafts group, where you - can start editing it again by saying @samp{D - e}. - -@ifnottex -@node [5.2], [5.3], [5.1], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.2: +To start composing a new mail hit @samp{m} +either in Group or Summary buffer, for a posting, it's +either @samp{a} in Group buffer and +filling the Newsgroups header manually +or @samp{a} in the Summary buffer of the +group where the posting shall be send to. Replying by mail +is +@samp{r} if you don't want to cite the +author, or import the cited text manually and +@samp{R} to cite the text of the original +message. For a follow up to a newsgroup, it's +@samp{f} and @samp{F} +(analogously to @samp{r} and +@samp{R}). - How to enable automatic word-wrap when composing messages? - +Enter new headers above the line saying "--text follows +this line--", enter the text below the line. When ready +hit @samp{C-c C-c}, to send the message, +if you want to finish it later hit @samp{C-c +C-d} to save it in the drafts group, where you +can start editing it again by saying @samp{D +e}. -Answer: +@node [5.2] +@subsubheading Question 5.2 - Say - +How to enable automatic word-wrap when composing messages? + +@subsubheading Answer + +Say @example (add-hook 'message-mode-hook - (lambda () - (setq fill-column 72) - (turn-on-auto-fill))) + (lambda () + (setq fill-column 72) + (turn-on-auto-fill))) @end example - @noindent - in ~/.gnus. You can reformat a paragraph by hitting - @samp{M-q} (as usual) - -@ifnottex -@node [5.3], [5.4], [5.2], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.3: - How to set stuff like From, Organization, Reply-To, signature...? - +in ~/.gnus.el. You can reformat a paragraph by hitting +@samp{M-q} (as usual) -Answer: +@node [5.3] +@subsubheading Question 5.3 - There are other ways, but you should use posting styles - for this. (See below why). - This example should make the syntax clear: - +How to set stuff like From, Organization, Reply-To, signature...? + +@subsubheading Answer + +There are other ways, but you should use posting styles +for this. (See below why). +This example should make the syntax clear: @example (setq gnus-posting-styles @@ -1474,146 +1320,121 @@ Answer: ("X-SampleHeader" "foobar") (eval (setq some-variable "Foo bar"))))) @end example - @noindent - The ".*" means that this settings are the default ones - (see below), valid values for the first element of the - following lists are signature, signature-file, - organization, address, name or body. The attribute name - can also be a string. 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 `nil', the header - name will be removed. You can also say (eval (foo bar)), - then the function foo will be evaluated with argument bar - and the result will be thrown away. - -@ifnottex -@node [5.4], [5.5], [5.3], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.4: - - Can I set things like From, Signature etc group based on the group I post too? - -Answer: - - That's the strength of posting styles. Before, we used ".*" - to set the default for all groups. You can use a regexp - like "^gmane" and the following settings are only applied - to postings you send to the gmane hierarchy, use - ".*binaries" instead and they will be applied to postings - send to groups containing the string binaries in their - name etc. - - - You can instead of specifying a regexp specify a function - which is evaluated, only if it returns true, the - corresponding settings take effect. Two interesting - candidates for this are message-news-p which returns t if - the current Group is a newsgroup and the corresponding - message-mail-p. - - - Note that all forms that match are applied, that means in - the example below, when I post to - gmane.mail.spam.spamassassin.general, the settings under - ".*" are applied and the settings under message-news-p and - those under "^gmane" and those under - "^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because - of this put general settings at the top and specific ones - at the bottom. - +The ".*" means that this settings are the default ones +(see below), valid values for the first element of the +following lists are signature, signature-file, +organization, address, name or body. The attribute name +can also be a string. 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 `nil', the header +name will be removed. You can also say (eval (foo bar)), +then the function foo will be evaluated with argument bar +and the result will be thrown away. + +@node [5.4] +@subsubheading Question 5.4 + +Can I set things like From, Signature etc group based on the group I post too? + +@subsubheading Answer + +That's the strength of posting styles. Before, we used ".*" +to set the default for all groups. You can use a regexp +like "^gmane" and the following settings are only applied +to postings you send to the gmane hierarchy, use +".*binaries" instead and they will be applied to postings +send to groups containing the string binaries in their +name etc. + +You can instead of specifying a regexp specify a function +which is evaluated, only if it returns true, the +corresponding settings take effect. Two interesting +candidates for this are message-news-p which returns t if +the current Group is a newsgroup and the corresponding +message-mail-p. + +Note that all forms that match are applied, that means in +the example below, when I post to +gmane.mail.spam.spamassassin.general, the settings under +".*" are applied and the settings under message-news-p and +those under "^gmane" and those under +"^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because +of this put general settings at the top and specific ones +at the bottom. @example (setq gnus-posting-styles '((".*" ;;default (name "Frank Schmitt") (organization "Hamme net, kren mer och nimmi") - (signature-file "~/.signature")) + (signature-file "~/.signature") ) ((message-news-p) ;;Usenet news? (address "mySpamTrap@@Frank-Schmitt.bla") - ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla")) + ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla") ) ((message-mail-p) ;;mail? - (address "usedForMails@@Frank-Schmitt.bla")) + (address "usedForMails@@Frank-Schmitt.bla") ) ("^gmane" ;;this is mail, too in fact (address "usedForMails@@Frank-Schmitt.net") - ("Reply-To" nil)) + ("Reply-To" nil) ) ("^gmane.mail.spam.spamassassin.general$" (eval (setq mail-envelope-from "Azzrael@@rz-online.de")) - (address "Azzrael@@rz-online.de")))) + (address "Azzrael@@rz-online.de")) )) @end example - -@ifnottex -@node [5.5], [5.6], [5.4], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.5: +@noindent - Is there a spell-checker? Perhaps even on-the-fly spell-checking? - +@node [5.5] +@subsubheading Question 5.5 -Answer: +Is there a spell-checker? Perhaps even on-the-fly spell-checking? -You can use ispell.el to spell-check stuff in Emacs. So the first -thing to do is to make sure that you've got either -@itemize @bullet -@item -@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html,ispell} -or -@item -@uref{http://aspell.sourceforge.net/,aspell} -@end itemize -@noindent -installed and in your Path. - -Then you need -@uref{http://www.kdstevens.com/~stevens/ispell-page.html,ispell.el,ispell.el} -and for on-the-fly spell-checking -@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html,flyspell.el,flyspell.el}. -Ispell.el is shipped with Gnus Emacs and available through the Emacs -package system, flyspell.el is shipped with Emacs and part of XEmacs -text-modes package which is available through the package system, so -there should be no need to install them manually. - +@subsubheading Answer - Ispell.el assumes you use ispell, if you choose aspell say - +You can use ispell.el to spell-check stuff in Emacs. So the +first thing to do is to make sure that you've got either +@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html, ispell} +or @uref{http://aspell.sourceforge.net/, aspell} +installed and in your Path. Then you need +@uref{http://www.kdstevens.com/~stevens/ispell-page.html, ispell.el} +and for on-the-fly spell-checking +@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html, flyspell.el}. +Ispell.el is shipped with Emacs and available through the XEmacs package system, +flyspell.el is shipped with Emacs and part of XEmacs text-modes package which is +available through the package system, so there should be no need to install them +manually. + +Ispell.el assumes you use ispell, if you choose aspell say @example (setq ispell-program-name "aspell") @end example - - @noindent - in your Emacs configuration file. +in your Emacs configuration file. - If you want your outgoing messages to be spell-checked, say - +If you want your outgoing messages to be spell-checked, say @example (add-hook 'message-send-hook 'ispell-message) @end example - @noindent - In your ~/.gnus, if you prefer on-the-fly spell-checking say - + +In your ~/.gnus.el, if you prefer on-the-fly spell-checking say @example (add-hook 'message-mode-hook (lambda () (flyspell-mode 1))) @end example - -@ifnottex -@node [5.6], [5.7], [5.5], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.6: +@noindent - Can I set the dictionary based on the group I'm posting to? - +@node [5.6] +@subsubheading Question 5.6 -Answer: +Can I set the dictionary based on the group I'm posting to? - Yes, say something like - +@subsubheading Answer + +Yes, say something like @example (add-hook 'gnus-select-group-hook @@ -1625,55 +1446,47 @@ Answer: (t (ispell-change-dictionary "english"))))) @end example - - @noindent - in ~/.gnus. Change "^de\\." and "deutsch8" to something - that suits your needs. -@ifnottex -@node [5.7], [5.8], [5.6], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.7: +in ~/.gnus.el. Change "^de\\." and "deutsch8" to something +that suits your needs. - Is there some kind of address-book, so I needn't remember - all those email addresses? - +@node [5.7] +@subsubheading Question 5.7 -Answer: +Is there some kind of address-book, so I needn't remember +all those email addresses? - There's an very basic solution for this, mail aliases. - You can store your mail addresses in a ~/.mailrc file using a simple - alias syntax: - +@subsubheading Answer + +There's an very basic solution for this, mail aliases. +You can store your mail addresses in a ~/.mailrc file using a simple +alias syntax: @example alias al "Al " @end example - @noindent - Then typing your alias (followed by a space or punctuation - character) on a To: or Cc: line in the message buffer will - cause Gnus to insert the full address for you. See the - node "Mail Aliases" in Message (not Gnus) manual for - details. - - However, what you really want is the Insidious Big Brother - Database bbdb. Get it through the XEmacs package system or from - @uref{http://bbdb.sourceforge.net/,bbdb's homepage}. - Now place the following in ~/.gnus, to activate bbdb for Gnus: - +Then typing your alias (followed by a space or punctuation +character) on a To: or Cc: line in the message buffer will +cause Gnus to insert the full address for you. See the +node "Mail Aliases" in Message (not Gnus) manual for +details. + +However, what you really want is the Insidious Big Brother +Database bbdb. Get it through the XEmacs package system or from +@uref{http://bbdb.sourceforge.net/, bbdb's homepage}. +Now place the following in ~/.gnus.el, to activate bbdb for Gnus: @example (require 'bbdb) (bbdb-initialize 'gnus 'message) @end example - @noindent - Now you probably want some general bbdb configuration, - place them in ~/.emacs: - + +Now you probably want some general bbdb configuration, +place them in ~/.emacs: @example (require 'bbdb) @@ -1689,56 +1502,50 @@ alias al "Al " ;;No popup-buffers (setq bbdb-use-pop-up nil) @end example - @noindent - Now you should be ready to go. Say @samp{M-x bbdb RET - RET} to open a bbdb buffer showing all - entries. Say @samp{c} to create a new - entry, @samp{b} to search your BBDB and - @samp{C-o} to add a new field to an - entry. If you want to add a sender to the BBDB you can - also just hit `:' on the posting in the summary buffer and - you are done. When you now compose a new mail, - hit @samp{TAB} to cycle through know - recipients. - -@ifnottex -@node [5.8], [5.9], [5.7], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.8: - - Sometimes I see little images at the top of article - buffer. What's that and how can I send one with my - postings, too? - -Answer: - - Those images are called X-Faces. They are 48*48 pixel b/w - pictures, encoded in a header line. If you want to include - one in your posts, you've got to convert some image to a - X-Face. So fire up some image manipulation program (say - Gimp), open the image you want to include, cut out the - relevant part, reduce color depth to 1 bit, resize to - 48*48 and save as bitmap. Now you should get the compface - package from - @uref{ftp://ftp.cs.indiana.edu:/pub/faces/,this site}. - and create the actual X-face by saying - +Now you should be ready to go. Say @samp{M-x bbdb RET +RET} to open a bbdb buffer showing all +entries. Say @samp{c} to create a new +entry, @samp{b} to search your BBDB and +@samp{C-o} to add a new field to an +entry. If you want to add a sender to the BBDB you can +also just hit `:' on the posting in the summary buffer and +you are done. When you now compose a new mail, +hit @samp{TAB} to cycle through know +recipients. + +@node [5.8] +@subsubheading Question 5.8 + +Sometimes I see little images at the top of article +buffer. What's that and how can I send one with my +postings, too? + +@subsubheading Answer + +Those images are called X-Faces. They are 48*48 pixel b/w +pictures, encoded in a header line. If you want to include +one in your posts, you've got to convert some image to a +X-Face. So fire up some image manipulation program (say +Gimp), open the image you want to include, cut out the +relevant part, reduce color depth to 1 bit, resize to +48*48 and save as bitmap. Now you should get the compface +package from +@uref{ftp://ftp.cs.indiana.edu:/pub/faces/, this site}. +and create the actual X-face by saying @example -cat file.xbm | xbm2ikon |compface > file.face -cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > ./file.face.quoted +cat file.xbm | xbm2ikon | compface > file.face +cat file.face | sed 's/\\/\\\\/g;s/\"/\\\"/g;' > file.face.quoted @end example - @noindent -If you can't use compface, there's an online X-face converter at@* -@uref{http://www.dairiki.org/xface/}. If you use MS Windows, you -could also use the WinFace program from -@uref{http://www.xs4all.nl/~walterln/winface/}. -Now you only have to tell Gnus to include the X-face in your postings -by saying +If you can't use compface, there's an online X-face converter at +@uref{http://www.dairiki.org/xface/}. +If you use MS Windows, you could also use the WinFace program from +@uref{http://www.xs4all.nl/~walterln/winface/}. +Now you only have to tell Gnus to include the X-face in your postings by saying @example (setq message-default-headers @@ -1747,79 +1554,70 @@ by saying (insert-file-contents "~/.xemacs/xface") (buffer-string))) @end example - @noindent - in ~/.gnus. - -@ifnottex -@node [5.9], [5.10], [5.8], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.9: - - Sometimes I accidentally hit r instead of f in - newsgroups. Can Gnus warn me, when I'm replying by mail in - newsgroups? - -Answer: +in ~/.gnus.el. - Put this in ~/.gnus: - +@node [5.9] +@subsubheading Question 5.9 + +Sometimes I accidentally hit r instead of f in +newsgroups. Can Gnus warn me, when I'm replying by mail in +newsgroups? + +@subsubheading Answer + +Put this in ~/.gnus.el: @example (setq gnus-confirm-mail-reply-to-news t) @end example - @noindent - if you already use Gnus 5.10.0, if you still use 5.8.8 or - 5.9 try this instead: - + +if you already use Gnus 5.10, if you still use 5.8.8 or +5.9 try this instead: @example -(defadvice gnus-summary-reply (around reply-in-news activate) +(eval-after-load "gnus-msg" + '(unless (boundp 'gnus-confirm-mail-reply-to-news) + (defadvice gnus-summary-reply (around reply-in-news activate) + "Request confirmation when replying to news." (interactive) - (when (or (not (gnus-news-group-p gnus-newsgroup-name)) - (y-or-n-p "Really reply? ")) - ad-do-it)) + (when (or (not (gnus-news-group-p gnus-newsgroup-name)) + (y-or-n-p "Really reply by mail to article author? ")) + ad-do-it)))) @end example - -@ifnottex -@node [5.10], [5.11], [5.9], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.10: +@noindent - How to tell Gnus not to generate a sender header? - +@node [5.10] +@subsubheading Question 5.10 -Answer: +How to tell Gnus not to generate a sender header? - Since 5.10.0 Gnus doesn't generate a sender header by - default. For older Gnus' try this in ~/.gnus: - +@subsubheading Answer + +Since 5.10 Gnus doesn't generate a sender header by +default. For older Gnus' try this in ~/.gnus.el: @example (eval-after-load "message" '(add-to-list 'message-syntax-checks '(sender . disabled))) @end example - - -@ifnottex -@node [5.11], [5.12], [5.10], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.11: +@noindent - I want gnus to locally store copies of my send mail and - news, how to do it? - +@node [5.11] +@subsubheading Question 5.11 -Answer: +I want Gnus to locally store copies of my send mail and +news, how to do it? - You must set the variable gnus-message-archive-group to do - this. You can set it to a string giving the name of the - group where the copies shall go or like in the example - below use a function which is evaluated and which returns - the group to use. - +@subsubheading Answer + +You must set the variable gnus-message-archive-group to do +this. You can set it to a string giving the name of the +group where the copies shall go or like in the example +below use a function which is evaluated and which returns +the group to use. @example (setq gnus-message-archive-group @@ -1827,34 +1625,34 @@ Answer: "nnml:Send-News" "nnml:Send-Mail"))) @end example - - -@ifnottex -@node [5.12], , [5.11], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.12: +@noindent - People tell me my Message-IDs are not correct, why - aren't they and how to fix it? - +@node [5.12] +@subsubheading Question 5.12 + +People tell me my Message-IDs are not correct, why +aren't they and how to fix it? -Answer: +@subsubheading Answer + +The message-ID is an unique identifier for messages you +send. To make it unique, Gnus need to know which machine +name to put after the "@@". If the name of the machine +where Gnus is running isn't suitable (it probably isn't +at most private machines) you can tell Gnus what to use +by saying: - The message-ID is an unique identifier for messages you - send. To make it unique, Gnus need to know which machine - name to put after the "@@". If the name of the machine - where Gnus is running isn't suitable (it probably isn't - at most private machines) you can tell Gnus what to use - by saying @example (setq message-user-fqdn "yourmachine.yourdomain.tld") @end example @noindent - in ~/.gnus. If you use Gnus 5.9 or ealier, you can use this -instead: + +in ~/.gnus.el. If you use Gnus 5.9 or ealier, you can use this +instead (works for newer versions a well): + @example (eval-after-load "message" - '(let (myfqdn "yourmachine.yourdomain.tld");; <-- Edit this! + '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this! (if (boundp 'message-user-fqdn) (setq message-user-fqdn fqdn) (gnus-message 1 "Redefining `message-make-fqdn'.") @@ -1862,110 +1660,97 @@ instead: "Return user's fully qualified domain name." fqdn)))) @end example +@noindent - If you have no idea what to insert for - "yourmachine.yourdomain.tld", you've got several - choices. You can either ask your provider if he allows - you to use something like - yourUserName.userfqdn.provider.net, or you can use - somethingUnique.yourdomain.tld if you own the domain - yourdomain.tld, or you can register at a service which - gives private users a FQDN for free, e.g. - @uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. - (Sorry but this website is in German, if you know of an - English one offering the same, drop me a note). - - - Finally you can tell Gnus not to generate a Message-ID - for News at all (and letting the server do the job) by saying - +If you have no idea what to insert for +"yourmachine.yourdomain.tld", you've got several +choices. You can either ask your provider if he allows +you to use something like +yourUserName.userfqdn.provider.net, or you can use +somethingUnique.yourdomain.tld if you own the domain +yourdomain.tld, or you can register at a service which +gives private users a FQDN for free, e.g. +@uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. +(Sorry but this website is in German, if you know of an +English one offering the same, drop me a note). + +Finally you can tell Gnus not to generate a Message-ID +for News at all (and letting the server do the job) by saying @example (setq message-required-news-headers (remove' Message-ID message-required-news-headers)) @end example - @noindent - you can also tell Gnus not to generate Message-IDs for mail by saying - + +you can also tell Gnus not to generate Message-IDs for mail by saying @example (setq message-required-mail-headers (remove' Message-ID message-required-mail-headers)) @end example - @noindent - , however some mail servers don't generate proper - Message-IDs, too, so test if your Mail Server behaves - correctly by sending yourself a Mail and looking at the Message-ID. - -@ifnottex -@node FAQ 6 - Old messages, FAQ 7 - Gnus in a dial-up environment, FAQ 5 - Composing messages, Frequently Asked Questions -@end ifnottex +, however some mail servers don't generate proper +Message-IDs, too, so test if your Mail Server behaves +correctly by sending yourself a Mail and looking at the Message-ID. + +@node FAQ 6 - Old messages @subsection Old messages @menu -* [6.1]:: How to import my old mail into Gnus? -* [6.2]:: How to archive interesting messages? -* [6.3]:: How to search for a specific message? -* [6.4]:: How to get rid of old unwanted mail? -* [6.5]:: I want that all read messages are expired (at least in some - groups). How to do it? -* [6.6]:: I don't want expiration to delete my mails but to move them - to another group. +* [6.1]:: How to import my old mail into Gnus? +* [6.2]:: How to archive interesting messages? +* [6.3]:: How to search for a specific message? +* [6.4]:: How to get rid of old unwanted mail? +* [6.5]:: I want that all read messages are expired (at least in some + groups). How to do it? +* [6.6]:: I don't want expiration to delete my mails but to move them + to another group. @end menu -@ifnottex -@node [6.1], [6.2], FAQ 6 - Old messages, FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.1: - - How to import my old mail into Gnus? - - -Answer: - - The easiest way is to tell your old mail program to - export the messages in mbox format. Most Unix mailers - are able to do this, if you come from the MS Windows - world, you may find tools at - @uref{http://mbx2mbox.sourceforge.net/}. - - - Now you've got to import this mbox file into Gnus. To do - this, create a nndoc group based on the mbox file by - saying @samp{G f /path/file.mbox RET} in - Group buffer. You now have read-only access to your - mail. If you want to import the messages to your normal - Gnus mail groups hierarchy, enter the nndoc group you've - just created by saying @samp{C-u RET} - (thus making sure all messages are retrieved), mark all - messages by saying @samp{M P b} and - either copy them to the desired group by saying - @samp{B c name.of.group RET} or send them - through nnmail-split-methods (respool them) by saying - @samp{B r}. - -@ifnottex -@node [6.2], [6.3], [6.1], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.2: - - How to archive interesting messages? - - -Answer: - - If you stumble across an interesting message, say in - gnu.emacs.gnus and want to archive it there are several - solutions. The first and easiest is to save it to a file - by saying @samp{O f}. However, wouldn't - it be much more convenient to have more direct access to - the archived message from Gnus? If you say yes, put this - snippet by Frank Haun in - ~/.gnus: - +@node [6.1] +@subsubheading Question 6.1 + +How to import my old mail into Gnus? + +@subsubheading Answer + +The easiest way is to tell your old mail program to +export the messages in mbox format. Most Unix mailers +are able to do this, if you come from the MS Windows +world, you may find tools at +@uref{http://mbx2mbox.sourceforge.net/}. + +Now you've got to import this mbox file into Gnus. To do +this, create a nndoc group based on the mbox file by +saying @samp{G f /path/file.mbox RET} in +Group buffer. You now have read-only access to your +mail. If you want to import the messages to your normal +Gnus mail groups hierarchy, enter the nndoc group you've +just created by saying @samp{C-u RET} +(thus making sure all messages are retrieved), mark all +messages by saying @samp{M P b} and +either copy them to the desired group by saying +@samp{B c name.of.group RET} or send them +through nnmail-split-methods (respool them) by saying +@samp{B r}. + +@node [6.2] +@subsubheading Question 6.2 + +How to archive interesting messages? + +@subsubheading Answer + +If you stumble across an interesting message, say in +gnu.emacs.gnus and want to archive it there are several +solutions. The first and easiest is to save it to a file +by saying @samp{O f}. However, wouldn't +it be much more convenient to have more direct access to +the archived message from Gnus? If you say yes, put this +snippet by Frank Haun in +~/.gnus.el: @example (defun my-archive-article (&optional n) @@ -1984,620 +1769,531 @@ more then one article." (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name))))) (gnus-summary-copy-article n archive-name))) @end example - @noindent - You can now say @samp{M-x - my-archive-article} in summary buffer to - archive the article under the cursor in a nnml - group. (Change nnml to your preferred back end) - - Of course you can also make sure the cache is enabled by saying - +You can now say @samp{M-x +my-archive-article} in summary buffer to +archive the article under the cursor in a nnml +group. (Change nnml to your preferred back end) + +Of course you can also make sure the cache is enabled by saying @example (setq gnus-use-cache t) @end example - @noindent - then you only have to set either the tick or the dormant - mark for articles you want to keep, setting the read - mark will remove them from cache. - -@ifnottex -@node [6.3], [6.4], [6.2], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.3: - - How to search for a specific message? - - -Answer: - - There are several ways for this, too. For a posting from - a Usenet group the easiest solution is probably to ask - @uref{http://groups.google.com,groups.google.com}, - if you found the posting there, tell Google to display - the raw message, look for the message-id, and say - @samp{M-^ the@@message.id RET} in a - summary buffer. - Since Gnus 5.10.0 there's also a Gnus interface for - groups.google.com which you can call with - @samp{G W}) in group buffer. - - - Another idea which works for both mail and news groups - is to enter the group where the message you are - searching is and use the standard Emacs search - @samp{C-s}, it's smart enough to look at - articles in collapsed threads, too. If you want to - search bodies, too try @samp{M-s} - instead. Further on there are the - gnus-summary-limit-to-foo functions, which can help you, - too. - - - Of course you can also use grep to search through your - local mail, but this is both slow for big archives and - inconvenient since you are not displaying the found mail - in Gnus. Here comes nnir into action. Nnir is a front end - to search engines like swish-e or swish++ and - others. You index your mail with one of those search - engines and with the help of nnir you can search trough - the indexed mail and generate a temporary group with all - messages which met your search criteria. If this sound - cool to you get nnir.el from - @uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/} - or @uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}. - Instructions on how to use it are at the top of the file. - -@ifnottex -@node [6.4], [6.5], [6.3], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.4: - - How to get rid of old unwanted mail? - - -Answer: - - You can of course just mark the mail you don't need - anymore by saying @samp{#} with point - over the mail and then say @samp{B DEL} - to get rid of them forever. You could also instead of - actually deleting them, send them to a junk-group by - saying @samp{B m nnml:trash-bin} which - you clear from time to time, but both are not the intended - way in Gnus. - - - In Gnus, we let mail expire like news expires on a news - server. That means you tell Gnus the message is - expirable (you tell Gnus "I don't need this mail - anymore") by saying @samp{E} with point - over the mail in summary buffer. Now when you leave the - group, Gnus looks at all messages which you marked as - expirable before and if they are old enough (default is - older than a week) they are deleted. - -@ifnottex -@node [6.5], [6.6], [6.4], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.5: - - I want that all read messages are expired (at least in - some groups). How to do it? - - -Answer: - - If you want all read messages to be expired (e.g. in - mailing lists where there's an online archive), you've - got two choices: auto-expire and - total-expire. Auto-expire means, that every article - which has no marks set and is selected for reading is - marked as expirable, Gnus hits @samp{E} - for you every time you read a message. Total-expire - follows a slightly different approach, here all article - where the read mark is set are expirable. - - - To activate auto-expire, include auto-expire in the - Group parameters for the group. (Hit @samp{G - c} in summary buffer with point over the - group to change group parameters). For total-expire add - total-expire to the group-parameters. - - Which method you choose is merely a matter of taste: - Auto-expire is faster, but it doesn't play together with - Adaptive Scoring, so if you want to use this feature, - you should use total-expire. - - - If you want a message to be excluded from expiration in - a group where total or auto expire is active, set either - tick (hit @samp{u}) or dormant mark (hit - @samp{u}), when you use auto-expire, you - can also set the read mark (hit - @samp{d}). - -@ifnottex -@node [6.6], , [6.5], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.6: - - I don't want expiration to delete my mails but to move them - to another group. - - -Answer: - - Say something like this in ~/.gnus: - +then you only have to set either the tick or the dormant +mark for articles you want to keep, setting the read +mark will remove them from cache. + +@node [6.3] +@subsubheading Question 6.3 + +How to search for a specific message? + +@subsubheading Answer + +There are several ways for this, too. For a posting from +a Usenet group the easiest solution is probably to ask +@uref{http://groups.google.com, groups.google.com}, +if you found the posting there, tell Google to display +the raw message, look for the message-id, and say +@samp{M-^ the@@message.id RET} in a +summary buffer. +Since Gnus 5.10 there's also a Gnus interface for +groups.google.com which you can call with +@samp{G W}) in group buffer. + +Another idea which works for both mail and news groups +is to enter the group where the message you are +searching is and use the standard Emacs search +@samp{C-s}, it's smart enough to look at +articles in collapsed threads, too. If you want to +search bodies, too try @samp{M-s} +instead. Further on there are the +gnus-summary-limit-to-foo functions, which can help you, +too. + +Of course you can also use grep to search through your +local mail, but this is both slow for big archives and +inconvenient since you are not displaying the found mail +in Gnus. Here comes nnir into action. Nnir is a front end +to search engines like swish-e or swish++ and +others. You index your mail with one of those search +engines and with the help of nnir you can search trough +the indexed mail and generate a temporary group with all +messages which met your search criteria. If this sound +cool to you get nnir.el from +@uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/} +or @uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}. +Instructions on how to use it are at the top of the file. + +@node [6.4] +@subsubheading Question 6.4 + +How to get rid of old unwanted mail? + +@subsubheading Answer + +You can of course just mark the mail you don't need +anymore by saying @samp{#} with point +over the mail and then say @samp{B DEL} +to get rid of them forever. You could also instead of +actually deleting them, send them to a junk-group by +saying @samp{B m nnml:trash-bin} which +you clear from time to time, but both are not the intended +way in Gnus. + +In Gnus, we let mail expire like news expires on a news +server. That means you tell Gnus the message is +expirable (you tell Gnus "I don't need this mail +anymore") by saying @samp{E} with point +over the mail in summary buffer. Now when you leave the +group, Gnus looks at all messages which you marked as +expirable before and if they are old enough (default is +older than a week) they are deleted. + +@node [6.5] +@subsubheading Question 6.5 + +I want that all read messages are expired (at least in +some groups). How to do it? + +@subsubheading Answer + +If you want all read messages to be expired (e.g. in +mailing lists where there's an online archive), you've +got two choices: auto-expire and +total-expire. Auto-expire means, that every article +which has no marks set and is selected for reading is +marked as expirable, Gnus hits @samp{E} +for you every time you read a message. Total-expire +follows a slightly different approach, here all article +where the read mark is set are expirable. + +To activate auto-expire, include auto-expire in the +Group parameters for the group. (Hit @samp{G +c} in summary buffer with point over the +group to change group parameters). For total-expire add +total-expire to the group-parameters. + +Which method you choose is merely a matter of taste: +Auto-expire is faster, but it doesn't play together with +Adaptive Scoring, so if you want to use this feature, +you should use total-expire. + +If you want a message to be excluded from expiration in +a group where total or auto expire is active, set either +tick (hit @samp{u}) or dormant mark (hit +@samp{u}), when you use auto-expire, you +can also set the read mark (hit +@samp{d}). + +@node [6.6] +@subsubheading Question 6.6 + +I don't want expiration to delete my mails but to move them +to another group. + +@subsubheading Answer + +Say something like this in ~/.gnus.el: @example (setq nnmail-expiry-target "nnml:expired") @end example - @noindent - (If you want to change the value of nnmail-expiry-target - on a per group basis see the question "How can I disable - threading in some (e.g. mail-) groups, or set other - variables specific for some groups?") - -@ifnottex -@node FAQ 7 - Gnus in a dial-up environment, FAQ 8 - Getting help, FAQ 6 - Old messages, Frequently Asked Questions -@end ifnottex +(If you want to change the value of nnmail-expiry-target +on a per group basis see the question "How can I disable +threading in some (e.g. mail-) groups, or set other +variables specific for some groups?") + +@node FAQ 7 - Gnus in a dial-up environment @subsection Gnus in a dial-up environment @menu -* [7.1]:: I don't have a permanent connection to the net, how can I - minimize the time I've got to be connected? -* [7.2]:: So what was this thing about the Agent? -* [7.3]:: I want to store article bodies on disk, too. How to do it? -* [7.4]:: How to tell Gnus not to try to send mails / postings while - I'm offline? +* [7.1]:: I don't have a permanent connection to the net, how can I + minimize the time I've got to be connected? +* [7.2]:: So what was this thing about the Agent? +* [7.3]:: I want to store article bodies on disk, too. How to do it? +* [7.4]:: How to tell Gnus not to try to send mails / postings while + I'm offline? @end menu - -@ifnottex -@node [7.1], [7.2], FAQ 7 - Gnus in a dial-up environment, FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.1: - - I don't have a permanent connection to the net, how can - I minimize the time I've got to be connected? - - -Answer: - - You've got basically two options: Either you use the - Gnus Agent (see below) for this, or you can install - programs which fetch your news and mail to your local - disk and Gnus reads the stuff from your local - machine. - - - If you want to follow the second approach, you need a - program which fetches news and offers them to Gnus, a - program which does the same for mail and a program which - receives the mail you write from Gnus and sends them - when you're online. - - -Let's talk about Unix systems first: For the news part, the easiest -solution is a small nntp server like -@uref{http://www.leafnode.org/,Leafnode} or -@uref{http://infa.abo.fi/~patrik/sn/,sn}, of course you can also -install a full featured news server like -@uref{http://www.isc.org/products/INN/,inn}. - -Then you want to fetch your Mail, popular choices are -@itemize @bullet -@item -@uref{http://www.catb.org/~esr/fetchmail/,fetchmail} and -@item -@uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/,getmail}. -@end itemize -You should tell those to write the mail to your disk and Gnus to read -it from there. Last but not least the mail sending part: This can be -done with every MTA like @uref{http://www.sendmail.org/,sendmail}, -@uref{http://www.qmail.org/,postfix}, @uref{http://www.exim.org/,exim} -or @uref{http://www.qmail.org/,qmail}. - - - On windows boxes I'd vote for - @uref{http://www.tglsoft.de/,Hamster}, - it's a small freeware, open-source program which fetches - your mail and news from remote servers and offers them - to Gnus (or any other mail and/or news reader) via nntp - respectively POP3 or IMAP. It also includes a smtp - server for receiving mails from Gnus. - -@ifnottex -@node [7.2], [7.3], [7.1], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.2: - - So what was this thing about the Agent? - - -Answer: - - The Gnus agent is part of Gnus, it allows you to fetch - mail and news and store them on disk for reading them - later when you're offline. It kind of mimics offline - newsreaders like e.g. Forte Agent. If you want to use - the Agent place the following in ~/.gnus if you are - still using 5.8.8 or 5.9 (it's the default since 5.10.0): - +@node [7.1] +@subsubheading Question 7.1 + +I don't have a permanent connection to the net, how can +I minimize the time I've got to be connected? + +@subsubheading Answer + +You've got basically two options: Either you use the +Gnus Agent (see below) for this, or you can install +programs which fetch your news and mail to your local +disk and Gnus reads the stuff from your local +machine. + +If you want to follow the second approach, you need a +program which fetches news and offers them to Gnus, a +program which does the same for mail and a program which +receives the mail you write from Gnus and sends them +when you're online. + +Let's talk about Unix systems first: For the news part, +the easiest solution is a small nntp server like +@uref{http://www.leafnode.org/, Leafnode} or +@uref{http://infa.abo.fi/~patrik/sn/, sn}, +of course you can also install a full featured news +server like +@uref{http://www.isc.org/products/INN/, inn}. +Then you want to fetch your Mail, popular choices +are @uref{http://www.catb.org/~esr/fetchmail/, fetchmail} +and @uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/, getmail}. +You should tell those to write the mail to your disk and +Gnus to read it from there. Last but not least the mail +sending part: This can be done with every MTA like +@uref{http://www.sendmail.org/, sendmail}, +@uref{http://www.qmail.org/, postfix}, +@uref{http://www.exim.org/, exim} or +@uref{http://www.qmail.org/, qmail}. + +On windows boxes I'd vote for +@uref{http://www.tglsoft.de/, Hamster}, +it's a small freeware, open-source program which fetches +your mail and news from remote servers and offers them +to Gnus (or any other mail and/or news reader) via nntp +respectively POP3 or IMAP. It also includes a smtp +server for receiving mails from Gnus. + +@node [7.2] +@subsubheading Question 7.2 + +So what was this thing about the Agent? + +@subsubheading Answer + +The Gnus agent is part of Gnus, it allows you to fetch +mail and news and store them on disk for reading them +later when you're offline. It kind of mimics offline +newsreaders like e.g. Forte Agent. If you want to use +the Agent place the following in ~/.gnus.el if you are +still using 5.8.8 or 5.9 (it's the default since 5.10): @example (setq gnus-agent t) @end example - +@noindent - Now you've got to select the servers whose groups can be - stored locally. To do this, open the server buffer - (that is press @samp{^} while in the - group buffer). Now select a server by moving point to - the line naming that server. Finally, agentize the - server by typing @samp{J a}. If you - make a mistake, or change your mind, you can undo this - action by typing @samp{J r}. When - you're done, type 'q' to return to the group buffer. - Now the next time you enter a group on a agentized - server, the headers will be stored on disk and read from - there the next time you enter the group. - -@ifnottex -@node [7.3], [7.4], [7.2], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.3: +Now you've got to select the servers whose groups can be +stored locally. To do this, open the server buffer +(that is press @samp{^} while in the +group buffer). Now select a server by moving point to +the line naming that server. Finally, agentize the +server by typing @samp{J a}. If you +make a mistake, or change your mind, you can undo this +action by typing @samp{J r}. When +you're done, type 'q' to return to the group buffer. +Now the next time you enter a group on a agentized +server, the headers will be stored on disk and read from +there the next time you enter the group. + +@node [7.3] +@subsubheading Question 7.3 + +I want to store article bodies on disk, too. How to do it? + +@subsubheading Answer + +You can tell the agent to automatically fetch the bodies +of articles which fulfill certain predicates, this is +done in a special buffer which can be reached by +saying @samp{J c} in group +buffer. Please refer to the documentation for +information which predicates are possible and how +exactly to do it. + +Further on you can tell the agent manually which +articles to store on disk. There are two ways to do +this: Number one: In the summary buffer, process mark a +set of articles that shall be stored in the agent by +saying @samp{#} with point over the +article and then type @samp{J s}. The +other possibility is to set, again in the summary +buffer, downloadable (%) marks for the articles you +want by typing @samp{@@} with point over +the article and then typing @samp{J u}. +What's the difference? Well, process marks are erased as +soon as you exit the summary buffer while downloadable +marks are permanent. You can actually set downloadable +marks in several groups then use fetch session ('J s' in +the GROUP buffer) to fetch all of those articles. The +only downside is that fetch session also fetches all of +the headers for every selected group on an agentized +server. Depending on the volume of headers, the initial +fetch session could take hours. + +@node [7.4] +@subsubheading Question 7.4 + +How to tell Gnus not to try to send mails / postings +while I'm offline? + +@subsubheading Answer + +All you've got to do is to tell Gnus when you are online +(plugged) and when you are offline (unplugged), the rest +works automatically. You can toggle plugged/unplugged +state by saying @samp{J j} in group +buffer. To start Gnus unplugged say @samp{M-x +gnus-unplugged} instead of +@samp{M-x gnus}. Note that for this to +work, the agent must be active. + +@node FAQ 8 - Getting help +@subsection Getting help - I want to store article bodies on disk, too. How to do it? - +@menu +* [8.1]:: How to find information and help inside Emacs? +* [8.2]:: I can't find anything in the Gnus manual about X (e.g. + attachments, PGP, MIME...), is it not documented? +* [8.3]:: Which websites should I know? +* [8.4]:: Which mailing lists and newsgroups are there? +* [8.5]:: Where to report bugs? +* [8.6]:: I need real-time help, where to find it? +@end menu -Answer: +@node [8.1] +@subsubheading Question 8.1 - You can tell the agent to automatically fetch the bodies - of articles which fulfill certain predicates, this is - done in a special buffer which can be reached by - saying @samp{J c} in group - buffer. Please refer to the documentation for - information which predicates are possible and how - exactly to do it. - +How to find information and help inside Emacs? - Further on you can tell the agent manually which - articles to store on disk. There are two ways to do - this: Number one: In the summary buffer, process mark a - set of articles that shall be stored in the agent by - saying @samp{#} with point over the - article and then type @samp{J s}. The - other possibility is to set, again in the summary - buffer, downloadable (%) marks for the articles you - want by typing @samp{@@} with point over - the article and then typing @samp{J u}. - What's the difference? Well, process marks are erased as - soon as you exit the summary buffer while downloadable - marks are permanent. You can actually set downloadable - marks in several groups then use fetch session ('J s' in - the GROUP buffer) to fetch all of those articles. The - only downside is that fetch session also fetches all of - the headers for every selected group on an agentized - server. Depending on the volume of headers, the initial - fetch session could take hours. - -@ifnottex -@node [7.4], , [7.3], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.4: +@subsubheading Answer - How to tell Gnus not to try to send mails / postings - while I'm offline? - +The first stop should be the Gnus manual (Say +@samp{C-h i d m Gnus RET} to start the +Gnus manual, then walk through the menus or do a +full-text search with @samp{s}). Then +there are the general Emacs help commands starting with +C-h, type @samp{C-h ? ?} to get a list +of all available help commands and their meaning. Finally +@samp{M-x apropos-command} lets you +search through all available functions and @samp{M-x +apropos} searches the bound variables. -Answer: +@node [8.2] +@subsubheading Question 8.2 - All you've got to do is to tell Gnus when you are online - (plugged) and when you are offline (unplugged), the rest - works automatically. You can toggle plugged/unplugged - state by saying @samp{J j} in group - buffer. To start Gnus unplugged say @samp{M-x - gnus-unplugged} instead of - @samp{M-x gnus}. Note that for this to - work, the agent must be active. - +I can't find anything in the Gnus manual about X +(e.g. attachments, PGP, MIME...), is it not documented? -@ifnottex -@node FAQ 8 - Getting help, FAQ 9 - Tuning Gnus, FAQ 7 - Gnus in a dial-up environment, Frequently Asked Questions -@end ifnottex -@subsection Getting help +@subsubheading Answer -@menu -* [8.1]:: How to find information and help inside Emacs? -* [8.2]:: I can't find anything in the Gnus manual about X - (e.g. attachments, PGP, MIME...), is it not documented? -* [8.3]:: Which websites should I know? -* [8.4]:: Which mailing lists and newsgroups are there? -* [8.5]:: Where to report bugs? -* [8.6]:: I need real-time help, where to find it? -@end menu +There's not only the Gnus manual but also the manuals +for message, emacs-mime, sieve and pgg. Those packages +are distributed with Gnus and used by Gnus but aren't +really part of core Gnus, so they are documented in +different info files, you should have a look in those +manuals, too. -@ifnottex -@node [8.1], [8.2], FAQ 8 - Getting help, FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.1: +@node [8.3] +@subsubheading Question 8.3 - How to find information and help inside Emacs? - +Which websites should I know? -Answer: - - The first stop should be the Gnus manual (Say - @samp{C-h i d m Gnus RET} to start the - Gnus manual, then walk through the menus or do a - full-text search with @samp{s}). Then - there are the general Emacs help commands starting with - C-h, type @samp{C-h ? ?} to get a list - of all available help commands and their meaning. Finally - @samp{M-x apropos-command} lets you - search through all available functions and @samp{M-x - apropos} searches the bound variables. - -@ifnottex -@node [8.2], [8.3], [8.1], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.2: +@subsubheading Answer - I can't find anything in the Gnus manual about X - (e.g. attachments, PGP, MIME...), is it not documented? - +The two most important ones are the +@uref{http://www.gnus.org, official Gnus website}. +and it's sister site +@uref{http://my.gnus.org, my.gnus.org (MGO)}, +hosting an archive of lisp snippets, howtos, a (not +really finished) tutorial and this FAQ. -Answer: +Tell me about other sites which are interesting. - There's not only the Gnus manual but also the manuals - for message, emacs-mime, sieve and pgg. Those packages - are distributed with Gnus and used by Gnus but aren't - really part of core Gnus, so they are documented in - different info files, you should have a look in those - manuals, too. - -@ifnottex -@node [8.3], [8.4], [8.2], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.3: +@node [8.4] +@subsubheading Question 8.4 - Which websites should I know? - +Which mailing lists and newsgroups are there? -Answer: +@subsubheading Answer - The two most important ones are the - @uref{http://www.gnus.org,official Gnus website}. - and it's sister site - @uref{http://my.gnus.org,my.gnus.org (MGO)}, - hosting an archive of lisp snippets, howtos, a (not - really finished) tutorial and this FAQ. - +There's the newsgroup gnu.emacs.gnus (pull it from +e.g. news.gnus.org) which deals with general questions and the +ding mailing list (ding@@gnus.org) dealing with development of +Gnus. You can read the ding list via NNTP, too under the name +gmane.emacs.gnus.general from news.gmane.org. - Tell me about other sites which are interesting. - -@ifnottex -@node [8.4], [8.5], [8.3], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.4: +If you want to stay in the big8, +news.software.newssreaders is also read by some Gnus +users (but chances for qualified help are much better in +the above groups) and if you speak German, there's +de.comm.software.gnus. - Which mailing lists and newsgroups are there? - +@node [8.5] +@subsubheading Question 8.5 -Answer: +Where to report bugs? - There's the newsgroup gnu.emacs.gnus (pull it from - e.g. news.gnus.org) which deals with general questions - and the ding mailing list (ding@@gnus.org) dealing with - development of Gnus. You can read the ding list via - NNTP, too under the name gnus.ding from news.gnus.org. - - - If you want to stay in the big8, - news.software.newssreaders is also read by some Gnus - users (but chances for qualified help are much better in - the above groups) and if you speak German, there's - de.comm.software.gnus. - -@ifnottex -@node [8.5], [8.6], [8.4], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.5: +@subsubheading Answer - Where to report bugs? - +Say @samp{M-x gnus-bug}, this will start +a message to the +@email{bugs@@gnus.org, gnus bug mailing list} +including information about your environment which make +it easier to help you. -Answer: +@node [8.6] +@subsubheading Question 8.6 -Say @samp{M-x gnus-bug}, this will start a message to the -@email{bugs@@gnus.org,gnus bug mailing list} including information -about your environment which make it easier to help you. - -@ifnottex -@node [8.6], , [8.5], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.6: - - I need real-time help, where to find it? - +I need real-time help, where to find it? -Answer: +@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.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. -@ifnottex -@node FAQ 9 - Tuning Gnus, FAQ - Glossary, FAQ 8 - Getting help, Frequently Asked Questions -@end ifnottex +@node FAQ 9 - Tuning Gnus @subsection Tuning Gnus @menu -* [9.1]:: Starting Gnus is really slow, how to speed it up? -* [9.2]:: How to speed up the process of entering a group? -* [9.3]:: Sending mail becomes slower and slower, what's up? +* [9.1]:: Starting Gnus is really slow, how to speed it up? +* [9.2]:: How to speed up the process of entering a group? +* [9.3]:: Sending mail becomes slower and slower, what's up? @end menu -@ifnottex -@node [9.1], [9.2], FAQ 9 - Tuning Gnus, FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.1: +@node [9.1] +@subsubheading Question 9.1 - Starting Gnus is really slow, how to speed it up? - +Starting Gnus is really slow, how to speed it up? -Answer: - - The reason for this could be the way Gnus reads it's - active file, see the node "The Active File" in the Gnus - manual for things you might try to speed the process up. - An other idea would be to byte compile your ~/.gnus (say - @samp{M-x byte-compile-file RET ~/.gnus - RET} to do it). Finally, if you have require - statements in your .gnus, you could replace them with - eval-after-load, which loads the stuff not at startup - time, but when it's needed. Say you've got this in your - ~/.gnus: - +@subsubheading Answer + +The reason for this could be the way Gnus reads it's +active file, see the node "The Active File" in the Gnus +manual for things you might try to speed the process up. +An other idea would be to byte compile your ~/.gnus.el (say +@samp{M-x byte-compile-file RET ~/.gnus.el +RET} to do it). Finally, if you have require +statements in your .gnus, you could replace them with +eval-after-load, which loads the stuff not at startup +time, but when it's needed. Say you've got this in your +~/.gnus.el: @example (require 'message) (add-to-list 'message-syntax-checks '(sender . disabled)) @end example - @noindent - then as soon as you start Gnus, message.el is loaded. If - you replace it with - + +then as soon as you start Gnus, message.el is loaded. If +you replace it with @example (eval-after-load "message" '(add-to-list 'message-syntax-checks '(sender . disabled))) @end example - @noindent - it's loaded when it's needed. - -@ifnottex -@node [9.2], [9.3], [9.1], FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.2: - How to speed up the process of entering a group? - +it's loaded when it's needed. -Answer: +@node [9.2] +@subsubheading Question 9.2 - A speed killer is setting the variable - gnus-fetch-old-headers to anything different from nil, - so don't do this if speed is an issue. To speed up - building of summary say - +How to speed up the process of entering a group? + +@subsubheading Answer + +A speed killer is setting the variable +gnus-fetch-old-headers to anything different from nil, +so don't do this if speed is an issue. To speed up +building of summary say @example (gnus-compile) @end example - @noindent - at the bottom of your ~/.gnus, this will make gnus - byte-compile things like - gnus-summary-line-format. - then you could increase the value of gc-cons-threshold - by saying something like - + +at the bottom of your ~/.gnus.el, this will make gnus +byte-compile things like +gnus-summary-line-format. +then you could increase the value of gc-cons-threshold +by saying something like @example (setq gc-cons-threshold 3500000) @end example - @noindent - in ~/.emacs. If you don't care about width of CJK - characters or use Gnus 5.10.0 or younger together with a - recent GNU Emacs, you should say - + +in ~/.emacs. If you don't care about width of CJK +characters or use Gnus 5.10 or younger together with a +recent GNU Emacs, you should say @example -(setq gnus-use-correct-string-widths nil) +(setq gnus-use-correct-string-widths nil) @end example - - @noindent - in ~/.gnus (thanks to Jesper harder for the last - two suggestions). Finally if you are still using 5.8.8 - or 5.9 and experience speed problems with summary - buffer generation, you definitely should update to - 5.10.0 since there quite some work on improving it has - been done. -@ifnottex -@node [9.3], , [9.2], FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.3: +in ~/.gnus.el (thanks to Jesper harder for the last +two suggestions). Finally if you are still using 5.8.8 +or 5.9 and experience speed problems with summary +buffer generation, you definitely should update to +5.10 since there quite some work on improving it has +been done. - Sending mail becomes slower and slower, what's up? - +@node [9.3] +@subsubheading Question 9.3 -Answer: +Sending mail becomes slower and slower, what's up? - The reason could be that you told Gnus to archive the - messages you wrote by setting - gnus-message-archive-group. Try to use a nnml group - instead of an archive group, this should bring you back - to normal speed. - +@subsubheading Answer + +The reason could be that you told Gnus to archive the +messages you wrote by setting +gnus-message-archive-group. Try to use a nnml group +instead of an archive group, this should bring you back +to normal speed. -@ifnottex -@node FAQ - Glossary, , FAQ 9 - Tuning Gnus, Frequently Asked Questions -@end ifnottex +@node FAQ - Glossary @subsection Glossary @table @dfn -@item ~/.gnus - When the term ~/.gnus is used it just means your Gnus - configuration file. You might as well call it ~/.gnus.el or - specify another name. - +@item ~/.gnus.el +When the term ~/.gnus.el is used it just means your Gnus +configuration file. You might as well call it ~/.gnus or +specify another name. @item Back End - In Gnus terminology a back end is a virtual server, a layer - between core Gnus and the real NNTP-, POP3-, IMAP- or - whatever-server which offers Gnus a standardized interface - to functions like "get message", "get Headers" etc. - +In Gnus terminology a back end is a virtual server, a layer +between core Gnus and the real NNTP-, POP3-, IMAP- or +whatever-server which offers Gnus a standardized interface +to functions like "get message", "get Headers" etc. @item Emacs - When the term Emacs is used in this FAQ, it means either GNU - Emacs or XEmacs. - +When the term Emacs is used in this FAQ, it means either GNU +Emacs or XEmacs. @item Message - In this FAQ message means a either a mail or a posting to a - Usenet Newsgroup or to some other fancy back end, no matter - of which kind it is. - +In this FAQ message means a either a mail or a posting to a +Usenet Newsgroup or to some other fancy back end, no matter +of which kind it is. @item MUA - MUA is an acronym for Mail User Agent, it's the program you - use to read and write e-mails. - +MUA is an acronym for Mail User Agent, it's the program you +use to read and write e-mails. @item NUA - NUA is an acronym for News User Agent, it's the program you - use to read and write Usenet news. - +NUA is an acronym for News User Agent, it's the program you +use to read and write Usenet news. + @end table -@c @bye +@ignore +arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8 +@end ignore diff --git a/texi/gnus-logo.eps b/texi/gnus-logo.eps new file mode 100644 index 0000000..95408ba --- /dev/null +++ b/texi/gnus-logo.eps @@ -0,0 +1,1055 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: gnuslogo1.ps +%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley +%%BoundingBox: 0 0 493 505 +%%Pages: 1 +%%DocumentFonts: +%%EndComments +%%EndProlog + +%%Page: 1 1 + +% remember original state +/origstate save def + +% build a temporary dictionary +20 dict begin + +% define string to hold a scanline's worth of data +/pix 62 string def + +% lower left corner +0 0 translate + +% size of image (on paper, in 1/72inch coords) +493.0 505.0 scale + +% dimensions of data +493 505 1 + +% mapping matrix +[493 0 0 -505 0 505] + +{currentfile pix readhexstring pop} +image +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff01fffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff8003ffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff0000ffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff8000007ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000003ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe0000000ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff000000003fff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff000000000fff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffc0000000007ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff80000000003ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00000000001ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffe00000000000ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffc00000000000ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff8000000000007f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0000000000003f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0000000000003f8 +fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffe0000000000001f8 +fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc0000000000000f8 +ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc0000000000000f8 +ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff8000000000000078 +fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000000000000038 +fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffe0000000000000038 +fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffe0000000000000038 +fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff +fffffffffffffffffffffffffffffffffffc0000000000000018 +ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff +fffffffffffffffffffffffffffffffffffc0000000000000018 +ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff +fffffffffffffffffffffffffffffffffff80000000000000018 +ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff +fffffffffffffffffffffffffffffffffff80000000000000008 +ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff +fffffffffffffffffffffffffffffffffff00000000000000008 +fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff +fffffffffffffffffffffffffffffffffff00000000000000008 +fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff +ffffffffffffffffffffffffffffffffffe00000000000000008 +fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff +ffffffffffffffffffffffffffffffffffe00000000000000008 +fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffc00000000000000000 +ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffc00000000000000000 +ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffff800000000000000000 +ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffff800000000000000000 +ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffff000040000000000000 +fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff +ffffffffffffffffffffffffffffffffff0007ffc00000000000 +fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff +fffffffffffffffffffffffffffffffffe001ffffc0000000000 +fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff +fffffffffffffffffffffffffffffffffc003ffffe0000000000 +fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff +fffffffffffffffffffffffffffffffffc007fffffc000000000 +fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff +fffffffffffffffffffffffffffffffff800fffffff000000000 +ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff +fffffffffffffffffffffffffffffffff801fffffff800000000 +ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff +fffffffffffffffffffffffffffffffff003ffffffff00000000 +ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff +fffffffffffffffffffffffffffffffff007ffffffff00000000 +ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff +ffffffffffffffffffffffffffffffffe00fffffffff80000000 +fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff +ffffffffffffffffffffffffffffffffe01fffffffffc0000008 +fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff +ffffffffffffffffffffffffffffffffc03fffffffffc0000008 +fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff +ffffffffffffffffffffffffffffffffc07ffffffffff0000000 +fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff +ffffffffffffffffffffffffffffffff807ffffffffff0000000 +fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff +ffffffffffffffffffffffffffffffff80fffffffffff0000008 +fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff +ffffffffffffffffffffffffffffffff81fffffffffff8000008 +fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff +ffffffffffffffffffffffffffffffff01fffffffffff8000008 +ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff +ffffffffffffffffffffffffffffffff03fffffffffffc000008 +ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff +fffffffffffffffffffffffffffffffe03fffffffffffc000008 +ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff +fffffffffffffffffffffffffffffffe07fffffffffffe000008 +ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff +fffffffffffffffffffffffffffffffe07fffffffffffe000008 +ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff +fffffffffffffffffffffffffffffffe0ffffffffffffe000008 +ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff +fffffffffffffffffffffffffffffffc0ffffffffffffe000008 +ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff +fffffffffffffffffffffffffffffffc1fffffffffffff000008 +ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff +fffffffffffffffffffffffffffffffc3fffffffffffff000008 +ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff +fffffffffffffffffffffffffffffff8ffffffffffffff000008 +ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff +fffffffffffffffffffffffffffffffcffffffffffffff000008 +fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff +ffffffffffffffffffffffffffffe7fdffffffffffffff000008 +fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff +ffffffffffffffffffffffffffffe7fdffffffffffffff000008 +fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff +ffffffffffffffffffffffffffffc7ffffffffffffffff000008 +fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff +fffffffffeffffffffffffffffff87ffffffffffffffff000008 +f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff +fffffffffcffffffffffffffffff87ffffffffffffffff000008 +f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff +fffffffff8ffffffffffffffffff07ffffffffffffffff000008 +f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff +fffffffff8fffffffffffffffffe0fffffffffffffffff000008 +f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff +fffffffff0fffffffffffffffffe0fffffffffffffffff000018 +e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff +fffffffff0fffffffffffffffffc0fffffffffffffffff000018 +e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff +ffffffffe0fffffffffffffffffc1fffffffffffffffff000018 +c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff +ffffffffe0fffffffffffffffff81fffffffffffffffff000018 +c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff +ffffffffc0fffffffffffffffff83fffffffffffffffff000018 +800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff +ffffffff01fffffffffffffffff03fffffffffffffffff000038 +800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff +ffffffff01fffffffffffffffff03fffffffffffffffff800038 +00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff +fffffffe03ffffffffffffffffe07fffffffffffffffff800038 +00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff +fffffffc03ffffffffffffffffe07fffffffffffffffff800038 +00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff +fffffff803ffffffffffffffffc07fffffffffffffffff800038 +00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff +fffffff007ffffffffffffffffc0ffffffffffffffffff800038 +0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff +fffffff007ffffffffffffffff80ffffffffffffffffff800078 +0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff +ffffffc00fffffffffffffffff81ffffffffffffffffff800078 +8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff +ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8 +8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff +ffffff801fffffffffffffffff03ffffffffffffffffff8000f8 +c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff +fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8 +e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff +fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8 +f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff +fffff0003ffffffffffffffff80fffffffffffffffffff8000f8 +f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff +ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8 +f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f +ffff00007fffffffffffffffe01fffffffffffffffffff0001f8 +fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007 +fffc00007fffffffffffffffc01fffffffffffffffffff0001f8 +fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000 +ffe000007ffffbffffffffff801fffffffffffffffffff0001f8 +fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000 +00000000fffff3ffffffffff003fffffffffffffffffff0001f8 +fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000 +00000001fffff1fffffffffe003fffffffffffffffffff0003f8 +ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000 +00000001ffffe1fffffffffc007fffffffffffffffffff0003f8 +ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000 +00000003ffffe0fffffffff0007fffffffffffffffffff0003f8 +ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000 +00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8 +ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000 +00000007ffffc07fffffff8000ffffffffffffffffffff0003f8 +fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000 +00000007ffff803fffffff0000fffffffffffffffffffe0007f8 +fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000 +00000007ffff801ffffffc0001fffffffffffffffffffe0007f8 +fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000 +0000000fffff000ffffff80003fffffffffffffffffffe0007f8 +fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000 +0000000fffff0007ffffe00003fffffffffffffffffffe0007f8 +ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000 +0000001ffffe0001ffff800007fffffffffffffffffffe000ff8 +ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000 +0000001ffffe0000fffc000007fffffffffffffffffffe000ff8 +ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000 +0000003ffffe0000000000000ffffffffffffffffffffe000ff8 +fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000 +0000003ffffc0000000000000ffffffffffffffffffffe000ff8 +fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000 +0000007ffff80000000000001ffffffffffffffffffffe001ff8 +fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000 +0000007ffff80000000000001ffffffffffffffffffffe001ff8 +fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000 +000000fffff80000000000003ffffffffffffffffffffc001ff8 +fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000 +000003fffff00000000000007ffffffffffffffffffffc001ff8 +fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000 +000007ffffe00000000000007ffffffffffffffffffffe003ff8 +fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000 +000007ffffe0000000000000fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000 +00001fffffc0000000000001fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000 +00001fffffc0000000000003fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000 +00003fffff80000000000003fffffffffffffffffffffc007ff8 +ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000 +00007fffff80000000000007fffffffffffffffffffffc007ff8 +ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000 +0000ffffff0000000000000ffffffffffffffffffffffc007ff8 +fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000 +0001ffffff0000000000001ffffffffffffffffffffffc007ff8 +fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000 +0003fffffe0000000000001ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000 +0007fffffe0000000000003ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000 +001ffffffc0000000000007ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000 +003ffffffc000000000000fffffffffffffffffffffff800fff8 +ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000 +00fffffff8000000000003fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000 +03fffffff8000000000003fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000 +07fffffff0000000000007fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000 +3ffffffff000000000000ffffffffffffffffffffffff003fff8 +ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f +fffffffff000000000003ffffffffffffffffffffffff003fff8 +ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff +fffffffff800000000007ffffffffffffffffffffffff003fff8 +fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffff80000000000ffffffffffffffffffffffffe003fff8 +fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffc0000000003ffffffffffffffffffffffffe007fff8 +fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffe0000000007ffffffffffffffffffffffffe007fff8 +fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffe000000000fffffffffffffffffffffffffe00ffff8 +fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000001fffffffffffffffffffffffffe00ffff8 +ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff +ffffffffff800000007fffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff +ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff +ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff +fffffffffff800001fffffffffffffffffffffffffffc01ffff8 +ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff +fffffffffffe00007fffffffffffffffffffffffffffc01ffff8 +ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff +ffffffffffff8003ffffffffffffffffffffffffffff801ffff8 +ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe01fffff8 +ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc03fffff8 +fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff803fffff8 +fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff803fffff8 +fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe01ffffff8 +ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 +ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 +ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc03ffffff8 +fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff803ffffff8 +fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff803ffffff8 +fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff807ffffff8 +fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff807ffffff8 +fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff007ffffff8 +fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00fffffff8 +fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00fffffff8 +ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe03fffffff8 +ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe03fffffff8 +ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc07fffffff8 +ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc07fffffff8 +fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff807fffffff8 +fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff807fffffff8 +fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff80ffffffff8 +fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff80ffffffff8 +fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe01ffffffff8 +fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 +ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 +ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 +ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 +ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff80fffffffff8 +ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff81fffffffff8 +ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff81fffffffff8 +ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff01fffffffff8 +ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff03fffffffff8 +ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe07fffffffff8 +fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc07fffffffff8 +fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc07fffffffff8 +fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 +fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 +fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff80ffffffffff8 +fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff80ffffffffff8 +fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff00ffffffffff8 +fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff01ffffffffff8 +fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff01ffffffffff8 +fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe01ffffffffff8 +ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe03ffffffffff8 +ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffdffffffffffffffffffe03ffffffffff8 +ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8 +ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff +ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8 +ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff03ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff03ffffffffffffffffff01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +ffffffffffffffffff07ffffffffffffffffff01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +fffffffffffffffffe07fffffffffffffffffe01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +fffffffffffffffffc07fffffffffffffffffe03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff +fffffffffffffffffc07fffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff +fffffffffffffffff03ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff +ffffffffffffffffe01ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff +ffffffffffffffffe03ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff +ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff +ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff +ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff +ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff +ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff +fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff +fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff +fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff +fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff +fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff +fffffffffffffff807ffffffffffffffffffc03ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff807ffffffffffffffffff803ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff00fffffffffffffffffff803ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff00fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffe01fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffe03fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffc03fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff807fffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff807fffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00fffffffffffffffffffe00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffe01fffffffffffffffffffe01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffe03fffffffffffffffffffe01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffc03fffffffffffffffffffc01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffc07fffffffffffffffffffc01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff807fffffffffffffffffffc03fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff00ffffffffffffffffffffc03fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff00ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc03ffffffffffffffffffff807fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc03ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff807ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff807ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00fffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff +fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff +fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff +fffffffffff803ffffffffffffffffffffc00ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff +fffffffffff807ffffffffffffffffffffc00ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff +fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff +fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff +ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffff801fffffffffffffffffffff801ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffff803fffffffffffffffffffff801ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff +ffffffffff003fffffffffffffffffffff803ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff +fffffffffe007fffffffffffffffffffff803ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff +fffffffffc007fffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff +fffffffffc00ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff +fffffffff800ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff +fffffffff801ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff +fffffffff803ffffffffffffffffffffff007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff +fffffffff003fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff +ffffffffe007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff +ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff +ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff +ffffffff800ffffffffffffffffffffffe00fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff +ffffffff000ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff +fffffffe001ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff +fffffffc003ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff +9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff +0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe +07fffff0007ffffffffffffffffffffffc01fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe +07ffffe000fffffffffffffffffffffffc01fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8 +03ffffc000fffffffffffffffffffffffc01fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0 +03ffff8001fffffffffffffffffffffff801fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0 +01ffff0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 +00fffe0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 +00fffe0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0 +003ffc0007fffffffffffffffffffffff003fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80 +001fe0001ffffffffffffffffffffffff003fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00 +000fc0001ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00 +000000001ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00 +000000003ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00 +000000003ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800 +000000007fffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800 +000000007fffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000 +00000003ffffffffffffffffffffffffc00ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000 +00000003ffffffffffffffffffffffffc00ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000 +00000007ffffffffffffffffffffffffc00ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000 +0000000fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000 +0000001fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000 +0000001fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000 +0000003fffffffffffffffffffffffffc01ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000 +0000007fffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000 +0000007fffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000 +000000ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000 +000001ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 +000001ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 +000003ffffffffffffffffffffffffff801ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000 +000003ffffffffffffffffffffffffff801ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000 +000007ffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000 +00000fffffffffffffffffffffffffff003ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000 +00000fffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000 +00001fffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200 +00003fffffffffffffffffffffffffff007ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700 +00007fffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80 +0000ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80 +0001ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0 +0001ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0 +0003ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0 +0007ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0 +0007ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8 +001fffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc +007fffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe +00ffffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff +dfffffffffffffffffffffffffffffff0ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff +fffffffffffffffffffffffffffffffe3ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff +ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff +ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 + + +showpage + +% stop using temporary dictionary +end + +% restore original state +origstate restore + +%%Trailer diff --git a/texi/gnus-news.el b/texi/gnus-news.el index 67c101f..2c223ce 100644 --- a/texi/gnus-news.el +++ b/texi/gnus-news.el @@ -31,6 +31,8 @@ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 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\". + * Changes in No Gnus @@ -64,6 +66,7 @@ paragraph-separate: \"[ ]*$\"\nend:\n") (defvar gnus-news-makeinfo-switches (concat " --no-headers --paragraph-indent=0" + " --no-validate" ;; Allow unresolved references. " --fill-column=" (number-to-string (+ 3 ;; will strip leading spaces later (or gnus-news-fill-column 80))))) @@ -106,4 +109,5 @@ paragraph-separate: \"[ ]*$\"\nend:\n") (insert gnus-news-trailer) (write-region (point-min) (point-max) outfile)))) +;;; arch-tag: e23cdd27-eafd-4ba0-816f-98f5edb0dc29 ;;; gnus-news.el ends here diff --git a/texi/gnus-news.texi b/texi/gnus-news.texi index ccb8191..270cab5 100644 --- a/texi/gnus-news.texi +++ b/texi/gnus-news.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- -@c Copyright (C) 2004 Free Software Foundation, Inc. +@c Copyright (C) 2004, 2005 Free Software Foundation, Inc. @c Permission is granted to anyone to make or distribute verbatim copies @c of this document as received, in any medium, provided that the @@ -12,31 +12,59 @@ @c under the above conditions, provided also that they @c carry prominent notices stating who last changed them. -This file contains a list of news features Gnus. It is supposed to be -included in `gnus.texi'. `GNUS-NEWS' is automatically generated from -this file (see `gnus-news.el'). +@c This file contains a list of news features Gnus. It is supposed to be +@c included in `gnus.texi'. `GNUS-NEWS' is automatically generated from +@c this file (see `gnus-news.el'). @itemize @bullet +@item Upgrading from previous (stable) version if you have used No Gnus. + +If you have tried No Gnus (the unstable Gnus branch leading to this +release) but went back to a stable version, be careful when upgrading +to this version. In particular, you will probably want to remove the +@file{~/News/marks} directory (perhaps selectively), so that flags are +read from your @file{~/.newsrc.eld} instead of from the stale marks +file, where this release will store flags for nntp. See a later entry +for more information about nntp marks. Note that downgrading isn't +safe in general. + +@item The nntp back end store article marks in @file{~/News/marks}. + +The directory can be changed using the (customizable) variable +@code{nntp-marks-directory}, and marks can be disabled using the +(back end) variable @code{nntp-marks-is-evil}. The advantage of this +is that you can copy @file{~/News/marks} (using rsync, scp or +whatever) to another Gnus installation, and it will realize what +articles you have read and marked. The data in @file{~/News/marks} +has priority over the same data in @file{~/.newsrc.eld}. + +@item +Picons can be displayed right from the textual address, see +@code{gnus-picon-style}. @ref{Picons}. + @item You can import and export your @acronym{RSS} subscriptions from @acronym{OPML} files. @xref{RSS}. -@item +@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. @item You can now drag and drop attachments to the Message buffer. -@item @kbd{/ r} limits the summary buffer to replied articles. - @item @acronym{ANSI} @acronym{SGR} control sequences can be transformed using @kbd{W A}. @acronym{ANSI} sequences are used in some Chinese hierarchies for highlighting articles (@code{gnus-article-treat-ansi-sequences}). +@item International host names (@acronym{IDNA}) can now be decoded +inside article bodies using @kbd{W i} +(@code{gnus-summary-idna-message}). This require that GNU Libidn +(@url{http://www.gnu.org/software/libidn/}) has been installed. + @item Gnus includes an Emacs Lisp @acronym{SASL} library. This provide a clean @acronym{API} to @acronym{SASL} mechanisms from @@ -53,7 +81,7 @@ The primary change this brings is support for @acronym{DIGEST-MD5} and It is enabled by default (see @code{password-cache}), with a short timeout of 16 seconds (see @code{password-cache-expiry}). If -@acronym{PGG} is used as the @acronym{PGP} backend, the @acronym{PGP} +@acronym{PGG} is used as the @acronym{PGP} back end, the @acronym{PGP} passphrase is managed by this mechanism. Passwords for ManageSieve connections are managed by this mechanism, after quering the user about whether to do so. @@ -61,11 +89,48 @@ whether to do so. @item @acronym{IMAP} identity (@acronym{RFC} 2971) is supported. By default, Gnus do not send any information about itself, but you can -customize it using @code{nnimap-id}. +customize it using the variable @code{nnimap-id}. -@item The @file{all.SCORE} file can now be edited from the group buffer +@item The @file{all.SCORE} file can be edited from the group buffer using @kbd{W e}. -@end itemize +@item Gnus now MIME decode articles even when they lack "MIME-Version" header. +This changes the default of @code{gnus-article-loose-mime}. + +@item Gnus now view DNS master files sent as text/dns using dns-mode. +@item Gnus now support the ``hashcash'' client puzzle anti-spam idea. +See the Gnus manual, section Hashcash, for more information. Use +@code{(setq message-generate-hashcash t)} to enable. + +@item Gnus supports new limiting commands in the Summary buffer: +@kbd{/ r} (@code{gnus-summary-limit-to-replied}) and @kbd{/ R} +(@code{gnus-summary-limit-to-recipient}). @ref{Limiting}. + +@item Gnus supports a new sort command in the Summary buffer: +@kbd{C-c C-s C-t} (@code{gnus-summary-sort-by-recipient}). @ref{Summary +Sorting} + +@item The @code{nnrss} back end now supports multilingual text. +Non-@acronym{ASCII} group names for the @code{nnrss} groups are also +supported. @xref{RSS}. + +@item URLs inside OpenPGP: headers are retrieved and imported to your +PGP key ring when you click on them. + +@item Gnus uses narrowing to hide headers in Message buffers. +The @code{References} header is hidden by default. To make all +headers visible, use @code{(setq message-hidden-headers nil)}. + +@item @code{gnus-decay-scores} can be a regexp matching score files. +This allows to decay only adaptive score files. @ref{Score Decays}. + +@item @acronym{S/MIME} now feature @acronym{LDAP} user certificate searches. +You need to configure the server in @code{smime-ldap-host-list}. + +@end itemize @c gnus-news.texi ends here. + +@ignore + arch-tag: 872c7569-4340-4d73-9d1d-7826d9f94a51 +@end ignore diff --git a/texi/gnus-refcard.tex b/texi/gnus-refcard.tex new file mode 100644 index 0000000..06e28e8 --- /dev/null +++ b/texi/gnus-refcard.tex @@ -0,0 +1,1428 @@ +\documentclass{article} + +% Previously we had five input LaTeX files (booklet.tex bk-lt.tex bk-a4.tex +% refcard.tex gnusref.tex) and two logo files (gnuslogo-refcard.eps and +% 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. +% +% (Reiner Steib, March 2005) + +\usepackage{ifthen} +\ifthenelse{\isundefined{\booklettrue}}{ + \typeout{Creating reference card...} +}{ + \typeout{Creating reference booklet...}} + +\usepackage{supertabular} + +\newlength{\logowidth} \setlength{\logowidth} {6.861in} +\newlength{\logoheight} \setlength{\logoheight}{7.013in} + +\usepackage{graphicx} + +\usepackage{geometry} + +\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Reference Card + + \def\Guide{Card}\def\guide{card} + \def\logoscale{0.25} + + % Page setup for the refcard: + + % \setlength{\textwidth}{7.26in} \setlength{\textheight}{10in} + % \setlength{\topmargin}{-1.0in} + % % the same settings work for A4, although there is a bit of space at the + % % top and bottom of the page. + % \setlength{\oddsidemargin}{-0.5in} \setlength{\evensidemargin}{-0.5in} + + \ifthenelse{\isundefined{\letterpapertrue}}{ + \geometry{a4paper,hmargin=10mm,tmargin=10mm,bmargin=35mm} + }{ + \geometry{hmargin=20mm,tmargin=10mm,bmargin=12mm} + } + +}{ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Reference Booklet + + \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} + } + + \def\sec{\section} + \def\subsec{\subsection} + \def\subsubsec{\subsubsection} + \def\blankpage{\vspace*{\fill}\par + %\centerline{(This page intentionally left blank.)} + \par\vspace*{\fill}\pagebreak} +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% \input{gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % % +%% include file for the Gnus refcard and booklet + +\def\progver{5.10}\def\refver{5.10-2} % program and refcard versions +\def\date{Mar, 2005} +\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$} + +%% +\newlength{\keycolwidth} +\newenvironment{keys}[1]% #1 is the widest key +{\nopagebreak%\noindent% + \settowidth{\keycolwidth}{#1}% + \addtolength{\keycolwidth}{\tabcolsep}% + \addtolength{\keycolwidth}{-\columnwidth}% + \begin{supertabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}% + {\end{supertabular}\\} + +%% uncomment the first definition if you do not want pagebreaks in maps +%%\newcommand{\esamepage}{\samepage} +\newcommand{\esamepage}{} + +\newcommand*{\B}[1]{{\bf#1})} % bold l)etter + +\newcommand{\Title}{% + \begin{center} + {\bf\LARGE Gnus \progver\ Reference \Guide\\} + %{\normalsize \Guide\ version \refver} + \end{center} + } + +% \newcommand*{\LogoOLD}[1]{\centerline{% +% \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight +% {\vfill\epsfig{figure=gnuslogo-#1}}\vspace{-\baselineskip}}}} + +\newcommand*{\Logo}[1]{\centerline{% + \includegraphics[width=\logoscale\logowidth]{gnus-logo}}} + +\newcommand{\Copyright}{% + \begin{center} + Copyright \copyright\ 1995 Free Software Foundation, Inc.\\* + Copyright \copyright\ 1995 Vladimir Alexiev + $<$vladimir@cs.ualberta.ca$>$.\\* + Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\* + Copyright \copyright\ 2001, 2002, 2003, 2004, 2005 \author.\\* + Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne + Ingebrigtsen.\\* + and the Emacs Help Bindings feature (C-h b).\\* + Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\* + \end{center} + + Permission is granted to make and distribute copies of this reference + \guide{} provided the copyright notice and this permission are preserved on + all copies. Please send corrections, additions and suggestions to the + current maintainer's email address. \Guide{} last edited on \date. + } + +\newcommand{\Notes}{% + \subsection*{Notes} + {\esamepage + Gnus is complex. Currently it has some 876 interactive (user-callable) + functions. Of these 618 are in the two major modes (Group and + Summary/Article). Many of these functions have more than one binding, some + have 3 or even 4 bindings. The total number of keybindings is 677. So in + order to save 40\% space, every function is listed only once on this + \guide, under the ``more logical'' binding. Alternative bindings are given + in parentheses in the beginning of the description. + + Many Gnus commands are affected by the numeric prefix. Normally you enter a + prefix by holding the Meta key and typing a number, but in most Gnus modes + you don't need to use Meta since the digits are not self-inserting. The + prefixed behavior of commands is given in [brackets]. Often the prefix is + used to specify: + + \quad [distance] How many objects to move the point over. + + \quad [scope] How many objects to operate on (including the current one). + + \quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it + determines how many objects to operate on. Else if there are some objects + marked with the process mark \#, these are operated on. Else only the + current object is affected. + + \quad [level] A group subscribedness level. Only groups with a lower or + equal level will be affected by the operation. If no prefix is given, + `gnus-group-default-list-level' is used. If + `gnus-group-use-permanent-levels', then a prefix to the `g' and `l' + commands will also set the default level. + + \quad [score] An article score. If no prefix is given, + `gnus-summary-default-score' is used. \\*[\baselineskip] + % some keys + Gnus startup-commands:\\* + \begin{keys}{M-x gnus-unplugged} + M-x gnus & start Gnus. \\ + M-x gnus-no-server & start Gnus without connecting to server + (i.e. to read mail). \\ + \end{keys} + Additionally, there are the two commands \texttt{gnus-plugged} and + \texttt{gnus-unplugged}, which are only used if you want to download + news and/or read previously downloaded news offline (see C-c C-i g Gnus + Unplugged RET). Note: \texttt{gnus-no-server} ignores the stuff in + \texttt{gnus-agent-directory}, and thus does not allow you to use Gnus + Unplugged. + % + \begin{keys}{C-c C-i} + C-c C-i & Go to the Gnus online {\bf info}.\\ + C-c C-b & Send a Gnus {\bf bug} report.\\ + \end{keys} + }} + +\newcommand{\GroupLevels}{% + The table below assumes that you use the default Gnus levels. + Fill your user-specific levels in the blank cells.\\[1\baselineskip] + \begin{tabular}{|c|l|l|} + \hline + Level & Groups & Status \\ + \hline + 1 & draft/mail groups & \\ + 2 & mail groups & \\ + 3 & & subscribed \\ + 4 & & \\ + 5 & default list level & \\ + \hline + 6 & & unsubscribed \\ + 7 & & \\ + \hline + 8 & & zombies \\ + \hline + 9 & & killed \\ + \hline + \end{tabular}} + +\newcommand{\MarkCharacters}{% + {\esamepage If a command directly sets a mark, it is shown in parentheses.\\* + \newlength{\markcolwidth} + \settowidth{\markcolwidth}{` '}% widest character + \addtolength{\markcolwidth}{4\tabcolsep} + \addtolength{\markcolwidth}{-\columnwidth} + \newlength{\markdblcolwidth} + \setlength{\markdblcolwidth}{\columnwidth} + \addtolength{\markdblcolwidth}{-2\tabcolsep} + \begin{tabular}{|c|p{-\markcolwidth}|} + \hline + \multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``Read'' Marks.} + All these marks appear in the first column of the summary line, and so + are mutually exclusive.}\\ + \hline + ` ' & (M-u, M SPC, M c) Not read.\\ + ! & (!, M !, M t) Ticked (interesting).\\ + ? & (?, M ?) Dormant (only followups are interesting).\\ + E & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\ + G & (C, B DEL) Canceled article (or deleted in mailgroups).\\ + \$ & (M-d, M s x, S x). Marked as spam.\\ + \hline\hline + \multicolumn{2}{|p{\markdblcolwidth}|} + {The marks below mean that the article + is read (killed, uninteresting), and have more or less the same effect. + Some commands however explicitly differentiate between them (e.g.\ M + M-C-r, adaptive scoring).}\\ + \hline + r & (d, M d, M r) Deleted (marked as {\bf read}).\\ + C & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\ + F & SOUPed article. See the manual.\\ + O & {\bf Old} (read in a previous session).\\ + K & (k, M k; C-k, M K) {\bf Killed}.\\ + M & Article marked as read by duplicate suppression.\\ + Q & Article is part of a sparse thread (see ``Threading'' + in the manual).\\ + R & {\bf Read} (viewed in actuality).\\ + X & Killed by a kill file.\\ + Y & Killed due to low score.\\ + \hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline + \multicolumn{2}{|p{\markdblcolwidth}|} + {{\bf Marks not affecting visibility}}\\ + \hline + \# & (\#, M \#, M P p) Processable (will be affected by the next operation). + [2]\\ + A & {\bf Answered} (followed-up or replied). [2]\\ + F & Forwarded. [2]\\ + $\ast$ & Cached. [2]\\ + S & Saved. [2]\\ + N & Recently arrived. [2]\\ + . & Unseen. [2]\\ + + & Over default score. [3]\\ + $-$ & Under default score. [3]\\ + $=$ & Has children (thread underneath it). Add `\%e' to + `gnus-summary-line-format'. [3]\\ + \hline + \end{tabular} + }} + +\newcommand{\GroupModeGeneral}{% + \begin{keys}{C-c M-C-x} + RET & (=) Enter this group. [Prefix: how many (read) articles to fetch. + Positive: newest articles, negative: oldest ones; non-numerical: + view all articles, not just unread]\\ + M-RET & Enter group quickly.\\ + M-SPC & Same as RET but does not expunge and hide dormants.\\ + M-C-RET & Enter group without any processing, changes will not be permanent.\\ + SPC & Select this group and display the first (unread) article. [Same + prefix as above.]\\ + ? & Give a very short help message.\\ + $<$ & Go to the beginning of the Group buffer.\\ + $>$ & Go to the end of the Group buffer.\\ + , & Jump to the lowest-level group with unread articles.\\ + . & Jump to the first group with unread articles.\\ + \^{} & Enter the Server buffer mode.\\ + a & Post an {\bf article} to a group + [Prefix: use group under point to find posting-style].\\ + b & Find {\bf bogus} groups and delete them.\\ + c & Mark all unticked articles in this group as read ({\bf catch-up}). + [p/p]\\ + g & Check the server for new articles ({\bf get}). [level]\\ + M-g & Check the server for new articles in this group ({\bf get}). [p/p]\\ + j & {\bf Jump} to a group.\\ + m & {\bf Mail} a message to someone + [Prefix: use group under point to find posting-style].\\ + n & Go to the {\bf next} group with unread articles. [distance]\\ + M-n & Go to the {\bf next} group on the same or lower level. + [distance]\\ + p & (DEL) Go to the {\bf previous} group with unread articles. + [distance]\\ + M-p & Go to the {\bf previous} group on the same or lower level. [distance]\\ + q & {\bf Quit} Gnus.\\ + r & Re-read the init file ({\bf reset}).\\ + s & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if + `gnus-save-newsrc-file').\\ + z & Suspend (kill all buffers of) Gnus.\\ + B & {\bf Browse} a foreign server.\\ + C & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\ + F & {\bf Find} new groups and process them.\\ + N & Go to the {\bf next} group. [distance]\\ + P & Go to the {\bf previous} group. [distance]\\ + Q & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\ + R & {\bf Restart} Gnus.\\ + Z & Clear the dribble buffer.\\ + M-c & Clear data from group (marks and list of read articles). \\ + C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level + (depending on `gnus-group-sort-function').\\ + C-c C-x & Run all expirable articles in this group through the {\bf expiry} + process.\\ + C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\ + C-c M-g & Activate all {\bf groups}.\\ + C-c C-i & Gnus online-manual ({\bf info}).\\ + C-x C-t & {\bf Transpose} two groups.\\ + H f & Fetch this group's {\bf FAQ} (using ange-ftp).\\ + H c & Display this group's {\bf charter}. [Prefix: query for group]\\ + H C & Display this group's {\bf control message} (using + ange-ftp). [Prefix: query for group]\\ + H v & (V) Display the Gnus {\bf version} number.\\ + H d & (C-c C-d) Show the {\bf description} of this group + [Prefix: re-read from server].\\ + M-d & {\bf Describe} all groups. [Prefix: re-read from server]\\ + D g & Regenerate a Sieve script from group parameters.\\ + D u & Regenerate Sieve script and {\bf upload} to server.\\ + \end{keys} + } + +\newcommand{\ListGroups}{% + {\esamepage + \begin{keys}{A M} + A d & (C-c C-M-a) List all groups whose names or {\bf descriptions} match a regexp.\\ + A k & (C-c C-l) List all {\bf killed} groups. + [Prefix: look at active-file from server]\\ + A l & List all groups on a specific level. + [Prefix: also list groups with no unread articles]\\ + A a & (C-c C-a) List all groups whose names match a regexp + ({\bf apropos}).\\ + A A & List the server's active-file.\\ + A M & List groups that {\bf match} a regexp.\\ + A m & List groups that {\bf match} a regexp and have unread articles. + [level]\\ + A s & (l) List all {\bf subscribed} groups with unread articles. + [level; 5 and lower is the default]\\ + A u & (L) List all groups (including read and {\bf unsubscribed}). + [level; 7 and lower is the default]\\ + A z & List all {\bf zombie} groups.\\ + A c & List all groups with cached articles. [level]\\ + A ? & List all groups with dormant articles. [level]\\ + \end{keys} + } + + \newcommand{\CreateEditGroups}{% + {\esamepage + The select methods are indicated in parentheses.\\* + \begin{keys}{G DEL} + G a & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\ + G c & {\bf Customize} this group's parameters.\\ + G d & Make a {\bf directory} group (every file must be a posting and files + must have numeric names). (nndir)\\ + G D & Enter a {\bf directory} as a (temporary) group. + (nneething without recording articles read)\\ + G e & (M-e) {\bf Edit} this group's select method.\\ + G E & {\bf Edit} this group's info (select method, articles read, etc).\\ + G f & Make a group based on a {\bf file}. (nndoc)\\ + G h & Make the Gnus {\bf help} (documentation) group. (nndoc)\\ + G k & Make a {\bf kiboze} group. (nnkiboze)\\ + G m & {\bf Make} a new group.\\ + G p & Edit this group's {\bf parameters}.\\ + G r & Rename this group (does not work with read-only groups!).\\ + G u & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\ + G v & Add this group to a {\bf virtual} group. [p/p]\\ + G V & Make a new empty {\bf virtual} group. (nnvirtual)\\ + G w & Create ephemeral group based on web-search. [Prefix: make solid group + instead]\\ + G R & Make an {\bf RSS} group.\\ + G DEL & {\bf Delete} group [Prefix: delete all articles as well].\\ + G x & Expunge all deleted articles in an nnimap mailbox.\\ + G l & Edit ACL (Access Control {\bf List}) for an nnimap mailbox.\\ + \end{keys} + You can also create mail-groups and read your mail with Gnus (very useful + if you are subscribed to mailing lists), using one of the methods + nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info + (C-c C-i g Reading Mail RET). + }} + + % TODO: + \newcommand{\SoupCommands}{% + \begin{keys}{G s w} + G s b & gnus-group-brew-soup: not documented.\\ + G s p & gnus-soup-pack-packet: not documented.\\ + G s r & nnsoup-pack-replies: not documented.\\ + G s s & gnus-soup-send-replies: not documented.\\ + G s w & gnus-soup-save-areas: not documented.\\ + \end{keys}} + + \newcommand{\MarkGroups}{% + \begin{keys}{M m} + M m & (\#) Set the process {\bf mark} on this group. [scope]\\ + M r & Mark all groups matching regular expression.\\ + M u & (M-\#) Remove the process mark from this group ({\bf unmark}). + [scope]\\ + M U & Remove the process mark from all groups (\textbf{umark all}).\\ + M w & Mark all groups in the current region. [prefix: unmark]\\ + M b & Mark all groups in the {\bf buffer}. [prefix: unmark]\\ + \end{keys}} + + \newcommand{\GroupTopicsGeneral}{% + {\esamepage + Topics are ``categories'' for groups. Press t in the group-buffer to + toggle gnus-topic-mode (C-c C-i g Group Topics RET).\\* + \begin{keys}{C-c C-x} + T n & Prompt for topic {\bf name} and create it.\\ + T m & {\bf Move} the current group to some other topic [p/p].\\ + T j & {\bf Jump} to a topic.\\ + T c & {\bf Copy} the current group to some other topic [p/p].\\ + T D & Remove (not delete) the current group [p/p].\\ + T M & {\bf Move} all groups matching a regexp to a topic.\\ + T C & {\bf Copy} all groups matching a regexp to a topic.\\ + T H & Toggle {\bf hiding} of empty topics.\\ + T r & {\bf Rename} a topic.\\ + T DEL & Delete an empty topic.\\ + T \# & Mark all groups in the current topic with the process-mark.\\ + T M-\# & Remove the process-mark from all groups in the current topic.\\ + T TAB & (TAB) Indent current topic [Prefix: unindent].\\ + M-TAB & Unindent the current topic.\\ + RET & (SPC) Either unfold topic or enter group [level].\\ + T s & {\bf Show} the current topic. [Prefix: show permanently]\\ + T h & {\bf Hide} the current topic. [Prefix: hide permanently]\\ + C-c C-x & Expire all articles in current group or topic.\\ + C-k & {\bf Kill} a group or topic.\\ + C-y & {\bf Yank} a group or topic.\\ + A T & List active-file using {\bf topics}.\\ + G p & Edit topic-{\bf parameters}.\\ + T M-n & Go to {\bf next} topic. [distance]\\ + T M-p & Go to {\bf previous} topic. [distance]\\ + \end{keys} + } + } + + \newcommand{\TopicSorting}{% + {\esamepage + \begin{keys}{T S m} + T S a & Sort {\bf alphabetically}.\\ + T S u & Sort by number of {\bf unread} articles.\\ + T S l & Sort by group {\bf level}.\\ + T S v & Sort by group score ({\bf value}).\\ + T S r & Sort by group {\bf rank}.\\ + T S m & Sort by {\bf method}.\\ + T S e & Sort by {\bf server} name.\\ + T S s & Sort according to `gnus-group-sort-function'.\\ + \end{keys} + With a prefix these commands will sort in reverse order. + } + } + + \newcommand{\SubscribeKillYankGroups}{% + {\esamepage + \begin{keys}{S C-k} + S k & (C-k) {\bf Kill} this group.\\ + S l & Set the {\bf level} of this group. [p/p]\\ + S s & (U) Prompt for a group and toggle its {\bf subscription}.\\ + S t & (u) {\bf Toggle} subscription to this group. [p/p]\\ + S w & (C-w) Kill all groups in the region.\\ + S y & (C-y) {\bf Yank} the last killed group.\\ + S z & Kill all {\bf zombie} groups.\\ + S C-k & Kill all groups on a certain level.\\ + \end{keys} + } + } + + \newcommand{\SummaryModeGeneral}{% + {\esamepage + \begin{keys}{M-RET} + SPC & (A SPC, A n) Select an article, scroll it one page, move to the + next one.\\ + DEL & (A DEL, A p, b) Scroll this article one page back. [distance]\\ + RET & (A RET) Scroll this article one line forward. [distance]\\ + M-RET & (A M-RET) Scroll this article one line backward. [distance]\\ + = & Expand the Summary window (fullsize). + [Prefix: shrink to display article window]\\ + % + \& & Execute a command on all articles whose header matches a regexp. + [Prefix: move backwards]\\ + M-\& & Execute a command on all articles having the process mark.\\ + % + M-n & (G M-n) Go to the {\bf next} summary line of an unread article. + [distance]\\ + M-p & (G M-p) Go to the {\bf previous} summary line of an unread article. + [distance]\\ + M-s & {\bf Search} through all subsequent articles for a regexp.\\ + M-r & Search through all previous articles for a regexp.\\ + % + A P & {\bf Postscript}-print current buffer.\\ + % + M-k & Edit this group's {\bf kill} file.\\ + M-K & Edit the general {\bf kill} file.\\ + % + C-t & Toggle {\bf truncation} of summary lines.\\ + Y g & Regenerate the summary-buffer.\\ + Y c & Insert all cached articles into the summary-buffer.\\ + % + M-C-e & {\bf Edit} the group-parameters.\\ + M-C-a & Customize the group-parameters.\\ + % + % article handling + % + A $<$ & ($<$, A b) Scroll to the beginning of this article.\\ + A $>$ & ($>$, A e) Scroll to the end of this article.\\ + A s & (s) Perform an i{\bf search} in the article buffer.\\ + % + A D & (C-d) Un{\bf digestify} this article into a separate group. + [Prefix: force digest]\\ + M-C-d & Like C-d, but open several documents in nndoc-groups, wrapped + in an nnvirtual group [p/p]\\ + % + A g & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw version]\\ + A r & (\^{}, A \^{}) Fetch the parent(s) of this article. + [Prefix: if positive fetch \textit{n} ancestors; + negative: fetch only the \textit{n}th ancestor]\\ + A t & {\bf Translate} this article.\\ + A R & Fetch all articles mentioned in the {\bf References}-header.\\ + A T & Fetch full \textbf{thread} in which the current article appears.\\ + M-\^{} & Fetch the article with a given Message-ID.\\ + S y & {\bf Yank} the current article into an existing message-buffer. + [p/p]\\ + A M & Setup group parameters for {\bf mailing} lists from + headers. [Prefix: replace old settings]\\ + \end{keys} + } + } + + \newcommand{\MIMESummary}{% + {\esamepage + For the commands operating on one MIME part (a subset of gnus-article-*), a + prefix selects which part to operate on. If the point is placed over a + MIME button in the article buffer, use the corresponding bindings for the + article buffer instead. + + \begin{keys}{W M w} + K v & (b, W M b) {\bf View} the MIME-part.\\ + K o & {\bf Save} the MIME part.\\ + K c & {\bf Copy} the MIME part.\\ + K e & View the MIME part {\bf externally}.\\ + K i & View the MIME part {\bf internally}.\\ + K $\mid$ & Pipe the MIME part to an external command.\\ + K b & Make all the MIME parts have buttons in front of them.\\ + K m & Try to repair {\bf multipart-headers}.\\ + K C & View the MIME part using a different {\bf charset}.\\ + X m & Save all parts matching a MIME type to a directory. [p/p]\\ + M-t & Toggle the buttonized display of the article buffer.\\ + W M w & Decode RFC2047-encoded words in the article headers.\\ + W M c & Decode encoded article bodies. [Prefix: prompt for charset]\\ + W M v & View all MIME parts in the current article.\\ + \end{keys} + } + } + + \newcommand{\SortSummary}{% + {\esamepage + \begin{keys}{C-c C-s C-a} + C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\ + C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\ + C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\ + C-c C-s C-i & Sort the summary-buffer by article score.\\ + C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\ + C-c C-s C-c & Sort the summary-buffer by length.\\ + C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\ + C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\ + C-c C-s C-r & Sort the summary-buffer {\bf randomly}.\\ + C-c C-s C-o & Sort the summary-buffer using the default method.\\ + \end{keys} + With a prefix these functions sort in reverse order. + } + } + + \newcommand{\MailGroups}{% formerly \Bsubmap + {\esamepage + These commands (except `B c') are only valid in a mail group.\\* + \begin{keys}{B M-C-e} + B DEL & (B backspace, B delete) {\bf Delete} the mail article from disk (!). + [p/p]\\ + B B & Crosspost this article to another group.\\ + B c & {\bf Copy} this article from any group to a mail group. [p/p]\\ + B e & {\bf Expire} all expirable articles in this group. [p/p]\\ + B i & {\bf Import} a random file into this group.\\ + B I & Create an empty article in this group.\\ + B m & {\bf Move} the article from one mail group to another. [p/p]\\ + B p & Query whether the article was {\bf posted} as well.\\ + B q & {\bf Query} where the article will end up after fancy splitting\\ + B r & {\bf Respool} this mail article. [p/p]\\ + B t & {\bf Trace} the fancy splitting patterns applied to this article.\\ + B w & (e) Edit this article.\\ + B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group + (!). [p/p]\\ + K E & {\bf Encrypt} article body. [p/p]\\ + \end{keys} + } + } + + \newcommand{\DraftGroup}{% formerly \Dsubmap + {\esamepage + The ``drafts''-group contains messages that have been saved but not sent + and rejected articles. \\* + \begin{keys}{B DEL} + D e & \textbf{edit} message.\\ + D s & \textbf{Send} message. [p/p]\\ + D S & \textbf{Send} all messages.\\ + D t & \textbf{Toggle} sending (mark as unsendable).\\ + B DEL & \textbf{Delete} message (like in mailgroup).\\ + \end{keys} + } + } + + \newcommand{\SelectArticles}{% formerly \Gsubmap + {\esamepage + These commands select the target article. They do not understand the prefix.\\* + \begin{keys}{G C-n} + h & Enter article-buffer.\\ + G b & (,) Go to the {\bf best} article (the one with highest score).\\ + G f & (.) Go to the {\bf first} unread article.\\ + G n & (n) Go to the {\bf next} unread article.\\ + G p & (p) Go to the {\bf previous} unread article.\\ + % + G N & (N) Go to {\bf the} next article.\\ + G P & (P) Go to the {\bf previous} article.\\ + % + G C-n & (M-C-n) Go to the {\bf next} article with the same subject.\\ + G C-p & (M-C-p) Go to the {\bf previous} article with the same subject.\\ + % + G l & (l) Go to the previously read article ({\bf last-read-article}).\\ + G o & Pop an article off the summary history and go to it.\\ + % + G g & Search an article via subject.\\ + G j & (j) Search an article via Message-Id or subject.\\ + \end{keys} + } + } + + \newcommand{\ArticleModeGeneral}{% + {\esamepage + The normal navigation keys work in Article mode. Some additional keys are:\\ + \begin{keys}{C-c RET} + C-c \^{} & Get the article with the Message-ID near point.\\ + C-c RET & Send reply to address near point.\\ + h & Go to the \textbf{header}-line of the article in the + summary-buffer.\\ + s & Go to \textbf{summary}-buffer.\\ + RET & (middle mouse button) Activate the button at point to follow + an URL or Message-ID.\\ + TAB & Move the point to the next button.\\ + M-TAB & Move point to previous button.\\ + \end{keys} + } + } + + \newcommand{\WashArticle}{% formerly \Wsubmap + {\esamepage + \begin{keys}{W W H} + W 6 & Translate a base64 article.\\ + W a & Strip certain {\bf headers} from body.\\ + W b & Make Message-IDs and URLs in the article mouse-clickable + {\bf buttons}.\\ + W c & Translate CRLF-pairs to LF and then the remaining CR's to LF's.\\ + W d & Treat {\bf dumbquotes}.\\ + W e & Treat {\bf emphasized} text.\\ + W h & Treat {\bf HTML}.\\ + W l & (w) Remove page breaks ({\bf\^{}L}) from the article.\\ + W m & {\bf Morse} decode article.\\ + W o & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\ + W p & Verify X-{\bf PGP}-Sig header.\\ + W q & Treat {\bf quoted}-printable in the article.\\ + W r & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\ + W s & Verify (and decrypt) a {\bf signed} message.\\ + W t & (t) {\bf Toggle} display of all headers.\\ + W u & {\bf Unsplit} broken URLs.\\ + W v & (v) Toggle permanent {\bf verbose} displaying of all headers.\\ + W w & Do word {\bf wrap} in the article.\\ + W B & Add clickable {\bf buttons} to the article headers.\\ + W C & {\bf Capitalize} first word in each sentence.\\ + W Q & Fill long lines.\\ + W Z & Translate a HZ-encoded article.\\ + % + W G u & {\bf Unfold} folded header lines.\\ + W G f & {\bf Fold} all header lines.\\ + W G n & Unfold {\bf Newsgroups:} and Follow-Up-To:.\\ + % + W Y c & Repair broken {\bf citations}.\\ + W Y a & Repair broken {\bf attribution} lines.\\ + W Y u & {\bf Unwrap} broken citation lines.\\ + W Y f & Do a {\bf full} deuglification (W Y c, W Y a, W Y u).\\ + \end{keys} + } + } + + \newcommand{\BlankAndWhitespace}{% + {\esamepage + \begin{keys}{W E w} + W E l & Strip blank {\bf lines} from the beginning of the article.\\ + W E m & Replace blank lines with empty lines and remove {\bf multiple} + blank lines.\\ + W E t & Remove {\bf trailing} blank lines.\\ + W E a & Strip blank lines at the beginning and the end + (W E l, W E m and W E t).\\ + W E A & Strip {\bf all} blank lines.\\ + W E s & Strip leading blank lines from the article body.\\ + W E e & Strip trailing blank lines from the article body.\\ + W E w & Remove leading {\bf whitespace} from all headers.\\ + \end{keys} + } + } + + \newcommand{\Picons}{% + {\esamepage + \begin{keys}{W D D} + W D s & (W g) Display {\bf smilies}.\\ + W D x & (W f) Look for and display any X-{\bf Face} headers.\\ + W D d & Display any Face headers.\\ + W D n & Toggle picons in {\bf Newsgroups} and Followup-To.\\ + W D m & Toggle picons in {\bf mail} headers (To and Cc).\\ + W D f & Toggle picons in {\bf From}.\\ + W D D & Remove all images from the article buffer.\\ + \end{keys} + } + } + + \newcommand{\TimeAndDate}{% + {\esamepage + \begin{keys}{W T u} + W T u & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\ + W T i & Display the article timestamp in {\bf ISO} 8601.\\ + W T l & Display the article timestamp in the {\bf local} timezone.\\ + W T s & Display according to `gnus-article-time-format'.\\ + W T e & Display the time {\bf elapsed} since it was sent.\\ + W T o & Display the {\bf original} timestamp.\\ + W T p & Display the date in format that's {\bf + pronounceable} in English.\\ + \end{keys} + } + } + + \newcommand{\HideHighlightArticle}{% + {\esamepage + \begin{keys}{W W C-c} + W W a & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\ + W W h & Hide article {\bf headers}.\\ + W W b & Hide {\bf boring} headers.\\ + W W s & Hide {\bf signature}.\\ + W W l & Hide {\bf list} identifiers in subject-header.\\ + W W P & Hide {\bf PEM} (privacy enhanced messages).\\ + W W B & Hide banner specified by group parameter.\\ + W W c & Hide {\bf citation}.\\ + W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\ + W W C & Hide cited text in articles that aren't roots.\\ + W H a & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\ + W H c & Highlight article {\bf citations}.\\ + W H h & Highlight article {\bf headers}.\\ + W H s & Highlight article {\bf signature}.\\ + \end{keys} + For all hiding-commands: A positive prefix always hides, and a negative + prefix will show what was previously hidden. + }} + + \newcommand{\MIMEArticleMode}{% + {\esamepage + \begin{keys}{RET} + RET & (BUTTON-2) Toggle display of the MIME object.\\ + v & Prompt for a method and then view object using this method.\\ + o & Prompt for a filename and save the MIME object.\\ + C-o & Prompt for a filename to save the MIME object to and remove it.\\ + d & {\bf Delete} the MIME object.\\ + c & {\bf Copy} the MIME object to a new buffer and display this buffer.\\ + i & Display the MIME object in this buffer.\\ + C & Copy the MIME object to a new buffer and display this buffer using {\bf Charset} \\ + E & View internally. \\ + e & View {\bf externally}. \\ + t & View the MIME object as a different {\bf type}.\\ + p & {\bf Print} the MIME object.\\ + $\mid$ & Pipe the MIME object to a process.\\ + . & Take action on the MIME object.\\ + \end{keys} + } + } + + %% end of article mode for reading .......................................... + + \newcommand{\MarkArticlesGeneral}{% formerly \Msubmap + {\esamepage + \begin{keys}{M M-C-r} + d & (M d, M r) Mark this article as read and move to the next one. + [scope]\\ + D & Mark this article as read and move to the previous one. [scope]\\ + ! & (u, M !, M t) Tick this article (mark it as interesting) and move + to the next one. [scope]\\ + U & Tick this article and move to the previous one. [scope]\\ + M ? & (?) Mark this article as dormant (only followups are + interesting). [scope]\\ + M D & Show all {\bf dormant} articles (normally they are hidden unless they + have any followups).\\ + M M-D & Hide all {\bf dormant} articles.\\ + C-w & Mark all articles between point and mark as read.\\ + M-u & (M SPC, M c) Clear all marks from this article and move to the next + one. [scope]\\ + M-U & Clear all marks from this article and move to the previous one. + [scope]\\ + % + M e & (E, M x) Mark this article as {\bf expirable}. [scope]\\ + % + M k & (k) {\bf Kill} all articles with the same subject then select the + next unread one.\\ + M K & (C-k) {\bf Kill} all articles with the same subject as this one.\\ + % + M C & {\bf Catch-up} the articles that are not ticked and not dormant.\\ + M C-c & {\bf Catch-up} all articles in this group.\\ + M H & {\bf Catch-up} (mark read) this group to point (to-{\bf here}).\\ + % + M b & Set a {\bf bookmark} in this article.\\ + M B & Remove the {\bf bookmark} from this article.\\ + % + M M-r & (x) Expunge all {\bf read} articles from this group.\\ + M M-C-r & Expunge all articles having a given mark.\\ + M S & (C-c M-C-s) {\bf Show} all expunged articles.\\ + M M C-h & Displays some more keys doing ticking slightly differently.\\ + \end{keys} + The variable `gnus-summary-goto-unread' controls what happens after a mark + has been set (C-x C-i g Setting Marks RET) + }} + + \newcommand{\MarkByScore}{% + \begin{keys}{M V m} + M V c & {\bf Clear} all marks from all high-scored articles. [score]\\ + M V k & {\bf Kill} all low-scored articles. [score]\\ + M V m & Mark all high-scored articles with a given {\bf mark}. [score]\\ + M V u & Mark all high-scored articles as interesting (tick them). [score]\\ + \end{keys} + } + } + +\newcommand{\ProcessMark}{% + {\esamepage + These commands set and remove the process mark (\#). You only need to use + it if the set of articles you want to operate on is non-contiguous. Else + use a numeric prefix.\\* + \begin{keys}{M P R} + M P p & (\#, M \#) Mark this article.\\ + M P u & (M-\#, M M-\#) \textbf{unmark} this article.\\ + M P b & Mark all articles in {\bf buffer}.\\ + M P r & Mark all articles in the {\bf region}.\\ + M P g & Unmark all articles in the region.\\ + M P R & Mark all articles matching a {\bf regexp}.\\ + M P G & Unmark all articles matching a regexp.\\ + M P t & Mark all articles in this (sub){\bf thread}.\\ + M P T & Unmark all articles in this (sub){\bf thread}.\\ + M P s & Mark all articles in the current {\bf series}.\\ + M P S & Mark all {\bf series} that already contain a marked article.\\ + M P a & Mark {\bf all} articles (in series order).\\ + M P U & \textbf{unmark} all articles.\\ + M P i & {\bf Invert} the list of process-marked articles.\\ + M P k & Push the current process-mark set onto stack and unmark + all articles.\\ + M P y & Pop process-mark set from stack and restore it.\\ + M P w & Push process-mark set on the stack.\\ + M P v & Mark all articles with score over the default score. [Prefix: score]\\ + \end{keys} + } + } + +\newcommand{\Limiting}{% + {\esamepage + \begin{keys}{/M} + // & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\ + /a & Limit the summary-buffer to articles matching {\bf author}.\\ + /R & Limit the summary-buffer to articles matching {\bf recipient}.\\ + /x & Limit depending on ``extra'' headers.\\ + /u & (x) Limit to {\bf unread} articles. + [Prefix: also exclude ticked and dormant articles]\\ + /. & Limit to unseen articles.\\ + /m & Limit to articles marked with specified {\bf mark}.\\ + /t & Ask for a number and exclude articles younger than that many days. + [Prefix: exclude older articles]\\ + /n & Limit to current article. [p/p]\\ + /w & Pop the previous limit off the stack and restore it. + [Prefix: pop all limits]\\ + /v & Limit to score. [score]\\ + /E & (M S) Include all expunged articles in the limit.\\ + /D & Include all dormant articles in the limit.\\ + /* & Limit to cached articles.\\ + Y C & Include all cached articles in the limit.\\ + /d & Exclude all dormant articles from the limit.\\ + /M & Exclude all marked articles.\\ + /T & Include all articles from the current thread in the limit.\\ + /c & Exclude all dormant articles that have no children from the limit.\\ + /C & Mark all excluded unread articles as read. + [Prefix: also mark ticked and dormant articles]\\ + /o & Insert all {\bf old} articles. [Prefix: how many]\\ + /N & Insert all {\bf new} articles.\\ + /p & Limit to articles {\bf predicated} in the `display' group parameter.\\ + /r & Limit to {\bf replied} articles. [Prefix: unreplied]\\ + \end{keys} + } + } + +\newcommand{\OutputArticles}{% formerly \Osubmap + {\esamepage + \begin{keys}{O m} + O o & (o, C-o) Save this article using the default article saver. [p/p]\\ + O b & Save this article's {\bf body} in plain file format [p/p]\\ + O f & Save this article in plain {\bf file} format. [p/p]\\ + O F & like O f, but overwrite file's contents. [p/p]\\ + O h & Save this article in {\bf mh} folder format. [p/p]\\ + O m & Save this article in {\bf mail} format. [p/p]\\ + O r & Save this article in {\bf rmail} format. [p/p]\\ + O v & Save this article in {\bf vm} format. [p/p]\\ + O p & ($\mid$) {\bf Pipe} this article to a shell command. [p/p]\\ + O P & \textbf{Print} this article using Muttprint. [p/p]\\ + \end{keys} + } + } + +\newcommand{\PostReplyetc}{% formerly \Ssubmap + {\esamepage + These commands put you in a separate news or mail buffer. See the section + about composing messages for more information.\\* + %After + %editing the article, send it by pressing C-c C-c. If you are in a + %foreign group and want to post the article using the foreign server, give + %a prefix to C-c C-c.\\* + \begin{keys}{S O m} + S p & (a) {\bf Post} an article to this group.\\ + S f & (f) Post a {\bf followup} to this article.\\ + S F & (F) Post a {\bf followup} and include the original. [p/p]\\ + S o p & Forward this article as a {\bf post} to a newsgroup.\\ + S M-c & Send a complaint about excessive crossposting to the author of this + article. [p/p]\\ + % + S m & (m) Send a {\bf mail} to some other person.\\ + S r & (r) Mail a {\bf reply} to the author of this article.\\ + S R & (R) Mail a {\bf reply} and include the original. [p/p]\\ + S B r & Like S r but ignore the Reply-To: header.\\ + S B R & Like S R but ignore the Reply-To: header.\\ + S w & Mail a {\bf wide} reply to this article.\\ + S W & Mail a {\bf wide} reply to this article and include + the original.\\ + S v & Mail a {\bf very} wide reply to this article.\\ + S V & Mail a {\bf very} wide reply to this article and include the original.\\ + S o m & (C-c C-f) Forward this article by {\bf mail} to a person.\\ + S D b & Resend {\bf bounced} mail.\\ + S D r & {\bf Resend} mail to a different person.\\ + S D e & {\bf Edit} and resend.\\ + % + S n & Post a followup via {\bf news} even if you got the message + through mail.\\ + S N & Post a followup via {\bf news} and include the original mail. + [p/p]\\ + % + S c & (C) {\bf Cancel} this article (only works if it is + your own). [p/p]\\ + S s & {\bf Supersede} this article with a new one (only for own + articles).\\ + % + S O m & Digest these series and forward by {\bf mail}. [p/p]\\ + S O p & Digest these series and forward as a {\bf post} to a newsgroup. + [p/p]\\ + % + S u & {\bf Uuencode} a file and post it as a series.\\ + \end{keys} + If you want to cancel or supersede an article you just posted (before it + has appeared on the server), go to the *post-news* buffer, change + `Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c. + }} + +\newcommand{\Threading}{% formerly \Tsubmap + {\esamepage + \begin{keys}{T M-\#} + T \# & Mark this thread with the process mark.\\ + T M-\# & Remove process-marks from this thread.\\ + % + T t & Re-{\bf thread} the current article's thread.\\ + T \^{} & Make the current article child of the marked (or previous) article.\\ + % movement + T n & (M-C-f, M-down) Go to the {\bf next} thread. [distance]\\ + T p & (M-C-b, M-up) Go to the {\bf previous} thread. [distance]\\ + T d & {\bf Descend} this thread. [distance]\\ + T u & Ascend this thread ({\bf up}-thread). [distance]\\ + T o & Go to the top of this thread.\\ + % + T s & {\bf Show} the thread hidden under this article.\\ + T h & {\bf Hide} this (sub)thread.\\ + % + T i & {\bf Increase} the score of this thread.\\ + T l & (M-C-l) {\bf Lower} the score of this thread.\\ + % + T k & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix: + tick it, positive prefix: unmark it.]\\ + % + T H & {\bf Hide} all threads.\\ + T S & {\bf Show} all hidden threads.\\ + T T & (M-C-t) {\bf Toggle} threading.\\ + \end{keys} + } + } + +\newcommand{\Scoring}{% formerly \Vsubmap + {\esamepage + Read about Adaptive Scoring in the online info.\\* + \begin{keys}{\bf A p m l} + V a & {\bf Add} a new score entry, specifying all elements.\\ + V c & Specify a new score file as {\bf current}.\\ + V e & {\bf Edit} the current score alist.\\ + V f & Edit a score {\bf file} and make it the current one.\\ + V m & {\bf Mark} all articles below a given score as read.\\ + V s & Set the {\bf score} of this article.\\ + V t & Display all score rules applied to this article ({\bf track}).\\ + W w & List {\bf words} used in scoring.\\ + V x & {\bf Expunge} all low-scored articles. [score]\\ + V C & {\bf Customize} the current score file through a user-friendly + interface.\\ + V F & {\bf Flush} the cache of score files.\\ + V R & {\bf Re-score} the summary buffer.\\ + V S & Display the {\bf score} of this article.\\ + \bf A p m l& Make a scoring entry based on this article.\\ + \end{keys} + The four letters stand for:\\* + \quad \B{A}ction: I)ncrease, L)ower;\\* + \quad \B{p}art: a)uthor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines, + message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (all headers);\\* + \quad \B{m}atch type:\\* + \qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\* + \qquad date: b)efore, a)t, n)this,\\* + \qquad number: $<$, =, $>$;\\* + \quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate. + + If you type the second letter in uppercase, the remaining two are assumed + to be s)ubstring and t)emporary. + If you type the third letter in uppercase, the last one is assumed to be + t)emporary. + + \quad Extra keys for manual editing of a score file:\\* + \begin{keys}{C-c C-c} + C-c C-c & Finish editing the score file.\\ + C-c C-d & Insert the current {\bf date} as number of days.\\ + \end{keys} + } + } + +\newcommand{\ExtractSeries}{% formerly \Xsubmap + {\esamepage + Gnus recognizes if the current article is part of a series (multipart + posting whose parts are identified by numbers in their subjects, e.g.{} + 1/10\dots10/10) and processes the series accordingly. You can mark and + process more than one series at a time. If the posting contains any + archives, they are expanded and gathered in a new group.\\* + \begin{keys}{X p} + X b & Un-{\bf binhex} these series. [p/p]\\ + X o & Simply {\bf output} these series (no decoding). [p/p]\\ + X p & Unpack these {\bf postscript} series. [p/p]\\ + X s & Un-{\bf shar} these series. [p/p]\\ + X u & {\bf Uudecode} these series. [p/p]\\ + \end{keys} + + Each one of these commands has four variants:\\* + \begin{keys}{X v \bf Z} + X \bf z & Decode these series. [p/p]\\ + X \bf Z & Decode and save these series. [p/p]\\ + X v \bf z & Decode and view these series. [p/p]\\ + X v \bf Z & Decode, save and view these series. [p/p]\\ + \end{keys} + where {\bf z} or {\bf Z} identifies the decoding method (b, o, p, s, u). + + An alternative binding for the most-often used of these commands is\\* + \begin{keys}{C-c C-v C-v} + C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\ + \end{keys} + }} + +\newcommand{\ExitSummary}{% formerly \Zsubmap + {\esamepage + \begin{keys}{Z G} + Z Z & (q, Z Q) Exit this group.\\ + Z E & (Q) {\bf Exit} without updating the group information.\\ + % + Z c & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\ + Z C & Mark all articles as read ({\bf catch-up}) and exit.\\ + % + Z n & Mark all articles as read and go to the {\bf next} group.\\ + Z N & Exit and go to {\bf the} next group.\\ + Z P & Exit and go to the {\bf previous} group.\\ + % + Z G & (M-g) Check for new articles in this group ({\bf get}).\\ + Z R & (C-x C-s) Exit this group, and then enter it again ({\bf reenter}). + [Prefix: select all articles, read and unread.]\\ + Z s & Update and save the dribble buffer. [Prefix: save .newsrc* as well]\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionGeneral}{% + Press C-c ? in the composition-buffer to get this information.\\* + {\esamepage + \begin{keys}{C-c C-m} + % sending + C-c C-c & Send message and exit. [Prefix: send via foreign server]\\ + C-c C-s & Send message. [Prefix: send via foreign server]\\ + C-c C-d & Don't send message (save as \textbf{draft}).\\ + C-c C-k & \textbf{Kill} message-buffer.\\ + C-c C-m & {\bf Mail} reply to the address near point. + [Prefix: include the original]\\ + % modify headers/body + C-c C-o & Sort headers.\\ + C-c C-e & \textbf{Elide} region.\\ + C-c C-v & Kill everything outside region.\\ + C-c C-r & Do a \textbf{Rot-13} on the body.\\ + C-c C-w & Insert signature (from `message-signature-file').\\ + C-c C-z & Kill everything up to signature.\\ + C-c C-y & \textbf{Yank} original message.\\ + C-c C-q & Fill the yanked message.\\ + C-c M-C-y & \textbf{Yank} a buffer and quote it.\\ + M-RET & Insert four newlines and format quoted text. [Prefix: + justify as well]\\ + C-c M-r & \textbf{Rename} message buffer. [Prefix: ask for new name]\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionMovementArticle}{% + The following functions create the header-field if necessary.\\* + {\esamepage + \begin{keys}{C-c C-f C-u} + C-c TAB & Move to \textbf{signature}.\\ + C-c C-b & Move to \textbf{body}.\\ + C-c C-f C-t & (C-c C-t) Move to \textbf{To:}.\\ + C-c C-f C-c & Move to \textbf{Cc:}.\\ + C-c C-f C-b & Move to \textbf{Bcc:}.\\ + C-c C-f C-w & Move to \textbf{Fcc:}.\\ + C-c C-f C-s & Move to \textbf{Subject:}.\\ + C-c C-f C-r & Move to \textbf{Reply-To:}.\\ + C-c C-f C-f & Move to \textbf{Followup-To:}.\\ + C-c C-f C-n & (C-c C-n) Move to \textbf{Newsgroups:}.\\ + C-c C-f C-u & Move to \textbf{Summary:}.\\ + C-c C-f C-k & Move to \textbf{Keywords:}.\\ + C-c C-f C-d & Move to \textbf{Distribution:}.\\ + C-c C-f C-m & Move to \textbf{Mail-Followup-To:}.\\ + C-c C-f C-o & Move to \textbf{From:}.\\ + C-c C-f C-a & Insert a reasonable \textbf{Mail-Followup-To:} for + an unsubscribed list. [Prefix: include addresses in \textbf{Cc:}]\\ + C-c C-f TAB & (C-c C-u) Move to \textbf{Importance:}.\\ + C-c M-n & Insert \textbf{Disposition-Notification-To:} + (request receipt).\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionMML}{% + {\esamepage + \begin{keys}{C-c C-m P} + C-c C-m f & (C-c C-a) Attach \textbf{file}.\\ + C-c C-m b & Attach contents of \textbf{buffer}.\\ + C-c C-m e & Attach \textbf{external} file (ftp..).\\ + C-c C-m P & Create MIME-\textbf{preview} (new + buffer). [Prefix: show raw MIME preview]\\ + C-c C-m v & \textbf{Validate} article.\\ + C-c C-m p & Insert \textbf{part}.\\ + C-c C-m m & Insert \textbf{multi}-part.\\ + C-c C-m q & \textbf{Quote} region.\\ + C-c C-m c s & Encrypt message using \textbf{S/MIME}.\\ + C-c C-m c o & Encrypt message using PGP.\\ + C-c C-m c p & Encrypt message using \textbf{PGP/MIME}.\\ + C-c C-m s s & Sign message using \textbf{S/MIME}.\\ + C-c C-m s o & Sign message using PGP.\\ + C-c C-m s p & Sign message using \textbf{PGP/MIME}.\\ + C-c C-m C-n & Remove security related MML tags from message.\\ + % TODO: narrow headers (C-c C-m n) ? + \end{keys} + } + } + +%% TODO: +\newcommand{\ServerMode}{% + {\esamepage + To enter this mode, press \^{} while in Group mode.\\* + \begin{keys}{SPC} + SPC & (RET) Browse this server.\\ + a & {\bf Add} a new server.\\ + c & {\bf Copy} this server.\\ + e & {\bf Edit} a server.\\ + k & {\bf Kill} this server. [scope]\\ + l & {\bf List} all servers.\\ + q & Return to the group buffer ({\bf quit}).\\ + s & Request that the server scan its sources for new articles.\\ + g & Request that the server regenerate its data.\\ + y & {\bf Yank} the previously killed server.\\ + O & Try to {\bf open} a connection to this server.\\ + C & {\bf Close} connection to this server.\\ + D & Mark this server as unreachable ({\bf deny}).\\ + M-o & {\bf Open} the connection to all servers.\\ + M-c & {\bf Close} the connection to all servers.\\ + R & Make all denied servers into closed servers.\\ + L & Set server status to offline.\\ + \end{keys} + } + } + +\newcommand{\BrowseServer}{% + {\esamepage + To enter this mode, press `B' while in Group mode.\\* + \begin{keys}{RET} + RET & Enter the current group.\\ + SPC & Enter the current group and display the first article.\\ + ? & Give a very short help message.\\ + n & Go to the {\bf next} group. [distance]\\ + p & Go to the {\bf previous} group. [distance]\\ + q & (l) {\bf Quit} browse mode.\\ + u & Subscribe to the current group. [scope]\\ + \end{keys} + } + } + +\newcommand{\GroupUnplugged}{% + {\esamepage + \begin{keys}{J S} + J j & Toggle plugged-state.\\ + J s & Fetch articles from all groups for offline-reading.\\ + J u & Fetch all eligible articles from this group.\\ + J S & \textbf{Send} all sendable messages in the drafts group.\\ + % + J c & Enter \textbf{category} buffer.\\ + J a & \textbf{Add} this group to an Agent category [p/p].\\ + J r & \textbf{Remove} this group from its Agent category [p/p].\\ + J Y & Synchronize flags changed while unplugged with remote server.\\ + \end{keys} + } + } + +\newcommand{\SummaryUnplugged}{% + {\esamepage + \begin{keys}{J M-\#} + J \# & \textbf{Mark} the article for downloading.\\ + J M-\# & \textbf{Unmark} the article for downloading.\\ + @ & \textbf{Toggle} whether to download the article.\\ + J c & Mark all undownloaded articles as read (\textbf{catch-up}).\\ + J u & Download all downloadable articles from group.\\ + \end{keys} + } + } + +\newcommand{\ServerUnplugged}{% + {\esamepage + \begin{keys}{J a} + J a & \textbf{Add} the current server to the list of servers covered + by the agent.\\ + J r & \textbf{Remove} the current server from the list of servers covered + by the agent.\\ + \end{keys} + } + } + +% end {gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % % + + +% o some things might not be updated: scoring and server modes, maybe more +% o Gnus Unplugged category-buffer commands need to be written + +\begin{document} + +\def\progver{5.10}\def\refver{5.10-1} % program and refcard versions +\def\date{Jan 10th, 2004} +\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$} + +\ifthenelse{\isundefined{\booklettrue}}{ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \raggedbottom\raggedright + \twocolumn + % use \tiny to shrink it to 4 pages (needs a high-resolution printer though) + % \tiny + \scriptsize + \pagestyle{plain} + \Title + \par + \Logo{refcard} +}{ + \setcounter{page}{0} + \thispagestyle{empty} + \vspace*{\fill} + \Title + \vspace{0.4in} + \Logo{booklet} + \vspace*{\fill} + \pagebreak +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% TODO: how does this work ? +%\tableofcontents + +\Notes +% + +\section*{Group-Mode} +\GroupModeGeneral + \subsection*{Group Subscribedness-Levels} + \GroupLevels + \subsection*{List Groups} + \ListGroups + \subsection*{Create/Edit Foreign Groups} + \CreateEditGroups + \subsection*{Unsubscribe, Kill and Yank Groups} + \SubscribeKillYankGroups + \subsection*{Mark Groups} + \MarkGroups + \subsection*{Group-Unplugged} + \GroupUnplugged +% topics in group-mode + \subsection*{Group Topics} + \GroupTopicsGeneral + \subsubsection*{Topic Sorting} + \TopicSorting + +% \ifthenelse{\isundefined{\booklettrue}}{}{\pagebreak} + +% summary-mode +\section*{Summary Mode} +\SummaryModeGeneral + \subsection*{Select Articles} + \SelectArticles +% + \subsection*{Threading} + \Threading +% + \subsection*{Limiting} + \Limiting + \subsection*{Sort the Summary-Buffer} + \SortSummary + \subsection*{Score (Value) Commands} + \Scoring + +\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \subsection*{Output Articles} + \OutputArticles + \subsection*{Extract Series (Uudecode etc)} + \ExtractSeries +}{}%ifcard% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + \subsection*{MIME operations from the Summary-Buffer} + \MIMESummary + +\ifthenelse{\isundefined{\booklettrue}}{}{% ifbooklet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \subsection*{Extract Series (Uudecode etc)} + \ExtractSeries + \subsection*{Output Articles} + \OutputArticles +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% + \subsection*{Post, Followup, Reply, Forward, Cancel} + \PostReplyetc + +\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% newpage ifcard + + \subsection*{Message Composition} + + \MsgCompositionGeneral + \subsubsection*{Jumping in message-buffer} + \MsgCompositionMovementArticle + \subsubsection*{Attachments/MML} + \MsgCompositionMML +% marking articles + \subsection*{Mark Articles} + \MarkArticlesGeneral + \subsubsection*{Mark Based on Score} + \MarkByScore + \subsubsection*{The Process Mark} + \ProcessMark + \subsubsection*{Mark Indication-Characters} + \MarkCharacters +% +\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% + + \subsection*{Summary-Unplugged} + \SummaryUnplugged + \subsection*{Mail-Group Commands} + \MailGroups + \subsection*{Draft-Group Commands} + \DraftGroup +% exiting + \subsection*{Exit the Summary-Buffer} + \ExitSummary +% +% +\section*{Article Mode (reading)} +\ArticleModeGeneral + \subsection*{Wash the Article-Buffer} + \WashArticle + \subsubsection*{Blank Lines and Whitespace} + \BlankAndWhitespace + \subsubsection*{Picons, X-faces, Smileys} + \Picons + \subsubsection*{Time and Date} + \TimeAndDate + \subsection*{Hide/Highlight Parts of the Article} + \HideHighlightArticle + \subsection*{MIME operations from the Article-Buffer (reading)} + \MIMEArticleMode +% +% +\section*{Server Mode} +\ServerMode + \subsection*{Unplugged-Server} + \ServerUnplugged +% +% +\section*{Browse Server Mode} +\BrowseServer + +%\pagebreak +\vspace*{\fill} +\Copyright + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: + +% arch-tag: be438b0e-6832-4afb-8c56-5f84743e5cd1 diff --git a/texi/gnus.texi b/texi/gnus.texi index ec30aa0..150bd2e 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -5,15 +5,33 @@ @syncodeindex fn cp @syncodeindex vr cp @syncodeindex pg cp -@dircategory Emacs -@direntry -* Gnus: (gnus). The newsreader Gnus. -@end direntry + @documentencoding ISO-8859-1 -@iftex -@finalout -@end iftex -@setchapternewpage odd + +@copying +Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU +Manual'', and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License'' in the Emacs manual. + +(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify +this GNU Manual, like GNU software. Copies published by the Free +Software Foundation raise funds for GNU development.'' + +This document is part of a collection distributed under the GNU Free +Documentation License. If you want to distribute this document +separately from the collection, you can do so by adding a copy of the +license to the document, as described in section 6 of the license. +@end quotation +@end copying @iftex @iflatex @@ -34,7 +52,7 @@ \makeindex \begin{document} -\newcommand{\gnusversionname}{Gnus v5.10.6} +\newcommand{\gnusversionname}{No Gnus v0.3} \newcommand{\gnuschaptername}{} \newcommand{\gnussectionname}{} @@ -278,6 +296,7 @@ @iftex @iflatex + \begin{titlepage} { @@ -301,91 +320,35 @@ \thispagestyle{empty} -Copyright \copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004 -Free Software Foundation, Inc. - - -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or -any later version published by the Free Software Foundation; with no -Invariant Sections, with the Front-Cover texts being ``A GNU -Manual'', and with the Back-Cover Texts as in (a) below. A copy of the -license is included in the section entitled ``GNU Free Documentation -License'' in the Emacs manual. - -(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify -this GNU Manual, like GNU software. Copies published by the Free -Software Foundation raise funds for GNU development.'' - -This document is part of a collection distributed under the GNU Free -Documentation License. If you want to distribute this document -separately from the collection, you can do so by adding a copy of the -license to the document, as described in section 6 of the license. +@c @insertcopying \newpage \end{titlepage} @end iflatex @end iftex @ifnottex +@insertcopying +@end ifnottex -This file documents Gnus, the GNU Emacs newsreader. - -Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 - Free Software Foundation, Inc. - -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or -any later version published by the Free Software Foundation; with the -Invariant Sections being none, with the Front-Cover texts being ``A GNU -Manual'', and with the Back-Cover Texts as in (a) below. A copy of the -license is included in the section entitled ``GNU Free Documentation -License'' in the Emacs manual. - -(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify -this GNU Manual, like GNU software. Copies published by the Free -Software Foundation raise funds for GNU development.'' +@dircategory Emacs +@direntry +* Gnus: (gnus). The newsreader Gnus. +@end direntry +@iftex +@finalout +@end iftex +@setchapternewpage odd -This document is part of a collection distributed under the GNU Free -Documentation License. If you want to distribute this document -separately from the collection, you can do so by adding a copy of the -license to the document, as described in section 6 of the license. -@end ifnottex -@tex @titlepage @title Gnus Manual @author by Lars Magne Ingebrigtsen @page - @vskip 0pt plus 1filll -Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004 - Free Software Foundation, Inc. - -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or -any later version published by the Free Software Foundation; with no -Invariant Sections, with the Front-Cover texts being ``A GNU -Manual'', and with the Back-Cover Texts as in (a) below. A copy of the -license is included in the section entitled ``GNU Free Documentation -License'' in the Emacs manual. - -(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify -this GNU Manual, like GNU software. Copies published by the Free -Software Foundation raise funds for GNU development.'' - -This document is part of a collection distributed under the GNU Free -Documentation License. If you want to distribute this document -separately from the collection, you can do so by adding a copy of the -license to the document, as described in section 6 of the license. - +@insertcopying @end titlepage -@page - -@end tex @node Top @@ -398,7 +361,7 @@ can be gotten by any nefarious means you can think of---@acronym{NNTP}, local spool or your mbox file. All at the same time, if you want to push your luck. -This manual corresponds to Gnus v5.10.6. +This manual corresponds to No Gnus v0.3. @end ifinfo @@ -430,26 +393,26 @@ the program. @end iftex @menu -* Starting Up:: Finding news can be a pain. -* Group Buffer:: Selecting, subscribing and killing groups. -* Summary Buffer:: Reading, saving and posting articles. -* Article Buffer:: Displaying and handling articles. -* Composing Messages:: Information on sending mail and news. -* Select Methods:: Gnus reads all messages from various select methods. -* Scoring:: Assigning values to articles. -* Various:: General purpose settings. -* The End:: Farewell and goodbye. -* Appendices:: Terminology, Emacs intro, @acronym{FAQ}, History, Internals. -* Index:: Variable, function and concept index. -* Key Index:: Key Index. +* Starting Up:: Finding news can be a pain. +* Group Buffer:: Selecting, subscribing and killing groups. +* Summary Buffer:: Reading, saving and posting articles. +* Article Buffer:: Displaying and handling articles. +* Composing Messages:: Information on sending mail and news. +* Select Methods:: Gnus reads all messages from various select methods. +* Scoring:: Assigning values to articles. +* Various:: General purpose settings. +* The End:: Farewell and goodbye. +* Appendices:: Terminology, Emacs intro, @acronym{FAQ}, History, Internals. +* Index:: Variable, function and concept index. +* Key Index:: Key Index. Other related manuals -* Message:(message). Composing messages. -* Emacs-MIME:(emacs-mime). Composing messages; @acronym{MIME}-specific parts. -* Sieve:(sieve). Managing Sieve scripts in Emacs. -* PGG:(pgg). @acronym{PGP/MIME} with Gnus. -* SASL:(sasl). @acronym{SASL} authentication in Emacs. +* Message:(message). Composing messages. +* Emacs-MIME:(emacs-mime). Composing messages; @acronym{MIME}-specific parts. +* Sieve:(sieve). Managing Sieve scripts in Emacs. +* PGG:(pgg). @acronym{PGP/MIME} with Gnus. +* SASL:(sasl). @acronym{SASL} authentication in Emacs. @detailmenu --- The Detailed Node Listing --- @@ -575,12 +538,9 @@ Marking Articles * Unread Articles:: Marks for unread articles. * Read Articles:: Marks for read articles. * Other Marks:: Marks that do not affect readedness. - -Marking Articles - -* Setting Marks:: How to set and remove marks. -* Generic Marking Commands:: How to customize the marking. -* Setting Process Marks:: How to mark articles for later processing. +* Setting Marks:: How to set and remove marks. +* Generic Marking Commands:: How to customize the marking. +* Setting Process Marks:: How to mark articles for later processing. Threading @@ -686,6 +646,7 @@ Getting News * Direct Functions:: Connecting directly to the server. * Indirect Functions:: Connecting indirectly to the server. * Common Variables:: Understood by several connection functions. +* NNTP marks:: Storing marks for @acronym{NNTP} servers. Getting Mail @@ -878,7 +839,7 @@ Filtering Spam Using The Spam ELisp Package * Blackholes:: * Regular Expressions Header Matching:: * Bogofilter:: -* SpamAssassin backend:: +* SpamAssassin back end:: * ifile spam filtering:: * spam-stat spam filtering:: * SpamOracle:: @@ -921,7 +882,7 @@ New Features * 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 @@ -988,17 +949,16 @@ If you puzzle at any terms used in this manual, please refer to the terminology section (@pxref{Terminology}). @menu -* Finding the News:: Choosing a method for getting news. -* The First Time:: What does Gnus do the first time you start it? -* The Server is Down:: How can I read my mail then? -* Slave Gnusae:: You can have more than one Gnus active at a time. -* Fetching a Group:: Starting Gnus just to read a group. -* New Groups:: What is Gnus supposed to do with new groups? -* Changing Servers:: You may want to move from one server to another. -* Startup Files:: Those pesky startup files---@file{.newsrc}. -* Auto Save:: Recovering from a crash. -* The Active File:: Reading the active file over a slow line Takes Time. -* Startup Variables:: Other variables you might change. +* Finding the News:: Choosing a method for getting news. +* The First Time:: What does Gnus do the first time you start it? +* The Server is Down:: How can I read my mail then? +* Slave Gnusae:: You can have more than one Gnus active at a time. +* New Groups:: What is Gnus supposed to do with new groups? +* Changing Servers:: You may want to move from one server to another. +* Startup Files:: Those pesky startup files---@file{.newsrc}. +* Auto Save:: Recovering from a crash. +* The Active File:: Reading the active file over a slow line Takes Time. +* Startup Variables:: Other variables you might change. @end menu @@ -1029,7 +989,8 @@ If you want to read directly from the local spool, say: If you can use a local spool, you probably should, as it will almost certainly be much faster. But do not use the local spool if your -server is running Leafnode; in this case, use @code{(nntp "localhost")}. +server is running Leafnode (which is a simple, standalone private news +server); in this case, use @code{(nntp "localhost")}. @vindex gnus-nntpserver-file @cindex NNTPSERVER @@ -1083,13 +1044,18 @@ you would typically set this variable to (setq gnus-secondary-select-methods '((nnmbox ""))) @end lisp +Note: the @acronym{NNTP} back end stores marks in marks files +(@pxref{NNTP marks}). This feature makes it easy to share marks between +several Gnus installations, but may slow down things a bit when fetching +new articles. @xref{NNTP marks}, for more information. + @node The First Time @section The First Time @cindex first time usage -If no startup files exist, Gnus will try to determine what groups should -be subscribed by default. +If no startup files exist (@pxref{Startup Files}), Gnus will try to +determine what groups should be subscribed by default. @vindex gnus-default-subscribed-newsgroups If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus @@ -1176,16 +1142,6 @@ file. If you answer ``yes'', the unsaved changes to the master will be incorporated into the slave. If you answer ``no'', the slave may see some messages as unread that have been read in the master. -@node Fetching a Group -@section Fetching a Group -@cindex fetching a group - -@findex gnus-fetch-group -It is sometimes convenient to be able to just say ``I want to read this -group and I don't care whether Gnus has been started or not''. This is -perhaps more useful for people who write code than for users, but the -command @code{gnus-fetch-group} provides this functionality in any case. -It takes the group name as a parameter. @node New Groups @@ -1437,8 +1393,10 @@ cache for all groups). @cindex .newsrc.el @cindex .newsrc.eld -Now, you all know about the @file{.newsrc} file. All subscription -information is traditionally stored in this file. +Most common Unix news readers use a shared startup file called +@file{.newsrc}. This file contains all the information about what +groups are subscribed, and which articles in these groups have been +read. Things got a bit more complicated with @sc{gnus}. In addition to keeping the @file{.newsrc} file updated, it also used a file called @@ -1463,8 +1421,10 @@ the file and save some space, as well as exiting from Gnus faster. However, this will make it impossible to use other newsreaders than Gnus. But hey, who would want to, right? Similarly, setting @code{gnus-read-newsrc-file} to @code{nil} makes Gnus ignore the -@file{.newsrc} file and any @file{.newsrc-SERVER} files, which is -convenient if you have a tendency to use Netscape once in a while. +@file{.newsrc} file and any @file{.newsrc-SERVER} files, which can be +convenient if you use a different news reader occasionally, and you +want to read a different subset of the available groups with that +news reader. @vindex gnus-save-killed-list If @code{gnus-save-killed-list} (default @code{t}) is @code{nil}, Gnus @@ -3004,11 +2964,25 @@ translating the group parameter into a Sieve script (@pxref{Sieve Commands}) the following Sieve code is generated: @example -if address \"sender\" \"sieve-admin@@extundo.com\" @{ - fileinto \"INBOX.list.sieve\"; +if address "sender" "sieve-admin@@extundo.com" @{ + fileinto "INBOX.list.sieve"; +@} +@end example + +To generate tests for multiple email-addresses use a group parameter +like @code{(sieve address "sender" ("name@@one.org" else@@two.org"))}. +When generating a sieve script (@pxref{Sieve Commands}) Sieve code +like the following is generated: + +@example +if address "sender" ["name@@one.org", "else@@two.org"] @{ + fileinto "INBOX.list.sieve"; @} @end example +See @pxref{Sieve Commands} for commands and variables that might be of +interest in relation to the sieve parameter. + The Sieve language is described in RFC 3028. @xref{Top, Emacs Sieve, Top, sieve, Emacs Sieve}. @@ -3053,11 +3027,23 @@ tag can be removed from the article subjects in the summary buffer for the group by putting @code{(gnus-list-identifiers "DOCBOOK-APPS:")} into the group parameters for the group. -This can also be used as a group-specific hook function, if you'd like. -If you want to hear a beep when you enter a group, you could put -something like @code{(dummy-variable (ding))} in the parameters of that -group. @code{dummy-variable} will be set to the result of the -@code{(ding)} form, but who cares? +This can also be used as a group-specific hook function. If you want to +hear a beep when you enter a group, you could put something like +@code{(dummy-variable (ding))} in the parameters of that group. +@code{dummy-variable} will be set to the (meaningless) result of the +@code{(ding)} form. + +Alternatively, since the VARIABLE becomes local to the group, this +pattern can be used to temporarily change a hook. For example, if the +following is added to a group parameter + +@lisp +(gnus-summary-prepared-hook + '(lambda nil (local-set-key "d" (local-key-binding "n")))) +@end lisp + +when the group is entered, the 'd' key will not mark the article as +expired. @end table @@ -3808,7 +3794,7 @@ Go to the next topic (@code{gnus-topic-goto-next-topic}). @item T M-p @kindex T M-p (Topic) @findex gnus-topic-goto-previous-topic -Go to the next topic (@code{gnus-topic-goto-previous-topic}). +Go to the previous topic (@code{gnus-topic-goto-previous-topic}). @item G p @kindex G p (Topic) @@ -5714,20 +5700,17 @@ neologism ohoy!) of the article. Alphabetic marks generally mean In addition, you also have marks that do not affect readedness. -@menu -* Unread Articles:: Marks for unread articles. -* Read Articles:: Marks for read articles. -* Other Marks:: Marks that do not affect readedness. -@end menu - @ifinfo -There's a plethora of commands for manipulating these marks: +There's a plethora of commands for manipulating these marks. @end ifinfo @menu -* Setting Marks:: How to set and remove marks. -* Generic Marking Commands:: How to customize the marking. -* Setting Process Marks:: How to mark articles for later processing. +* Unread Articles:: Marks for unread articles. +* Read Articles:: Marks for read articles. +* Other Marks:: Marks that do not affect readedness. +* Setting Marks:: How to set and remove marks. +* Generic Marking Commands:: How to customize the marking. +* Setting Process Marks:: How to mark articles for later processing. @end menu @@ -6234,7 +6217,7 @@ Mark all series that have already had some articles marked @item M P a @kindex M P a (Summary) @findex gnus-uu-mark-all -Mark all articles in series order (@code{gnus-uu-mark-series}). +Mark all articles in series order (@code{gnus-uu-mark-all}). @item M P b @kindex M P b (Summary) @@ -6296,6 +6279,13 @@ Limit the summary buffer to articles that match some author (@code{gnus-summary-limit-to-author}). If given a prefix, exclude matching articles. +@item / R +@kindex / R (Summary) +@findex gnus-summary-limit-to-recipient +Limit the summary buffer to articles that match some recipient +(@code{gnus-summary-limit-to-recipient}). If given a prefix, exclude +matching articles. + @item / x @kindex / x (Summary) @findex gnus-summary-limit-to-extra @@ -6993,6 +6983,7 @@ Matching}). @findex gnus-thread-sort-by-score @findex gnus-thread-sort-by-subject @findex gnus-thread-sort-by-author +@c @findex gnus-thread-sort-by-recipient @findex gnus-thread-sort-by-number @findex gnus-thread-sort-by-random @vindex gnus-thread-sort-functions @@ -8135,6 +8126,13 @@ Regexp matching the end of an attribution line. Face used for attribution lines. It is merged with the face for the cited text belonging to the attribution. +@item gnus-cite-ignore-quoted-from +@vindex gnus-cite-ignore-quoted-from +If non-@code{nil}, no citation highlighting will be performed on lines +beginning with @samp{>From }. Those lines may have been quoted by MTAs +in order not to mix up with the envelope From line. The default value +is @code{t}. + @end table @@ -8457,6 +8455,16 @@ is rumored to have employed this form of, uh, somewhat weak encryption. @findex gnus-summary-morse-message Morse decode the article buffer (@code{gnus-summary-morse-message}). +@item W i +@kindex W i (Summary) +@findex gnus-summary-idna-message +Decode IDNA encoded domain names in the current articles. IDNA +encoded domain names looks like @samp{xn--bar}. If a string remain +unencoded after running invoking this, it is likely an invalid IDNA +string (@samp{xn--bar} is invalid). You must have GNU Libidn +(@url{http://www.gnu.org/software/libidn/}) installed for this command +to work. + @item W t @item t @kindex W t (Summary) @@ -9383,6 +9391,27 @@ Here's an example function the does the latter: @item gnus-mime-multipart-functions Alist of @acronym{MIME} multipart types and functions to handle them. +@vindex gnus-mime-display-multipart-alternative-as-mixed +@item gnus-mime-display-multipart-alternative-as-mixed +Display "multipart/alternative" parts as "multipart/mixed". + +@vindex gnus-mime-display-multipart-related-as-mixed +@item gnus-mime-display-multipart-related-as-mixed +Display "multipart/related" parts as "multipart/mixed". + +If displaying "text/html" is discouraged, see +@code{mm-discouraged-alternatives} in @ref{Display Customization, +Display Customization, , emacs-mime, Emacs-Mime Manual}. Images or +other material inside a "multipart/related" part might be overlooked +when this variable is @code{nil}. + +@vindex gnus-mime-display-multipart-as-mixed +@item gnus-mime-display-multipart-as-mixed +Display "multipart" parts as "multipart/mixed". If @code{t}, it +overrides @code{nil} values of +@code{gnus-mime-display-multipart-alternative-as-mixed} and +@code{gnus-mime-display-multipart-related-as-mixed}. + @vindex mm-file-name-rewrite-functions @item mm-file-name-rewrite-functions List of functions used for rewriting file names of @acronym{MIME} parts. @@ -9551,6 +9580,11 @@ Sort by article number (@code{gnus-summary-sort-by-number}). @findex gnus-summary-sort-by-author Sort by author (@code{gnus-summary-sort-by-author}). +@item C-c C-s C-t +@kindex C-c C-s C-t (Summary) +@findex gnus-summary-sort-by-recipient +Sort by recipient (@code{gnus-summary-sort-by-recipient}). + @item C-c C-s C-s @kindex C-c C-s C-s (Summary) @findex gnus-summary-sort-by-subject @@ -10983,7 +11017,10 @@ information about the removed @acronym{MIME} object @item c (Article) @kindex c (Article) Copy the @acronym{MIME} object to a fresh buffer and display this buffer -(@code{gnus-mime-copy-part}). Compressed files like @file{.gz} and +(@code{gnus-mime-copy-part}). If given a prefix, copy the raw contents +without decoding. If given a numerical prefix, you can do semi-manual +charset stuff (see @code{gnus-summary-show-article-charset-alist} in +@ref{Paging the Article}). Compressed files like @file{.gz} and @file{.bz2} are automatically decompressed if @code{auto-compression-mode} is enabled (@pxref{Compressed Files,, Accessing Compressed Files, emacs, The Emacs Editor}). @@ -11003,7 +11040,10 @@ Insert the contents of the @acronym{MIME} object into the buffer the raw contents without decoding. If given a numerical prefix, you can do semi-manual charset stuff (see @code{gnus-summary-show-article-charset-alist} in @ref{Paging the -Article}). +Article}). Compressed files like @file{.gz} and @file{.bz2} are +automatically decompressed depending on @code{jka-compr} regardless of +@code{auto-compression-mode} (@pxref{Compressed Files,, Accessing +Compressed Files, emacs, The Emacs Editor}). @findex gnus-mime-view-part-internally @item E (Article) @@ -11397,7 +11437,8 @@ This is the delimiter mentioned above. By default, it is @samp{^L} @item gnus-use-idna This variable controls whether Gnus performs IDNA decoding of internationalized domain names inside @samp{From}, @samp{To} and -@samp{Cc} headers. This requires +@samp{Cc} headers. @xref{IDNA, ,IDNA,message, The Message Manual}, +for how to compose such messages. This requires @uref{http://www.gnu.org/software/libidn/, GNU Libidn}, and this variable is only enabled if you have installed it. @@ -11867,8 +11908,13 @@ any case, if this returns a non-@code{nil} value, then the style is said to @dfn{match}. Each style may contain an arbitrary amount of @dfn{attributes}. Each -attribute consists of a @code{(@var{name} @var{value})} pair. The -attribute name can be one of: +attribute consists of a @code{(@var{name} @var{value})} pair. In +addition, you can also use the @code{(@var{name} :file @var{value})} +form or the @code{(@var{name} :value @var{value})} form. Where +@code{:file} signifies @var{value} represents a file name and its +contents should be used as the attribute value, @code{:value} signifies +@var{value} does not represent a file name explicitly. The attribute +name can be one of: @itemize @bullet @item @code{signature} @@ -12808,6 +12854,7 @@ this to, say, 1. * Direct Functions:: Connecting directly to the server. * Indirect Functions:: Connecting indirectly to the server. * Common Variables:: Understood by several connection functions. +* NNTP marks:: Storing marks for @acronym{NNTP} servers. @end menu @@ -13057,6 +13104,52 @@ is @samp{("-8")}. @end table +@node NNTP marks +@subsubsection NNTP marks +@cindex storing NNTP marks + +Gnus stores marks (@pxref{Marking Articles}) for @acronym{NNTP} +servers in marks files. A marks file records what marks you have set +in a group and each file is specific to the corresponding server. +Marks files are stored in @file{~/News/marks} +(@code{nntp-marks-directory}) under a classic hierarchy resembling +that of a news server, for example marks for the group +@samp{gmane.discuss} on the news.gmane.org server will be stored in +the file @file{~/News/marks/news.gmane.org/gmane/discuss/.marks}. + +Marks files are useful because you can copy the @file{~/News/marks} +directory (using rsync, scp or whatever) to another Gnus installation, +and it will realize what articles you have read and marked. The data +in @file{~/News/marks} has priority over the same data in +@file{~/.newsrc.eld}. + +Note that marks files are very much server-specific: Gnus remembers +the article numbers so if you don't use the same servers on both +installations things are most likely to break (most @acronym{NNTP} +servers do not use the same article numbers as any other server). +However, if you use servers A, B, C on one installation and servers A, +D, E on the other, you can sync the marks files for A and then you'll +get synchronization for that server between the two installations. + +Using @acronym{NNTP} marks can possibly incur a performance penalty so +if Gnus feels sluggish, try setting the @code{nntp-marks-is-evil} +variable to @code{t}. Marks will then be stored in @file{~/.newsrc.eld}. + +Related variables: + +@table @code + +@item nntp-marks-is-evil +@vindex nntp-marks-is-evil +If non-@code{nil}, this back end will ignore any marks files. The +default is @code{nil}. + +@item nntp-marks-directory +@vindex nntp-marks-directory +The directory where marks for nntp groups will be stored. + +@end table + @node News Spool @subsection News Spool @@ -13290,17 +13383,25 @@ insert sub-expressions from the matched text. For instance: ("list.\\1" "From:.* \\(.*\\)-list@@majordomo.com") @end lisp +@noindent +In that case, @code{nnmail-split-lowercase-expanded} controls whether +the inserted text should be made lowercase. @xref{Fancy Mail Splitting}. + The second element can also be a function. In that case, it will be called narrowed to the headers with the first element of the rule as the argument. It should return a non-@code{nil} value if it thinks that the mail belongs in that group. +@cindex @samp{bogus} group The last of these groups should always be a general one, and the regular -expression should @emph{always} be @samp{*} so that it matches any mails +expression should @emph{always} be @samp{""} so that it matches any mails that haven't been matched by any of the other regexps. (These rules are -processed from the beginning of the alist toward the end. The first -rule to make a match will ``win'', unless you have crossposting enabled. -In that case, all matching rules will ``win''.) +processed from the beginning of the alist toward the end. The first rule +to make a match will ``win'', unless you have crossposting enabled. In +that case, all matching rules will ``win''.) If no rule matched, the mail +will end up in the @samp{bogus} group. When new groups are created by +splitting mail, you may want to run @code{gnus-group-find-new-groups} to +see the new groups. This also applies to the @samp{bogus} group. If you like to tinker with this yourself, you can set this variable to a function of your choice. This function will be called without any @@ -13317,7 +13418,7 @@ some add @code{X-Gnus-Group} headers; most rename the Unix mbox The mail back ends all support cross-posting. If several regexps match, the mail will be ``cross-posted'' to all those groups. @code{nnmail-crosspost} says whether to use this mechanism or not. Note -that no articles are crossposted to the general (@samp{*}) group. +that no articles are crossposted to the general (@samp{""}) group. @vindex nnmail-crosspost-link-function @cindex crosspost @@ -13587,8 +13688,16 @@ and says what authentication scheme to use. The default is @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. +@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: @@ -13866,10 +13975,10 @@ If non-@code{nil}, ignore errors when reading mail from a mail source. @item mail-source-directory @vindex mail-source-directory -Directory where files (if any) will be stored. The default is -@file{~/Mail/}. At present, the only thing this is used for is to say -where the incoming files will be stored if the previous variable is -@code{nil}. +Directory where incoming mail source files (if any) will be stored. The +default is @file{~/Mail/}. At present, the only thing this is used for +is to say where the incoming files will be stored if the variable +@code{mail-source-delete-incoming} is @code{nil} or a number. @item mail-source-incoming-file-prefix @vindex mail-source-incoming-file-prefix @@ -14043,7 +14152,7 @@ Let's look at an example value of this variable first: ;; @r{the bugs- list, but allow cross-posting when the} ;; @r{message was really cross-posted.} (any "bugs-mypackage@@somewhere" "mypkg.bugs") - (any "mypackage@@somewhere\" - "bugs-mypackage" "mypkg.list") + (any "mypackage@@somewhere" - "bugs-mypackage" "mypkg.list") ;; @r{People@dots{}} (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen")) ;; @r{Unmatched mail goes to the catch all group.} @@ -14104,7 +14213,7 @@ body of the messages: The buffer is narrowed to the message in question when @var{function} is run. That's why @code{(widen)} needs to be called after @code{save-excursion} and @code{save-restriction} in the example -above. Also note that with the nnimap backend, message bodies will +above. Also note that with the nnimap back end, message bodies will not be downloaded by default. You need to set @code{nnimap-split-download-body} to @code{t} to do that (@pxref{Splitting in IMAP}). @@ -14164,6 +14273,14 @@ matched string will be substituted. Similarly, the elements @samp{\\1} up to @samp{\\9} will be substituted with the text matched by the groupings 1 through 9. +@vindex nnmail-split-lowercase-expanded +Where @code{nnmail-split-lowercase-expanded} controls whether the +lowercase of the matched string should be used for the substitution. +Setting it as non-@code{nil} is useful to avoid the creation of multiple +groups when users send to an address using different case +(i.e. mailing-list@@domain vs Mailing-List@@Domain). The default value +is @code{t}. + @vindex nnmail-split-fancy-match-partial-words @code{nnmail-split-fancy-match-partial-words} controls whether partial words are matched during fancy splitting. @@ -15910,14 +16027,30 @@ changes to a wiki (e.g. @url{http://cliki.net/recent-changes.rdf}). @acronym{RSS} has a quite regular and nice interface, and it's possible to get the information Gnus needs to keep groups updated. +Note: you had better use Emacs which supports the @code{utf-8} coding +system because @acronym{RSS} uses UTF-8 for encoding non-@acronym{ASCII} +text by default. It is also used by default for non-@acronym{ASCII} +group names. + @kindex G R (Summary) -Use @kbd{G R} from the summary buffer to subscribe to a feed---you -will be prompted for the location of the feed. +Use @kbd{G R} from the summary buffer to subscribe to a feed---you will +be prompted for the location, the title and the description of the feed. +The title, which allows any characters, will be used for the group name +and the name of the group data file. The description can be omitted. An easy way to get started with @code{nnrss} is to say something like -the following in the group buffer: @kbd{B nnrss RET y}, then +the following in the group buffer: @kbd{B nnrss RET RET y}, then subscribe to groups. +The @code{nnrss} back end saves the group data file in +@code{nnrss-directory} (see below) for each @code{nnrss} group. File +names containing non-@acronym{ASCII} characters will be encoded by the +coding system specified with the @code{nnmail-pathname-coding-system} +variable. If it is @code{nil}, in Emacs the coding system defaults to +the value of @code{default-file-name-coding-system}. If you are using +XEmacs and want to use non-@acronym{ASCII} group names, you should set +the value for the @code{nnmail-pathname-coding-system} variable properly. + @cindex OPML You can also use the following commands to import and export your subscriptions from a file in @acronym{OPML} format (Outline Processor @@ -15941,6 +16074,13 @@ The following @code{nnrss} variables can be altered: The directory where @code{nnrss} stores its files. The default is @file{~/News/rss/}. +@item nnrss-file-coding-system +@vindex nnrss-file-coding-system +The coding system used when reading and writing the @code{nnrss} groups +data files. The default is the value of +@code{mm-universal-coding-system} (which defaults to @code{emacs-mule} +in Emacs or @code{escape-quoted} in XEmacs). + @item nnrss-use-local @vindex nnrss-use-local @findex nnrss-generate-download-script @@ -16311,7 +16451,17 @@ RFC 2060 for more information on valid strings. A file containing credentials used to log in on servers. The format is (almost) the same as the @code{ftp} @file{~/.netrc} file. See the variable @code{nntp-authinfo-file} for exact syntax; also see -@ref{NNTP}. +@ref{NNTP}. An example of an .authinfo line for an IMAP server, is: + +@example +machine students.uio.no login larsi password geheimnis port imap +@end example + +Note that it should be @code{port imap}, or @code{port 143}, if you +use a @code{nnimap-stream} of @code{tls} or @code{ssl}, even if the +actual port number used is port 993 for secured IMAP. For +convenience, Gnus will accept @code{port imaps} as a synonym of +@code{port imap}. @item nnimap-need-unselect-to-notice-new-mail @vindex nnimap-need-unselect-to-notice-new-mail @@ -18333,8 +18483,8 @@ placeholders if you care (See @code{gnus-auto-goto-ignores}). While it may be obvious to all, the only headers and articles available while unplugged are those headers and articles that were fetched into the Agent while previously plugged. To put it another -way, "If you forget to fetch something while plugged, you might have a -less than satisfying unplugged session". For this reason, the Agent +way, ``If you forget to fetch something while plugged, you might have a +less than satisfying unplugged session''. For this reason, the Agent adds two visual effects to your summary buffer. These effects display the download status of each article so that you always know which articles will be available when unplugged. @@ -18562,8 +18712,8 @@ ask you to confirm your action (see @vindex gnus-agent Is the agent enabled? The default is @code{t}. When first enabled, the agent will use @code{gnus-agent-auto-agentize-methods} to -automatically mark some backends as agentized. You may change which -backends are agentized using the agent commands in the server buffer. +automatically mark some back ends as agentized. You may change which +back ends are agentized using the agent commands in the server buffer. To enter the server buffer, use the @kbd{^} (@code{gnus-group-enter-server-mode}) command in the group buffer. @@ -18657,7 +18807,7 @@ that most will look for it here, this variable tells the summary buffer how to maneuver around undownloaded (only headers stored in the agent) and unfetched (neither article nor headers stored) articles. -The legal values are @code{nil} (maneuver to any article), +The valid values are @code{nil} (maneuver to any article), @code{undownloaded} (maneuvering while unplugged ignores articles that have not been fetched), @code{always-undownloaded} (maneuvering always ignores articles that have not been fetched), @code{unfetched} @@ -18681,8 +18831,8 @@ prompt you to confirm that you really wish to proceed if you hit If you have never used the Agent before (or more technically, if @file{~/News/agent/lib/servers} does not exist), Gnus will automatically agentize a few servers for you. This variable control -which backends should be auto-agentized. It is typically only useful -to agentize remote backends. The auto-agentizing has the same effect +which back ends should be auto-agentized. It is typically only useful +to agentize remote back ends. The auto-agentizing has the same effect as running @kbd{J a} on the servers (@pxref{Server Agent Commands}). If the file exist, you must manage the servers manually by adding or removing them, this variable is only applicable the first time you @@ -19702,6 +19852,11 @@ The adaptive score entries will be put into a file where the name is the group name with @code{gnus-adaptive-file-suffix} appended. The default is @file{ADAPT}. +@vindex gnus-adaptive-pretty-print +Adaptive score files can get huge and are not meant to be edited by +human hands. If @code{gnus-adaptive-pretty-print} is @code{nil} (the +deafult) those files will not be written in a human readable way. + @vindex gnus-score-exact-adapt-limit When doing adaptive scoring, substring or fuzzy matching would probably give you the best results in most cases. However, if the header one @@ -20368,8 +20523,8 @@ something like: ... @end example -Then that means "score on the from header of the grandparent of the -current article". An indirection is quite fast, but it's better to say: +Then that means ``score on the from header of the grandparent of the +current article''. An indirection is quite fast, but it's better to say: @example (1- @@ -20404,9 +20559,12 @@ Gnus provides a mechanism for decaying scores to help with this problem. When score files are loaded and @code{gnus-decay-scores} is non-@code{nil}, Gnus will run the score files through the decaying mechanism thereby lowering the scores of all non-permanent score rules. -The decay itself if performed by the @code{gnus-decay-score-function} -function, which is @code{gnus-decay-score} by default. Here's the -definition of that function: +If @code{gnus-decay-scores} is a regexp, only score files matching this +regexp are treated. E.g. you may set it to @samp{\\.ADAPT\\'} if only +@emph{adaptive} score files should be decayed. The decay itself if +performed by the @code{gnus-decay-score-function} function, which is +@code{gnus-decay-score} by default. Here's the definition of that +function: @lisp (defun gnus-decay-score (score) @@ -20485,6 +20643,7 @@ four days, Gnus will decay the scores four times, for instance. * Undo:: Some actions can be undone. * Predicate Specifiers:: Specifying predicates. * Moderation:: What to do if you're a moderator. +* Fetching a Group:: Starting Gnus just to read a group. * Image Enhancements:: Modern versions of Emacs/XEmacs can display images. * Fuzzy Matching:: What's the big fuzz? * Thwarting Email Spam:: A how-to on avoiding unsolicited commercial email. @@ -21756,6 +21915,18 @@ To use moderation mode in these two groups, say: @end lisp +@node Fetching a Group +@section Fetching a Group +@cindex fetching a group + +@findex gnus-fetch-group +It is sometimes convenient to be able to just say ``I want to read this +group and I don't care whether Gnus has been started or not''. This is +perhaps more useful for people who write code than for users, but the +command @code{gnus-fetch-group} provides this functionality in any case. +It takes the group name as a parameter. + + @node Image Enhancements @section Image Enhancements @@ -21792,32 +21963,7 @@ readers. @end iftex @c @anchor{X-Face} -Gnus now uses the internal ELisp-based @code{uncompface} program for -decoding an @code{X-Face} header normally in Emacs. While it doesn't -require any other external program, you may feel it is slow if you are -using a slow machine. In such a case, you can modify the following -variables: - -@table @code -@item uncompface-use-external -@vindex uncompface-use-external -Specify which of the internal or the external decoder should be used. -@code{nil} means to use the internal ELisp-based @code{uncompface} -program. @code{t} means to use the external decoder. The default value -is normally @code{undecided} which means to determine it by checking -whether the host machine is slow, being controlled by -@code{uncompface-use-external-threshold} (which see). - -@item uncompface-use-external-threshold -@vindex uncompface-use-external-threshold -A number of seconds to check whether the host machine is slow. If the -host takes time larger than this value for decoding an @code{X-Face} -using the internal ELisp-based @code{uncompface} program, it will be -changed to using the external decoder. The default is 0.1 seconds. -@end table - -If the internal decoder is invalidated or if you are using XEmacs, -decoding an @code{X-Face} header either requires an Emacs that has +Decoding an @code{X-Face} header either requires an Emacs that has @samp{compface} support (which most XEmacs versions has), or that you have @samp{compface} installed on your system. If either is true, Gnus will default to displaying @code{X-Face} headers. @@ -22063,6 +22209,11 @@ To enable displaying picons, simply make sure that @code{gnus-picon-databases} points to the directory containing the Picons databases. +@vindex gnus-picon-style +The variable @code{gnus-picon-style} controls how picons are displayed. +If @code{inline}, the textual representation is replaced. If +@code{right}, picons are added right to the textual representation. + The following variables offer control over where things are located. @table @code @@ -22433,7 +22584,7 @@ call the external tools during splitting. Example fancy split method: "spam")))) @end lisp -Note that with the nnimap backend, message bodies will not be +Note that with the nnimap back end, message bodies will not be downloaded by default. You need to set @code{nnimap-split-download-body} to @code{t} to do that (@pxref{Splitting in IMAP}). @@ -22456,10 +22607,10 @@ spam. And here is the nifty function: @cindex hashcash A novel technique to fight spam is to require senders to do something -costly for each message they send. This has the obvious drawback that -you cannot rely on everyone in the world using this technique, -since it is not part of the Internet standards, but it may be useful -in smaller communities. +costly and demonstrably unique for each message they send. This has +the obvious drawback that you cannot rely on everyone in the world +using this technique, since it is not part of the Internet standards, +but it may be useful in smaller communities. While the tools in the previous section work well in practice, they work only because the tools are constantly maintained and updated as @@ -22475,24 +22626,20 @@ one of them separately. @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 call hashcash for each message you send, say something -like: +If you wish to generate hashcash for each message you send, you can +customize @code{message-generate-hashcash} (@pxref{Mail Headers, ,Mail +Headers,message, The Message Manual}), as in: @lisp -(require 'hashcash) -(add-hook 'message-send-hook 'mail-add-payment) +(setq message-generate-hashcash t) @end lisp -The @file{hashcash.el} library can be found in the Gnus development -contrib directory or at -@uref{http://users.actrix.gen.nz/mycroft/hashcash.el}. - You will need to set up some additional variables as well: @table @code @@ -22500,8 +22647,8 @@ You will need to set up some additional variables as well: @item hashcash-default-payment @vindex hashcash-default-payment This variable indicates the default number of bits the hash collision -should consist of. By default this is 0, meaning nothing will be -done. Suggested useful values include 17 to 29. +should consist of. By default this is 20. Suggested useful values +include 17 to 29. @item hashcash-payment-alist @vindex hashcash-payment-alist @@ -22513,30 +22660,41 @@ that is needed. It can also contain @samp{(@var{addr} @var{string} @var{amount})} cells, where the @var{string} is the string to use (normally the email address or newsgroup name is used). -@item hashcash -@vindex hashcash -Where the @code{hashcash} binary is installed. +@item hashcash-path +@vindex hashcash-path +Where the @code{hashcash} binary is installed. This variable should +be automatically set by @code{executable-find}, but if it's @code{nil} +(usually because the @code{hashcash} binary is not in your path) +you'll get a warning when you check hashcash payments and an error +when you generate hashcash payments. @end table -Currently there is no built in functionality in Gnus to verify -hashcash cookies, it is expected that this is performed by your hand -customized mail filtering scripts. Improvements in this area would be -a useful contribution, however. +Gnus can verify hashcash cookies, although this can also be done by +hand customized mail filtering scripts. To verify a hashcash cookie +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} back end to validate hashcash +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 @cindex spam filtering @cindex spam -The idea behind @file{spam.el} is to have a control center for spam detection -and filtering in Gnus. To that end, @file{spam.el} does two things: it +The idea behind @code{spam.el} is to have a control center for spam detection +and filtering in Gnus. To that end, @code{spam.el} does two things: it filters new mail, and it analyzes mail known to be spam or ham. -@dfn{Ham} is the name used throughout @file{spam.el} to indicate +@dfn{Ham} is the name used throughout @code{spam.el} to indicate non-spam messages. -First of all, you @strong{must} run the function -@code{spam-initialize} to autoload @code{spam.el} and to install the +Make sure you read the section on the @code{spam.el} sequence of +events. See @xref{Spam ELisp Package Sequence of Events}. + +@cindex spam-initialize +To use @code{spam.el}, you @strong{must} run the function +@code{spam-initialize} to autoload @file{spam.el} and to install the @code{spam.el} hooks. There is one exception: if you use the @code{spam-use-stat} (@pxref{spam-stat spam filtering}) setting, you should turn it on before @code{spam-initialize}: @@ -22593,6 +22751,7 @@ group. * Spam ELisp Package Sequence of Events:: * Spam ELisp Package Filtering of Incoming Mail:: * Spam ELisp Package Global Variables:: +* Spam ELisp Package Sorting and Score Display in Summary Buffer:: * Spam ELisp Package Configuration Examples:: * Blacklists and Whitelists:: * BBDB Whitelists:: @@ -22601,7 +22760,7 @@ group. * Blackholes:: * Regular Expressions Header Matching:: * Bogofilter:: -* SpamAssassin backend:: +* SpamAssassin back end:: * ifile spam filtering:: * spam-stat spam filtering:: * SpamOracle:: @@ -22613,7 +22772,6 @@ group. @cindex spam filtering @cindex spam filtering sequence of events @cindex spam - You must read this section to understand how @code{spam.el} works. Do not skip, speed-read, or glance through this section. @@ -22621,20 +22779,20 @@ There are two @emph{contact points}, if you will, between @code{spam.el} and the rest of Gnus: checking new mail for spam, and leaving a group. -Getting new mail is done in one of two ways. You can either split -your incoming mail or you can classify new articles as ham or spam -when you enter the group. +Getting new mail in Gnus is done in one of two ways. You can either +split your incoming mail or you can classify new articles as ham or +spam when you enter the group. -Splitting incoming mail is better suited to mail backends such as +Splitting incoming mail is better suited to mail back ends such as @code{nnml} or @code{nnimap} where new mail appears in a single file called a @dfn{Spool File}. See @xref{Spam ELisp Package Filtering of Incoming Mail}. @vindex gnus-spam-autodetect @vindex gnus-spam-autodetect-methods -For backends such as @code{nntp} there is no incoming mail spool, so +For back ends such as @code{nntp} there is no incoming mail spool, so an alternate mechanism must be used. This may also happen for -backends where the server is in charge of splitting incoming mail, and +back ends where the server is in charge of splitting incoming mail, and Gnus does not do further splitting. The @code{spam-autodetect} and @code{spam-autodetect-methods} group parameters (accessible with @kbd{G c} and @kbd{G p} as usual), and the corresponding variables @@ -22642,12 +22800,14 @@ Gnus does not do further splitting. The @code{spam-autodetect} and (accessible with @kbd{M-x customize-variable} as usual) can help. When @code{spam-autodetect} is used (you can turn it on for a -group/topic or wholesale by regex, as needed), it hooks into the -process of entering a group. Thus, entering a group with unseen or -unread articles becomes the substitute for checking incoming mail. -Whether only unseen articles or all unread articles will be processed -is determined by the @code{spam-autodetect-recheck-messages}. When -set to @code{t}, unread messages will be rechecked. +group/topic or wholesale by regular expression matches, as needed), it +hooks into the process of entering a group. Thus, entering a group +with unseen or unread articles becomes the substitute for checking +incoming mail. Whether only unseen articles or all unread articles +will be processed is determined by the +@code{spam-autodetect-recheck-messages}. When set to @code{t}, unread +messages will be rechecked. You should probably stick with the +default of only checking unseen messages. @code{spam-autodetect} grants the user at once more and less control of spam filtering. The user will have more control over each group's @@ -22670,8 +22830,8 @@ articles (depending on the @code{spam-mark-only-unseen-as-spam} variable) will be marked as spam. Thus, mail split into a spam group gets automatically marked as spam when you enter the group. -So, when you exit a group, the @code{spam-processors} are applied, if -any are set, and the processed mail is moved to the +Thus, when you exit a group, the @code{spam-processors} are applied, +if any are set, and the processed mail is moved to the @code{ham-process-destination} or the @code{spam-process-destination} depending on the article's classification. If the @code{ham-process-destination} or the @code{spam-process-destination}, @@ -22691,7 +22851,7 @@ which is what most people want. If the @code{spam-process-destination} is @code{nil}, the spam is marked as expired, which is usually the right thing to do. -If spam can not be moved---because of a read-only backend such as +If spam can not be moved---because of a read-only back end such as @acronym{NNTP}, for example, it will be copied. If a ham mail is found in a ham group, as determined by the @@ -22706,7 +22866,7 @@ no more than once. Thus, ham is detected and processed only when necessary, which is what most people want. More on this in @xref{Spam ELisp Package Configuration Examples}. -If ham can not be moved---because of a read-only backend such as +If ham can not be moved---because of a read-only back end such as @acronym{NNTP}, for example, it will be copied. If all this seems confusing, don't worry. Soon it will be as natural @@ -22719,7 +22879,7 @@ as typing Lisp one-liners on a neural interface@dots{} err, sorry, that's @cindex spam filtering incoming mail @cindex spam -To use the @file{spam.el} facilities for incoming mail filtering, you +To use the @code{spam.el} facilities for incoming mail filtering, you must add the following to your fancy split list @code{nnmail-split-fancy} or @code{nnimap-split-fancy}: @@ -22803,18 +22963,15 @@ is usually not critical, though. The boolean variable @code{nnimap-split-download-body} needs to be set, if you want to split based on the whole message instead of just the headers. By default, the nnimap back end will only retrieve the -message headers. If you use @code{spam-check-bogofilter}, -@code{spam-check-ifile}, or @code{spam-check-stat} (the splitters that -can benefit from the full message body), you should set this variable. -It is not set by default because it will slow @acronym{IMAP} down, and -that is not an appropriate decision to make on behalf of the user. +message headers. If you use a @emph{statistical} filter, +e.g. @code{spam-check-bogofilter}, @code{spam-check-ifile}, or +@code{spam-check-stat} (the splitters that can benefit from the full +message body), this variable will be set automatically. It is not set +for non-statistical back ends by default because it will slow +@acronym{IMAP} down. @xref{Splitting in IMAP}. -@emph{TODO: spam.el needs to provide a uniform way of training all the -statistical databases. Some have that functionality built-in, others -don't.} - @node Spam ELisp Package Global Variables @subsubsection Spam ELisp Package Global Variables @cindex spam filtering @@ -22919,7 +23076,7 @@ parameter is not set, ham articles are left in place. If the @code{spam-mark-ham-unread-before-move-from-spam-group} parameter is set, the ham articles are marked as unread before being moved. -If ham can not be moved---because of a read-only backend such as +If ham can not be moved---because of a read-only back end such as @acronym{NNTP}, for example, it will be copied. Note that you can use multiples destinations per group or regular @@ -22956,7 +23113,7 @@ articles are only expired. The group name is fully qualified, meaning that if you see @samp{nntp:servername} before the group name in the group buffer then you need it here as well. -If spam can not be moved---because of a read-only backend such as +If spam can not be moved---because of a read-only back end such as @acronym{NNTP}, for example, it will be copied. Note that you can use multiples destinations per group or regular @@ -22988,6 +23145,55 @@ When autodetecting spam, this variable tells @code{spam.el} whether only unseen articles or all unread articles should be checked for spam. It is recommended that you leave it off. +@node Spam ELisp Package Sorting and Score Display in Summary Buffer +@subsubsection Spam ELisp Package Sorting and Score Display in Summary Buffer +@cindex spam scoring +@cindex spam sorting +@cindex spam score summary buffer +@cindex spam sort summary buffer +@cindex spam + +You can display the spam score of articles in your summary buffer, and +you can sort articles by their spam score. + +First you need to decide which back end you will be using. If you use +the @code{spam-use-spamassassin}, +@code{spam-use-spamassassin-headers}, or @code{spam-use-regex-headers} +back end, the @code{X-Spam-Status} header will be used. If you use +@code{spam-use-bogofilter}, the @code{X-Bogosity} header will be used. +If you use @code{spam-use-crm114}, any header that matches the CRM114 +score format will be used. As long as you set the appropriate back end +variable to t @emph{before} you load @file{spam.el}, you will be +fine. @code{spam.el} will automatically add the right header to the +internal Gnus list of required headers. + +To show the spam score in your summary buffer, add this line to your +@code{gnus.el} file (note @code{spam.el} does not do that by default +so it won't override any existing @code{S} formats you may have). + +@lisp +(defalias 'gnus-user-format-function-S 'spam-user-format-function-S) +@end lisp + +Now just set your summary line format to use @code{%uS}. Here's an +example that formats the spam score in a 5-character field: + +@lisp +(setq gnus-summary-line-format + "%U%R %10&user-date; $%5uS %6k %B %(%4L: %*%-25,25a%) %s \n") +@end lisp + +Finally, to sort by spam status, either do it globally: + +@lisp +(setq + gnus-show-threads nil + gnus-article-sort-functions + '(spam-article-sort-by-spam-status)) +@end lisp + +or per group (@pxref{Sorting the Summary Buffer}). + @node Spam ELisp Package Configuration Examples @subsubsection Spam ELisp Package Configuration Examples @cindex spam filtering @@ -23078,7 +23284,7 @@ From Ted Zlatanov . @end example -@subsubheading Using @file{spam.el} on an IMAP server with a statistical filter on the server +@subsubheading Using @code{spam.el} on an IMAP server with a statistical filter on the server From Reiner Steib . My provider has set up bogofilter (in combination with @acronym{DCC}) on @@ -23132,7 +23338,7 @@ an excellent tool for filtering those unwanted mails for me.) In my ham folders, I just hit @kbd{S x} (@code{gnus-summary-mark-as-spam}) whenever I see an unrecognized spam mail (false negative). On group exit, those messages are moved to -@samp{training.ham}. +@samp{training.spam}. @end itemize @subsubheading Reporting spam articles in Gmane groups with @code{spam-report.el} @@ -23269,6 +23475,12 @@ unless the sender is in the BBDB. Use with care. Only sender addresses in the BBDB will be allowed through; all others will be classified as spammers. +While @code{spam-use-BBDB-exclusive} @emph{can} be used as an alias +for @code{spam-use-BBDB} as far as @code{spam.el} is concerned, it is +@emph{not} a separate back end. If you set +@code{spam-use-BBDB-exclusive} to t, @emph{all} your BBDB splitting +will be exclusive. + @end defvar @defvar gnus-group-ham-exit-processor-BBDB @@ -23337,12 +23549,10 @@ Gmane provides. 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 @@ -23362,7 +23572,7 @@ list is fairly comprehensive, but make sure to let us know if it contains outdated servers. The blackhole check uses the @code{dig.el} package, but you can tell -@file{spam.el} to use @code{dns.el} instead for better performance if +@code{spam.el} to use @code{dns.el} instead for better performance if you set @code{spam-use-dig} to @code{nil}. It is not recommended at this time to set @code{spam-use-dig} to @code{nil} despite the possible performance improvements, because some users may be unable to @@ -23515,8 +23725,8 @@ variables to indicate to spam-split that Bogofilter should either be used, or has already been used on the article. The 0.9.2.1 version of Bogofilter was used to test this functionality. -@node SpamAssassin backend -@subsubsection SpamAssassin backend +@node SpamAssassin back end +@subsubsection SpamAssassin back end @cindex spam filtering @cindex spamassassin, spam filtering @cindex spam @@ -23656,7 +23866,7 @@ that you use @code{'(ham spam-use-stat)}. Everything will work the same way, we promise. @end defvar -This enables @file{spam.el} to cooperate with @file{spam-stat.el}. +This enables @code{spam.el} to cooperate with @file{spam-stat.el}. @file{spam-stat.el} provides an internal (Lisp-only) spam database, which unlike ifile or Bogofilter does not require external programs. A spam and a ham processor, and the @code{spam-use-stat} variable for @@ -23681,11 +23891,11 @@ One possibility is to run SpamOracle as a @code{:prescript} from the @xref{Mail Source Specifiers}, (@pxref{SpamAssassin}). This method has the advantage that the user can see the @emph{X-Spam} headers. -The easiest method is to make @file{spam.el} (@pxref{Filtering Spam +The easiest method is to make @code{spam.el} (@pxref{Filtering Spam Using The Spam ELisp Package}) call SpamOracle. @vindex spam-use-spamoracle -To enable SpamOracle usage by @file{spam.el}, set the variable +To enable SpamOracle usage by @code{spam.el}, set the variable @code{spam-use-spamoracle} to @code{t} and configure the @code{nnmail-split-fancy} or @code{nnimap-split-fancy} as described in the section @xref{Filtering Spam Using The Spam ELisp Package}. In @@ -23728,7 +23938,7 @@ false hits or misses, SpamOracle needs training. SpamOracle learns the characteristics of your spam mails. Using the @emph{add} mode (training mode) one has to feed good (ham) and spam mails to SpamOracle. This can be done by pressing @kbd{|} in the Summary buffer -and pipe the mail to a SpamOracle process or using @file{spam.el}'s +and pipe the mail to a SpamOracle process or using @code{spam.el}'s spam- and ham-processors, which is much more convenient. For a detailed description of spam- and ham-processors, @xref{Filtering Spam Using The Spam ELisp Package}. @@ -23798,45 +24008,22 @@ Code "True if blackbox should be used.") @end lisp -Add -@lisp -(spam-use-blackbox . spam-check-blackbox) -@end lisp -to @code{spam-list-of-checks}. - -Add -@lisp -(gnus-group-ham-exit-processor-blackbox ham spam-use-blackbox) -(gnus-group-spam-exit-processor-blackbox spam spam-use-blackbox) -@end lisp - -to @code{spam-list-of-processors}. - -Add -@lisp -(spam-use-blackbox spam-blackbox-register-routine - nil - spam-blackbox-unregister-routine - nil) -@end lisp +Write @code{spam-check-blackbox} if Blackbox can check incoming mail. -to @code{spam-registration-functions}. Write the register/unregister -routines using the bogofilter register/unregister routines as a -start, or other restister/unregister routines more appropriate to -Blackbox. +Write @code{spam-blackbox-register-routine} and +@code{spam-blackbox-unregister-routine} using the bogofilter +register/unregister routines as a start, or other restister/unregister +routines more appropriate to Blackbox, if Blackbox can +register/unregister spam and ham. @item Functionality -Write the @code{spam-check-blackbox} function. It should return -@samp{nil} or @code{spam-split-group}, observing the other -conventions. See the existing @code{spam-check-*} functions for -examples of what you can do, and stick to the template unless you -fully understand the reasons why you aren't. - -Make sure to add @code{spam-use-blackbox} to -@code{spam-list-of-statistical-checks} if Blackbox is a statistical -mail analyzer that needs the full message body to operate. +The @code{spam-check-blackbox} function should return @samp{nil} or +@code{spam-split-group}, observing the other conventions. See the +existing @code{spam-check-*} functions for examples of what you can +do, and stick to the template unless you fully understand the reasons +why you aren't. @end enumerate @@ -23883,7 +24070,64 @@ Add (variable-item spam-use-blackbox) @end lisp to the @code{spam-autodetect-methods} group parameter in -@code{gnus.el}. +@code{gnus.el} if Blackbox can check incoming mail for spam contents. + +Finally, use the appropriate @code{spam-install-*-backend} function in +@code{spam.el}. Here are the available functions. + + +@enumerate + +@item +@code{spam-install-backend-alias} + +This function will simply install an alias for a back end that does +everything like the original back end. It is currently only used to +make @code{spam-use-BBDB-exclusive} act like @code{spam-use-BBDB}. + +@item +@code{spam-install-nocheck-backend} + +This function installs a back end that has no check function, but can +register/unregister ham or spam. The @code{spam-use-gmane} back end is +such a back end. + +@item +@code{spam-install-checkonly-backend} + +This function will install a back end that can only check incoming mail +for spam contents. It can't register or unregister messages. +@code{spam-use-blackholes} and @code{spam-use-hashcash} are such +back ends. + +@item +@code{spam-install-statistical-checkonly-backend} + +This function installs a statistical back end (one which requires the +full body of a message to check it) that can only check incoming mail +for contents. @code{spam-use-regex-body} is such a filter. + +@item +@code{spam-install-statistical-backend} + +This function install a statistical back end with incoming checks and +registration/unregistration routines. @code{spam-use-bogofilter} is +set up this way. + +@item +@code{spam-install-backend} + +This is the most normal back end installation, where a back end that can +check and register/unregister messages is set up without statistical +abilities. The @code{spam-use-BBDB} is such a back end. + +@item +@code{spam-install-mover-backend} + +Mover back ends are internal to @code{spam.el} and specifically move +articles around when the summary is exited. You will very probably +never install such a back end. +@end enumerate @end enumerate @@ -25040,7 +25284,7 @@ actually are people who are using Gnus. Who'd'a thunk it! * 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 @@ -25760,6 +26004,11 @@ New features in Gnus 5.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}. @@ -26561,6 +26810,12 @@ The act of asking the server for info on a group and computing the number of unread articles is called @dfn{activating the group}. Un-activated groups are listed with @samp{*} in the group buffer. +@item spool +@cindex spool +News servers store their articles locally in one fashion or other. +One old-fashioned storage method is to have just one file per +article. That's called a ``traditional spool''. + @item server @cindex server A machine one can connect to and get news (or mail) from. @@ -26661,7 +26916,7 @@ Gnus has to get from the @acronym{NNTP} server. @item gnus-read-active-file Set this to @code{nil}, which will inhibit Gnus from requesting the -entire active file from the server. This file is often v. large. You +entire active file from the server. This file is often very large. You also have to set @code{gnus-check-new-newsgroups} and @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus doesn't suddenly decide to fetch the active file anyway. @@ -26762,10 +27017,6 @@ Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and @code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the summary buffer faster. -Gnus uses the internal ELisp-based @code{uncompface} program for -decoding an @code{X-Face} header normally in Emacs. If you feel it is -slow, set @code{uncompface-use-external} to @code{t}. @xref{X-Face}. - @page @node Troubleshooting @@ -27379,7 +27630,9 @@ A Gnus group info (@pxref{Group Info}) is handed to the back end for alterations. This comes in handy if the back end really carries all the information (as is the case with virtual and imap groups). This function should destructively alter the info to suit its needs, and -should return a non-@code{nil} value. +should return a non-@code{nil} value (exceptionally, +@code{nntp-request-update-info} always returns @code{nil} not to waste +the network resources). There should be no result data from this function. @@ -28495,3 +28748,7 @@ former). The manual is unambiguous, but it can be confusing. @c mode: texinfo @c coding: iso-8859-1 @c End: + +@ignore + arch-tag: c9fa47e7-78ca-4681-bda9-9fef45d1c819 +@end ignore diff --git a/texi/infohack.el b/texi/infohack.el index 3425b27..e5c326f 100644 --- a/texi/infohack.el +++ b/texi/infohack.el @@ -1,5 +1,5 @@ ;;; infohack.el --- a hack to format info file. -;; Copyright (C) 2001 Free Software Foundation, Inc. +;; Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: info @@ -27,6 +27,39 @@ (require 'texinfmt) +(if (fboundp 'texinfo-copying) + nil + ;; Support @copying and @insertcopying for Emacs 21.3 and lesser and + ;; XEmacs. + (defvar texinfo-copying-text "" + "Text of the copyright notice and copying permissions.") + + (defun texinfo-copying () + "Copy the copyright notice and copying permissions from the Texinfo file, +as indicated by the @copying ... @end copying command; +insert the text with the @insertcopying command." + (let ((beg (progn (beginning-of-line) (point))) + (end (progn (re-search-forward "^@end copying[ \t]*\n") (point)))) + (setq texinfo-copying-text + (buffer-substring-no-properties + (save-excursion (goto-char beg) (forward-line 1) (point)) + (save-excursion (goto-char end) (forward-line -1) (point)))) + (delete-region beg end))) + + (defun texinfo-insertcopying () + "Insert the copyright notice and copying permissions from the Texinfo file, +which are indicated by the @copying ... @end copying command." + (insert (concat "\n" texinfo-copying-text))) + + (defadvice texinfo-format-scan (before expand-@copying-section activate) + "Extract @copying and replace @insertcopying with it." + (goto-char (point-min)) + (when (search-forward "@copying" nil t) + (texinfo-copying)) + (while (search-forward "@insertcopying" nil t) + (delete-region (match-beginning 0) (match-end 0)) + (texinfo-insertcopying)))) + (defun infohack-remove-unsupported () (goto-char (point-min)) (while (re-search-forward "@\\(end \\)?ifnottex" nil t) @@ -85,4 +118,5 @@ Both characters must have the same length of multi-byte form." (infohack (car command-line-args-left)) (setq command-line-args-left nil)) +;;; arch-tag: 9ca2f71f-b280-48b3-9826-8dc052dfbbfe ;;; infohack.el ends here diff --git a/texi/message.texi b/texi/message.texi index ce33954..117a7ea 100644 --- a/texi/message.texi +++ b/texi/message.texi @@ -5,22 +5,13 @@ @synindex fn cp @synindex vr cp @synindex pg cp -@dircategory Emacs -@direntry -* Message: (message). Mail and news composition mode that goes with Gnus. -@end direntry -@iftex -@finalout -@end iftex -@setchapternewpage odd - -@ifnottex - +@copying This file documents Message, the Emacs message composition mode. -Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +@quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no @@ -37,9 +28,17 @@ This document is part of a collection distributed under the GNU Free Documentation License. If you want to distribute this document separately from the collection, you can do so by adding a copy of the license to the document, as described in section 6 of the license. -@end ifnottex +@end quotation +@end copying -@tex +@dircategory Emacs +@direntry +* Message: (message). Mail and news composition mode that goes with Gnus. +@end direntry +@iftex +@finalout +@end iftex +@setchapternewpage odd @titlepage @title Message Manual @@ -48,30 +47,10 @@ license to the document, as described in section 6 of the license. @page @vskip 0pt plus 1filll -Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 - Free Software Foundation, Inc. - -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or -any later version published by the Free Software Foundation; with the -Invariant Sections being none, with the Front-Cover texts being ``A GNU -Manual'', and with the Back-Cover Texts as in (a) below. A copy of the -license is included in the section entitled ``GNU Free Documentation -License'' in the Emacs manual. - -(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify -this GNU Manual, like GNU software. Copies published by the Free -Software Foundation raise funds for GNU development.'' - -This document is part of a collection distributed under the GNU Free -Documentation License. If you want to distribute this document -separately from the collection, you can do so by adding a copy of the -license to the document, as described in section 6 of the license. +@insertcopying @end titlepage @page -@end tex - @node Top @top Message @@ -167,16 +146,15 @@ If you want the replies to go to the @code{Sender} instead of the This function will be called narrowed to the head of the article that is being replied to. -As you can see, this function should return a string if it has an -opinion as to what the To header should be. If it does not, it should -just return @code{nil}, and the normal methods for determining the To -header will be used. +As you can see, this function should return a list. In this case, it +returns @code{((To . "Whom"))} if it has an opinion as to what the To +header should be. If it does not, it should just return @code{nil}, and +the normal methods for determining the To header will be used. -This function can also return a list. In that case, each list element -should be a cons, where the @sc{car} should be the name of a header -(e.g. @code{Cc}) and the @sc{cdr} should be the header value -(e.g. @samp{larsi@@ifi.uio.no}). All these headers will be inserted into -the head of the outgoing mail. +Each list element should be a cons, where the @sc{car} should be the +name of a header (e.g. @code{Cc}) and the @sc{cdr} should be the header +value (e.g. @samp{larsi@@ifi.uio.no}). All these headers will be +inserted into the head of the outgoing mail. @node Wide Reply @@ -245,7 +223,13 @@ only you can cancel your own messages, which is nice. The downside is that if you lose your @file{.emacs} file (which is where Gnus stores the secret cancel lock password (which is generated automatically the first time you use this feature)), you won't be -able to cancel your message. +able to cancel your message. If you want to manage a password yourself, +you can put something like the following in your @file{~/.gnus.el} file: + +@lisp +(setq canlock-password "geheimnis" + canlock-password-for-verify canlock-password) +@end lisp Whether to insert the header or not is controlled by the @code{message-insert-canlock} variable. @@ -330,8 +314,7 @@ and resend the message in the current buffer to that address. @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 @@ -1097,6 +1080,11 @@ The text is killed and replaced with the contents of the variable @code{message-elide-ellipsis}. The default value is to use an ellipsis (@samp{[...]}). +@item C-c M-k +@kindex C-c M-k +@findex message-kill-address +Kill the address under point. + @item C-c C-z @kindex C-c C-x @findex message-kill-to-signature @@ -1417,6 +1405,9 @@ hidden when composing a message. '(not "From" "Subject" "To" "Cc" "Newsgroups")) @end lisp +Headers are hidden using narrowing, you can use @kbd{M-x widen} to +expose them in the buffer. + @item message-header-synonyms @vindex message-header-synonyms A list of lists of header synonyms. E.g., if this list contains a @@ -1447,6 +1438,12 @@ Regexp of headers to be removed before mailing. The default is This string is inserted at the end of the headers in all message buffers that are initialized as mail. +@item message-generate-hashcash +@vindex message-generate-hashcash +Boolean variable that indicate whether @samp{X-Hashcash} headers +should be computed for the message. @xref{Hashcash, ,Hashcash,gnus, +The Gnus Manual}. + @end table @@ -1463,10 +1460,10 @@ buffers that are initialized as mail. @findex smtpmail-send-it @findex feedmail-send-it Function used to send the current buffer as mail. The default is -@code{message-send-mail-with-sendmail}. Other valid values include +@code{message-send-mail-with-sendmail}, or @code{smtpmail-send-it} +according to the system. Other valid values include @code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail}, -@code{message-smtpmail-send-it}, @code{smtpmail-send-it} and -@code{feedmail-send-it}. +@code{message-smtpmail-send-it} and @code{feedmail-send-it}. @item message-mh-deletable-headers @vindex message-mh-deletable-headers @@ -1573,8 +1570,8 @@ This optional header will be computed by Message. @cindex Sun @cindex i-did-not-set--mail-host-address--so-tickle-me This required header will be generated by Message. A unique ID will be -created based on the date, time, user name and system name. For the -domain part, message will look (in this order) at +created based on the date, time, user name (for the local part) and the +domain part. For the domain part, message will look (in this order) at @code{message-user-fqdn}, @code{system-name}, @code{mail-host-address} and @code{message-user-mail-address} (i.e. @code{user-mail-address}) until a probably valid fully qualified domain name (FQDN) was found. @@ -1884,6 +1881,7 @@ follows this line--} by default. @item message-directory @vindex message-directory Directory used by many mailey things. The default is @file{~/Mail/}. +All other mail file variables are derived from @code{message-directory}. @item message-auto-save-directory @vindex message-auto-save-directory @@ -1959,6 +1957,12 @@ Hook run when canceling news articles. @vindex message-mode-syntax-table Syntax table used in message mode buffers. +@item message-cite-articles-with-x-no-archive +@vindex message-cite-articles-with-x-no-archive +If non-@code{nil}, don't strip quoted text from articles that have +@samp{X-No-Archive} set. Even if this variable isn't set, you can +undo the stripping by hitting the @code{undo} keystroke. + @item message-strip-special-text-properties @vindex message-strip-special-text-properties Emacs has a number of special text properties which can break message @@ -1996,7 +2000,6 @@ A function to be called if @var{predicate} returns non-@code{nil}. @end lisp - @end table @@ -2214,3 +2217,7 @@ basis of the new @code{Cc} header, except if this header is @bye @c End: + +@ignore + arch-tag: 16ab76af-a281-4e34-aed6-5624569f7601 +@end ignore diff --git a/texi/pagestyle.sty b/texi/pagestyle.sty index d434821..3c2b264 100644 --- a/texi/pagestyle.sty +++ b/texi/pagestyle.sty @@ -81,3 +81,4 @@ \setcounter{tocdepth}{3} \setcounter{secnumdepth}{3} +% arch-tag: 49bd5922-1cc7-4614-87b7-53f34f669c5c diff --git a/texi/pgg.texi b/texi/pgg.texi index f8909a7..88c9ddd 100644 --- a/texi/pgg.texi +++ b/texi/pgg.texi @@ -4,27 +4,30 @@ @set VERSION 0.1 -@direntry -* PGG: (pgg). Emacs interface to various PGP implementations. -@end direntry - -@settitle PGG @value{VERSION} -@ifinfo +@copying This file describes the PGG. -Copyright (C) 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 2003 Free Software Foundation, Inc. Copyright (C) 2001 Daiki Ueno. +@quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or 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". -@end ifinfo +Texts. A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end quotation +@end copying + +@dircategory Emacs +@direntry +* PGG: (pgg). Emacs interface to various PGP implementations. +@end direntry + +@settitle PGG @value{VERSION} -@tex @titlepage @title PGG @@ -33,19 +36,10 @@ Free Documentation License". @page @vskip 0pt plus 1filll -Copyright @copyright{} 2001 Daiki Ueno. - -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or -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". +@insertcopying @end titlepage @page -@end tex - @node Top @top PGG This manual describes PGG. PGG is an interface library between Emacs @@ -263,11 +257,11 @@ singleton object wrapped with the luna object system. Since PGG was designed for accessing and developing PGP functionality, the architecture had to be designed not just for interoperability but also for extensiblity. In this chapter we explore the architecture -while finding out how to write the PGG backend. +while finding out how to write the PGG back end. @menu * Initializing:: -* Backend methods:: +* Back end methods:: * Getting output:: @end menu @@ -291,12 +285,12 @@ variable @code{pgg-scheme-gpg-instance} and will be reused from now on. @end lisp The name of the function must follow the -regulation---@code{pgg-make-scheme-} follows the backend name. +regulation---@code{pgg-make-scheme-} follows the back end name. -@node Backend methods -@section Backend methods +@node Back end methods +@section Back end methods -In each backend, these methods must be present. The output of these +In each back end, these methods must be present. The output of these methods is stored in special buffers (@ref{Getting output}), so that these methods must tell the status of the execution. @@ -346,7 +340,7 @@ On success, it returns @code{t}, otherwise @code{nil}. @node Getting output @section Getting output -The output of the backend methods (@ref{Backend methods}) is stored in +The output of the back end methods (@ref{Back end methods}) is stored in special buffers, so that these methods must tell the status of the execution. @@ -399,3 +393,7 @@ If non-@code{nil}, don't check the checksum of the packets. @bye @c End: + +@ignore + arch-tag: 0c205838-34b9-41a5-b9d7-49ae57ccac85 +@end ignore diff --git a/texi/pixidx.sty b/texi/pixidx.sty index 13be2e5..1c6a157 100644 --- a/texi/pixidx.sty +++ b/texi/pixidx.sty @@ -227,3 +227,5 @@ \flushbottom \endinput + +% arch-tag: 286974d6-3578-4aa9-b298-f6a03b13f0bd diff --git a/texi/postamble.tex b/texi/postamble.tex index f4f6bf3..685d120 100644 --- a/texi/postamble.tex +++ b/texi/postamble.tex @@ -48,3 +48,5 @@ Graphics by Luis Fernandes. \gnususefonts{} %%% mode: latex %%% TeX-master: t %%% End: + +% arch-tag: 5e771934-0d03-4dbc-898f-10eb429ad992 diff --git a/texi/sasl.texi b/texi/sasl.texi index 8d73326..0c650e1 100644 --- a/texi/sasl.texi +++ b/texi/sasl.texi @@ -57,7 +57,7 @@ applications using different protocols. * Overview:: What Emacs SASL library is. * How to use:: Adding authentication support to your applications. * Data types:: -* Backend drivers:: Writing your own drivers. +* Back end drivers:: Writing your own drivers. * Index:: * Function Index:: * Variable Index:: @@ -72,9 +72,9 @@ adding authentication support to various application protocols. The toplevel interface of this library is inspired by Java @sc{sasl} Application Program Interface. It defines an abstraction over a series -of authentication mechanism drivers (@ref{Backend drivers}). +of authentication mechanism drivers (@ref{Back end drivers}). -Backend drivers are designed to be close as possible to the +Back end drivers are designed to be close as possible to the authentication mechanism. You can access the additional configuration information anywhere from the implementation. @@ -133,7 +133,7 @@ returns apropriate @code{sasl-mechanism} object. Return name of mechanism, a string. @end defun -If you want to write an authentication mechanism driver (@ref{Backend +If you want to write an authentication mechanism driver (@ref{Back end drivers}), use @code{sasl-make-mechanism} and modify @code{sasl-mechanisms} and @code{sasl-mechanism-alist} correctly. @@ -241,8 +241,8 @@ Perform the authentication step. At the first time @var{step} should be set to @code{nil}. @end defun -@node Backend drivers -@chapter Backend drivers +@node Back end drivers +@chapter Back end drivers (Not yet written). @@ -263,3 +263,7 @@ At the first time @var{step} should be set to @code{nil}. @bye @c End: + +@ignore + arch-tag: dc9650be-a953-40bf-bc55-24fe5f19d875 +@end ignore diff --git a/texi/sieve.texi b/texi/sieve.texi index 26077ca..a33300e 100644 --- a/texi/sieve.texi +++ b/texi/sieve.texi @@ -5,21 +5,13 @@ @synindex fn cp @synindex vr cp @synindex pg cp -@dircategory Emacs -@direntry -* Sieve: (sieve). Managing Sieve scripts in Emacs. -@end direntry -@iftex -@finalout -@end iftex -@setchapternewpage odd - -@ifnottex +@copying This file documents the Emacs Sieve package. Copyright (C) 2001 Free Software Foundation, Inc. +@quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no @@ -36,39 +28,27 @@ This document is part of a collection distributed under the GNU Free Documentation License. If you want to distribute this document separately from the collection, you can do so by adding a copy of the license to the document, as described in section 6 of the license. -@end ifnottex +@end quotation +@end copying -@tex +@dircategory Emacs +@direntry +* Sieve: (sieve). Managing Sieve scripts in Emacs. +@end direntry +@iftex +@finalout +@end iftex +@setchapternewpage odd @titlepage @title Emacs Sieve Manual @author by Simon Josefsson @page - @vskip 0pt plus 1filll -Copyright @copyright{} 2001 Free Software Foundation, Inc. - -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or -any later version published by the Free Software Foundation; with the -Invariant Sections being none, with the Front-Cover texts being ``A GNU -Manual'', and with the Back-Cover Texts as in (a) below. A copy of the -license is included in the section entitled ``GNU Free Documentation -License'' in the Emacs manual. - -(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify -this GNU Manual, like GNU software. Copies published by the Free -Software Foundation raise funds for GNU development.'' - -This document is part of a collection distributed under the GNU Free -Documentation License. If you want to distribute this document -separately from the collection, you can do so by adding a copy of the -license to the document, as described in section 6 of the license. +@insertcopying @end titlepage -@page -@end tex @node Top @top Sieve Support for Emacs @@ -378,3 +358,7 @@ A Protocol for Remotely Managing Sieve Scripts @bye @c End: + +@ignore + arch-tag: 6e3ad0af-2eaf-4f35-a081-d40f4a683ec3 +@end ignore diff --git a/texi/splitindex b/texi/splitindex index cfd568c..9e25b63 100755 --- a/texi/splitindex +++ b/texi/splitindex @@ -4,3 +4,5 @@ fun='\{gnus-|\{nn.*-|\{grouplens-' egrep "$match" gnus.idx > gnus.kidx egrep "$fun" gnus.idx > gnus.gidx egrep -v "$match|$fun" gnus.idx > gnus.cidx + +# arch-tag: 2e32a8e5-4eae-46dd-a3d0-90f514ba27d7 diff --git a/texi/texi2latex.el b/texi/texi2latex.el index b07b76d..f404300 100644 --- a/texi/texi2latex.el +++ b/texi/texi2latex.el @@ -64,6 +64,12 @@ (erase-buffer) (insert-buffer-substring cur) (goto-char (point-min)) + (when (search-forward "@copying" nil t) + (latexi-copying)) + (while (search-forward "@insertcopying" nil t) + (delete-region (match-beginning 0) (match-end 0)) + (latexi-insertcopying)) + (goto-char (point-min)) (latexi-strip-line) (latexi-translate-string "@'e" "\\'{e}") (latexi-translate-string "@`a" "\\`{a}") @@ -392,4 +398,25 @@ "\\\\\n")) (insert "\\end{tabular}\n") (widen)))) - + +(defvar latexi-copying-text "" + "Text of the copyright notice and copying permissions.") + +(defun latexi-copying () + "Copy the copyright notice and copying permissions from the Texinfo file, +as indicated by the @copying ... @end copying command; +insert the text with the @insertcopying command." + (let ((beg (progn (beginning-of-line) (point))) + (end (progn (re-search-forward "^@end copying[ \t]*\n") (point)))) + (setq latexi-copying-text + (buffer-substring-no-properties + (save-excursion (goto-char beg) (forward-line 1) (point)) + (save-excursion (goto-char end) (forward-line -1) (point)))) + (delete-region beg end))) + +(defun latexi-insertcopying () + "Insert the copyright notice and copying permissions from the Texinfo file, +which are indicated by the @copying ... @end copying command." + (insert (concat "\n" latexi-copying-text))) + +;;; arch-tag: 31e30f7f-4876-4dd1-ba3a-6f9f7ea0d256 diff --git a/texi/xml2texi.scm b/texi/xml2texi.scm new file mode 100644 index 0000000..b2a6161 --- /dev/null +++ b/texi/xml2texi.scm @@ -0,0 +1,437 @@ +;;; xml2texi.scm --- Convert gnus-faq.xml to gnus-faq.texi +;; Copyright (C) 2005 Free Software Foundation, Inc. + +;; Author: Karl Pflästerer +;; Keywords: tools + +;; This file is not 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., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: +;; + +;;; Code: + +(require (lib "ssax.ss" "ssax") + (lib "sxpath.ss" "ssax") + (lib "sxml-tree-trans.ss" "ssax") + (lib "pregexp.ss") + (lib "list.ss") + (lib "etc.ss") + (rename (lib "1.ss" "srfi") list-index list-index) + (rename (lib "13.ss" "srfi") string-join string-join)) + + +;;; Constants +;; In and out; for convenience if we work from the REPL +(define +infile+ "gnus-faq.xml") +(define +outfile+ "gnus-faq.texi") + +;; These are the names of the sections. These variables hold the names +;; of the sections where numbering starts in the main menu. +;; Where we start numbering in menu +(define +first-numbered-section+ "Installation FAQ") +;; Where we end numbering in menu +(define +last-numbered-section+ "Tuning Gnus") + +;; Which sections not to include; i.e. not to name a node. +(define +ignored-sections+ '("Frequently Asked Questions with Answers")) + +;; Names of menu entries and the corresponding descriptions (used in the +;; main menu). +(define +section-comments-alist+ + '(("Introduction" . "About Gnus and this FAQ.") + ("Installation FAQ" . "Installation of Gnus.") + ("Startup / Group buffer" . "Start up questions and the first buffer Gnus shows you.") + ("Getting Messages" . "Making Gnus read your mail and news.") + ("Reading messages" . "How to efficiently read messages.") + ("Composing messages" . "Composing mails or Usenet postings.") + ("Old messages" . "Importing, archiving, searching and deleting messages.") + ("Gnus in a dial-up environment" . "Reading mail and news while offline.") + ("Getting help" . "When this FAQ isn't enough.") + ("Tuning Gnus" . "How to make Gnus faster.") + ("Glossary" . "Terms used in the FAQ explained."))) + +;; Where to break descriptions in menus +(define +width+ 72) + +;; The boilerplate text we include before the document +(define boilerplate + (lambda (titel) + (format + "\ +@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~%\ +@c Do not modify this file, it was generated from gnus-faq.xml, available from~%\ +@c .~%\ +@c~%\ +@setfilename gnus-faq.info~%\ +@settitle ~A~%\ +@c %**end of header~%\ +@c~%\ +" titel))) + +;; Inserted right before the end of the file +(define +tag-for-gnus-faq-texi+ + (format "\ +~%\ +@ignore~%\ +arch-\ +tag: 64dc5692-edb4-4848-a965-7aa0181acbb8~%\ +@end ignore~%\ +")) + +;;; Little Helpers +;; (a b c) -> (1 2 3) +(define (number-list start inc lst) + (let loop ((lst lst) (lvl start) (acc '())) + (if (null? lst) + (reverse acc) + (loop (cdr lst) (+ inc lvl) (cons lvl acc))))) + +;; Given an alist made of regexps and their replacements (key and value +;; are in a proper list) returns a function which given a string +;; replaces all occurences of the regexps (from left to right). +;; ((re1 repl1) (re2 repl2)) -> str -> str +(define make-reg-replacer + (lambda (defalist) + (let ((allreg (string-join (map car defalist) "|"))) + (lambda (str) + (if (and (string? str) (pregexp-match allreg str)) + (let loop ((lst defalist) (str str)) + (if (null? lst) + str + (loop (cdr lst) (pregexp-replace* (caar lst) str (cadar lst))))) + str))))) + +(define escape-texi + (make-reg-replacer '(("@" "@@") ("{" "@{") ("}" "@}")))) + +(define normalize + (compose escape-texi (make-reg-replacer `((,(format "~%\\s+") ,(format "~%")))))) + +(define normalize-example + (compose escape-texi (make-reg-replacer '(("^\\s+|\\s+$" ""))))) + +(define trim-ws (make-reg-replacer '(("^\\s+|\\s+$" "")))) + +(define filter-sect + (lambda (lst) + (filter (lambda (e) (not (member e +ignored-sections+))) lst))) + +;;;; Para +(define format-para + (lambda (list-of-entries) + (format "~%~A~%" (trim-ws (apply string-append list-of-entries))))) + +;;;; Questions +(define format-q-level + (lambda (level) + (apply format "[~A.~A]" (reverse level)))) + +(define format-q-description + (compose trim-ws (make-reg-replacer `((,(format "~%") " "))))) + +;;;; Building nodes +;; curr-node up-node (list of nodes) (list of node names) -> +;; ((curr-node curr-name) (next next-name) (prev prev-name) up) +(define (find-prev-next-up curr up search-list name-list) + (do ((lst search-list (cdr lst)) + (rlst name-list (cdr rlst)) + (prev up (car lst)) + (prevn up (car rlst))) + ((or (null? lst) (equal? (car lst) curr)) + (values (cons curr (if (pair? rlst) (car rlst) curr)) + (if (and (pair? lst) (pair? (cdr lst))) ;next + (cons (cadr lst) (cadr rlst)) + (cons "" "")) + (cons prev prevn) + up)))) + + +(define (format-node section title up lst-of-nodes lst-of-names) + (if (member title +ignored-sections+) + () + (call-with-values + (lambda () (find-prev-next-up title up lst-of-nodes lst-of-names)) + (lambda (currn prevn nextn up) + (format "~%@node ~A~%~A ~A~%" + (cdr currn) ;; (cdr prevn) (cdr nextn) up + section ;; @subsection etc. + (if (pair? title) + (apply format "~A.~A" (reverse title)) + title)))))) + +;;;; Building menus + +(define format-menu + (lambda (alist-of-entries) + (let ((len (apply max (map (lambda (s) (string-length (car s))) alist-of-entries)))) + (format "~%@menu~%~A@end menu~%" + (apply string-append + (map (lambda (e) + (format "* ~A::~A~A~%" + (car e) ;the entry + (make-string (- len (string-length (car e)) -3) #\ ) + (format-menu-description (cdr e) +width+ (+ len 7)))) + alist-of-entries)))))) + + +(define format-menu-description + (lambda (entry width offset) + (let loop ((lst (pregexp-split "\\s" entry)) (len 0) (acc '())) + (if (null? lst) + (apply string-append (reverse! acc)) + (let ((slen (+ 1 (string-length (car lst))))) ; +1 because of whitespace added later + (if (> (+ slen len) (- width offset)) + (loop (cdr lst) 0 (cons + (format "~%~A ~A" ; start a new line + (make-string offset #\ ) ; the whitespace + (car lst)) + acc)) + (loop (cdr lst) (+ slen len) (cons (format " ~A"(car lst)) acc)))))))) + + +(define format-sub-titles + (lambda (list-of-entries first-number-entry last-number-entry) + (let ((offset (or (list-index (lambda (e) (equal? e first-number-entry)) list-of-entries) 0)) + (end (or (list-index (lambda (e) (equal? e last-number-entry)) list-of-entries) + (length list-of-entries)))) + (map (lambda (entry ind) + (format "FAQ ~A ~A" + (if (<= offset ind end) + (format "~A -" (- ind offset -1)) ;numbered entry + "-") + entry)) + list-of-entries (number-list 0 1 list-of-entries))))) + +;;;; We number some sections first + +;; ntags is an alist => ((tag startcounter increment) +(define (number-nodes tree level ntags) + (if (null? ntags) + tree + (let* ((vals (car ntags)) + (ntag (car vals)) + (start (second vals)) + (inc (third vals)) + (ntags (cdr ntags))) + + (map + (lambda (node sublevel) + (pre-post-order + node + `((,ntag *preorder* + . ,(lambda (tag . entry) + `(,tag ,(cons sublevel level) + ,@(number-nodes entry (cons sublevel level) ntags)))) + (*default* . ,(lambda x x)) + (*text* . ,(lambda (tag s) s))))) + tree (number-list start inc tree))))) + + +;;(transform->numbered faqsxml '(section article qandaset ((qandadiv 1 1) (qandaentry 0 1)))) +(define transform->numbered + (lambda (sxml rules) + (let* ((rules (reverse rules)) + (rule (car rules)) + (ntag (cadr rules)) + (styles (map (lambda (tag) (cons tag (lambda x x))) (list-tail rules 2)))) + (pre-post-order + sxml + `((*default* *preorder* . ,(lambda x x)) + (*TOP* . ,(lambda x x)) + ,@styles + (,ntag *preorder* + . ,(lambda (tag . nodes) + (cons tag (number-nodes nodes '() rule))))))))) + + +;;;; The main transform function + +(define (transform sxml) + (let* ((sxml (transform->numbered + sxml '(section article qandaset ((qandadiv 1 1) (qandaentry 0 1))))) + (qandadivtitles (filter-sect (map second ((sxpath '(// qandadiv title)) sxml)))) + (fqandadivtitles (format-sub-titles qandadivtitles "" "")) + (subtitles (filter-sect (append (map second ((sxpath '(// section title)) sxml)) + qandadivtitles + (map second ((sxpath '(// glossary title)) sxml))))) + (fsubtitles (format-sub-titles subtitles +first-numbered-section+ + +last-numbered-section+)) + (questlevel (map second ((sxpath '(article section qandaset qandadiv qandaentry)) sxml))) + (up1 (cadar ((sxpath '(article articleinfo title)) sxml))) + +;;; ************************************************************ +;;; The Style Sheet +;;; ************************************************************ + (style-sheet + `( +;;; ************************************************************ +;;; First the SXML special markers +;;; ************************************************************ + ;; *TOP* *PI* @ are markers from SXML + (*TOP* . ,(lambda (tag . x) x)) + (*PI* . ,(lambda _ '())) + (@ . ,(lambda _ "")) + + ;; Look for the example rule where we overwrite the *text* rule + ;; so code doesn't get mangled. + (*text* + . ,(lambda (tag string) + (normalize string))) + ;; If nothing else matches + (*default* . ,(lambda x x)) +;;; ************************************************************ +;;; Now to the tags of our FAQ +;;; ************************************************************ + (article . ,(lambda (tag . sects) + (list (boilerplate up1) sects + +tag-for-gnus-faq-texi+))) + + (articleinfo + ((*default* . ,(lambda _ '())) + (title + . ,(lambda (tag titel) + (let ((menucom (map (lambda (entry) + (let ((e (assoc entry +section-comments-alist+))) + (if e (cdr e) ""))) + subtitles))) + (list (format-node '@section titel "" '() '()) + (format-menu (map cons fsubtitles menucom))))))) + . ,(lambda (tag . info) info)) + + ;; Sections + (abstract + . ,(lambda (tag . text) + (cons (format "~%@subheading Abstract~%") text))) + (section + ((title + . ,(lambda (tag titel) + (format-node '@subheading titel up1 subtitles fsubtitles)))) + . ,(lambda (tag . entry) entry)) + + ;; Q&A well it's called FAQ isn't it? + (qandaset . ,(lambda (tag . x) x)) + (qandadiv + ((title + . ,(lambda (tag titel) titel))) + . ,(lambda (tag level titel . entries) + (let ((questions (map cadr entries)) + (nlevel (filter (lambda (lvl) (eq? (car level) (cadr lvl))) questlevel))) + (list* + (format-node '@subsection titel up1 subtitles fsubtitles) + (format-menu (map (lambda (lvl quest) + (cons (format-q-level lvl) + (format-q-description quest))) + nlevel questions)) + entries)))) + (qandaentry + . ,(lambda (tag level question answer) + (let ((nodes + (filter (lambda (lvl) (eq? (cadr lvl) (cadr level))) questlevel)) + (up (list-ref fqandadivtitles (- (cadr level) 1)))) + (list* + (format-node "@subsubheading Question" level up nodes (map format-q-level nodes)) + question answer)))) + (question . ,(lambda (tag quest) quest)) + (answer + . ,(lambda (tag . answ) (list* (format "~%@subsubheading Answer~%") answ))) + + ;; Para + (para . ,(lambda (tag . x) (format-para x))) + (simpara . ,(lambda (tag . x) (cons (format "~%") x))) + + ;; Itemized lists. + ;; We rewrite para here because it plays here the role of an + ;; item marker + (itemizedlist + . ,(lambda (tag lstitem) + (format "~%@itemize @bullet~%~A@end itemize~%" lstitem))) + (listitem + ((para + . ,(lambda (tag item) + (format "~%@item~%~A~%" (trim-ws item))))) + . ,(lambda (tag . x) (string-join x ""))) + + ;; The glossary. + (glossary + ((title . ,(lambda _'()))) + . ,(lambda (tag . terms) + (let ((titel (cadar ((sxpath '(article glossary title)) sxml)))) + (cons (format-node '@subsection titel up1 subtitles fsubtitles) + (list (format "~%@table @dfn~%") + terms + (format "~%@end table~%")))))) + (glossentry . ,(lambda (tag . entry) entry)) + (glossterm + . ,(lambda (tag term) + (format "~%@item ~A" term))) + (glossdef + . ,(lambda (tag def) def)) + + ;; Lisp examples + ;; We rewrite the *text* rule so code stays the way it's writen. + (programlisting + ((*text* + . ,(lambda (tag exampl) + (normalize-example exampl)))) + . ,(lambda (tag . exampl) + (format "~%@example~%~A~%@end example~%@noindent~%" (string-join exampl "")))) + + ;; The link handling + ;; Here we are interested in the attributes, so we rewrite the @ + ;; rule. If we find a value we look if it's an email or http + ;; uri. + (ulink + ((@ + . ,(lambda (at val) val))) + . ,(lambda (tag uri name) + (if (pregexp-match "^http:|^ftp:" uri) + (if (equal? uri name) + (format "@uref{~A}" uri) + (format "@uref{~A, ~A}" uri name)) + (format "@email{~A, ~A}" (substring uri 7) name)))) + (url + . ,(lambda (tag val) val)) + + ;; userinput + (userinput + . ,(lambda (tag val) + (format "@samp{~A}" val))) + ))) + (pre-post-order sxml style-sheet))) + +;;;; We call main with infile and outfile as arguments +(define main + (lambda (in out) + (with-output-to-file out + (lambda () + (call-with-input-file in + (lambda (port) + (SRV:send-reply (transform (ssax:xml->sxml port '())))))) + 'replace))) + +;; Local Variables: +;; coding: iso-8859-1 +;; End: + +;; arch-tag: cdd948f7-def9-4ea1-b5ae-b57c308097d7 +;;; xml2texi.scm ends here diff --git a/texi/xml2texi.sh b/texi/xml2texi.sh new file mode 100644 index 0000000..779de36 --- /dev/null +++ b/texi/xml2texi.sh @@ -0,0 +1,78 @@ +#! /bin/sh +#| +exec mzscheme -mr $0 ${1+"$@"} +|# +;; Copyright (C) 2005 Free Software Foundation, Inc. +;; +;; Author: Karl Pflästerer +;; Keywords: tools +;; +;; This file is not 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., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: +;; +;; Requirements: +;; +;; To run this scheme program you need MzScheme and DrScheme. +;; +;; Some URLs: +;; http://www.plt-scheme.org/software/mzscheme/ +;; http://www.drscheme.org/ +;; http://www.plt-scheme.org/software/ +;; +;; ,----[ http://www.plt-scheme.org/license/ ] +;; | PLT software is distributed under the +;; | GNU Lesser General Public License (LGPL). +;; `---- + +;;; Code: + +(require (lib "cmdline.ss")) +(define +scmfile+ "xml2texi.scm") +(define +in+ "gnus-faq.xml") +(define +out+ "gnus-faq.texi") + +(command-line + "xml2texi" + (current-command-line-arguments) + (once-each + (("-i" "--input") in "Name of XML data file (default gnus-faq.xml)" + (set! +in+ in)) + (("-o" "--output") out "Name of output file (default gnus-faq.texi)" + (set! +out+ out)) + (("-l" "--library") lib "Name of Scheme library to load (default xml2texi.scm)" + (set! +scmfile+ lib))) + (help-labels "The first (or only) remaining argument is used as the name of the Input file" + "The second argument is used as the name of the Output file") + (args infile+outfile + (cond ((= (length infile+outfile) 2) + (set! +in+ (car infile+outfile)) + (set! +out+ (cadr infile+outfile))) + ((= (length infile+outfile) 1) + (set! +in+ (car infile+outfile))) + (else #f)))) + +(load +scmfile+) +(main +in+ +out+) + +;; Local Variables: +;; mode: scheme +;; coding: iso-8859-1 +;; End: + +;; arch-tag: 582279c5-b7bf-44b0-ba09-d243a7d7f6e0 -- 1.7.10.4