summaryrefslogtreecommitdiff
path: root/lisp/gnus
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/gnus')
-rw-r--r--lisp/gnus/ChangeLog542
-rw-r--r--lisp/gnus/ChangeLog.118
-rw-r--r--lisp/gnus/ChangeLog.2302
-rw-r--r--lisp/gnus/auth-source.el2
-rw-r--r--lisp/gnus/deuglify.el4
-rw-r--r--lisp/gnus/gmm-utils.el25
-rw-r--r--lisp/gnus/gnus-agent.el3
-rw-r--r--lisp/gnus/gnus-art.el54
-rw-r--r--lisp/gnus/gnus-async.el2
-rw-r--r--lisp/gnus/gnus-bookmark.el2
-rw-r--r--lisp/gnus/gnus-cite.el24
-rw-r--r--lisp/gnus/gnus-delay.el4
-rw-r--r--lisp/gnus/gnus-dired.el4
-rw-r--r--lisp/gnus/gnus-group.el5
-rw-r--r--lisp/gnus/gnus-int.el30
-rw-r--r--lisp/gnus/gnus-msg.el27
-rw-r--r--lisp/gnus/gnus-registry.el18
-rw-r--r--lisp/gnus/gnus-salt.el54
-rw-r--r--lisp/gnus/gnus-score.el53
-rw-r--r--lisp/gnus/gnus-spec.el17
-rw-r--r--lisp/gnus/gnus-srvr.el11
-rw-r--r--lisp/gnus/gnus-start.el14
-rw-r--r--lisp/gnus/gnus-sum.el70
-rw-r--r--lisp/gnus/gnus-sync.el30
-rw-r--r--lisp/gnus/gnus-util.el63
-rw-r--r--lisp/gnus/gnus.el40
-rw-r--r--lisp/gnus/html2text.el6
-rw-r--r--lisp/gnus/mail-source.el21
-rw-r--r--lisp/gnus/message.el57
-rw-r--r--lisp/gnus/mm-decode.el32
-rw-r--r--lisp/gnus/mml-smime.el92
-rw-r--r--lisp/gnus/mml.el8
-rw-r--r--lisp/gnus/mml1991.el4
-rw-r--r--lisp/gnus/mml2015.el118
-rw-r--r--lisp/gnus/nndir.el3
-rw-r--r--lisp/gnus/nndraft.el18
-rw-r--r--lisp/gnus/nnfolder.el29
-rw-r--r--lisp/gnus/nnimap.el28
-rw-r--r--lisp/gnus/nnir.el628
-rw-r--r--lisp/gnus/nntp.el2
-rw-r--r--lisp/gnus/pop3.el314
-rw-r--r--lisp/gnus/shr.el52
-rw-r--r--lisp/gnus/sieve-mode.el9
-rw-r--r--lisp/gnus/smiley.el5
-rw-r--r--lisp/gnus/spam-stat.el14
-rw-r--r--lisp/gnus/spam.el32
-rw-r--r--lisp/gnus/utf7.el6
47 files changed, 2085 insertions, 811 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 59a935ee829..251e5b1f381 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,6 +1,167 @@
-2013-03-11 Glenn Morris <rgm@gnu.org>
+2013-04-25 Andrew Cohen <cohen@bu.edu>
- * Version 24.3 released.
+ * gnus-msg.el (gnus-inews-insert-gcc): Re-order conditional to work for
+ string values of 'gcc-self. Thanks to Saroj Thirumalai.
+
+2013-04-24 Andrew Cohen <cohen@bu.edu>
+
+ * nnir.el (nnir-close-group): Make sure we are in the right group.
+
+ * gnus-sum.el (gnus-summary-insert-articles): Force updates to the
+ dependency table from all newly retrieved headers.
+
+2013-04-16 David Edmondson <dme@dme.org>
+
+ Support <img src="data:...">.
+
+ * shr.el (shr-image-from-data): New function.
+ (shr-tag-img): Use it.
+
+2013-04-14 Andrew Cohen <cohen@bu.edu>
+
+ * nnir.el (nnir-request-set-mark): Make sure we are in the right
+ group.
+
+2013-04-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-msg.el (gnus-msg-mail): Make it avoid using posting styles
+ corresponding to any existing group (Bug#14166).
+
+2013-04-10 Andrew Cohen <cohen@bu.edu>
+
+ * nnir.el (number-sequence): No longer used.
+ (nnir-request-set-mark): New function.
+ (nnir-request-update-info): Improve marks updating.
+ (nnir-request-scan): Don't duplicate marks updating.
+ (gnus-group-make-nnir-group, nnir-run-imap, nnir-request-create-group):
+ Use 'assq rather than 'assoc. Quote anonymous function.
+ (nnir-request-group, nnir-close-group, gnus-summary-create-nnir-group):
+ Use 'gnus-group-prefixed-p.
+ (gnus-summary-create-nnir-group): Make sure server for method is open.
+
+2013-04-04 Andrew Cohen <cohen@bu.edu>
+
+ * nnir.el (gnus-nnir-group-p): New function.
+ (nnir-possibly-change-group): Use it.
+
+ * gnus-msg.el (gnus-setup-message): Use it.
+
+2013-04-04 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mml.el (mml-minibuffer-read-description): Use `default' insted of
+ `initial-input' for the argument name.
+ Suggested by Stefan Monnier <monnier@iro.umontreal.ca>.
+
+2013-04-03 Kevin Layer <layer@known.net> (tiny change)
+
+ * mml.el (mml-minibuffer-read-description): Allow passing in a prefix
+ (used by MH-E).
+
+2013-04-01 Andrew Cohen <cohen@bu.edu>
+
+ * nnir.el (nnir-request-update-mark): Improve mark updating in original
+ group.
+
+ * gnus-msg.el (nnir-article-number, nnir-article-group): Autoload to
+ fix compilation.
+
+2013-03-31 Andrew Cohen <cohen@bu.edu>
+
+ * nnir.el (nnir-method-default-engines): And another typo.
+
+2013-03-30 Andrew Cohen <cohen@bu.edu>
+
+ * nnir.el (nnir-method-default-engines): Fix typo.
+
+2013-03-29 Andrew Cohen <cohen@bu.edu>
+
+ * nnir.el: Define 'number-sequence for xemacs.
+ (gnus-summary-create-nnir-group): New function to create an nnir group
+ from an nnir summary buffer based on the current query.
+ (nnir-request-create-group): Update to allow nnir group creation based
+ on the current query.
+
+2013-03-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nndraft.el (nndraft-request-expire-articles):
+ Make expiry target always `delete'.
+
+2013-03-27 Andrew Cohen <cohen@bu.edu>
+
+ * gnus-msg.el (gnus-setup-message): When replying from an nnir summary
+ buffer use the posting-style and gcc of the original article group.
+ (gnus-inews-insert-gcc): Don't set gcc-self for virtual groups.
+
+ * nnir.el: Fix byte-compile warning. nnoo-define-skeleton should come
+ after other deffoos.
+
+2013-03-26 Andrew Cohen <cohen@bu.edu>
+
+ * nnir.el: Major rewrite. Cleaner separation between searches and group
+ management. Marks are now shown in nnir summary buffers. Rudimentary
+ support for real (i.e. not ephemeral) nnir groups.
+ (gnus-summary-make-nnir-group): New function for initiating searches
+ from a summary buffer.
+
+2013-03-18 Sam Steingold <sds@gnu.org>
+
+ * message.el (message-bury): Minor cleanup.
+
+2013-03-06 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nndir.el (nndir-request-list): Remove 2nd argument passed to
+ nnml-request-list. (Bug#13873)
+ (nndir-request-newsgroups): Remove, unused.
+
+ * nndraft.el (nndraft-request-newsgroups): Remove, unused.
+
+2013-03-03 Ted Phelps <phelps@gnusto.com>
+
+ * shr.el: Make all the overlays set the `evaporate' property so that
+ they're removed properly.
+
+2013-02-25 Adam Sjøgren <asjo@koldfront.dk>
+
+ * mml2015-el (mml2015-epg-key-image): Wrap epg-gpg-program in
+ shell-quote-argument.
+
+2013-02-22 David Engster <deng@randomsample.de>
+
+ * gnus-registry.el (gnus-registry-save): Provide class name when
+ calling `eieio-persistent-read' to avoid "unsafe call" warning. Use
+ `condition-case' to stay compatible with older EIEIO versions which
+ only accept one argument.
+
+2013-02-17 Daiki Ueno <ueno@gnu.org>
+
+ * mml2015.el (epg-key-user-id-list, epg-user-id-string)
+ (epg-user-id-validity): Autoload.
+ (mml2015-epg-check-user-id): New function.
+ (mml2015-epg-check-sub-key): New function split from
+ mml2015-epg-find-usable-key.
+ (mml2015-epg-find-usable-key): Accept context, name, usage, and
+ optional name-is-key-id, to handle the case when user-id is unusable.
+ Reported by Łukasz Stelmach <stlman@poczta.fm>.
+
+2013-02-17 Glenn Morris <rgm@gnu.org>
+
+ * shr.el (shr-put-image): Use image-multi-frame-p if available.
+
+2013-02-16 Glenn Morris <rgm@gnu.org>
+
+ * shr.el (shr-put-image): Only animate images that specify a delay.
+ This is consistent with the old image-animated-p behavior.
+
+2013-02-14 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-util.el (gnus-define-keys): Convert [?\S-\ ] to [(shift space)]
+ for XEmacs.
+
+2013-02-13 Juri Linkov <juri@jurta.org>
+
+ * gnus-art.el (gnus-article-mode-map):
+ * gnus-sum.el (gnus-summary-mode-map, gnus-summary-article-map):
+ Make S-SPC scroll in the opposite sense to SPC. (Bug#2145)
2013-02-10 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -12,6 +173,111 @@
* auth-source.el (auth-source-format-prompt): Don't get confused by
any "\" in replacement text. (Bug#13637)
+2013-01-30 Christopher Schmidt <christopher@ch.ristopher.com>
+
+ * gnus-int.el (gnus-backend-trace-elapsed): New variable.
+ (gnus-backend-trace): Honor gnus-backend-trace.
+
+ * mml.el (mml-insert-part): Insert closing tag.
+
+ * mm-decode.el (mm-save-part): Handle invalid read-file-name results.
+
+2013-01-21 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-sum.el (gnus-summary-read-group-1): Protect against not being
+ able to find the article, which can happen in debbugs groups,
+ apparently.
+
+2013-01-16 Glenn Morris <rgm@gnu.org>
+
+ * smiley.el (smiley-style): Make the file loadable in batch mode.
+
+2013-01-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * nnimap.el (nnimap-keepalive): Don't throw an error if there's no more
+ imap process running.
+
+2013-01-14 Julien Danjou <julien@danjou.info>
+
+ * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups):
+ Compare addresses against addresses, not against the full From field.
+
+2013-01-13 Richard Stallman <rms@gnu.org>
+
+ * message.el (message-forward-make-body-mime): New args BEG, END
+ specify what part of FORWARD-BUFFER to use. Do the work directly
+ instead of calling `mml-insert-buffer'.
+
+2013-01-11 Aaron S. Hawley <Aaron.Hawley@vtinfo.com>
+
+ * gnus-start.el (gnus-check-new-newsgroups): Fix ambiguous doc string
+ cross-reference(s).
+
+ * gnus-sum.el (gnus-summary-newsgroup-prefix): Fix ambiguous doc string
+ cross-reference(s).
+
+2013-01-11 Dmitry Antipov <dmantipov@yandex.ru>
+
+ * gnus-art.el (gnus-mime-display-security): Use point-min-marker
+ and point-max-marker.
+ * gnus-async.el (gnus-async-article-callback): Use point-max-marker.
+
+2013-01-10 Uwe Brauer <oub@mat.ucm.es> (tiny change)
+
+ * mml-smime.el (mml-smime-encrypt-to-self): New user option analogous
+ to mml2015-encrypt-to-self.
+ (mml-smime-epg-encrypt): Respect mml-smime-encrypt-to-self.
+
+2013-01-09 Daiki Ueno <ueno@gnu.org>
+
+ * mml-smime.el (epg-sub-key-fingerprint): Autoload for
+ mml-smime-epg-find-usable-secret-key.
+
+2013-01-08 Glenn Morris <rgm@gnu.org>
+
+ * mml-smime.el (mml-smime-sign-with-sender): Add :version.
+
+2013-01-07 Daiki Ueno <ueno@gnu.org>
+
+ * mml-smime.el: Support signing by sender.
+ Requested by Uwe Brauer.
+ (mml-smime-sign-with-sender): New user option analogous
+ to mml2015-sign-with-sender.
+ (mml-smime-epg-sign): Respect mml-smime-sign-with-sender.
+ (mml-smime-epg-find-usable-secret-key): New helper function copied from
+ mml2015.el.
+
+2012-12-31 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-msg.el (gnus-inews-insert-gcc): Don't insert Gcc headers if Gnus
+ isn't running, because Gnus will probably not know how to handle the
+ Gcc header (bug#11941).
+
+ * nnimap.el (nnimap-update-info): Treat \Deleted articles as \Read
+ articles.
+
+2012-12-29 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nnfolder.el (nnfolder-recursive-directory-files): New function.
+ (nnfolder-generate-active-file): Make this function work with recursive
+ folder names.
+
+2012-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * nntp.el (nntp-open-connection): Use HELP as the capability command
+ instead of CAPABILITY because Typhoon v2.2.2.503 chokes completely on
+ unknown commands. And CAPABILITY is an unknown command (bug#12763).
+
+2012-12-27 Wolfgang Jenkner <wjenkner@inode.at>
+
+ * gnus-spec.el (gnus-face-face-function): Don't use nil as no-op face
+ place holder since this gives `Invalid face reference: nil' messages.
+ Use the `default' face instead. It has the same effect here, even
+ though it is not no-op.
+
+ * gnus-util.el
+ (gnus-put-text-property-excluding-characters-with-faces): Similarly.
+
2012-12-27 Lars Ingebrigtsen <larsi@gnus.org>
* gnus-msg.el (gnus-summary-resend-message): Don't bug out on
@@ -20,18 +286,243 @@
2012-12-27 Glenn Morris <rgm@gnu.org>
* plstore.el (plstore-passphrase-callback-function):
- Fix file/buffer typo. (Bug#13264)
+ Use plstore-get-file.
+
+2012-12-27 Andreas Schwab <schwab@linux-m68k.org>
-2012-12-24 Andreas Schwab <schwab@linux-m68k.org>
+ * mml2015.el (mml2015-epg-key-image): Separate attribute stream from
+ stderr.
* nnimap.el (nnimap-find-article-by-message-id): Don't error out if
group is nil.
-2012-12-23 Andreas Schwab <schwab@linux-m68k.org>
-
* shr.el (shr-tag-em): Render as italic, not bold.
-2012-12-02 Andreas Schwab <schwab@linux-m68k.org>
+2012-12-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mml2015.el (mml2015-epg-key-image): Use mm-set-buffer-multibyte.
+
+2012-12-25 Adam Sjøgren <asjo@koldfront.dk>
+
+ * mml2015.el (mml2015-epg-key-image): use --attribute-fd rather than
+ temporary file to get PGP key image. Pass no-show-photos when extracting
+ image to avoid having it pop up twice.
+
+2012-12-26 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-article-treat-types): Include text/html as parts
+ eligible for treatment.
+
+ * gnus-util.el (gnus-goto-colon): Move to the beginning of the visual
+ lines. This makes summary commands with hidden threads work more
+ reliably.
+
+ * gnus-cite.el (gnus-article-hide-citation-maybe): Leave an expansion
+ button to mark the hidden citations (bug#9395).
+
+2012-12-26 Daiki Ueno <ueno@gnu.org>
+
+ * mml2015.el (mml2015-epg-signature-to-string): New function.
+ (mml2015-epg-verify-result-to-string): New function.
+ (mml2015-epg-decrypt, mml2015-epg-clear-decrypt, mml2015-epg-verify)
+ (mml2015-epg-clear-verify): Use mml2015-epg-verify-result-to-string
+ instead of epg-verify-result-to-string.
+ (epg-signature-key-id, epg-signature-to-string): Autoload.
+ (epg-verify-result-to-string): Remove autoload.
+
+2012-12-25 Adam Sjøgren <asjo@koldfront.dk>
+
+ * mml2015.el (mml2015-epg-key-image): New function, to retrieve photo
+ ID image from GPG public key.
+ (mml2015-epg-key-image-to-string): New function.
+
+2012-12-25 Leo Liu <sdl.web@gmail.com>
+
+ * plstore.el (plstore-passphrase-callback-function): Fix error when
+ error when plstore-cache-passphrase-for-symmetric-encryption is set
+ (bug#13264).
+
+2012-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-sum.el (gnus-set-global-variables): Don't copy over the summary
+ buffer to the article buffer here, because that clobbers multiple
+ article buffers.
+
+ * gnus-art.el (gnus-article-setup-buffer): Make sure that the article
+ buffer always points to the right summary buffer.
+
+2012-12-25 John Wiegley <jwiegley@gmail.com>
+
+ * auth-source.el (auth-source-netrc-parse): Allow using "password" as
+ the password (bug#12097).
+
+2012-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * shr.el (shr-tag-a): Don't tagify <A> elements that don't have HREFs
+ (bug#13263).
+
+ * gnus-salt.el (gnus-highlight-selected-tree): Check whether the Tree
+ buffer exists before using it (bug#12475).
+
+ * gnus-agent.el (gnus-agent-fetch-articles): Don't fetch articles from
+ offline groups (bug#11937).
+
+ * message.el (message-yank-original): When using customize to set the
+ value of `message-cite-style', the variable it set to a symbol that's
+ the name of the variable, which must then be dereferenced (bug#12616).
+
+2012-12-25 Wolfgang Jenkner <wjenkner@inode.at>
+
+ * lisp/gnus-spec.el (gnus-face-face-function): Initialize the value of
+ the `face' property with a list whose car is the face specified in the
+ format string and whose cdr is (nil).
+ * lisp/gnus-util.el
+ (gnus-put-text-property-excluding-characters-with-faces):
+ Change accordingly.
+ (gnus-get-text-property-excluding-characters-with-faces): New function.
+ * lisp/gnus-sum.el (gnus-summary-highlight-line):
+ * lisp/gnus-salt.el (gnus-tree-highlight-node):
+ * lisp/gnus-group.el (gnus-group-highlight-line): Use it.
+
+2012-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * nnimap.el (nnimap-authenticator): Expand to allow specifying the
+ login methods.
+ (nnimap-login): Respect the `nnimap-authenticator' variable.
+
+ * gnus-sum.el (gnus-summary-push-marks-to-backend): Push the complete
+ mark state when moving articles. Otherwise unticked articles will get
+ their ticks back after moving.
+
+2012-12-24 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-srvr.el (gnus-browse-delete-group): Fix syntax error.
+
+ * message.el (message-ignored-news-headers): Always remove
+ X-Message-SMTP-Method to avoid information leakage if the user
+ mistakenly inserts the header into news messages.
+
+ * gnus-srvr.el (gnus-browse-delete-group): New command and keystroke.
+
+ * gnus-sum.el (gnus-summary-hide-thread): If point were further to the
+ right than four characters, this command would move point to
+ `point-max'. Don't do that.
+
+ * gnus-group.el (gnus-group-read-ephemeral-group): Set the active data
+ to nil to allow re-selecting groups that gain articles.
+ (gnus-bug-group-download-format-alist): Update the URL.
+
+2012-12-23 Andreas Schwab <schwab@suse.de>
+
+ * shr.el (shr-tag-em): Render em as italic, not bold.
+
+2012-12-23 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-int.el (gnus-backend-trace): Factor out into its own function
+ for reuse.
+ (gnus-open-server): Use it to add more tracing.
+ (gnus-finish-retrieve-group-infos): Add backend tracing.
+ (gnus-backend-trace): Also note the elapsed seconds.
+
+2012-12-22 Philipp Haselwarter <philipp@haselwarter.org>
+
+ * gnus-sync.el (gnus-sync-file-encrypt-to, gnus-sync-save):
+ Set epa-file-encrypt-to from variable to avoid querying.
+
+2012-12-14 Akinori MUSHA <knu@iDaemons.org> (tiny change)
+
+ * sieve-mode.el (sieve-font-lock-keywords):
+ Keywords should be word delimited. (Bug#13173)
+
+2012-12-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-browse-html-parts): Use <div align="left">
+ instead of <pre> to align message header.
+
+2012-12-12 Sam Steingold <sds@gnu.org>
+
+ * gnus.el (gnus-other-frame-resume-function): Add user option.
+ (gnus-other-frame): Call `gnus-other-frame-resume-function' on resume.
+
+2012-12-06 Sam Steingold <sds@gnu.org>
+
+ * gnus-start.el (gnus-before-resume-hook): Add.
+ (gnus-1): Run it when Gnus is alive.
+
+2012-12-06 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gmm-utils.el (gmm-called-interactively-p): Restore as a macro.
+ * gnus-art.el (article-unsplit-urls)
+ * gnus-bookmark.el (gnus-bookmark-bmenu-list)
+ * gnus-registry.el (gnus-registry-get-article-marks)
+ * message.el (message-goto-body): Use it.
+ (message-called-interactively-p): Remove.
+
+ * spam-stat.el (spam-stat-called-interactively-p): New macro.
+ (spam-stat-score-buffer): Use it.
+
+ * spam.el: Silence the warnings against BBDB functions when compiling.
+
+ * gnus-score.el (gnus-score-decode-text-parts):
+ Use append+mapcar instead of the cl function mapcan.
+
+ * gmm-utils.el (gmm-flet): Remove.
+
+ * gnus-sync.el (gnus-sync-lesync-call):
+ Avoid overriding json-alist-p.
+
+ * message.el (message-read-from-minibuffer):
+ Avoid overriding mail-abbrev-in-expansion-header-p.
+
+2012-12-05 Sam Steingold <sds@gnu.org>
+
+ * gnus.el (gnus-delete-gnus-frame): Extract from `gnus-other-frame'.
+ (gnus-other-frame): Add `gnus-delete-gnus-frame' to
+ `gnus-suspend-gnus-hook' in addition to `gnus-exit-gnus-hook'.
+
+2012-12-05 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gmm-utils.el (gmm-called-interactively-p): Revert.
+ This seems to cause Emacs to get stuck!
+ * gnus-art.el (article-unsplit-urls)
+ * gnus-bookmark.el (gnus-bookmark-bmenu-list)
+ * gnus-registry.el (gnus-registry-get-article-marks)
+ * message.el (message-goto-body)
+ (message-called-interactively-p): Revert.
+
+ * gmm-utils.el (gmm-called-interactively-p): New function.
+ * gnus-art.el (article-unsplit-urls)
+ * gnus-bookmark.el (gnus-bookmark-bmenu-list)
+ * gnus-registry.el (gnus-registry-get-article-marks)
+ * message.el (message-goto-body): Use it.
+ (message-called-interactively-p): Remove.
+
+ * gmm-utils.el (gmm-flet): Restore it using cl-letf.
+ * gnus-sync.el (gnus-sync-lesync-call)
+ * message.el (message-read-from-minibuffer): Use it.
+
+2012-12-05 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gmm-utils.el (gmm-flet): Remove.
+ * gnus-sync.el (gnus-sync-lesync-call)
+ * message.el (message-read-from-minibuffer): Don't use it.
+
+2012-12-04 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gmm-utils.el (gmm-labels): Use cl-labels if available.
+
+2012-12-04 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gmm-utils.el (gmm-flet, gmm-labels): New macros.
+
+ * gnus-sync.el (gnus-sync-lesync-call)
+ * message.el (message-read-from-minibuffer): Use gmm-flet.
+
+ * gnus-score.el (gnus-score-decode-text-parts): Use gmm-labels.
+
+ * gnus-util.el (gnus-macroexpand-all): Remove.
+
+2012-12-03 Andreas Schwab <schwab@linux-m68k.org>
* gnus-sum.el (gnus-summary-mode-map): Bind gnus-summary-widget-forward
to TAB, not [tab].
@@ -40,13 +531,18 @@
* gnus-sync.el (gnus-sync-newsrc-offsets): Restore definition.
(gnus-sync-save): Use correct format for gnus-sync-newsrc-loader.
+2012-11-19 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.el (message-get-reply-headers):
+ Make sure the reply goes to the author if it is a wide reply.
+
2012-11-16 Jan Tatarik <jan.tatarik@gmail.com>
* gnus-score.el (gnus-score-body):
* gnus-logic.el (gnus-advanced-body): Don't score by headers when
scoring by body.
-2012-11-13 Glenn Morris <rgm@gnu.org>
+2012-11-16 Glenn Morris <rgm@gnu.org>
* gnus-diary.el (nndiary-request-create-group-functions)
(nndiary-request-update-info-functions)
@@ -54,6 +550,36 @@
(nndiary-request-accept-article-functions):
Use new names for hooks rather than obsolete aliases.
+2012-11-08 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-browse-html-parts): Always replace charset
+ in meta tag with the one the part specifies in its header.
+
+2012-11-02 Stephen Eglen <S.J.Eglen@damtp.cam.ac.uk>
+
+ * gnus-dired.el (gnus-dired-attach): Attach to last used message buffer
+ by default.
+
+2012-11-02 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ New UIDL implementation.
+
+ * mail-source.el (mail-sources, mail-source-keyword-map):
+ Add :leave as a pop3 keyword.
+ (mail-source-fetch-pop): Bind pop3-leave-mail-on-server.
+
+ * pop3.el (pop3-leave-mail-on-server): Allow number.
+ (pop3-uidl-file, pop3-uidl-file-backup): New user options.
+ (pop3-movemail): Add UIDL support.
+ (pop3-send-streaming-command): Take a list of mail numbers instead of
+ the number of mails.
+ (pop3-write-to-file): Add X-UIDL header.
+ (pop3-uidl-stat, pop3-uidl-dele, pop3-uidl-load, pop3-uidl-save)
+ (pop3-uidl-add-xheader): New functions.
+
+ * message.el (message-ignored-resent-headers):
+ Add X-Content-Length and X-UIDL headers.
+
2012-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
* nndiary.el (nndiary-request-create-group-functions)
diff --git a/lisp/gnus/ChangeLog.1 b/lisp/gnus/ChangeLog.1
index 34533f31bff..9043a23361e 100644
--- a/lisp/gnus/ChangeLog.1
+++ b/lisp/gnus/ChangeLog.1
@@ -452,7 +452,7 @@
* gnus-sum.el (gnus-remove-thread): Didn't work with sparse
threads.
-1998-08-14 Franois Pinard <pinard@iro.umontreal.ca>
+1998-08-14 François Pinard <pinard@iro.umontreal.ca>
* nndoc.el (nndoc-generate-mime-parts-head): Use original Subject,
Message-ID, and References in fully blown articles.
@@ -619,7 +619,7 @@
* gnus.el: Gnus v5.6.31 is released.
-1998-08-09 Franois Pinard <pinard@iro.umontreal.ca>
+1998-08-09 François Pinard <pinard@iro.umontreal.ca>
* nndoc.el: Split MIME multipart messages, maybe recursively.
(nndoc-mime-parts-type-p, nndoc-transform-mime-parts,
@@ -760,7 +760,7 @@
* gnus-group.el (gnus-group-read-ephemeral-group): Make the server
unique.
-1998-07-28 Franois Pinard <pinard@iro.umontreal.ca>
+1998-07-28 François Pinard <pinard@iro.umontreal.ca>
* gnus-uu.el (gnus-uu-reginize-string): Consider the number of
parts as part of the fixed subject, instead of a wild quantity.
@@ -943,7 +943,7 @@
* nntp.el (nntp-server-opened-hook): Doc change.
-1998-07-10 Franois Pinard <pinard@iro.umontreal.ca>
+1998-07-10 François Pinard <pinard@iro.umontreal.ca>
* gnus-sum.el (gnus-summary-respool-trace): New command and
keystroke.
@@ -1003,7 +1003,7 @@
* nntp.el (nntp-record-command): Give more precise time info.
(nntp-next-result-arrived-p): Look for the end of error lines.
-1998-07-01 Franois Pinard <pinard@iro.umontreal.ca>
+1998-07-01 François Pinard <pinard@iro.umontreal.ca>
* gnus-util.el (gnus-delete-if): Would do the opposite.
@@ -2016,7 +2016,7 @@
* gnus-picon.el (gnus-picons-display-x-face): `buf' -- unbound
var.
-1998-02-28 Franois Pinard <pinard@iro.umontreal.ca>
+1998-02-28 François Pinard <pinard@iro.umontreal.ca>
* gnus: configure'd.
@@ -2370,7 +2370,7 @@
* gnus-sum.el (gnus-summary-exit): Call purging function.
-1998-02-13 Franois Pinard <pinard@iro.umontreal.ca>
+1998-02-13 François Pinard <pinard@iro.umontreal.ca>
* nnmail.el (nnmail-get-new-mail): Don't clear split-history.
(nnmail-purge-split-history): New function.
@@ -3724,3 +3724,7 @@
You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;; Local Variables:
+;; coding: utf-8
+;; End:
diff --git a/lisp/gnus/ChangeLog.2 b/lisp/gnus/ChangeLog.2
index ab590a68654..4ddd622ce9a 100644
--- a/lisp/gnus/ChangeLog.2
+++ b/lisp/gnus/ChangeLog.2
@@ -72,7 +72,7 @@
* gnus-dired.el (gnus-dired-mode-map): Change keymaps.
-2004-01-02 Arne J,Ax(Brgensen <arne@arnested.dk>
+2004-01-02 Arne Jørgensen <arne@arnested.dk>
* smime.el (smime-crl-check): Doc fix.
@@ -143,7 +143,7 @@
(gnus-summary-goto-article): Allow `%40'.
(gnus-summary-refer-article): Convert `%40' to `@'.
-2003-12-30 Arne J,Ax(Brgensen <arne@arnested.dk>
+2003-12-30 Arne Jørgensen <arne@arnested.dk>
* smime.el (smime-crl-check): New.
(smime-verify-region): Use it.
@@ -152,7 +152,7 @@
(gnus-score-find-trace): Use gnus-score-edit-file-at-point. Added
`f' and `t' commands, added quick help. With some suggestions
- from Karl Pfl,Ad(Bsterer <sigurd@12move.de>.
+ from Karl Pflästerer <sigurd@12move.de>.
* gnus-util.el (gnus-emacs-version): Added doc-string.
@@ -160,7 +160,7 @@
(mml-attach-file): Use it.
(mml-preview): Added MIME preview to gnus-buffers.
-2003-12-30 Karl Pfl,Ad(Bsterer <sigurd@12move.de>
+2003-12-30 Karl Pflästerer <sigurd@12move.de>
* gnus-score.el (gnus-score-edit-file-at-point): Consider the
whole match element.
@@ -243,7 +243,7 @@
* gnus-score.el (gnus-summary-lower-score)
(gnus-summary-increase-score): Mention symbolic prefix in the
- doc-string. Suggested by Karl Pfl,Ad(Bsterer <sigurd@12move.de>.
+ doc-string. Suggested by Karl Pflästerer <sigurd@12move.de>.
2003-12-21 Jesper Harder <harder@ifa.au.dk>
@@ -383,7 +383,7 @@
* message.el (message-get-reply-headers): Narrow to headers.
-2003-12-10 L,Bu(Brentey K,Ba(Broly <lorentey@elte.hu>
+2003-12-10 Lőrentey Károly <lorentey@elte.hu>
* spam.el (spam-disable-spam-split-during-ham-respool): New
variable.
@@ -406,7 +406,7 @@
input.
(pgg-decode-armor-region): Don't parse packet if decoding fail.
-2003-12-09 L,Bu(Brentey K,Ba(Broly <lorentey@elte.hu>
+2003-12-09 Lőrentey Károly <lorentey@elte.hu>
* spam.el (spam-check-bogofilter): Run in the correct buffer.
@@ -444,7 +444,7 @@
2003-12-08 Simon Josefsson <jas@extundo.com>
* mml-smime.el (mml-smime-sign): Replace CRLF with LF in OpenSSL
- output. Reported by Arne J,Ax(Brgensen <arne@arnested.dk>.
+ output. Reported by Arne Jørgensen <arne@arnested.dk>.
2003-12-07 Lloyd Zusman <ljz@asfast.com> (tiny change)
@@ -1018,7 +1018,7 @@
(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).
+ by f95-msv@f.kth.se (Mårten Svantesson).
2003-10-25 Teodor Zlatanov <tzz@lifelogs.com>
@@ -1215,7 +1215,7 @@
(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 <dne@mayonnaise.net>
+2003-06-11 Daniel Néri <dne@mayonnaise.net>
* message.el (message-resend): Generate Resent-Message-ID header.
@@ -1558,7 +1558,7 @@
2003-08-29 Simon Josefsson <jas@extundo.com>
* gnus-group.el (gnus-group-delete-group): Doc fix. Suggested by
- Jochen K,A|(Bpper <jochen@jochen-kuepper.de>.
+ Jochen Küpper <jochen@jochen-kuepper.de>.
2003-08-29 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -1588,7 +1588,7 @@
* 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 <jochen@jochen-kuepper.de>)
+ (reported by Jochen Küpper <jochen@jochen-kuepper.de>)
2003-08-24 Jesper Harder <harder@ifa.au.dk>
@@ -1804,7 +1804,7 @@
* mml-sec.el (mml-signencrypt-style-alist): Use "combined" by
default. Improve docstring.
-2003-07-10 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+2003-07-10 Kai Großjohann <kai.grossjohann@gmx.net>
* imap.el (imap-arrival-filter): Fix test for missing process
buffer.
@@ -2097,10 +2097,10 @@
* gnus-sum.el (gnus-summary-make-menu-bar): Removed ["Add buttons"
gnus-summary-display-buttonized t].
-2003-06-07 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+2003-06-07 Kai Großjohann <kai.grossjohann@gmx.net>
* nnmail.el (nnmail-split-fancy-match-partial-words): Doc string
- fix. Reported by Johan Bockg,Ae(Brd <bojohan+news@dd.chalmers.se>.
+ fix. Reported by Johan Bockgård <bojohan+news@dd.chalmers.se>.
2003-06-07 Jesper Harder <harder@ifa.au.dk>
@@ -2157,7 +2157,7 @@
compiling.
(gnus-find-method-for-group, nnvirtual-find-group-art): Autoload.
-2003-06-03 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+2003-06-03 Kai Großjohann <kai.grossjohann@gmx.net>
* nnmail.el (nnmail-split-fancy-match-partial-words): New user
option.
@@ -2364,7 +2364,7 @@
(rfc2047-syntax-table): Fix building table to work in Emacs 22.
(rfc2047-unfold-region): Delete unused var `leading'.
-2003-05-12 Ville Skytt,Ad(B <scop@xemacs.org> (tiny change)
+2003-05-12 Ville Skyttä <scop@xemacs.org> (tiny change)
* pgg.el (pgg-temp-buffer-show-function): Reuse existing visible
output window if one is available.
@@ -2459,7 +2459,7 @@
* spam.el (spam-use-regex-headers): Docstring fix.
-2003-05-08 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+2003-05-08 Kai Großjohann <kai.grossjohann@gmx.net>
* gnus-sum.el (gnus-summary-next-page): Mention
`gnus-article-skip-boring' in docstring.
@@ -2749,7 +2749,7 @@
* gnus-int.el (gnus-open-server): Revert changes.
-2003-04-30 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+2003-04-30 Kai Großjohann <kai.grossjohann@gmx.net>
* gnus-int.el (gnus-open-server): Try to open unagentized servers
even when unplugged.
@@ -2788,7 +2788,7 @@
(gnus-register-action): Optimized logical flow.
(gnus-summary-prepare-hook): Added gnus-registry-register-message-ids.
-2003-04-30 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+2003-04-30 Kai Großjohann <kai.grossjohann@gmx.net>
* gnus-delay.el (gnus-delay-article): Call
`gnus-agent-queue-setup' to create the delay group.
@@ -2837,7 +2837,7 @@
* 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 <sigurd@12move.de>
+2003-04-29 Karl Pflästerer <sigurd@12move.de>
* spam-stat.el (spam-stat-save): No longer font-locks the file
when saving.
@@ -4142,7 +4142,7 @@
(gnus-agent-article-alist, gnus-agent-article-alist)
(gnus-agent-cat-defaccessor): Doc fixes.
-2003-03-04 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2003-03-04 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-agent.el (gnus-function-implies-unread-1): Grok
byte-compiled functions.
@@ -4552,7 +4552,7 @@
(gnus-agent-regenerate-group): Now clears the message buffer when
finished.
-2003-02-23 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2003-02-23 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus.el (gnus-agent-target-move-group-header): New variable.
* gnus-draft.el (gnus-draft-send): If special header
@@ -4578,7 +4578,7 @@
* gnus-util.el (gnus-fetch-original-field): New function.
-2003-02-23 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2003-02-23 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* message.el (message-mode): \\(...\\) around additional
paragraph-separate alternative.
@@ -4629,12 +4629,12 @@
* message.el (message-mode): MML tags separate paragraphs.
-2003-02-22 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2003-02-22 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-agent.el (gnus-agent-get-undownloaded-list): Sort
`gnus-newsgroup-headers'.
-2003-02-22 Karl Pfl,Ad(Bsterer <sigurd@12move.de>
+2003-02-22 Karl Pflästerer <sigurd@12move.de>
* gnus-art.el (gnus-article-refer-article): Grok more message id
formats.
@@ -4714,7 +4714,7 @@
illegible and invisible text.
* gnus-util.el (gnus-multiple-choice): Separate choices with
- ",,A (B". Suggested by Dan Jacobson <jidanni@dman.ddts.net>.
+ ", ". Suggested by Dan Jacobson <jidanni@dman.ddts.net>.
2003-02-18 Jesper Harder <harder@ifa.au.dk>
@@ -4727,7 +4727,7 @@
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 <kai.grossjohann@uni-duisburg.de>
+2003-02-17 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-sum.el (gnus-summary-make-menu-bar): Add MIME/Multipart
submenu.
@@ -4764,7 +4764,7 @@
* gnus-art.el (gnus-article-prepare): Don't set agent mark if
online.
-2003-02-14 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2003-02-14 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-agent.el (gnus-agent-group-make-menu-bar): Include all
commands.
@@ -5051,7 +5051,7 @@
* gnus.el (spam group parameters): Change 'other to 'const in
the group parameter definitions to soothe XEmacs.
-2003-02-04 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2003-02-04 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-delay.el (gnus-delay-article): Really create
nndraft:delayed group if it doesn't exist.
@@ -5222,7 +5222,7 @@
* nnheader.el (nnheader-directory-separator-character): New
variable.
-2003-01-24 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2003-01-24 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-agent.el (gnus-agent-max-fetch-size)
(gnus-agent-article-alist, gnus-agent-get-undownloaded-list)
@@ -5400,7 +5400,7 @@
calculation of net characters added for use in the gnus-data
structure.
-2003-01-18 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2003-01-18 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* nnmail.el (nnmail-process-unix-mail-format): Improve error
message. Suggested by Jari Aalto.
@@ -5652,7 +5652,7 @@
* 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 <Francois-David.Collin@curie.fr>
+2003-01-12 François-David Collin <Francois-David.Collin@curie.fr>
* mm-decode.el (mm-get-part): Use mm-with-unibyte-current-buffer.
@@ -5666,10 +5666,10 @@
2003-01-12 Simon Josefsson <jas@extundo.com>
* sieve.el (sieve-upload-and-bury): New. Suggested by
- kai.grossjohann@uni-duisburg.de (Kai Gro,A_(Bjohann).
+ kai.grossjohann@uni-duisburg.de (Kai Großjohann).
* 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).
+ Suggested by kai.grossjohann@uni-duisburg.de (Kai Großjohann).
2003-01-12 Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -5701,7 +5701,7 @@
* gnus-sum.el (gnus-summary-exit): Reverse change to make group
exit work with two frames.
-2003-01-11 Fran,Ag(Bois-David Collin <Francois-David.Collin@wanadoo.fr>
+2003-01-11 François-David Collin <Francois-David.Collin@wanadoo.fr>
* message.el (message-forward-make-body): Use mule4.
@@ -6303,7 +6303,7 @@
* dig.el (query-dig): Doc fix.
-2003-01-02 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2003-01-02 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-agent.el (gnus-agent-fetch-selected-article): Update whole
summary buffer line, not just the download mark.
@@ -6694,7 +6694,7 @@
* gnus-agent.el (gnus-close-agent): Don't blank out the list of
covered methods.
-2002-12-12 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-12-12 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* nntp.el (nntp-with-open-group-first-pass): Do not wrap in
eval-when-compile. Suggested by Kevin Greiner.
@@ -6825,12 +6825,12 @@
Because of an unknown bug, the group buffer is saved in .overview
file.
-2002-12-09 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-12-09 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* nntp.el (nntp-send-command): Braino in last commit. Replace
`and' with `or'.
-2002-12-08 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-12-08 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* nntp.el (nntp-send-command): Assume that echo does not happen
when nntp-open-connection-function is nntp-open-network-stream.
@@ -6854,12 +6854,12 @@
* rfc2047.el (rfc2047-decode-region): Remove newlines between
decoded words.
-2002-12-03 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-12-03 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus.el (fboundp): After loading mm-util, make sure it was the
right one.
-2002-11-29 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-11-29 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-art.el (gnus-inhibit-mime-unbuttonizing): Moved here from
gnus-sum. Made into a user option.
@@ -6916,7 +6916,7 @@
* binhex.el (binhex-decode-region): Don't hardcode point-min == 1.
-2002-11-29 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-11-29 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-sum.el (gnus-simplify-ignored-prefixes)
(gnus-summary-mark-article-as-unread)
@@ -6949,7 +6949,7 @@
* nnrss.el (nnrss-group-alist): Update the link of Jabber.
-2002-11-26 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-11-26 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-sum.el (gnus-summary-insert-old-articles): Remove
superfluous function call.
@@ -6961,13 +6961,13 @@
* 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 <kai.grossjohann@uni-duisburg.de>
+2002-11-26 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* 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 <kai.grossjohann@uni-duisburg.de>
+2002-11-25 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-agent.el (gnus-agent-check-overview-buffer): Make debugger
print message on entry.
@@ -6977,7 +6977,7 @@
* 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 <kai.grossjohann@uni-duisburg.de>
+2002-11-24 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-sum.el (gnus-summary-insert-old-articles): Use
gnus-remove-from-range instead of gnus-range-difference which
@@ -7063,7 +7063,7 @@
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 <kai.grossjohann@uni-duisburg.de>
+2002-11-18 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-agent.el (gnus-category-mode): Typo in doc string.
@@ -7124,7 +7124,7 @@
* mml.el (mml-preview): Bind message-this-is-mail if it is mail.
-2002-11-13 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-11-13 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus.el (gnus-summary-line-format): Document %C.
@@ -7198,12 +7198,12 @@
(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 <kai.grossjohann@uni-duisburg.de>
+2002-10-31 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-util.el (gnus-user-date-format-alist): Clarify and correct
documentation.
-2002-10-28 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-10-28 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-agent.el (gnus-agent-fetched-headers)
(gnus-agent-load-fetched-headers)
@@ -7260,12 +7260,12 @@
type values ("url" size) regardless of the values of
mm-url-use-external.
-2002-10-26 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-10-26 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* nnimap.el (nnimap-request-article-part): Try harder to show
group name in debugging message.
-2002-10-25 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-10-25 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-agent.el (gnus-agent-save-fetched-headers): Create
directory if it doesn't exist.
@@ -7283,7 +7283,7 @@
* gnus-agent.el (gnus-agent-load-alist): Fix parenthesis.
-2002-10-24 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-10-24 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-agent.el (gnus-agent-save-alist, gnus-agent-load-alist):
Remove unused optional arg DIR and corresponding code.
@@ -7295,7 +7295,7 @@
* gnus-agent.el (gnus-agent-fetch-headers): Add some comments.
-2002-10-23 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+2002-10-23 Kai Großjohann <kai.grossjohann@uni-duisburg.de>
* gnus-agent.el (gnus-agent-fetched-headers): New variable,
contains range of headers that have been fetched by the agent
@@ -7338,7 +7338,7 @@
* nnslashdot.el: Removed some test lines.
More test.
-2002-10-21 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-10-21 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-agent.el (gnus-agent-fetch-headers): Remove articles that
are known to be downloaded already.
@@ -7364,7 +7364,7 @@
* gnus-srvr.el (gnus-server-prepare): Removed superfluous cdr.
-2002-10-20 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-10-20 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-agent.el (gnus-agent-fetch-group-1): After fetching
headers from the group, update variable `articles' to contain
@@ -7392,7 +7392,7 @@
* nnimap.el (nnimap-open-server): Check imap-state in IMAP server
buffer.
-2002-10-18 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-10-18 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-spec.el (gnus-make-format-preserve-properties)
(gnus-xmas-format, gnus-parse-simple-format): Preserve text
@@ -7475,9 +7475,9 @@
* 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.
+ Kai Großjohann.
-2002-10-15 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-10-15 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-agent.el (gnus-agent-fetch-selected-article): Open history
if it isn't open yet.
@@ -7603,7 +7603,7 @@
* 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 <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-10-08 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-agent.el (gnus-agent-fetch-selected-article): Bind
gnus-agent-current-history.
@@ -7612,7 +7612,7 @@
* imap.el (imap-parse-status): Don't use read to read token.
-2002-10-05 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-10-05 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-agent.el (gnus-agent-fetch-selected-article): Do nothing
for methods not covered by the agent, and when unplugged.
@@ -7724,7 +7724,7 @@
* nnmaildir.el (nnmaildir--group-maxnum-art): Fix maximum article
number when there are no articles.
-2002-10-03 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-10-03 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-agent.el (gnus-agent-summary-fetch-group): Optional prefix
arg ALL means to fetch all articles, not only downloadable ones.
@@ -7738,7 +7738,7 @@
2002-09-30 Teodor Zlatanov <tzz@lifelogs.com>
- * spam.el: Merged changes from pinard@iro.umontreal.ca (Fran,Ag(Bois
+ * spam.el: Merged changes from pinard@iro.umontreal.ca (François
Pinard).
Major revamp of the code, documentation is in comments in the file
for now.
@@ -7849,7 +7849,7 @@
* message.el (message-forward-make-body): Revert an early change
because 8-bit utf-8 emails.
-2002-09-25 Bj,Av(Brn Torkelsson <torkel@acc.umu.se>
+2002-09-25 Björn Torkelsson <torkel@acc.umu.se>
* gnus-agent.el (gnus-category-line-format): Doc fixes (mostly added
links to Info).
@@ -7990,7 +7990,7 @@
given.
2002-09-23 Simon Josefsson <jas@extundo.com>
- Trivial fix from beaker@iavmb.pl (Krzysztof J,Bj(Bdruczyk).
+ Trivial fix from beaker@iavmb.pl (Krzysztof Jędruczyk).
* smime.el (smime-sign-buffer): Get key and extra certs.
(smime-get-key-with-certs-by-email): Utility function.
@@ -8151,7 +8151,7 @@
* gnus-art.el (gnus-article-treat-body-boundary): Don't quote a
value for gnus-decoration property.
-2002-09-06 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-09-06 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* nnmail.el (nnmail-cache-fetch-group): Don't return "" (empty
string) as group name in case we have a CRLF in the file.
@@ -8270,7 +8270,7 @@
* gnus-util.el (gnus-select-frame-set-input-focus): New function.
-2002-08-20 $B>.4X(B $B5HB'(B (KOSEKI Yoshinori) <kose@meadowy.org>
+2002-08-20 小関 吉則 (KOSEKI Yoshinori) <kose@meadowy.org>
* message.el (message-set-auto-save-file-name): Add support for
the Cygwin Emacs; the system-type is `cygwin'.
@@ -8292,11 +8292,11 @@
* message.el (message-ignored-supersedes-headers): Add X-Hashcash.
(message-ignored-resent-headers): Add envelope From.
-2002-08-18 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-08-18 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus.el (gnus-summary-line-format): Document %k specifier.
-2002-08-17 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-08-17 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-sum.el (gnus-summary-line-message-size): New function.
(gnus-summary-line-format-alist): Use it.
@@ -8306,7 +8306,7 @@
* 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".
+ * message.el (message-cite-prefix-regexp): Exclude ":" and "»".
2002-08-14 Simon Josefsson <jas@extundo.com>
@@ -8521,7 +8521,7 @@
* gnus-art.el (article-unsplit-urls): Keep URL buttonized after
unsplitting.
-2002-07-01 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-07-01 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-msg.el (gnus-summary-resend-default-address): New user option.
(gnus-summary-resend-message): Use it.
@@ -8546,17 +8546,17 @@
* nntp.el (nntp-open-via-rlogin-and-telnet): Hide commandline args.
-2002-06-26 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-06-26 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-font-lock-keywords): Revert 2002-06-22
change.
-2002-06-24 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-06-24 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-font-lock-keywords): Put colon in header
name match.
-2002-06-22 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-06-22 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-font-lock-keywords): Don't use header faces
in the body. Thanks to Stefan Monnier for the hint on the
@@ -8578,7 +8578,7 @@
* nnmail.el (nnmail-cache-ignore-groups): New.
* nnmail.el (nnmail-cache-insert): Obey nnmail-cache-ignore-groups.
-2002-06-18 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-06-18 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-delay.el (gnus-delay-send-queue): Delete the delay header
before sending. Suggested by Jan Rychter.
@@ -8589,7 +8589,7 @@
sure to write byte-compiled versions of gnus-*-format-alist to
.newsrc.eld.
-2002-06-16 Bj,Ax(Brn Mork <bmork@dod.no>
+2002-06-16 Bjørn Mork <bmork@dod.no>
* gnus-agent.el (gnus-agent-read-servers)
(gnus-agent-write-servers): Put server name (string like
@@ -8657,12 +8657,12 @@
* message.el (message-send-mail-with-sendmail): Improve error message.
-2002-06-06 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-06-06 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* 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 <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-06-05 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-send-mail-with-sendmail): Check return value
from call-process-region.
@@ -8833,7 +8833,7 @@
frobbing the alist directly.
* mml.el (mml-generate-mime-1): Use accessor function.
-2002-05-08 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-05-08 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-art.el (gnus-article-mode-syntax-table): Specify matching
parenthesis for "<" and ">". Suggested by Andreas Schwab
@@ -8961,7 +8961,7 @@
2002-04-27 ShengHuo ZHU <zsh@cs.rochester.edu>
* gnus-msg.el (gnus-article-mail): Use gnus-msg-mail instead.
- Trivial change from Karl Pfl,Ad(Bsterer <sigurd@12move.de>.
+ Trivial change from Karl Pflästerer <sigurd@12move.de>.
2002-04-27 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -9027,7 +9027,7 @@
* gnus-msg.el (gnus-summary-resend-message-edit): Remove
message-ignored-resent-headers, too.
-2002-04-22 Bj,Av(Brn Torkelsson <torkel@acc.umu.se>
+2002-04-22 Björn Torkelsson <torkel@acc.umu.se>
* gnus-srvr.el (gnus-server-browse-in-group-buffer): It is a
boolean not a string
@@ -9128,7 +9128,7 @@
<Nicolas.Kowalski@imag.fr>.
* smime.el (smime-CA-directory): Fix doc. Thanks to Arne
- J,Ax(Brgensen <arne+usenet@daimi.au.dk>.
+ Jørgensen <arne+usenet@daimi.au.dk>.
(smime-sign-buffer): Work in XEmacs. Thanks to Nicolas Kowalski
<Nicolas.Kowalski@imag.fr>.
(smime-decrypt-buffer): Ditto.
@@ -9224,9 +9224,9 @@
* 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 <torkel@pdc.kth.se>.
+ Trivial change from Björn Torkelsson <torkel@pdc.kth.se>.
-2002-03-29 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-03-29 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-sum.el (gnus-summary-move-article)
(gnus-summary-copy-article): Mention `gnus-move-split-methods' in
@@ -9260,7 +9260,7 @@
(nnmaildir--edit-prep): New function.
(Local Variables): Use it.
-2002-03-26 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2002-03-26 Pavel Janík <Pavel@Janik.cz>
* gnus-sum.el (gnus-summary-make-menu-bar): Fix typo.
@@ -9307,7 +9307,7 @@
* message.el (message-font-lock-keywords): Support multi-line MML
tags.
-2002-03-21 L,Bu(Brentey K,Ba(Broly <lorentey@elte.hu>
+2002-03-21 Lőrentey Károly <lorentey@elte.hu>
* gnus-sum.el (gnus-print-buffer): Remove gnus-decoration.
@@ -9325,7 +9325,7 @@
* gnus-group.el (gnus-group-process-prefix): Make sure there is a mark.
-2002-03-19 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-03-19 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-sum.el (gnus-sum-thread-tree-root)
(gnus-sum-thread-tree-single-indent)
@@ -9338,7 +9338,7 @@
* gnus-util.el (gnus-extract-address-components): Don't break on
names such as James "Kibo" Parry.
-2002-03-13 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2002-03-13 Pavel Janík <Pavel@Janik.cz>
* pop3.el (pop3-open-server): Revert multibyte change.
@@ -9915,7 +9915,7 @@
* nnagent.el (nnagent-request-expire-articles): Don't delete
files.
-2002-02-06 Stefan Reich,Av(Br <xsteve@riic.at>
+2002-02-06 Stefan Reichör <xsteve@riic.at>
* gnus-agent.el (gnus-agent-summary-make-menu-bar): Fix typo.
@@ -9958,7 +9958,7 @@
(gnus-article-reply-with-original): Ditto.
* binhex.el (binhex-decoder-switches): Fix doc. From
- Pavel@Janik.cz (Pavel Jan,Am(Bk).
+ Pavel@Janik.cz (Pavel Janík).
2002-02-04 ShengHuo ZHU <zsh@cs.rochester.edu>
@@ -10806,7 +10806,7 @@
* 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).
+ Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Großjohann).
(fill-flowed-encode, fill-flowed): Use them.
* message.el (message-send-news, message-send-mail): Use
@@ -10976,7 +10976,7 @@
* gnus-group.el (gnus-group-read-ephemeral-group): Restore the old
behavior of quit-config.
-2002-01-08 Bj,Ax(Brn Mork <bmork@dod.no> (tiny change)
+2002-01-08 Bjørn Mork <bmork@dod.no> (tiny change)
* message.el (message-make-from): Don't quote fullname.
@@ -11373,7 +11373,7 @@
(gnus-picon-transform-address): Insert spec backward, due to the
incompatibility of gnus-xmas-put-image.
-2002-01-02 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2002-01-02 Pavel Janík <Pavel@Janik.cz>
* gnus-fun.el (gnus-convert-pbm-to-x-face-command): Doc fix.
@@ -11802,7 +11802,7 @@
* gnus-win.el (gnus-configure-windows-hook): New hook.
-2001-12-29 Sascha L,A|(Bdecke <sascha@meta-x.de>
+2001-12-29 Sascha Lüdecke <sascha@meta-x.de>
* gnus-win.el (gnus-configure-windows): Minimize tree buffer.
@@ -11901,7 +11901,7 @@
(nnmaildir-version): Indicate that nnmaildir is now a standard
part of Gnus, not separately released.
-2001-12-21 08:00:00 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2001-12-21 08:00:00 Pavel Janík <Pavel@Janik.cz>
* gnus-art.el, gnus-picon.el, gnus-sieve.el, gnus-sum.el:
* gnus-xmas.el, imap.el, mailcap.el, mm-util.el, nnfolder.el:
@@ -12008,7 +12008,7 @@
* mm-url.el (executable-find): Autoload.
-2001-12-12 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2001-12-12 Pavel Janík <Pavel@Janik.cz>
* gnus-mlspl.el (gnus-group-split-fancy): Doc fix (add reference
to variable, follow doc-string conventions).
@@ -12210,7 +12210,7 @@
* message.el (message-tab-body-function): Set to nil.
(message-tab): Use text-mode-map or global-map.
- Suggested by Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>.
+ Suggested by Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>.
2001-11-30 Simon Josefsson <jas@extundo.com>
@@ -12224,7 +12224,7 @@
* gnus-agent.el (gnus-agent-write-active): Make sure sym is a cons
of integers.
-2001-11-29 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-11-29 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-newgroups-header-regexp)
(message-completion-alist, message-tab-body-function): Use
@@ -12307,7 +12307,7 @@
(gnus-summary-limit-to-extra): Ditto.
(gnus-summary-find-matching): Support not-matching argument.
-2001-11-25 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-11-25 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-wash-subject): Use `insert' rather than
`insert-string', which is deprecated.
@@ -12367,7 +12367,7 @@
* nnfolder.el (nnfolder-read-folder): Use group instead of
nnfolder-current-group.
- Suggested by K,Ba(Broly L,Bu(Brentey <lorentey@elte.hu>.
+ Suggested by Károly Lőrentey <lorentey@elte.hu>.
2001-11-17 Simon Josefsson <jas@extundo.com>
@@ -12461,7 +12461,7 @@
* mml2015.el: Mention RFC 3156.
-2001-11-12 Sascha L,A|(Bdecke <sascha@meta-x.de>
+2001-11-12 Sascha Lüdecke <sascha@meta-x.de>
* mml1991.el: New file.
@@ -12480,11 +12480,11 @@
canlock, no need to require two different hash algs). Suggested
by Ferenc Wagner <wferi@bolyai1.elte.hu>.
-2001-11-09 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2001-11-09 Pavel Janík <Pavel@Janik.cz>
* gnus.el (gnus-local-domain): Fix doc.
-2001-11-09 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-11-09 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-point-in-header-p): New function.
(message-do-auto-fill): Use it.
@@ -12823,7 +12823,7 @@
(nnweb-type-definition): Add google as alias of dejanews.
(nnweb-google-parse-1): Forward 1 line.
-2001-10-26 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-10-26 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-msg.el (gnus-summary-mail-forward): Doc fix: add pointer to
variable `message-forward-ignored-headers'.
@@ -12859,7 +12859,7 @@
* gnus-msg.el (gnus-extended-version): Include
system-configuration.
- Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Gro,b_(Bjohann).
+ Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Großjohann).
2001-10-22 Per Abrahamsen <abraham@dina.kvl.dk>
@@ -12879,7 +12879,7 @@
(nnimap-split-inbox, nnimap-expunge-search-string)
(nnimap-importantize-dormant): Remove "*" from doc.
-2001-10-20 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-10-20 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-sum.el (gnus-summary-limit-to-score): Prompt for score if
not supplied via prefix arg. From Lisp, make arg mandatory.
@@ -12993,7 +12993,7 @@
(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 <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-10-16 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
Patch by Oliver Scholz <oscholz@my.gnus.org>.
* gnus-draft.el (gnus-draft-edit-message): Add text property
@@ -13048,7 +13048,7 @@
* message.el (message-do-auto-fill): Use gnus-point-at-bol.
(autoload): Add some autoloads.
-2001-10-12 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-10-12 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
Suggested by Oliver Scholz <epameinondas@gmx.de>.
* message.el (message-do-auto-fill): New function. Like
@@ -13183,7 +13183,7 @@
* 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 <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-09-29 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-mode-map): Keybinding for `gnus-delay-article'.
(message-mode-menu): Menu item for same.
@@ -13226,7 +13226,7 @@
(gnus-topic-catchup-articles): New function. Suggested by Robin
S. Socha <robin-dated-1001857693.185e29@socha.net>.
-2001-09-27 11:00:00 Gerd M,Av(Bllmann <gerd@gnu.org>
+2001-09-27 11:00:00 Gerd Möllmann <gerd@gnu.org>
* gnus-ems.el (gnus-article-display-xface): Insert xface after
previous ones.
@@ -13287,7 +13287,7 @@
* 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 <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-09-20 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-tab-body-function): New variable.
* message.el (message-tab): Use it.
@@ -13318,7 +13318,7 @@
* 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 Gerd M,Av(Bllmann <gerd@gnu.org>
+2001-09-17 08:00:00 Gerd Möllmann <gerd@gnu.org>
* gnus-srvr.el (gnus-server-mode): Fix bogus fontification.
@@ -13359,7 +13359,7 @@
* 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 <Pavel@Janik.cz>
+2001-09-12 Pavel Janík <Pavel@Janik.cz>
* mm-util.el (mm-charset-synonym-alist): Add windows-1250 so we
can read e-mails from Microsoft Outlook users not using ISO
@@ -13478,7 +13478,7 @@
* gnus-sum.el (gnus-summary-insert-line): Fix.
-2001-09-06 Bj,Av(Brn Torkelsson <torkel@acc.umu.se>
+2001-09-06 Björn Torkelsson <torkel@acc.umu.se>
* gnus-sum.el: Bind g-s-t-s to "W g".
* gnus-sum.el (gnus-summary-make-menu-bar): Add g-s-t-s.
@@ -13494,7 +13494,7 @@
* gnus-sum.el (gnus-summary-insert-line): Insert forwarded, recent
and unseen marks.
-2001-09-05 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-09-05 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* nnmail.el (nnmail-split-fancy): Document `junk'.
@@ -13772,7 +13772,7 @@
* gnus-spec.el (gnus-correct-substring): Stopped one character
before we wanted.
-2001-08-19 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2001-08-19 Pavel Janík <Pavel@Janik.cz>
* earcon.el (earcon-auto-play): Remove unused option.
@@ -13930,7 +13930,7 @@
* mml.el (mml-menu): Collapse Attach, Insert and Security submenu.
-2001-08-17 Bj,Av(Brn Torkelsson <torkel@acc.kth.se>
+2001-08-17 Björn Torkelsson <torkel@acc.kth.se>
* message.el: Rename "Abort Message" to "Postpone Message".
Remove "Attach file as MIME" from Message menu, it's already in
@@ -13984,17 +13984,17 @@
* gnus-srvr.el (gnus-server-browse-in-group-buffer): Default to
nil.
-2001-08-15 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-08-15 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-delay.el (gnus-delay-article): Allow "01:23" time spec,
which specifies a time today or tomorrow.
-2001-08-15 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2001-08-15 Pavel Janík <Pavel@Janik.cz>
* gnus-agent.el (gnus-agent-make-mode-line-string)
(gnus-agent-toggle-plugged): Use new API.
-2001-08-14 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-08-14 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-delay.el (gnus-delay-send-drafts): Fix check whether
deadline has expired.
@@ -14054,7 +14054,7 @@
(nndoc-oe-dbx-dissection): New function.
(nndoc-oe-dbx-generate-article): New function.
-2001-08-11 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-08-11 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-delay.el (gnus-delay-send-drafts): Cleaner way to check
whether deadline has been reached. Patch from Dan Nicolaescu
@@ -14123,7 +14123,7 @@
* gnus-sum.el (gnus-summary-edit-article-done): Ditto.
* gnus-sum.el (gnus-summary-reparent-thread): Ditto.
-2001-08-07 16:00:00 Gerd M,Av(Bllmann <gerd@gnu.org>
+2001-08-07 16:00:00 Gerd Möllmann <gerd@gnu.org>
* mm-uu.el (mm-uu-dissect): Autoload.
@@ -14195,7 +14195,7 @@
before remove.
(gnus-mime-security-show-details): Ditto.
-2001-08-04 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-08-04 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* nnmail.el (nnmail-split-fancy-with-parent): Correct `mapconcat'
syntax. Protect string-match against nil string and regexp.
@@ -14280,7 +14280,7 @@
* gnus-msg.el (gnus-post-method): Refer to `gnus-parameters'.
2001-07-31 17:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- Originally from Pavel Jan,Am(Bk <Pavel@Janik.cz>
+ Originally from Pavel Janík <Pavel@Janik.cz>
* gnus-agent.el (gnus-agent-make-mode-line-string): New function.
(gnus-agent-toggle-plugged): Use it.
@@ -14292,7 +14292,7 @@
(gnus-read-newsrc-el-file, gnus-save-newsrc-file)
(gnus-slave-save-newsrc): Use it.
-2001-07-31 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-07-31 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-delay.el (gnus-delay-initialize): Use standard define-key
syntax.
@@ -14386,7 +14386,7 @@
calls widen. Thanks to Christoph Conrad
<christoph.conrad@gmx.de>.
-2001-07-29 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-07-29 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus.el (gnus-summary-line-format): Mention `gnus-sum-thread-*'
for %B spec.
@@ -14477,7 +14477,7 @@
* nnheader.el (nnheader-translate-file-chars): cygwin32 is running
in M$Windows too.
-2001-07-26 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-07-26 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-delay.el (gnus-delay-send-drafts): Don't `error'.
@@ -14555,7 +14555,7 @@
* 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 <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-07-24 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-delay.el (gnus-delay-default-hour): New variable.
(gnus-delay-article): Allow specific date in YYYY-MM-DD format.
@@ -14589,7 +14589,7 @@
`gnus-check-bogus-newsgroups' just after the native server is
opened.
-2001-07-23 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-07-23 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* nnmail.el (nnmail-do-request-post): Util function to be used by
`nnchoke-request-post' for all nnmail-derived backends.
@@ -14607,7 +14607,7 @@
* gnus-msg.el (gnus-setup-message): make-local-hook.
-2001-07-22 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-07-22 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-delay.el (gnus-delay-article): Fix `read-string' for
XEmacs. Allow more units. Submitted by Karl Kleinpaste
@@ -14617,7 +14617,7 @@
whether the groups exist, check the right server based on
`gnus-post-method'.
-2001-07-21 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-07-21 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-delay.el: New file.
@@ -14632,7 +14632,7 @@
(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 <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-07-21 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* nnml.el (nnml-request-post): New function. Can be used for
annotations in nnml groups.
@@ -14694,12 +14694,12 @@
* gnus-art.el (gnus-article-edit-mode): Use define-derived-mode.
-2001-07-16 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-07-16 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-citation-line-function): Refer to
gnus-cite-attribution-suffix.
-2001-07-15 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2001-07-15 Pavel Janík <Pavel@Janik.cz>
* gnus-art.el, ...: Error convention changes.
@@ -14712,7 +14712,7 @@
* nnrss.el (nnrss-read-group-data): Nuke emacs-lisp-mode-hook.
(nnrss-read-server-data): Ditto.
-2001-07-13 12:00:00 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2001-07-13 12:00:00 Pavel Janík <Pavel@Janik.cz>
* gnus-setup.el (gnus-use-installed-gnus): Typo.
* Cleanup files.
@@ -14757,7 +14757,7 @@
(mm-display-external): Use it. Use term to display when no
window-system.
-2001-07-12 Bj,Av(Brn Torkelsson <torkel@hpc2n.umu.se>
+2001-07-12 Björn Torkelsson <torkel@hpc2n.umu.se>
* gnus-srvr.el (gnus-browse-make-menu-bar): Changed one of the
Browse->Next entries to Browse->Prev.
@@ -14783,7 +14783,7 @@
* gnus-draft.el (gnus-draft-edit-message): Remove Date here.
(gnus-draft-setup): Remove backlog.
-2001-07-10 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2001-07-10 Pavel Janík <Pavel@Janik.cz>
* gnus-logic.el, gnus-srvr.el, gnus-vm.el, nnheaderxm.el, nnoo.el:
Cleanup.
@@ -15194,7 +15194,7 @@
* gnus-sum.el (gnus-summary-catchup): New argument.
(gnus-summary-catchup-from-here): New function.
-2001-05-30 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-05-30 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* mm-view.el (mm-inline-image-xemacs): Insert newline, then move
back, then insert glyph. (Before, the glyph was inserted first,
@@ -15398,7 +15398,7 @@
matching subjects.
(gnus-offer-save-summaries): Clean up.
-2001-04-13 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-04-13 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* nnmail.el (nnmail-split-fancy-with-parent): Add docstring.
@@ -15606,7 +15606,7 @@
* mml2015.el (mml2015-gpg-extract-from): No error.
-2001-03-18 23:00:00 Bj,Ax(Brn Mork <bmork@dod.no>
+2001-03-18 23:00:00 Bjørn Mork <bmork@dod.no>
* mml2015.el (mml2015-gpg-extract-from): New function.
(mml2015-gpg-verify): Use it.
@@ -15634,7 +15634,7 @@
`nnimap-use-nov-p' (it really tested the negative).
(nnimap-retrieve-headers): Use it.
-2001-03-11 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-03-11 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-generate-headers-first): Update doc.
@@ -15852,7 +15852,7 @@
* gnus-draft.el (gnus-draft-reminder): "Confirm to exit?"
-2001-02-19 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-02-19 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-sum.el (gnus-thread-sort-functions): Doc fix. Refer to
gnus-article-sort-functions.
@@ -15969,7 +15969,7 @@
(gnus-subscribe-hierarchically): Return gnus-subscribe-newsgroup's
return .
-2001-02-12 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-02-12 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-cus.el (gnus-score-customize): Doc fix.
@@ -16042,7 +16042,7 @@
* gnus-uu.el (gnus-uu-grab-articles): Shoot down original article
buffer.
-2001-02-07 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-02-07 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* message.el (message-generate-headers-first): Doc fix.
@@ -16557,7 +16557,7 @@
* 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 <jonkv@ida.liu.se>.
+ Kvarnström <jonkv@ida.liu.se>.
2000-12-30 00:17:38 Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -16759,7 +16759,7 @@
* message.el (message-forward): Save-restriction.
-2000-12-21 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2000-12-21 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-art.el (article-treat-dumbquotes): More doc, provided by
Paul Stevenson <p.stevenson@surrey.ac.uk>
@@ -17849,10 +17849,10 @@
* message.el (message-font-lock-keywords): Use
message-cite-prefix-regexp.
-2000-11-15 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2000-11-15 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-group.el (gnus-group-jump-to-group-prompt): New variable by
- Stein Arild Str,Ax(Bmme.
+ Stein Arild Strømme.
(gnus-group-jump-to-group): Use it.
(gnus-group-jump-to-group-prompt): Customize.
@@ -17984,7 +17984,7 @@
* gnus-art.el (gnus-mime-display-alternative): Show button if no
preferred part.
-2000-11-07 Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2000-11-07 Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus-sum.el (gnus-move-split-methods): Say that
`gnus-split-methods' uses file names, whereas this uses group
@@ -18571,5 +18571,5 @@ See ChangeLog.1 for earlier changes.
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;; Local Variables:
-;; coding: iso-2022-7bit
+;; coding: utf-8
;; End:
diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el
index ffc6a4b78af..e94904bf175 100644
--- a/lisp/gnus/auth-source.el
+++ b/lisp/gnus/auth-source.el
@@ -1008,7 +1008,7 @@ Note that the MAX parameter is used so we can exit the parse early."
(while (and (zerop (forward-line 1))
(looking-at "$")))
(narrow-to-region (point) (point)))
- ((member elem tokens)
+ ((and (member elem tokens) (null pair))
;; Tokens that don't have a following value are ignored,
;; except "default".
(when (and pair (or (cdr pair)
diff --git a/lisp/gnus/deuglify.el b/lisp/gnus/deuglify.el
index 8ef89a9e56d..36e91980ba2 100644
--- a/lisp/gnus/deuglify.el
+++ b/lisp/gnus/deuglify.el
@@ -270,7 +270,7 @@
:group 'gnus-outlook-deuglify)
(defcustom gnus-outlook-deuglify-attrib-verb-regexp
- "wrote\\|writes\\|says\\|schrieb\\|schreibt\\|meinte\\|skrev\\|a crit\\|schreef\\|escribi"
+ "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
@@ -472,7 +472,7 @@ NODISPLAY is non-nil, don't redisplay the article buffer."
(provide 'deuglify)
;; Local Variables:
-;; coding: iso-8859-1
+;; coding: utf-8
;; End:
;;; deuglify.el ends here
diff --git a/lisp/gnus/gmm-utils.el b/lisp/gnus/gmm-utils.el
index c009ac762c5..8bafb7d0f6b 100644
--- a/lisp/gnus/gmm-utils.el
+++ b/lisp/gnus/gmm-utils.el
@@ -417,6 +417,31 @@ coding-system."
(write-region start end filename append visit lockname))
(write-region start end filename append visit lockname mustbenew)))
+;; `interactive-p' is obsolete since Emacs 23.2.
+(defmacro gmm-called-interactively-p (kind)
+ (condition-case nil
+ (progn
+ (eval '(called-interactively-p 'any))
+ ;; Emacs >=23.2
+ `(called-interactively-p ,kind))
+ ;; Emacs <23.2
+ (wrong-number-of-arguments '(called-interactively-p))
+ ;; XEmacs
+ (void-function '(interactive-p))))
+
+;; `labels' is obsolete since Emacs 24.3.
+(defmacro gmm-labels (bindings &rest body)
+ "Make temporary function bindings.
+The bindings can be recursive and the scoping is lexical, but capturing
+them in closures will only work if `lexical-binding' is in use. But in
+Emacs 24.2 and older, the lexical scoping is handled via `lexical-let'
+rather than relying on `lexical-binding'.
+
+\(fn ((FUNC ARGLIST BODY...) ...) FORM...)"
+ `(,(progn (require 'cl) (if (fboundp 'cl-labels) 'cl-labels 'labels))
+ ,bindings ,@body))
+(put 'gmm-labels 'lisp-indent-function 1)
+
(provide 'gmm-utils)
;;; gmm-utils.el ends here
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index 681ae6c0a09..1d0f346e10f 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -1489,7 +1489,8 @@ downloaded into the agent."
(defun gnus-agent-fetch-articles (group articles)
"Fetch ARTICLES from GROUP and put them into the Agent."
- (when articles
+ (when (and articles
+ (gnus-online (gnus-group-method group)))
(gnus-agent-load-alist group)
(let* ((alist gnus-agent-article-alist)
(headers (if (< (length articles) 2) nil gnus-newsgroup-headers))
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 74733356283..13d9b4e5c28 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -1121,8 +1121,8 @@ parts. When nil, redisplay article."
(const :tag "Header" head)))
(defvar gnus-article-treat-types '("text/plain" "text/x-verbatim"
- "text/x-patch")
- "Parts to treat.")
+ "text/x-patch" "text/html")
+ "Part types eligible for treatment.")
(defvar gnus-inhibit-treatment nil
"Whether to inhibit treatment.")
@@ -2718,7 +2718,7 @@ If READ-CHARSET, ask for a coding system."
(while (re-search-forward
"\\(\\(https?\\|ftp\\)://\\S-+\\) *\n\\(\\S-+\\)" nil t)
(replace-match "\\1\\3" t)))
- (when (interactive-p)
+ (when (gmm-called-interactively-p 'any)
(gnus-treat-article nil))))
(defun article-wash-html ()
@@ -2877,21 +2877,23 @@ message header will be added to the bodies of the \"text/html\" parts."
;; Add a meta html tag to specify charset and a header.
(cond
(header
- (let (title eheader body hcharset coding force-charset)
+ (let (title eheader body hcharset coding)
(with-temp-buffer
(mm-enable-multibyte)
(setq case-fold-search t)
(insert header "\n")
(setq title (message-fetch-field "subject"))
(goto-char (point-min))
- (while (re-search-forward "\\(<\\)\\|\\(>\\)\\|&" nil t)
+ (while (re-search-forward "\\(<\\)\\|\\(>\\)\\|\\(&\\)\\|\n"
+ nil t)
(replace-match (cond ((match-beginning 1) "&lt;")
((match-beginning 2) "&gt;")
- (t "&amp;"))))
+ ((match-beginning 3) "&amp;")
+ (t "<br>\n"))))
(goto-char (point-min))
- (insert "<pre>\n")
+ (insert "<div align=\"left\">\n")
(goto-char (point-max))
- (insert "</pre>\n<hr>\n")
+ (insert "</div>\n<hr>\n")
;; We have to examine charset one by one since
;; charset specified in parts might be different.
(if (eq charset 'gnus-decoded)
@@ -2900,8 +2902,7 @@ message header will be added to the bodies of the \"text/html\" parts."
charset)
title (when title
(mm-encode-coding-string title charset))
- body (mm-encode-coding-string content charset)
- force-charset t)
+ body (mm-encode-coding-string content charset))
(setq hcharset (mm-find-mime-charset-region (point-min)
(point-max)))
(cond ((= (length hcharset) 1)
@@ -2932,8 +2933,7 @@ message header will be added to the bodies of the \"text/html\" parts."
body (mm-encode-coding-string
(mm-decode-coding-string
content body)
- charset)
- force-charset t)))
+ charset))))
(setq charset hcharset
eheader (mm-encode-coding-string
(buffer-string) coding)
@@ -2947,7 +2947,7 @@ message header will be added to the bodies of the \"text/html\" parts."
(mm-disable-multibyte)
(insert body)
(when charset
- (mm-add-meta-html-tag handle charset force-charset))
+ (mm-add-meta-html-tag handle charset t))
(when title
(goto-char (point-min))
(unless (search-forward "<title>" nil t)
@@ -4361,6 +4361,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
(gnus-define-keys gnus-article-mode-map
" " gnus-article-goto-next-page
+ [?\S-\ ] gnus-article-goto-prev-page
"\177" gnus-article-goto-prev-page
[delete] gnus-article-goto-prev-page
[backspace] gnus-article-goto-prev-page
@@ -4539,18 +4540,17 @@ commands:
(gnus-article-mode))
(setq truncate-lines gnus-article-truncate-lines)
(current-buffer))
- (with-current-buffer (gnus-get-buffer-create name)
- (gnus-article-mode)
- (setq truncate-lines gnus-article-truncate-lines)
- (make-local-variable 'gnus-summary-buffer)
- (setq gnus-summary-buffer
- (gnus-summary-buffer-name gnus-newsgroup-name))
- (gnus-summary-set-local-parameters gnus-newsgroup-name)
- (when article-lapsed-timer
- (gnus-stop-date-timer))
- (when gnus-article-update-date-headers
- (gnus-start-date-timer gnus-article-update-date-headers))
- (current-buffer)))))
+ (let ((summary gnus-summary-buffer))
+ (with-current-buffer (gnus-get-buffer-create name)
+ (gnus-article-mode)
+ (setq truncate-lines gnus-article-truncate-lines)
+ (set (make-local-variable 'gnus-summary-buffer) summary)
+ (gnus-summary-set-local-parameters gnus-newsgroup-name)
+ (when article-lapsed-timer
+ (gnus-stop-date-timer))
+ (when gnus-article-update-date-headers
+ (gnus-start-date-timer gnus-article-update-date-headers))
+ (current-buffer))))))
(defun gnus-article-stop-animations ()
(dolist (timer (and (boundp 'timer-list)
@@ -8689,9 +8689,7 @@ For example:
gnus-mime-security-button-end-line-format))
(gnus-insert-mime-security-button handle)))
(mm-set-handle-multipart-parameter
- handle 'gnus-region
- (cons (set-marker (make-marker) (point-min))
- (set-marker (make-marker) (point-max))))
+ handle 'gnus-region (cons (point-min-marker) (point-max-marker)))
(goto-char (point-max))))
(defun gnus-mime-security-run-function (function)
diff --git a/lisp/gnus/gnus-async.el b/lisp/gnus/gnus-async.el
index 41b0cc25006..c5d64332547 100644
--- a/lisp/gnus/gnus-async.el
+++ b/lisp/gnus/gnus-async.el
@@ -254,7 +254,7 @@ that was fetched."
gnus-async-article-alist
(cons (list (intern (format "%s-%d" group article)
gnus-async-hashtb)
- mark (set-marker (make-marker) (point-max))
+ mark (point-max-marker)
group article)
gnus-async-article-alist))))
(if (not (gnus-buffer-live-p summary))
diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el
index 5afdb064fa9..7a3d273622a 100644
--- a/lisp/gnus/gnus-bookmark.el
+++ b/lisp/gnus/gnus-bookmark.el
@@ -367,7 +367,7 @@ The leftmost column displays a D if the bookmark is flagged for
deletion, or > if it is flagged for displaying."
(interactive)
(gnus-bookmark-maybe-load-default-file)
- (if (interactive-p)
+ (if (gmm-called-interactively-p 'any)
(switch-to-buffer (get-buffer-create "*Gnus Bookmark List*"))
(set-buffer (get-buffer-create "*Gnus Bookmark List*")))
(let ((inhibit-read-only t)
diff --git a/lisp/gnus/gnus-cite.el b/lisp/gnus/gnus-cite.el
index 708b60442da..22e97cd8f4f 100644
--- a/lisp/gnus/gnus-cite.el
+++ b/lisp/gnus/gnus-cite.el
@@ -745,28 +745,14 @@ See also the documentation for `gnus-article-highlight-citation'."
(gnus-article-search-signature)
(setq total (count-lines start (point)))
(while atts
- (setq hidden (+ hidden (length (cdr (assoc (cdar atts)
- gnus-cite-prefix-alist))))
+ (setq hidden (+ hidden (length
+ (cdr (assoc (cdar atts)
+ gnus-cite-prefix-alist))))
atts (cdr atts)))
(when (or force
(and (> (* 100 hidden) (* gnus-cite-hide-percentage total))
(> hidden gnus-cite-hide-absolute)))
- (gnus-add-wash-type 'cite)
- (setq atts gnus-cite-attribution-alist)
- (while atts
- (setq total (cdr (assoc (cdar atts) gnus-cite-prefix-alist))
- atts (cdr atts))
- (while total
- (setq hidden (car total)
- total (cdr total))
- (goto-char (point-min))
- (forward-line (1- hidden))
- (unless (assq hidden gnus-cite-attribution-alist)
- (gnus-add-text-properties
- (point) (progn (forward-line 1) (point))
- (nconc (list 'article-type 'cite)
- gnus-hidden-properties)))))))))
- (gnus-set-mode-line 'article)))
+ (gnus-article-hide-citation)))))))
(defun gnus-article-hide-citation-in-followups ()
"Hide cited text in non-root articles."
@@ -1264,7 +1250,7 @@ When enabled, it automatically turns on `font-lock-mode'."
(provide 'gnus-cite)
;; Local Variables:
-;; coding: iso-8859-1
+;; coding: utf-8
;; End:
;;; gnus-cite.el ends here
diff --git a/lisp/gnus/gnus-delay.el b/lisp/gnus/gnus-delay.el
index 5c14ffcfbdf..921d24109c2 100644
--- a/lisp/gnus/gnus-delay.el
+++ b/lisp/gnus/gnus-delay.el
@@ -2,7 +2,7 @@
;; Copyright (C) 2001-2013 Free Software Foundation, Inc.
-;; Author: Kai Grojohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+;; Author: Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
;; Keywords: mail, news, extensions
;; This file is part of GNU Emacs.
@@ -186,7 +186,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil."
(provide 'gnus-delay)
;; Local Variables:
-;; coding: iso-8859-1
+;; coding: utf-8
;; End:
;;; gnus-delay.el ends here
diff --git a/lisp/gnus/gnus-dired.el b/lisp/gnus/gnus-dired.el
index e5ebb39f6d2..1592d73684c 100644
--- a/lisp/gnus/gnus-dired.el
+++ b/lisp/gnus/gnus-dired.el
@@ -155,8 +155,8 @@ filenames."
(setq destination
(if (= (length bufs) 1)
(get-buffer (car bufs))
- (gnus-completing-read "Attach to which mail composition buffer"
- bufs t)))
+ (gnus-completing-read "Attach to buffer"
+ bufs t nil nil (car bufs))))
;; setup a new mail composition buffer
(let ((mail-user-agent gnus-dired-mail-mode)
;; A workaround to prevent Gnus from displaying the Gnus
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 76977b7690a..2c45d3c24a1 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -1667,7 +1667,7 @@ and ends at END."
(let ((face (cdar (gnus-group-update-eval-form
group
gnus-group-highlight))))
- (unless (eq face (get-text-property beg 'face))
+ (unless (eq face (gnus-get-text-property-excluding-characters-with-faces beg 'face))
(let ((inhibit-read-only t))
(gnus-put-text-property-excluding-characters-with-faces
beg end 'face
@@ -2310,6 +2310,7 @@ Return the name of the group if selection was successful."
(let ((group (if (gnus-group-foreign-p group) group
(gnus-group-prefixed-name (gnus-group-real-name group)
method))))
+ (gnus-set-active group nil)
(gnus-sethash
group
`(-1 nil (,group
@@ -2441,7 +2442,7 @@ Valid input formats include:
(gnus-read-ephemeral-gmane-group group start range)))
(defcustom gnus-bug-group-download-format-alist
- '((emacs . "http://debbugs.gnu.org/%s;mboxmaint=yes;mboxstat=yes")
+ '((emacs . "http://debbugs.gnu.org/cgi/bugreport.cgi?bug=%s;mboxmaint=yes;mboxstat=yes")
(debian
. "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%s&mbox=yes;mboxmaint=yes"))
"Alist of symbols for bug trackers and the corresponding URL format string.
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index 0a02138ee58..2378b598eeb 100644
--- a/lisp/gnus/gnus-int.el
+++ b/lisp/gnus/gnus-int.el
@@ -248,17 +248,26 @@ If it is down, start it up (again)."
'denied))
(defvar gnus-backend-trace nil)
+(defvar gnus-backend-trace-elapsed nil)
-(defun gnus-open-server (gnus-command-method)
- "Open a connection to GNUS-COMMAND-METHOD."
- (when (stringp gnus-command-method)
- (setq gnus-command-method (gnus-server-to-method gnus-command-method)))
+(defun gnus-backend-trace (type form)
(when gnus-backend-trace
(with-current-buffer (get-buffer-create "*gnus trace*")
(buffer-disable-undo)
(goto-char (point-max))
(insert (format-time-string "%H:%M:%S")
- (format " %S\n" gnus-command-method))))
+ (format " %.2fs %s %S\n"
+ (if (numberp gnus-backend-trace-elapsed)
+ (- (float-time) gnus-backend-trace-elapsed)
+ 0)
+ type form))
+ (setq gnus-backend-trace-elapsed (float-time)))))
+
+(defun gnus-open-server (gnus-command-method)
+ "Open a connection to GNUS-COMMAND-METHOD."
+ (when (stringp gnus-command-method)
+ (setq gnus-command-method (gnus-server-to-method gnus-command-method)))
+ (gnus-backend-trace :opening gnus-command-method)
(let ((elem (assoc gnus-command-method gnus-opened-servers))
(server (gnus-method-to-server-name gnus-command-method)))
;; If this method was previously denied, we just return nil.
@@ -333,6 +342,7 @@ If it is down, start it up (again)."
(save-excursion
(gnus-agent-possibly-synchronize-flags-server
gnus-command-method)))
+ (gnus-backend-trace :opened gnus-command-method)
result)))))
(defun gnus-close-server (gnus-command-method)
@@ -353,9 +363,13 @@ If it is down, start it up (again)."
"Read and update infos from GNUS-COMMAND-METHOD."
(when (stringp gnus-command-method)
(setq gnus-command-method (gnus-server-to-method gnus-command-method)))
- (funcall (gnus-get-function gnus-command-method 'finish-retrieve-group-infos)
- (nth 1 gnus-command-method)
- infos data))
+ (gnus-backend-trace :finishing gnus-command-method)
+ (prog1
+ (funcall (gnus-get-function gnus-command-method
+ 'finish-retrieve-group-infos)
+ (nth 1 gnus-command-method)
+ infos data)
+ (gnus-backend-trace :finished gnus-command-method)))
(defun gnus-retrieve-group-data-early (gnus-command-method infos)
"Start early async retrieval of data from GNUS-COMMAND-METHOD."
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el
index c7509e858f7..fce9a3633c2 100644
--- a/lisp/gnus/gnus-msg.el
+++ b/lisp/gnus/gnus-msg.el
@@ -415,6 +415,11 @@ Thank you for your help in stamping out bugs.
(gnus-inews-make-draft-meta-information
,(gnus-group-decoded-name gnus-newsgroup-name) ',articles)))
+(autoload 'nnir-article-number "nnir" nil nil 'macro)
+(autoload 'nnir-article-group "nnir" nil nil 'macro)
+(autoload 'gnus-nnir-group-p "nnir")
+
+
(defvar gnus-article-reply nil)
(defmacro gnus-setup-message (config &rest forms)
(let ((winconf (make-symbol "gnus-setup-message-winconf"))
@@ -426,15 +431,22 @@ Thank you for your help in stamping out bugs.
`(let ((,winconf (current-window-configuration))
(,winconf-name gnus-current-window-configuration)
(,buffer (buffer-name (current-buffer)))
- (,article gnus-article-reply)
+ (,article (if (and (gnus-nnir-group-p gnus-newsgroup-name)
+ gnus-article-reply)
+ (nnir-article-number gnus-article-reply)
+ gnus-article-reply))
(,yanked gnus-article-yanked-articles)
- (,group gnus-newsgroup-name)
+ (,group (if (and (gnus-nnir-group-p gnus-newsgroup-name)
+ gnus-article-reply)
+ (nnir-article-group gnus-article-reply)
+ gnus-newsgroup-name))
(message-header-setup-hook
(copy-sequence message-header-setup-hook))
(mbl mml-buffer-list)
(message-mode-hook (copy-sequence message-mode-hook)))
(setq mml-buffer-list nil)
- (add-hook 'message-header-setup-hook 'gnus-inews-insert-gcc)
+ (add-hook 'message-header-setup-hook (lambda ()
+ (gnus-inews-insert-gcc ,group)))
;; message-newsreader and message-mailer were formerly set in
;; gnus-inews-add-send-actions, but this is too late when
;; message-generate-headers-first is used. --ansel
@@ -526,7 +538,8 @@ instead."
(message-mail to subject other-headers continue
nil yank-action send-actions return-action))
(let ((buf (current-buffer))
- (gnus-newsgroup-name (or gnus-newsgroup-name ""))
+ ;; Don't use posting styles corresponding to any existing group.
+ (gnus-newsgroup-name "")
mail-buf)
(gnus-setup-message 'message
(message-mail to subject other-headers continue
@@ -1706,7 +1719,8 @@ this is a reply."
(group (when group (gnus-group-decoded-name group)))
(var (or gnus-outgoing-message-group gnus-message-archive-group))
(gcc-self-val
- (and group (gnus-group-find-parameter group 'gcc-self)))
+ (and group (not (gnus-virtual-group-p group))
+ (gnus-group-find-parameter group 'gcc-self)))
result
(groups
(cond
@@ -1745,7 +1759,8 @@ this is a reply."
(setq var (cdr var)))
result)))
name)
- (when (or groups gcc-self-val)
+ (when (and (or groups gcc-self-val)
+ (gnus-alive-p))
(when (stringp groups)
(setq groups (list groups)))
(save-excursion
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index a0013c0ee2c..5a7dfd82d28 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -87,6 +87,12 @@
(require 'easymenu)
(require 'registry)
+;; Silence XEmacs byte compiler, which will otherwise complain about
+;; call to `eieio-persistent-read'.
+(when (featurep 'xemacs)
+ (byte-compiler-options
+ (warnings (- callargs))))
+
(defvar gnus-adaptive-word-syntax-table)
(defvar gnus-registry-dirty t
@@ -296,8 +302,14 @@ This is not required after changing `gnus-registry-cache-file'."
(condition-case nil
(progn
(gnus-message 5 "Reading Gnus registry from %s..." file)
- (setq gnus-registry-db (gnus-registry-fixup-registry
- (eieio-persistent-read file)))
+ (setq gnus-registry-db
+ (gnus-registry-fixup-registry
+ (condition-case nil
+ (with-no-warnings
+ (eieio-persistent-read file 'registry-db))
+ ;; Older EIEIO versions do not check the class name.
+ ('wrong-number-of-arguments
+ (eieio-persistent-read file)))))
(gnus-message 5 "Reading Gnus registry from %s...done" file))
(error
(gnus-message
@@ -982,7 +994,7 @@ only the last one's marks are returned."
(let* ((article (last articles))
(id (gnus-registry-fetch-message-id-fast article))
(marks (when id (gnus-registry-get-id-key id 'mark))))
- (when (interactive-p)
+ (when (gmm-called-interactively-p 'any)
(gnus-message 1 "Marks are %S" marks))
marks))
diff --git a/lisp/gnus/gnus-salt.el b/lisp/gnus/gnus-salt.el
index 2126d56bb00..48b51d2c95d 100644
--- a/lisp/gnus/gnus-salt.el
+++ b/lisp/gnus/gnus-salt.el
@@ -659,7 +659,7 @@ Two predefined functions are available:
(while (and list
(not (eval (caar list))))
(setq list (cdr list)))))
- (unless (eq (setq face (cdar list)) (get-text-property beg 'face))
+ (unless (eq (setq face (cdar list)) (gnus-get-text-property-excluding-characters-with-faces beg 'face))
(gnus-put-text-property-excluding-characters-with-faces
beg end 'face
(if (boundp face) (symbol-value face) face)))))
@@ -828,31 +828,33 @@ Two predefined functions are available:
(defun gnus-highlight-selected-tree (article)
"Highlight the selected article in the tree."
- (let ((buf (current-buffer))
- region)
- (set-buffer gnus-tree-buffer)
- (when (setq region (gnus-tree-article-region article))
- (when (or (not gnus-selected-tree-overlay)
- (gnus-extent-detached-p gnus-selected-tree-overlay))
- ;; Create a new overlay.
- (gnus-overlay-put
- (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
- gnus-selected-tree-overlay (goto-char (car region)) (cdr region))
- (gnus-tree-minimize)
- (gnus-tree-recenter)
- (let ((selected (selected-window)))
- (when (gnus-get-buffer-window (set-buffer gnus-tree-buffer) t)
- (select-window (gnus-get-buffer-window (set-buffer gnus-tree-buffer) t))
- (gnus-horizontal-recenter)
- (select-window selected))))
-;; If we remove this save-excursion, it updates the wrong mode lines?!?
- (with-current-buffer gnus-tree-buffer
- (gnus-set-mode-line 'tree))
- (set-buffer buf)))
+ (when (buffer-live-p gnus-tree-buffer)
+ (let ((buf (current-buffer))
+ region)
+ (set-buffer gnus-tree-buffer)
+ (when (setq region (gnus-tree-article-region article))
+ (when (or (not gnus-selected-tree-overlay)
+ (gnus-extent-detached-p gnus-selected-tree-overlay))
+ ;; Create a new overlay.
+ (gnus-overlay-put
+ (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
+ gnus-selected-tree-overlay (goto-char (car region)) (cdr region))
+ (gnus-tree-minimize)
+ (gnus-tree-recenter)
+ (let ((selected (selected-window)))
+ (when (gnus-get-buffer-window (set-buffer gnus-tree-buffer) t)
+ (select-window
+ (gnus-get-buffer-window (set-buffer gnus-tree-buffer) t))
+ (gnus-horizontal-recenter)
+ (select-window selected))))
+ ;; If we remove this save-excursion, it updates the wrong mode lines?!?
+ (with-current-buffer gnus-tree-buffer
+ (gnus-set-mode-line 'tree))
+ (set-buffer buf))))
(defun gnus-tree-highlight-article (article face)
(with-current-buffer (gnus-get-tree-buffer)
diff --git a/lisp/gnus/gnus-score.el b/lisp/gnus/gnus-score.el
index 625f2c989b2..da5c31325bd 100644
--- a/lisp/gnus/gnus-score.el
+++ b/lisp/gnus/gnus-score.el
@@ -33,6 +33,7 @@
(require 'gnus-win)
(require 'message)
(require 'score-mode)
+(require 'gmm-utils)
(defcustom gnus-global-score-files nil
"List of global score files and directories.
@@ -1718,33 +1719,37 @@ score in `gnus-newsgroup-scored' by SCORE."
nil)
(defun gnus-score-decode-text-parts ()
- (labels ((mm-text-parts (handle)
- (cond ((stringp (car handle))
- (let ((parts (mapcan #'mm-text-parts (cdr handle))))
- (if (equal "multipart/alternative" (car handle))
- ;; pick the first supported alternative
- (list (car parts))
- parts)))
-
- ((bufferp (car handle))
- (when (string-match "^text/" (mm-handle-media-type handle))
- (list handle)))
-
- (t (mapcan #'mm-text-parts handle))))
- (my-mm-display-part (handle)
- (when handle
- (save-restriction
- (narrow-to-region (point) (point))
- (mm-display-inline handle)
- (goto-char (point-max))))))
+ (gmm-labels
+ ((mm-text-parts
+ (handle)
+ (cond ((stringp (car handle))
+ (let ((parts (apply #'append
+ (mapcar #'mm-text-parts (cdr handle)))))
+ (if (equal "multipart/alternative" (car handle))
+ ;; pick the first supported alternative
+ (list (car parts))
+ parts)))
+
+ ((bufferp (car handle))
+ (when (string-match "^text/" (mm-handle-media-type handle))
+ (list handle)))
+
+ (t (apply #'append (mapcar #'mm-text-parts handle)))))
+ (my-mm-display-part
+ (handle)
+ (when handle
+ (save-restriction
+ (narrow-to-region (point) (point))
+ (mm-display-inline handle)
+ (goto-char (point-max))))))
(let (;(mm-text-html-renderer 'w3m-standalone)
- (handles (mm-dissect-buffer t)))
+ (handles (mm-dissect-buffer t)))
(save-excursion
- (article-goto-body)
- (delete-region (point) (point-max))
- (mapc #'my-mm-display-part (mm-text-parts handles))
- handles))))
+ (article-goto-body)
+ (delete-region (point) (point-max))
+ (mapc #'my-mm-display-part (mm-text-parts handles))
+ handles))))
(defun gnus-score-body (scores header now expire &optional trace)
(if gnus-agent-fetching
diff --git a/lisp/gnus/gnus-spec.el b/lisp/gnus/gnus-spec.el
index c355b9a551f..2606b8860af 100644
--- a/lisp/gnus/gnus-spec.el
+++ b/lisp/gnus/gnus-spec.el
@@ -265,7 +265,14 @@ Return a list of updated types."
(defun gnus-face-face-function (form type)
`(gnus-add-text-properties
(point) (progn ,@form (point))
- '(gnus-face t face ,(symbol-value (intern (format "gnus-face-%d" type))))))
+ (cons 'face
+ (cons
+ ;; Delay consing the value of the `face' property until
+ ;; `gnus-add-text-properties' runs, since it will be modified
+ ;; by `gnus-put-text-property-excluding-characters-with-faces'.
+ (list ',(symbol-value (intern (format "gnus-face-%d" type))) 'default)
+ ;; Redundant now, but still convenient.
+ '(gnus-face t)))))
(defun gnus-balloon-face-function (form type)
`(gnus-put-text-property
@@ -411,7 +418,7 @@ characters when given a pad value."
;; them will have the balloon-help text property.
(let ((case-fold-search nil))
(if (string-match
- "\\`\\(.*\\)%[0-9]?[{(]\\(.*\\)%[0-9]?[})]\\(.*\n?\\)\\'\\|%[-0-9]*=\\|%[-0-9]*\\*"
+ "\\`\\(.*\\)%[0-9]?[{(«]\\(.*\\)%[0-9]?[»})]\\(.*\n?\\)\\'\\|%[-0-9]*=\\|%[-0-9]*\\*"
format)
(gnus-parse-complex-format format spec-alist)
;; This is a simple format.
@@ -428,13 +435,13 @@ characters when given a pad value."
(goto-char (point-min))
(insert "(\"")
;; Convert all font specs into font spec lists.
- (while (re-search-forward "%\\([0-9]+\\)?\\([{}()]\\)" nil t)
+ (while (re-search-forward "%\\([0-9]+\\)?\\([«»{}()]\\)" nil t)
(let ((number (if (match-beginning 1)
(match-string 1) "0"))
(delim (aref (match-string 2) 0)))
(if (or (= delim ?\()
(= delim ?\{)
- (= delim ?\))
+ (= delim ?\«))
(replace-match (concat "\"("
(cond ((= delim ?\() "mouse")
((= delim ?\{) "face")
@@ -726,7 +733,7 @@ If PROPS, insert the result."
(provide 'gnus-spec)
;; Local Variables:
-;; coding: iso-8859-1
+;; coding: utf-8
;; End:
;;; gnus-spec.el ends here
diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el
index 8493c8871a9..69774587d80 100644
--- a/lisp/gnus/gnus-srvr.el
+++ b/lisp/gnus/gnus-srvr.el
@@ -713,6 +713,7 @@ claim them."
"q" gnus-browse-exit
"Q" gnus-browse-exit
"d" gnus-browse-describe-group
+ [delete] gnus-browse-delete-group
"\C-c\C-c" gnus-browse-exit
"?" gnus-browse-describe-briefly
@@ -964,6 +965,16 @@ how new groups will be entered into the group buffer."
(interactive (list (gnus-browse-group-name)))
(gnus-group-describe-group nil group))
+(defun gnus-browse-delete-group (group force)
+ "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
+doing the deletion."
+ (interactive (list (gnus-browse-group-name)
+ current-prefix-arg))
+ (gnus-group-delete-group group force))
+
(defun gnus-browse-unsubscribe-group ()
"Toggle subscription of the current group in the browse buffer."
(let ((sub nil)
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index c9896bf2754..48bb99bfbce 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -110,7 +110,7 @@ ask the servers (primary, secondary, and archive servers) to list new
groups since the last time it checked:
1. This variable is `ask-server'.
2. This variable is a list of select methods (see below).
- 3. `gnus-read-active-file' is nil or `some'.
+ 3. Option `gnus-read-active-file' is nil or `some'.
4. A prefix argument is given to `gnus-find-new-newsgroups' interactively.
Thus, if this variable is `ask-server' or a list of select methods or
@@ -395,7 +395,16 @@ This hook is called after Gnus is connected to the NNTP server."
(defcustom gnus-before-startup-hook nil
"A hook called before startup.
-This hook is called as the first thing when Gnus is started."
+This hook is called as the first thing when Gnus is started.
+See also `gnus-before-resume-hook'."
+ :group 'gnus-start
+ :type 'hook)
+
+(defcustom gnus-before-resume-hook nil
+ "A hook called before resuming Gnus after suspend.
+This hook is called as the first thing when Gnus is resumed after a suspend.
+See also `gnus-before-startup-hook'."
+ :version "24.4"
:group 'gnus-start
:type 'hook)
@@ -749,6 +758,7 @@ prompt the user for the name of an NNTP server to use."
(if (gnus-alive-p)
(progn
+ (gnus-run-hooks 'gnus-before-resume-hook)
(switch-to-buffer gnus-group-buffer)
(gnus-group-get-new-news
(and (numberp arg)
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 32ef7029456..e6366e775df 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -451,7 +451,7 @@ current article is unread."
:group 'gnus-summary-maneuvering
:type 'boolean)
-(defcustom gnus-auto-center-summary
+(defcustom gnus-auto-center-summary
(max (or (bound-and-true-p scroll-margin) 0) 2)
"*If non-nil, always center the current summary buffer.
In particular, if `vertical' do only vertical recentering. If non-nil
@@ -1167,7 +1167,7 @@ using `gnus-ignored-from-addresses'."
(defcustom gnus-summary-newsgroup-prefix "=> "
"*String prefixed to the Newsgroup field in the summary
-line when using `gnus-ignored-from-addresses'."
+line when using the option `gnus-ignored-from-addresses'."
:version "22.1"
:group 'gnus-summary
:type 'string)
@@ -1819,6 +1819,7 @@ increase the score of each group you read."
(gnus-define-keys gnus-summary-mode-map
" " gnus-summary-next-page
+ [?\S-\ ] gnus-summary-prev-page
"\177" gnus-summary-prev-page
[delete] gnus-summary-prev-page
[backspace] gnus-summary-prev-page
@@ -2058,6 +2059,7 @@ increase the score of each group you read."
(gnus-define-keys (gnus-summary-article-map "A" gnus-summary-mode-map)
" " gnus-summary-next-page
"n" gnus-summary-next-page
+ [?\S-\ ] gnus-summary-prev-page
"\177" gnus-summary-prev-page
[delete] gnus-summary-prev-page
"p" gnus-summary-prev-page
@@ -3493,8 +3495,8 @@ If the setup was successful, non-nil is returned."
(set-buffer buffer)
(setq gnus-summary-buffer (current-buffer))
(not gnus-newsgroup-prepared))
- ;; Fix by Sudish Joseph <joseph@cis.ohio-state.edu>
- (setq gnus-summary-buffer (set-buffer (gnus-get-buffer-create buffer)))
+ (set-buffer (gnus-get-buffer-create buffer))
+ (setq gnus-summary-buffer (current-buffer))
(gnus-summary-mode group)
(when (gnus-group-quit-config group)
(set (make-local-variable 'gnus-single-article-buffer) nil))
@@ -3552,11 +3554,7 @@ buffer that was in action when the last article was fetched."
(if (consp (car locals))
(set (caar locals) (pop vlist))
(set (car locals) (pop vlist)))
- (setq locals (cdr locals))))
- ;; The article buffer also has local variables.
- (when (gnus-buffer-live-p gnus-article-buffer)
- (set-buffer gnus-article-buffer)
- (setq gnus-summary-buffer summary))))))
+ (setq locals (cdr locals))))))))
(defun gnus-summary-article-unread-p (article)
"Say whether ARTICLE is unread or not."
@@ -3655,17 +3653,18 @@ buffer that was in action when the last article was fetched."
(or (car (funcall gnus-extract-address-components from))
from))
-(defun gnus-summary-from-or-to-or-newsgroups (header gnus-tmp-from)
+(defun gnus-summary-from-or-to-or-newsgroups (header from)
(let ((mail-parse-charset gnus-newsgroup-charset)
- (ignored-from-addresses (gnus-ignored-from-addresses))
- ; Is it really necessary to do this next part for each summary line?
- ; Luckily, doesn't seem to slow things down much.
- (mail-parse-ignored-charsets
- (with-current-buffer gnus-summary-buffer
- gnus-newsgroup-ignored-charsets)))
+ (ignored-from-addresses (gnus-ignored-from-addresses))
+ ;; Is it really necessary to do this next part for each summary line?
+ ;; Luckily, doesn't seem to slow things down much.
+ (mail-parse-ignored-charsets
+ (with-current-buffer gnus-summary-buffer
+ gnus-newsgroup-ignored-charsets))
+ (address (cadr (gnus-extract-address-components from))))
(or
(and ignored-from-addresses
- (string-match ignored-from-addresses gnus-tmp-from)
+ (string-match ignored-from-addresses address)
(let ((extra-headers (mail-header-extra header))
to
newsgroups)
@@ -3684,9 +3683,7 @@ buffer that was in action when the last article was fetched."
gnus-newsgroup-name)) 'nntp)
(gnus-group-real-name gnus-newsgroup-name))))
(concat gnus-summary-newsgroup-prefix newsgroups)))))
- (gnus-string-mark-left-to-right
- (inline
- (gnus-summary-extract-address-component gnus-tmp-from))))))
+ (gnus-string-mark-left-to-right (gnus-summary-extract-address-component from)))))
(defun gnus-summary-insert-line (gnus-tmp-header
gnus-tmp-level gnus-tmp-current
@@ -4063,9 +4060,10 @@ If SELECT-ARTICLES, only select those articles from GROUP."
gnus-auto-select-first)
(progn
(let ((art (gnus-summary-article-number)))
- (unless (and (not gnus-plugged)
- (or (memq art gnus-newsgroup-undownloaded)
- (memq art gnus-newsgroup-downloadable)))
+ (when (and art
+ gnus-plugged
+ (not (memq art gnus-newsgroup-undownloaded))
+ (not (memq art gnus-newsgroup-downloadable)))
(gnus-summary-goto-article art))))
;; Don't select any articles.
(gnus-summary-position-point)
@@ -7874,7 +7872,6 @@ If STOP is non-nil, just stop when reaching the end of the message.
Also see the variable `gnus-article-skip-boring'."
(interactive "P")
- (setq gnus-summary-buffer (current-buffer))
(gnus-set-global-variables)
(let ((article (gnus-summary-article-number))
(article-window (get-buffer-window gnus-article-buffer t))
@@ -9791,7 +9788,7 @@ installed for this command to work."
(when (message-goto-body)
(gnus-narrow-to-body))
(goto-char (point-min))
- (while (search-forward "" (point-max) t)
+ (while (search-forward "·" (point-max) t)
(replace-match "."))
(unmorse-region (point-min) (point-max))
(widen)
@@ -10127,17 +10124,20 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
(defun gnus-summary-push-marks-to-backend (article)
(let ((set nil)
+ (del nil)
(marks gnus-article-mark-lists))
(unless (memq article gnus-newsgroup-unreads)
(push 'read set))
(while marks
- (when (and (eq (gnus-article-mark-to-type (cdar marks)) 'list)
- (memq article (symbol-value
- (intern (format "gnus-newsgroup-%s"
- (caar marks))))))
- (push (cdar marks) set))
+ (if (and (eq (gnus-article-mark-to-type (cdar marks)) 'list)
+ (memq article (symbol-value
+ (intern (format "gnus-newsgroup-%s"
+ (caar marks))))))
+ (push (cdar marks) set)
+ (push (cdar marks) del))
(pop marks))
- (gnus-request-set-mark gnus-newsgroup-name `(((,article) set ,set)))))
+ (gnus-request-set-mark gnus-newsgroup-name `(((,article) set ,set)
+ ((,article) del ,del)))))
(defun gnus-summary-copy-article (&optional n to-newsgroup select-method)
"Copy the current article to some other group.
@@ -11647,10 +11647,10 @@ If PREDICATE is supplied, threads that satisfy this predicate
will not be hidden.
Returns nil if no threads were there to be hidden."
(interactive)
+ (beginning-of-line)
(let ((start (point))
(starteol (line-end-position))
(article (gnus-summary-article-number)))
- (goto-char start)
;; Go forward until either the buffer ends or the subthread ends.
(when (and (not (eobp))
(or (zerop (gnus-summary-next-thread 1 t))
@@ -12521,7 +12521,7 @@ If REVERSE, save parts that do not match TYPE."
(memq article gnus-newsgroup-undownloaded)
(not (memq article gnus-newsgroup-cached)))))
(let ((face (funcall (gnus-summary-highlight-line-0))))
- (unless (eq face (get-text-property beg 'face))
+ (unless (eq face (gnus-get-text-property-excluding-characters-with-faces beg 'face))
(gnus-put-text-property-excluding-characters-with-faces
beg (point-at-eol) 'face
(setq face (if (boundp face) (symbol-value face) face)))
@@ -12775,7 +12775,7 @@ returned."
(setq gnus-newsgroup-headers
(gnus-merge 'list
gnus-newsgroup-headers
- (gnus-fetch-headers articles)
+ (gnus-fetch-headers articles nil t)
'gnus-article-sort-by-number))
(setq gnus-newsgroup-articles
(gnus-sorted-nunion gnus-newsgroup-articles articles))
@@ -12978,7 +12978,7 @@ BOOKMARK is a bookmark name or a bookmark record."
(run-hooks 'gnus-sum-load-hook)
;; Local Variables:
-;; coding: iso-8859-1
+;; coding: utf-8
;; End:
;;; gnus-sum.el ends here
diff --git a/lisp/gnus/gnus-sync.el b/lisp/gnus/gnus-sync.el
index 3d20c238a5e..8cf92df5b91 100644
--- a/lisp/gnus/gnus-sync.el
+++ b/lisp/gnus/gnus-sync.el
@@ -112,8 +112,9 @@ this setting is harmless until the user chooses a sync backend."
(defcustom gnus-sync-newsrc-offsets '(2 3)
"List of per-group data to be synchronized."
:group 'gnus-sync
+ :version "24.4"
:type '(set (const :tag "Read ranges" 2)
- (const :tag "Marks" 3)))
+ (const :tag "Marks" 3)))
(defcustom gnus-sync-global-vars nil
"List of global variables to be synchronized.
@@ -137,6 +138,11 @@ and `gnus-topic-alist'. Also see `gnus-variable-list'."
(defvar gnus-sync-newsrc-loader nil
"Carrier for newsrc data")
+(defcustom gnus-sync-file-encrypt-to nil
+ "If non-nil, `epa-file-encrypt-to' is set from this for encrypting the Sync
+ file."
+ :group 'gnus-sync)
+
(defcustom gnus-sync-lesync-name (system-name)
"The LeSync name for this machine."
:group 'gnus-sync
@@ -175,16 +181,15 @@ and `gnus-topic-alist'. Also see `gnus-variable-list'."
(defun gnus-sync-lesync-call (url method headers &optional kvdata)
"Make an access request to URL using KVDATA and METHOD.
KVDATA must be an alist."
- (flet ((json-alist-p (list) (gnus-sync-json-alist-p list))) ; temp patch
- (let ((url-request-method method)
- (url-request-extra-headers headers)
- (url-request-data (if kvdata (json-encode kvdata) nil)))
- (with-current-buffer (url-retrieve-synchronously url)
- (let ((data (gnus-sync-lesync-parse)))
- (gnus-message 12 "gnus-sync-lesync-call: %s URL %s sent %S got %S"
- method url `((headers . ,headers) (data ,kvdata)) data)
- (kill-buffer (current-buffer))
- data)))))
+ (let ((url-request-method method)
+ (url-request-extra-headers headers)
+ (url-request-data (if kvdata (json-encode kvdata) nil)))
+ (with-current-buffer (url-retrieve-synchronously url)
+ (let ((data (gnus-sync-lesync-parse)))
+ (gnus-message 12 "gnus-sync-lesync-call: %s URL %s sent %S got %S"
+ method url `((headers . ,headers) (data ,kvdata)) data)
+ (kill-buffer (current-buffer))
+ data))))
(defun gnus-sync-lesync-PUT (url headers &optional data)
(gnus-sync-lesync-call url "PUT" headers data))
@@ -762,6 +767,9 @@ With a prefix, FORCE is set and all groups will be saved."
(progn
(let ((coding-system-for-write gnus-ding-file-coding-system)
(standard-output (current-buffer)))
+ (when gnus-sync-file-encrypt-to
+ (set (make-local-variable 'epa-file-encrypt-to)
+ gnus-sync-file-encrypt-to))
(princ (format ";; -*- mode:emacs-lisp; coding: %s; -*-\n"
gnus-ding-file-coding-system))
(princ ";; Gnus sync data v. 0.0.1\n")
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 6f00eec786d..331f9556710 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -225,7 +225,7 @@ is slower."
(defun gnus-goto-colon ()
- (beginning-of-line)
+ (move-beginning-of-line 1)
(let ((eol (point-at-eol)))
(goto-char (or (text-property-any (point) eol 'gnus-position t)
(search-forward ":" eol t)
@@ -333,6 +333,13 @@ TIME defaults to the current time."
(defmacro gnus-define-keys (keymap &rest plist)
"Define all keys in PLIST in KEYMAP."
+ ;; Convert the key [?\S-\ ] to [(shift space)] for XEmacs.
+ (when (featurep 'xemacs)
+ (let ((bindings plist))
+ (while bindings
+ (when (equal (car bindings) [?\S-\ ])
+ (setcar bindings [(shift space)]))
+ (setq bindings (cddr bindings)))))
`(gnus-define-keys-1 (quote ,keymap) (quote ,plist)))
(defmacro gnus-define-keys-safe (keymap &rest plist)
@@ -866,18 +873,29 @@ If there's no subdirectory, delete DIRECTORY as well."
(setq beg (point)))
(gnus-overlay-put (gnus-make-overlay beg (point)) prop val)))))
-(defun gnus-put-text-property-excluding-characters-with-faces (beg end
- prop val)
- "The same as `put-text-property', but don't put props on characters with the `gnus-face' property."
- (let ((b beg))
- (while (/= b end)
- (when (get-text-property b 'gnus-face)
- (setq b (next-single-property-change b 'gnus-face nil end)))
- (when (/= b end)
+(defun gnus-put-text-property-excluding-characters-with-faces (beg end prop val)
+ "The same as `put-text-property', except where `gnus-face' is set.
+If so, and PROP is `face', set the second element of its value to VAL.
+Otherwise, do nothing."
+ (while (< beg end)
+ ;; Property values are compared with `eq'.
+ (let ((stop (next-single-property-change beg 'face nil end)))
+ (if (get-text-property beg 'gnus-face)
+ (when (eq prop 'face)
+ (setcar (cdr (get-text-property beg 'face)) (or val 'default)))
(inline
- (gnus-put-text-property
- b (setq b (next-single-property-change b 'gnus-face nil end))
- prop val))))))
+ (gnus-put-text-property beg stop prop val)))
+ (setq beg stop))))
+
+(defun gnus-get-text-property-excluding-characters-with-faces (pos prop)
+ "The same as `get-text-property', except where `gnus-face' is set.
+If so, and PROP is `face', return the second element of its value.
+Otherwise, return the value."
+ (let ((val (get-text-property pos prop)))
+ (if (and (get-text-property pos 'gnus-face)
+ (eq prop 'face))
+ (cadr val)
+ (get-text-property pos prop))))
(defmacro gnus-faces-at (position)
"Return a list of faces at POSITION."
@@ -1938,27 +1956,6 @@ to case differences."
(string-equal (downcase str1) (downcase prefix))
(string-equal str1 prefix))))))
-(eval-and-compile
- (if (fboundp 'macroexpand-all)
- (defalias 'gnus-macroexpand-all 'macroexpand-all)
- (defun gnus-macroexpand-all (form &optional environment)
- "Return result of expanding macros at all levels in FORM.
-If no macros are expanded, FORM is returned unchanged.
-The second optional arg ENVIRONMENT specifies an environment of macro
-definitions to shadow the loaded ones for use in file byte-compilation."
- (if (consp form)
- (let ((idx 1)
- (len (length (setq form (copy-sequence form))))
- expanded)
- (while (< idx len)
- (setcar (nthcdr idx form) (gnus-macroexpand-all (nth idx form)
- environment))
- (setq idx (1+ idx)))
- (if (eq (setq expanded (macroexpand form environment)) form)
- form
- (gnus-macroexpand-all expanded environment)))
- form))))
-
;; Simple check: can be a macro but this way, although slow, it's really clear.
;; We don't use `bound-and-true-p' because it's not in XEmacs.
(defun gnus-bound-and-true-p (sym)
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index d0e8d805206..ffb4694f4a8 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -2495,7 +2495,16 @@ Disabling the agent may result in noticeable loss of performance."
:type 'boolean)
(defcustom gnus-other-frame-function 'gnus
- "Function called by the command `gnus-other-frame'."
+ "Function called by the command `gnus-other-frame' when starting Gnus."
+ :group 'gnus-start
+ :type '(choice (function-item gnus)
+ (function-item gnus-no-server)
+ (function-item gnus-slave)
+ (function-item gnus-slave-no-server)))
+
+(defcustom gnus-other-frame-resume-function 'gnus-group-get-new-news
+ "Function called by the command `gnus-other-frame' when resuming Gnus."
+ :version "24.4"
:group 'gnus-start
:type '(choice (function-item gnus)
(function-item gnus-no-server)
@@ -4348,13 +4357,22 @@ server."
(interactive "P")
(gnus arg nil 'slave))
+(defun gnus-delete-gnus-frame ()
+ "Delete gnus frame unless it is the only one.
+Used for `gnus-exit-gnus-hook' in `gnus-other-frame'."
+ (when (and (frame-live-p gnus-other-frame-object)
+ (cdr (frame-list)))
+ (delete-frame gnus-other-frame-object))
+ (setq gnus-other-frame-object nil))
+
;;;###autoload
(defun gnus-other-frame (&optional arg display)
"Pop up a frame to read news.
This will call one of the Gnus commands which is specified by the user
option `gnus-other-frame-function' (default `gnus') with the argument
-ARG if Gnus is not running, otherwise just pop up a Gnus frame. The
-optional second argument DISPLAY should be a standard display string
+ARG if Gnus is not running, otherwise pop up a Gnus frame and run the
+command specified by `gnus-other-frame-resume-function'.
+The optional second argument DISPLAY should be a standard display string
such as \"unix:0\" to specify where to pop up a frame. If DISPLAY is
omitted or the function `make-frame-on-display' is not available, the
current display is used."
@@ -4386,14 +4404,16 @@ current display is used."
(make-frame-on-display display gnus-other-frame-parameters)
(make-frame gnus-other-frame-parameters))))
(if alive
- (switch-to-buffer gnus-group-buffer)
+ (progn (switch-to-buffer gnus-group-buffer)
+ (funcall gnus-other-frame-resume-function arg))
(funcall gnus-other-frame-function arg)
- (add-hook 'gnus-exit-gnus-hook
- (lambda nil
- (when (and (frame-live-p gnus-other-frame-object)
- (cdr (frame-list)))
- (delete-frame gnus-other-frame-object))
- (setq gnus-other-frame-object nil)))))))
+ (add-hook 'gnus-exit-gnus-hook 'gnus-delete-gnus-frame)
+ ;; One might argue that `gnus-delete-gnus-frame' should not be called
+ ;; from `gnus-suspend-gnus-hook', but, on the other hand, one might
+ ;; argue that it should. No matter what you think, for the sake of
+ ;; those who want it to be called from it, please keep (defun
+ ;; gnus-delete-gnus-frame) even if you remove the next `add-hook'.
+ (add-hook 'gnus-suspend-gnus-hook 'gnus-delete-gnus-frame)))))
;;;###autoload
(defun gnus (&optional arg dont-connect slave)
diff --git a/lisp/gnus/html2text.el b/lisp/gnus/html2text.el
index 4e05f1abb40..68e75196c87 100644
--- a/lisp/gnus/html2text.el
+++ b/lisp/gnus/html2text.el
@@ -1,4 +1,4 @@
-;;; html2text.el --- a simple html to plain text converter
+;;; html2text.el --- a simple html to plain text converter -*- coding: utf-8 -*-
;; Copyright (C) 2002-2013 Free Software Foundation, Inc.
@@ -65,14 +65,14 @@
("&ndash;" . "-")
("&permil;" . "%%")
("&plusmn;" . "+-")
- ("&pound;" . "")
+ ("&pound;" . "£")
("&quot;" . "\"")
("&raquo;" . ">>")
("&rdquo" . "\"")
("&reg;" . "(R)")
("&rsaquo;" . ")")
("&rsquo;" . "'")
- ("&sect;" . "")
+ ("&sect;" . "§")
("&sup1;" . "^1")
("&sup2;" . "^2")
("&sup3;" . "^3")
diff --git a/lisp/gnus/mail-source.el b/lisp/gnus/mail-source.el
index c53968db352..9cc2e6ac09c 100644
--- a/lisp/gnus/mail-source.el
+++ b/lisp/gnus/mail-source.el
@@ -63,7 +63,7 @@
This variable is a list of mail source specifiers.
See Info node `(gnus)Mail Source Specifiers'."
:group 'mail-source
- :version "23.1" ;; No Gnus
+ :version "24.4"
:link '(custom-manual "(gnus)Mail Source Specifiers")
:type `(choice
(const :tag "None" nil)
@@ -159,7 +159,18 @@ See Info node `(gnus)Mail Source Specifiers'."
:value nil
(const :tag "Clear" nil)
(const starttls)
- (const :tag "SSL/TLS" ssl)))))
+ (const :tag "SSL/TLS" ssl)))
+ (group :inline t
+ (const :format "" :value :leave)
+ (choice :format "\
+%{Leave mail on server%}:\n\t\t%[Value Menu%] %v"
+ :value nil
+ (const :tag "\
+Don't leave mails" nil)
+ (const :tag "\
+Leave all mails" t)
+ (number :tag "\
+Leave mails for this many days" :value 14)))))
(cons :tag "Maildir (qmail, postfix...)"
(const :format "" maildir)
(checklist :tag "Options" :greedy t
@@ -340,7 +351,8 @@ Common keywords should be listed here.")
(:function)
(:password)
(:authentication password)
- (:stream nil))
+ (:stream nil)
+ (:leave))
(maildir
(:path (or (getenv "MAILDIR") "~/Maildir/"))
(:subdirs ("cur" "new"))
@@ -825,7 +837,8 @@ Deleting old (> %s day(s)) incoming mail file `%s'." diff bfile)
(pop3-port port)
(pop3-authentication-scheme
(if (eq authentication 'apop) 'apop 'pass))
- (pop3-stream-type stream))
+ (pop3-stream-type stream)
+ (pop3-leave-mail-on-server leave))
(if (or debug-on-quit debug-on-error)
(save-excursion (pop3-movemail mail-source-crash-box))
(condition-case err
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 4e40b1afaa6..2b2a0a94413 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -264,7 +264,7 @@ This is a list of regexps and regexp matches."
:type 'sexp)
(defcustom message-ignored-news-headers
- "^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:\\|^X-Draft-From:\\|^X-Gnus-Agent-Meta-Information:"
+ "^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:\\|^X-Draft-From:\\|^X-Gnus-Agent-Meta-Information:\\|^X-Message-SMTP-Method:"
"*Regexp of headers to be removed unconditionally before posting."
:group 'message-news
:group 'message-headers
@@ -592,8 +592,10 @@ Done before generating the new subject of a forward."
;; comes back to you (e.g. a mailing-list to which you subscribe, in which
;; case you may be removed from the list on the grounds that mail to you
;; bounced with a "mailing loop" error).
- "^Return-receipt\\|^X-Gnus\\|^Gnus-Warning:\\|^>?From \\|^Delivered-To:"
+ "^Return-receipt\\|^X-Gnus\\|^Gnus-Warning:\\|^>?From \\|^Delivered-To:\
+\\|^X-Content-Length:\\|^X-UIDL:"
"*All headers that match this regexp will be deleted when resending a message."
+ :version "24.4"
:group 'message-interface
:link '(custom-manual "(message)Resending")
:type '(repeat :value-to-internal (lambda (widget value)
@@ -1741,7 +1743,7 @@ no, only reply back to the author."
(file-error))
(mm-coding-system-p 'utf-8)
(executable-find idna-program)
- (string= (idna-to-ascii "rksmrgs")
+ (string= (idna-to-ascii "räksmörgås")
"xn--rksmrgs-5wao1o")
t)
"Whether to encode non-ASCII in domain names into ASCII according to IDNA.
@@ -3135,22 +3137,10 @@ M-RET `message-newline-and-reformat' (break the line and reformat)."
(push-mark)
(message-position-on-field "Summary" "Subject"))
-(eval-when-compile
- (defmacro message-called-interactively-p (kind)
- (condition-case nil
- (progn
- (eval '(called-interactively-p 'any))
- ;; Emacs >=23.2
- `(called-interactively-p ,kind))
- ;; Emacs <23.2
- (wrong-number-of-arguments '(called-interactively-p))
- ;; XEmacs
- (void-function '(interactive-p)))))
-
(defun message-goto-body ()
"Move point to the beginning of the message body."
(interactive)
- (when (and (message-called-interactively-p 'any)
+ (when (and (gmm-called-interactively-p 'any)
(looking-at "[ \t]*\n"))
(expand-abbrev))
(push-mark)
@@ -3824,7 +3814,9 @@ prefix, and don't delete any headers."
(interactive "P")
;; eval the let forms contained in message-cite-style
(eval
- `(let ,message-cite-style
+ `(let ,(if (symbolp message-cite-style)
+ (symbol-value message-cite-style)
+ message-cite-style)
(message--yank-original-internal ',arg))))
(defun message-yank-buffer (buffer)
@@ -4105,11 +4097,9 @@ Instead, just auto-save the buffer and then bury it."
(defun message-bury (buffer)
"Bury this mail BUFFER."
- (if message-return-action
- (progn
- (bury-buffer buffer)
- (apply (car message-return-action) (cdr message-return-action)))
- (with-current-buffer buffer (bury-buffer))))
+ (bury-buffer buffer)
+ (when message-return-action
+ (apply (car message-return-action) (cdr message-return-action))))
(defun message-send (&optional arg)
"Send the message in the current buffer.
@@ -6728,11 +6718,16 @@ The function is called with one parameter, a cons cell ..."
", "))
mct (message-fetch-field "mail-copies-to")
author (or (message-fetch-field "mail-reply-to")
- (message-fetch-field "reply-to")
- (message-fetch-field "from")
- "")
+ (message-fetch-field "reply-to"))
mft (and message-use-mail-followup-to
- (message-fetch-field "mail-followup-to"))))
+ (message-fetch-field "mail-followup-to")))
+ ;; Make sure this message goes to the author if this is a wide
+ ;; reply, since Reply-To address may be a list address a mailing
+ ;; list server added.
+ (when (and wide author)
+ (setq cc (concat author ", " cc)))
+ (when (or wide (not author))
+ (setq author (or (message-fetch-field "from") ""))))
;; Handle special values of Mail-Copies-To.
(when mct
@@ -7379,12 +7374,13 @@ Optional DIGEST will use digest to forward."
(dolist (elem ignored)
(message-remove-header elem t))))))
-(defun message-forward-make-body-mime (forward-buffer)
+(defun message-forward-make-body-mime (forward-buffer &optional beg end)
(let ((b (point)))
(insert "\n\n<#part type=message/rfc822 disposition=inline raw=t>\n")
(save-restriction
(narrow-to-region (point) (point))
- (mml-insert-buffer forward-buffer)
+ (insert-buffer-substring forward-buffer beg end)
+ (mml-quote-region (point-min) (point-max))
(goto-char (point-min))
(when (looking-at "From ")
(replace-match "X-From-Line: "))
@@ -8134,8 +8130,7 @@ regexp VARSTR."
(if (fboundp 'mail-abbrevs-setup)
(let ((minibuffer-setup-hook 'mail-abbrevs-setup)
(minibuffer-local-map message-minibuffer-local-map))
- (flet ((mail-abbrev-in-expansion-header-p nil t))
- (read-from-minibuffer prompt initial-contents)))
+ (read-from-minibuffer prompt initial-contents))
(let ((minibuffer-setup-hook 'mail-abbrev-minibuffer-setup-hook)
(minibuffer-local-map message-minibuffer-local-map))
(read-string prompt initial-contents))))
@@ -8424,7 +8419,7 @@ Used in `message-simplify-recipients'."
(run-hooks 'message-load-hook)
;; Local Variables:
-;; coding: iso-8859-1
+;; coding: utf-8
;; End:
;;; message.el ends here
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index b5e4d3e38e8..04f325633ba 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -1298,14 +1298,26 @@ PROMPT overrides the default one used to ask user for a file name."
(when filename
(setq filename (gnus-map-function mm-file-name-rewrite-functions
(file-name-nondirectory filename))))
- (setq file
- (read-file-name
- (or prompt
- (format "Save MIME part to (default %s): "
- (or filename "")))
- (or mm-default-directory default-directory)
- (expand-file-name (or filename "")
- (or mm-default-directory default-directory))))
+ (while
+ (progn
+ (setq file
+ (read-file-name
+ (or prompt
+ (format "Save MIME part to (default %s): "
+ (or filename "")))
+ (or mm-default-directory default-directory)
+ (expand-file-name (or filename "")
+ (or mm-default-directory default-directory))))
+ (cond ((or (not file) (equal file ""))
+ (message "Please enter a file name")
+ t)
+ ((and (file-directory-p file)
+ (not filename))
+ (message "Please enter a non-directory file name")
+ t)
+ (t nil)))
+ (sit-for 2)
+ (discard-input))
(if (file-directory-p file)
(setq file (expand-file-name filename file))
(setq file (expand-file-name
@@ -1791,7 +1803,7 @@ If RECURSIVE, search recursively."
(replace-match (char-to-string char))))
;; Remove "soft hyphens".
(goto-char (point-min))
- (while (search-forward "" nil t)
+ (while (search-forward "­" nil t)
(replace-match "" t t))
(libxml-parse-html-region (point-min) (point-max))))
(unless (bobp)
@@ -1813,7 +1825,7 @@ If RECURSIVE, search recursively."
(provide 'mm-decode)
;; Local Variables:
-;; coding: iso-8859-1
+;; coding: utf-8
;; End:
;;; mm-decode.el ends here
diff --git a/lisp/gnus/mml-smime.el b/lisp/gnus/mml-smime.el
index 3e769d396b0..6ea55377e02 100644
--- a/lisp/gnus/mml-smime.el
+++ b/lisp/gnus/mml-smime.el
@@ -74,6 +74,18 @@ Whether the passphrase is cached at all is controlled by
:group 'mime-security
:type '(repeat (string :tag "Key ID")))
+(defcustom mml-smime-sign-with-sender nil
+ "If t, use message sender so find a key to sign with."
+ :group 'mime-security
+ :version "24.4"
+ :type 'boolean)
+
+(defcustom mml-smime-encrypt-to-self nil
+ "If t, add your own key ID to recipient list when encryption."
+ :group 'mime-security
+ :version "24.4"
+ :type 'boolean)
+
(defun mml-smime-sign (cont)
(let ((func (nth 1 (assq mml-smime-use mml-smime-function-alist))))
(if func
@@ -323,6 +335,7 @@ Whether the passphrase is cached at all is controlled by
(autoload 'epg-encrypt-string "epg")
(autoload 'epg-passphrase-callback-function "epg")
(autoload 'epg-context-set-passphrase-callback "epg")
+ (autoload 'epg-sub-key-fingerprint "epg")
(autoload 'epg-configuration "epg-config")
(autoload 'epg-expand-group "epg-config")
(autoload 'epa-select-keys "epa"))
@@ -366,6 +379,24 @@ Whether the passphrase is cached at all is controlled by
(setq pointer (cdr pointer))))
(setq keys (cdr keys)))))
+;; XXX: since gpg --list-secret-keys does not return validity of each
+;; key, `mml-smime-epg-find-usable-key' defined above is not enough for
+;; secret keys. The function `mml-smime-epg-find-usable-secret-key'
+;; below looks at appropriate public keys to check usability.
+(defun mml-smime-epg-find-usable-secret-key (context name usage)
+ (let ((secret-keys (epg-list-keys context name t))
+ secret-key)
+ (while (and (not secret-key) secret-keys)
+ (if (mml-smime-epg-find-usable-key
+ (epg-list-keys context (epg-sub-key-fingerprint
+ (car (epg-key-sub-key-list
+ (car secret-keys)))))
+ usage)
+ (setq secret-key (car secret-keys)
+ secret-keys nil)
+ (setq secret-keys (cdr secret-keys))))
+ secret-key))
+
(autoload 'mml-compute-boundary "mml")
;; We require mm-decode, which requires mm-bodies, which autoloads
@@ -376,29 +407,36 @@ Whether the passphrase is cached at all is controlled by
(let* ((inhibit-redisplay t)
(context (epg-make-context 'CMS))
(boundary (mml-compute-boundary cont))
+ (sender (message-options-get 'message-sender))
+ (signer-names (or mml-smime-signers
+ (if (and mml-smime-sign-with-sender sender)
+ (list (concat "<" sender ">")))))
signer-key
(signers
(or (message-options-get 'mml-smime-epg-signers)
(message-options-set
- 'mml-smime-epg-signers
- (if (eq mm-sign-option 'guided)
- (epa-select-keys context "\
+ 'mml-smime-epg-signers
+ (if (eq mm-sign-option 'guided)
+ (epa-select-keys context "\
Select keys for signing.
If no one is selected, default secret key is used. "
- mml-smime-signers t)
- (if mml-smime-signers
- (mapcar
- (lambda (signer)
- (setq signer-key (mml-smime-epg-find-usable-key
- (epg-list-keys context signer t)
- 'sign))
- (unless (or signer-key
- (y-or-n-p
- (format "No secret key for %s; skip it? "
+ signer-names
+ t)
+ (if (or sender mml-smime-signers)
+ (delq nil
+ (mapcar
+ (lambda (signer)
+ (setq signer-key
+ (mml-smime-epg-find-usable-secret-key
+ context signer 'sign))
+ (unless (or signer-key
+ (y-or-n-p
+ (format
+ "No secret key for %s; skip it? "
signer)))
- (error "No secret key for %s" signer))
- signer-key)
- mml-smime-signers))))))
+ (error "No secret key for %s" signer))
+ signer-key)
+ signer-names)))))))
signature micalg)
(epg-context-set-signers context signers)
(if mml-smime-cache-passphrase
@@ -443,13 +481,17 @@ Content-Disposition: attachment; filename=smime.p7s
(goto-char (point-max))))
(defun mml-smime-epg-encrypt (cont)
- (let ((inhibit-redisplay t)
- (context (epg-make-context 'CMS))
- (config (epg-configuration))
- (recipients (message-options-get 'mml-smime-epg-recipients))
- cipher signers
- (boundary (mml-compute-boundary cont))
- recipient-key)
+ (let* ((inhibit-redisplay t)
+ (context (epg-make-context 'CMS))
+ (config (epg-configuration))
+ (recipients (message-options-get 'mml-smime-epg-recipients))
+ cipher signers
+ (sender (message-options-get 'message-sender))
+ (signer-names (or mml-smime-signers
+ (if (and mml-smime-sign-with-sender sender)
+ (list (concat "<" sender ">")))))
+ (boundary (mml-compute-boundary cont))
+ recipient-key)
(unless recipients
(setq recipients
(apply #'nconc
@@ -462,6 +504,10 @@ Content-Disposition: attachment; filename=smime.p7s
(message-options-set 'message-recipients
(read-string "Recipients: ")))
"[ \f\t\n\r\v,]+"))))
+ (when mml-smime-encrypt-to-self
+ (unless signer-names
+ (error "Neither message sender nor mml-smime-signers are set"))
+ (setq recipients (nconc recipients signer-names)))
(if (eq mm-encrypt-option 'guided)
(setq recipients
(epa-select-keys context "\
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index 453086f4c20..91f0e325182 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -1212,8 +1212,8 @@ If not set, `default-directory' will be used."
string
default)))
-(defun mml-minibuffer-read-description ()
- (let ((description (read-string "One line description: ")))
+(defun mml-minibuffer-read-description (&optional default)
+ (let ((description (read-string "One line description: " default)))
(when (string-match "\\`[ \t]*\\'" description)
(setq description nil))
description))
@@ -1440,7 +1440,9 @@ TYPE is the MIME type to use."
;; when you send the message.
(or (eq mail-user-agent 'message-user-agent)
(setq mail-encode-mml t))
- (mml-insert-tag 'part 'type type 'disposition "inline"))
+ (mml-insert-tag 'part 'type type 'disposition "inline")
+ (save-excursion
+ (mml-insert-tag '/part)))
(declare-function message-subscribed-p "message" ())
(declare-function message-make-mail-followup-to "message"
diff --git a/lisp/gnus/mml1991.el b/lisp/gnus/mml1991.el
index 88dee4ad883..5af7639019a 100644
--- a/lisp/gnus/mml1991.el
+++ b/lisp/gnus/mml1991.el
@@ -2,7 +2,7 @@
;; Copyright (C) 1998-2013 Free Software Foundation, Inc.
-;; Author: Sascha Ldecke <sascha@meta-x.de>,
+;; Author: Sascha Lüdecke <sascha@meta-x.de>,
;; Simon Josefsson <simon@josefsson.org> (Mailcrypt interface, Gnus glue)
;; Keywords: PGP
@@ -480,7 +480,7 @@ If no one is selected, default secret key is used. "
(provide 'mml1991)
;; Local Variables:
-;; coding: iso-8859-1
+;; coding: utf-8
;; End:
;;; mml1991.el ends here
diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el
index af65872b0cf..39bce23e76c 100644
--- a/lisp/gnus/mml2015.el
+++ b/lisp/gnus/mml2015.el
@@ -735,6 +735,7 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
(defvar epg-user-id-alist)
(defvar epg-digest-algorithm-alist)
+(defvar epg-gpg-program)
(defvar inhibit-redisplay)
(autoload 'epg-make-context "epg")
@@ -743,7 +744,6 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
(autoload 'epg-context-set-signers "epg")
(autoload 'epg-context-result-for "epg")
(autoload 'epg-new-signature-digest-algorithm "epg")
-(autoload 'epg-verify-result-to-string "epg")
(autoload 'epg-list-keys "epg")
(autoload 'epg-decrypt-string "epg")
(autoload 'epg-verify-string "epg")
@@ -755,6 +755,11 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
(autoload 'epg-sub-key-capability "epg")
(autoload 'epg-sub-key-validity "epg")
(autoload 'epg-sub-key-fingerprint "epg")
+(autoload 'epg-signature-key-id "epg")
+(autoload 'epg-signature-to-string "epg")
+(autoload 'epg-key-user-id-list "epg")
+(autoload 'epg-user-id-string "epg")
+(autoload 'epg-user-id-validity "epg")
(autoload 'epg-configuration "epg-config")
(autoload 'epg-expand-group "epg-config")
(autoload 'epa-select-keys "epa")
@@ -784,21 +789,53 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
(cons password-cache-key-id mml2015-epg-secret-key-id-list))
(copy-sequence passphrase)))))
-(defun mml2015-epg-find-usable-key (keys usage)
- (catch 'found
+(defun mml2015-epg-check-user-id (key recipient)
+ (let ((pointer (epg-key-user-id-list key))
+ result)
+ (while pointer
+ (if (and (equal (car (mail-header-parse-address
+ (epg-user-id-string (car pointer))))
+ (car (mail-header-parse-address
+ recipient)))
+ (not (memq (epg-user-id-validity (car pointer))
+ '(revoked expired))))
+ (setq result t
+ pointer nil)
+ (setq pointer (cdr pointer))))
+ result))
+
+(defun mml2015-epg-check-sub-key (key usage)
+ (let ((pointer (epg-key-sub-key-list key))
+ result)
+ ;; The primary key will be marked as disabled, when the entire
+ ;; key is disabled (see 12 Field, Format of colon listings, in
+ ;; gnupg/doc/DETAILS)
+ (unless (memq 'disabled (epg-sub-key-capability (car pointer)))
+ (while pointer
+ (if (and (memq usage (epg-sub-key-capability (car pointer)))
+ (not (memq (epg-sub-key-validity (car pointer))
+ '(revoked expired))))
+ (setq result t
+ pointer nil)
+ (setq pointer (cdr pointer)))))
+ result))
+
+(defun mml2015-epg-find-usable-key (context name usage
+ &optional name-is-key-id)
+ (let ((keys (epg-list-keys context name))
+ key)
(while keys
- (let ((pointer (epg-key-sub-key-list (car keys))))
- ;; The primary key will be marked as disabled, when the entire
- ;; key is disabled (see 12 Field, Format of colon listings, in
- ;; gnupg/doc/DETAILS)
- (unless (memq 'disabled (epg-sub-key-capability (car pointer)))
- (while pointer
- (if (and (memq usage (epg-sub-key-capability (car pointer)))
- (not (memq (epg-sub-key-validity (car pointer))
- '(revoked expired))))
- (throw 'found (car keys)))
- (setq pointer (cdr pointer)))))
- (setq keys (cdr keys)))))
+ (if (and (or name-is-key-id
+ ;; Non email user-id can be supplied through
+ ;; mml2015-signers if mml2015-encrypt-to-self is set.
+ ;; Treat it as valid, as it is user's intention.
+ (not (string-match "\\`<" name))
+ (mml2015-epg-check-user-id (car keys) name))
+ (mml2015-epg-check-sub-key (car keys) usage))
+ (setq key (car keys)
+ keys nil)
+ (setq keys (cdr keys))))
+ key))
;; XXX: since gpg --list-secret-keys does not return validity of each
;; key, `mml2015-epg-find-usable-key' defined above is not enough for
@@ -809,15 +846,46 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
secret-key)
(while (and (not secret-key) secret-keys)
(if (mml2015-epg-find-usable-key
- (epg-list-keys context (epg-sub-key-fingerprint
- (car (epg-key-sub-key-list
- (car secret-keys)))))
- usage)
+ context
+ (epg-sub-key-fingerprint
+ (car (epg-key-sub-key-list
+ (car secret-keys))))
+ usage
+ t)
(setq secret-key (car secret-keys)
secret-keys nil)
(setq secret-keys (cdr secret-keys))))
secret-key))
+(defun mml2015-epg-key-image (key-id)
+ "Return the image of a key, if any"
+ (with-temp-buffer
+ (mm-set-buffer-multibyte nil)
+ (let* ((coding-system-for-write 'binary)
+ (coding-system-for-read 'binary)
+ (data (shell-command-to-string
+ (format "%s --list-options no-show-photos --attribute-fd 3 --list-keys %s 3>&1 >/dev/null 2>&1"
+ (shell-quote-argument epg-gpg-program) key-id))))
+ (when (> (length data) 0)
+ (insert (substring data 16))
+ (create-image (buffer-string) nil t)))))
+
+(defun mml2015-epg-key-image-to-string (key-id)
+ "Return a string with the image of a key, if any"
+ (let* ((result "")
+ (key-image (mml2015-epg-key-image key-id)))
+ (when key-image
+ (setq result " ")
+ (put-text-property 1 2 'display key-image result))
+ result))
+
+(defun mml2015-epg-signature-to-string (signature)
+ (concat (epg-signature-to-string signature)
+ (mml2015-epg-key-image-to-string (epg-signature-key-id signature))))
+
+(defun mml2015-epg-verify-result-to-string (verify-result)
+ (mapconcat #'mml2015-epg-signature-to-string verify-result "\n"))
+
(defun mml2015-epg-decrypt (handle ctl)
(catch 'error
(let ((inhibit-redisplay t)
@@ -860,7 +928,7 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-info
(concat "OK\n"
- (epg-verify-result-to-string
+ (mml2015-epg-verify-result-to-string
(epg-context-result-for context 'verify))))
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-info "OK"))
@@ -908,7 +976,7 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
(if (epg-context-result-for context 'verify)
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-details
- (epg-verify-result-to-string
+ (mml2015-epg-verify-result-to-string
(epg-context-result-for context 'verify)))))))
(defun mml2015-epg-verify (handle ctl)
@@ -942,7 +1010,8 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
(throw 'error handle)))
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-info
- (epg-verify-result-to-string (epg-context-result-for context 'verify)))
+ (mml2015-epg-verify-result-to-string
+ (epg-context-result-for context 'verify)))
handle)))
(defun mml2015-epg-clear-verify ()
@@ -965,7 +1034,7 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
(progn
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-info
- (epg-verify-result-to-string
+ (mml2015-epg-verify-result-to-string
(epg-context-result-for context 'verify)))
(delete-region (point-min) (point-max))
(insert (mm-decode-coding-string plain coding-system-for-read)))
@@ -1083,8 +1152,7 @@ If no one is selected, symmetric encryption will be performed. "
(mapcar
(lambda (recipient)
(setq recipient-key (mml2015-epg-find-usable-key
- (epg-list-keys context recipient)
- 'encrypt))
+ context recipient 'encrypt))
(unless (or recipient-key
(y-or-n-p
(format "No public key for %s; skip it? "
diff --git a/lisp/gnus/nndir.el b/lisp/gnus/nndir.el
index b99a0c37d2e..5e68779e977 100644
--- a/lisp/gnus/nndir.el
+++ b/lisp/gnus/nndir.el
@@ -90,8 +90,7 @@
(nnml-request-article 0 nndir-current-group 0 0)
(nnmh-request-group nndir-current-group 0 0)
(nnml-close-group nndir-current-group 0)
- (nnml-request-list (nnoo-current-server 'nndir) nndir-directory)
- (nnml-request-newsgroups (nnoo-current-server 'nndir) nndir-directory))
+ (nnml-request-list (nnoo-current-server 'nndir)))
(provide 'nndir)
diff --git a/lisp/gnus/nndraft.el b/lisp/gnus/nndraft.el
index ad8a8b164de..c9625f4c447 100644
--- a/lisp/gnus/nndraft.el
+++ b/lisp/gnus/nndraft.el
@@ -255,11 +255,16 @@ are generated if and only if they are also in `message-draft-headers'.")
(deffoo nndraft-request-expire-articles (articles group &optional server force)
(nndraft-possibly-change-group group)
(let* ((nnmh-allow-delete-final t)
- (nnmail-expiry-target
- (or (gnus-group-find-parameter
- (gnus-group-prefixed-name group (list 'nndraft server))
- 'expiry-target t)
- nnmail-expiry-target))
+ (nnmail-expiry-target 'delete)
+ ;; FIXME: If we want to move a draft message to an expiry group,
+ ;; there are things to have to improve:
+ ;; - Remove a header separator.
+ ;; - Encode it, including attachments, into a MIME message.
+ ;;(nnmail-expiry-target
+ ;; (or (gnus-group-find-parameter
+ ;; (gnus-group-prefixed-name group (list 'nndraft server))
+ ;; 'expiry-target t)
+ ;; nnmail-expiry-target))
(res (nnoo-parent-function 'nndraft
'nnmh-request-expire-articles
(list articles group server force)))
@@ -346,8 +351,7 @@ are generated if and only if they are also in `message-draft-headers'.")
nnmh-retrieve-headers
nnmh-request-group
nnmh-close-group
- nnmh-request-list
- nnmh-request-newsgroups))
+ nnmh-request-list))
(provide 'nndraft)
diff --git a/lisp/gnus/nnfolder.el b/lisp/gnus/nnfolder.el
index 7dfdb9ebcfd..e189ab531f0 100644
--- a/lisp/gnus/nnfolder.el
+++ b/lisp/gnus/nnfolder.el
@@ -1004,6 +1004,28 @@ deleted. Point is left where the deleted region was."
(nnfolder-save-nov))
(current-buffer))))))
+(defun nnfolder-recursive-directory-files (dir prefix)
+ (let ((files nil))
+ (dolist (file (directory-files dir))
+ (cond
+ ((or (file-symlink-p (expand-file-name file dir))
+ (member file '("." "..")))
+ ;; Ignore
+ )
+ ((file-directory-p (expand-file-name file dir))
+ (setq files (nconc (nnfolder-recursive-directory-files
+ (expand-file-name file dir)
+ (if prefix
+ (concat prefix "." (directory-file-name file))
+ (file-name-nondirectory file)))
+ files)))
+ ((file-regular-p (expand-file-name file dir))
+ (push (if prefix
+ (concat prefix "." file)
+ file)
+ files))))
+ files))
+
;;;###autoload
(defun nnfolder-generate-active-file ()
"Look for mbox folders in the nnfolder directory and make them into groups.
@@ -1020,10 +1042,13 @@ This command does not work if you use short group names."
(when (not (message-mail-file-mbox-p file))
(ignore-errors
(delete-file file)))))
- (dolist (file (directory-files nnfolder-directory))
+ (dolist (file (if nnmail-use-long-file-names
+ (directory-files nnfolder-directory)
+ (nnfolder-recursive-directory-files
+ nnfolder-directory nil)))
(when (and (not (backup-file-name-p file))
(message-mail-file-mbox-p
- (nnheader-concat nnfolder-directory file)))
+ (nnfolder-group-pathname file)))
(let ((oldgroup (assoc file nnfolder-group-alist)))
(if oldgroup
(nnheader-message 5 "Refreshing group %s..." file)
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index 307d8247912..9c18bc2cff0 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -99,7 +99,8 @@ Uses the same syntax as `nnmail-split-methods'.")
(defvoo nnimap-authenticator nil
"How nnimap authenticate itself to the server.
-Possible choices are nil (use default methods) or `anonymous'.")
+Possible choices are nil (use default methods), `anonymous',
+`login', `plain' and `cram-md5'.")
(defvoo nnimap-expunge t
"If non-nil, expunge articles after deleting them.
@@ -338,7 +339,8 @@ textual parts.")
(nnimap-last-command-time nnimap-object)))
;; More than five minutes since the last command.
(* 5 60)))
- (nnimap-send-command "NOOP")))))))
+ (ignore-errors ;E.g. "buffer foo has no process".
+ (nnimap-send-command "NOOP"))))))))
(defun nnimap-open-connection (buffer)
;; Be backwards-compatible -- the earlier value of nnimap-stream was
@@ -366,7 +368,7 @@ textual parts.")
(defun nnimap-open-connection-1 (buffer)
(unless nnimap-keepalive-timer
(setq nnimap-keepalive-timer (run-at-time (* 60 15) (* 60 15)
- 'nnimap-keepalive)))
+ #'nnimap-keepalive)))
(with-current-buffer (nnimap-make-process-buffer buffer)
(let* ((coding-system-for-read 'binary)
(coding-system-for-write 'binary)
@@ -487,9 +489,13 @@ textual parts.")
;; round trips than CRAM-MD5, and it's less likely to be buggy),
;; and we're using an encrypted connection.
((and (not (nnimap-capability "LOGINDISABLED"))
- (eq (nnimap-stream-type nnimap-object) 'tls))
+ (eq (nnimap-stream-type nnimap-object) 'tls)
+ (or (null nnimap-authenticator)
+ (eq nnimap-authenticator 'login)))
(nnimap-command "LOGIN %S %S" user password))
- ((nnimap-capability "AUTH=CRAM-MD5")
+ ((and (nnimap-capability "AUTH=CRAM-MD5")
+ (or (null nnimap-authenticator)
+ (eq nnimap-authenticator 'cram-md5)))
(erase-buffer)
(let ((sequence (nnimap-send-command "AUTHENTICATE CRAM-MD5"))
(challenge (nnimap-wait-for-line "^\\+\\(.*\\)\n")))
@@ -502,9 +508,13 @@ textual parts.")
(base64-decode-string challenge))))
"\r\n"))
(nnimap-wait-for-response sequence)))
- ((not (nnimap-capability "LOGINDISABLED"))
+ ((and (not (nnimap-capability "LOGINDISABLED"))
+ (or (null nnimap-authenticator)
+ (eq nnimap-authenticator 'login)))
(nnimap-command "LOGIN %S %S" user password))
- ((nnimap-capability "AUTH=PLAIN")
+ ((and (nnimap-capability "AUTH=PLAIN")
+ (or (null nnimap-authenticator)
+ (eq nnimap-authenticator 'plain)))
(nnimap-command
"AUTHENTICATE PLAIN %s"
(base64-encode-string
@@ -1411,7 +1421,9 @@ textual parts.")
(gnus-set-difference
(gnus-set-difference
existing
- (cdr (assoc '%Seen flags)))
+ (gnus-sorted-union
+ (cdr (assoc '%Seen flags))
+ (cdr (assoc '%Deleted flags))))
(cdr (assoc '%Flagged flags)))))
(read (gnus-range-difference
(cons start-article high) unread)))
diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el
index 0e2e76f25be..21f81dc664c 100644
--- a/lisp/gnus/nnir.el
+++ b/lisp/gnus/nnir.el
@@ -1,8 +1,8 @@
-;;; nnir.el --- search mail with various search engines -*- coding: iso-8859-1 -*-
+;;; nnir.el --- search mail with various search engines -*- coding: utf-8 -*-
;; Copyright (C) 1998-2013 Free Software Foundation, Inc.
-;; Author: Kai Grojohann <grossjohann@ls6.cs.uni-dortmund.de>
+;; Author: Kai Großjohann <grossjohann@ls6.cs.uni-dortmund.de>
;; Swish-e and Swish++ backends by:
;; Christoph Conrad <christoph.conrad@gmx.de>.
;; IMAP backend by: Simon Josefsson <jas@pdc.kth.se>.
@@ -29,10 +29,6 @@
;;; Commentary:
-;; TODO: Documentation in the Gnus manual
-
-;; Where in the existing gnus manual would this fit best?
-
;; What does it do? Well, it allows you to search your mail using
;; some search engine (imap, namazu, swish-e, gmane and others -- see
;; later) by typing `G G' in the Group buffer. You will then get a
@@ -136,17 +132,26 @@
;; other backend.
;; The interface between the two layers consists of the single
-;; function `nnir-run-query', which just selects the appropriate
-;; function for the search engine one is using. The input to
-;; `nnir-run-query' is a string, representing the query as input by
-;; the user. The output of `nnir-run-query' is supposed to be a
-;; vector, each element of which should in turn be a three-element
-;; vector. The first element should be full group name of the article,
-;; the second element should be the article number, and the third
-;; element should be the Retrieval Status Value (RSV) as returned from
-;; the search engine. An RSV is the score assigned to the document by
-;; the search engine. For Boolean search engines, the
-;; RSV is always 1000 (or 1 or 100, or whatever you like).
+;; function `nnir-run-query', which dispatches the search to the
+;; proper search function. The argument of `nnir-run-query' is an
+;; alist with two keys: 'nnir-query-spec and 'nnir-group-spec. The
+;; value for 'nnir-query-spec is an alist. The only required key/value
+;; pair is (query . "query") specifying the search string to pass to
+;; the query engine. Individual engines may have other elements. The
+;; value of 'nnir-group-spec is a list with the specification of the
+;; groups/servers to search. The format of the 'nnir-group-spec is
+;; (("server1" ("group11" "group12")) ("server2" ("group21"
+;; "group22"))). If any of the group lists is absent then all groups
+;; on that server are searched.
+
+;; The output of `nnir-run-query' is supposed to be a vector, each
+;; element of which should in turn be a three-element vector. The
+;; first element should be full group name of the article, the second
+;; element should be the article number, and the third element should
+;; be the Retrieval Status Value (RSV) as returned from the search
+;; engine. An RSV is the score assigned to the document by the search
+;; engine. For Boolean search engines, the RSV is always 1000 (or 1
+;; or 100, or whatever you like).
;; The sorting order of the articles in the summary buffer created by
;; nnir is based on the order of the articles in the above mentioned
@@ -179,26 +184,21 @@
;;; Internal Variables:
-(defvar nnir-current-query nil
- "Internal: stores current query (= group name).")
-
-(defvar nnir-current-server nil
- "Internal: stores current server (does it ever change?).")
+(defvar nnir-memo-query nil
+ "Internal: stores current query.")
-(defvar nnir-current-group-marked nil
- "Internal: stores current list of process-marked groups.")
+(defvar nnir-memo-server nil
+ "Internal: stores current server.")
(defvar nnir-artlist nil
"Internal: stores search result.")
-(defvar nnir-tmp-buffer " *nnir*"
- "Internal: temporary buffer.")
-
(defvar nnir-search-history ()
"Internal: the history for querying search options in nnir")
-(defvar nnir-extra-parms nil
- "Internal: stores request for extra search parms")
+(defconst nnir-tmp-buffer " *nnir*"
+ "Internal: temporary buffer.")
+
;; Imap variables
@@ -290,14 +290,14 @@ is `(valuefunc member)'."
(autoload 'nnimap-command "nnimap")
(autoload 'nnimap-possibly-change-group "nnimap")
(autoload 'nnimap-make-thread-query "nnimap")
- (autoload 'gnus-registry-action "gnus-registry"))
+ (autoload 'gnus-registry-action "gnus-registry")
+ (autoload 'gnus-registry-get-id-key "gnus-registry")
+ (autoload 'gnus-group-topic-name "gnus-topic"))
+
(nnoo-declare nnir)
(nnoo-define-basics nnir)
-(defvoo nnir-address nil
- "The address of the nnir server.")
-
(gnus-declare-backend "nnir" 'mail 'virtual)
@@ -344,7 +344,7 @@ result, `gnus-retrieve-headers' will be called instead."
(defcustom nnir-imap-default-search-key "whole message"
"*The default IMAP search key for an nnir search. Must be one of
the keys in `nnir-imap-search-arguments'. To use raw imap queries
- by default set this to \"Imap\"."
+ by default set this to \"imap\"."
:version "24.1"
:type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem)))
nnir-imap-search-arguments))
@@ -546,17 +546,17 @@ that it is for notmuch, not Namazu."
,nnir-imap-default-search-key ; default
)))
(gmane nnir-run-gmane
- ((author . "Gmane Author: ")))
+ ((gmane-author . "Gmane Author: ")))
(swish++ nnir-run-swish++
- ((group . "Swish++ Group spec: ")))
+ ((swish++-group . "Swish++ Group spec: ")))
(swish-e nnir-run-swish-e
- ((group . "Swish-e Group spec: ")))
+ ((swish-e-group . "Swish-e Group spec: ")))
(namazu nnir-run-namazu
())
(notmuch nnir-run-notmuch
())
(hyrex nnir-run-hyrex
- ((group . "Hyrex Group spec: ")))
+ ((hyrex-group . "Hyrex Group spec: ")))
(find-grep nnir-run-find-grep
((grep-options . "Grep options: "))))
"Alist of supported search engines.
@@ -576,69 +576,111 @@ needs the variables `nnir-namazu-program',
Add an entry here when adding a new search engine.")
-(defcustom nnir-method-default-engines
- '((nnimap . imap)
- (nntp . gmane))
+(defcustom nnir-method-default-engines '((nnimap . imap) (nntp . gmane))
"*Alist of default search engines keyed by server method."
:version "24.1"
- :type `(repeat (cons (choice (const nnimap) (const nttp) (const nnspool)
+ :group 'nnir
+ :type `(repeat (cons (choice (const nnimap) (const nntp) (const nnspool)
(const nneething) (const nndir) (const nnmbox)
(const nnml) (const nnmh) (const nndraft)
(const nnfolder) (const nnmaildir))
(choice
,@(mapcar (lambda (elem) (list 'const (car elem)))
- nnir-engines))))
- :group 'nnir)
+ nnir-engines)))))
;; Gnus glue.
-(defun gnus-group-make-nnir-group (nnir-extra-parms &optional parms)
- "Create an nnir group. Asks for query."
+(defun gnus-group-make-nnir-group (nnir-extra-parms &optional specs)
+ "Create an nnir group. Prompt for a search query and determine
+the groups to search as follows: if called from the *Server*
+buffer search all groups belonging to the server on the current
+line; if called from the *Group* buffer search any marked groups,
+or the group on the current line, or all the groups under the
+current topic. Calling with a prefix-arg prompts for additional
+search-engine specific constraints. A non-nil `specs' arg must be
+an alist with `nnir-query-spec' and `nnir-group-spec' keys, and
+skips all prompting."
(interactive "P")
- (setq nnir-current-query nil
- nnir-current-server nil
- nnir-current-group-marked nil
- nnir-artlist nil)
- (let* ((query (unless parms (read-string "Query: " nil 'nnir-search-history)))
- (parms (or parms (list (cons 'query query))))
- (srv (or (cdr (assq 'server parms)) (gnus-server-server-name) "nnir")))
- (add-to-list 'parms (cons 'unique-id (message-unique-id)) t)
+ (let* ((group-spec
+ (or (cdr (assq 'nnir-group-spec specs))
+ (if (gnus-server-server-name)
+ (list (list (gnus-server-server-name)))
+ (nnir-categorize
+ (or gnus-group-marked
+ (if (gnus-group-group-name)
+ (list (gnus-group-group-name))
+ (cdr (assoc (gnus-group-topic-name) gnus-topic-alist))))
+ gnus-group-server))))
+ (query-spec
+ (or (cdr (assq 'nnir-query-spec specs))
+ (apply
+ 'append
+ (list (cons 'query
+ (read-string "Query: " nil 'nnir-search-history)))
+ (when nnir-extra-parms
+ (mapcar
+ (lambda (x)
+ (nnir-read-parms (nnir-server-to-search-engine (car x))))
+ group-spec))))))
(gnus-group-read-ephemeral-group
- (concat "nnir:" (prin1-to-string parms)) (list 'nnir srv) t
- (cons (current-buffer) gnus-current-window-configuration)
- nil)))
+ (concat "nnir-" (message-unique-id))
+ (list 'nnir "nnir")
+ nil
+; (cons (current-buffer) gnus-current-window-configuration)
+ nil
+ nil nil
+ (list
+ (cons 'nnir-specs (list (cons 'nnir-query-spec query-spec)
+ (cons 'nnir-group-spec group-spec)))
+ (cons 'nnir-artlist nil)))))
+
+(defun gnus-summary-make-nnir-group (nnir-extra-parms)
+ "Search a group from the summary buffer."
+ (interactive "P")
+ (gnus-warp-to-article)
+ (let ((spec
+ (list
+ (cons 'nnir-group-spec
+ (list (list
+ (gnus-group-server gnus-newsgroup-name)
+ (list gnus-newsgroup-name)))))))
+ (gnus-group-make-nnir-group nnir-extra-parms spec)))
;; Gnus backend interface functions.
(deffoo nnir-open-server (server &optional definitions)
;; Just set the server variables appropriately.
- (add-hook 'gnus-summary-mode-hook 'nnir-mode)
- (nnoo-change-server 'nnir server definitions))
-
-(deffoo nnir-request-group (group &optional server fast info)
- "GROUP is the query string."
- (nnir-possibly-change-server server)
- ;; Check for cache and return that if appropriate.
- (if (and (equal group nnir-current-query)
- (equal gnus-group-marked nnir-current-group-marked)
- (or (null server)
- (equal server nnir-current-server)))
- nnir-artlist
- ;; Cache miss.
- (setq nnir-artlist (nnir-run-query group)))
- (with-current-buffer nntp-server-buffer
- (setq nnir-current-query group)
- (when server (setq nnir-current-server server))
- (setq nnir-current-group-marked gnus-group-marked)
- (if (zerop (length nnir-artlist))
- (nnheader-report 'nnir "Search produced empty results.")
- ;; Remember data for cache.
- (nnheader-insert "211 %d %d %d %s\n"
- (nnir-artlist-length nnir-artlist) ; total #
- 1 ; first #
- (nnir-artlist-length nnir-artlist) ; last #
- group)))) ; group name
+ (let ((backend (car (gnus-server-to-method server))))
+ (if backend
+ (nnoo-change-server backend server definitions)
+ (add-hook 'gnus-summary-mode-hook 'nnir-mode)
+ (nnoo-change-server 'nnir server definitions))))
+
+(deffoo nnir-request-group (group &optional server dont-check info)
+ (nnir-possibly-change-group group server)
+ (let ((pgroup (gnus-group-guess-full-name-from-command-method group))
+ length)
+ ;; Check for cached search result or run the query and cache the
+ ;; result.
+ (unless (and nnir-artlist dont-check)
+ (gnus-group-set-parameter
+ pgroup 'nnir-artlist
+ (setq nnir-artlist
+ (nnir-run-query
+ (gnus-group-get-parameter pgroup 'nnir-specs t))))
+ (nnir-request-update-info pgroup (gnus-get-info pgroup)))
+ (with-current-buffer nntp-server-buffer
+ (if (zerop (setq length (nnir-artlist-length nnir-artlist)))
+ (progn
+ (nnir-close-group group)
+ (nnheader-report 'nnir "Search produced empty results."))
+ (nnheader-insert "211 %d %d %d %s\n"
+ length ; total #
+ 1 ; first #
+ length ; last #
+ group)))) ; group name
+ nnir-artlist)
(deffoo nnir-retrieve-headers (articles &optional group server fetch-old)
(with-current-buffer nntp-server-buffer
@@ -654,13 +696,7 @@ Add an entry here when adding a new search engine.")
(server (gnus-group-server artgroup))
(gnus-override-method (gnus-server-to-method server))
parsefunc)
- ;; (or (numberp art)
- ;; (nnheader-report
- ;; 'nnir
- ;; "nnir-retrieve-headers doesn't grok message ids: %s"
- ;; art))
- (nnir-possibly-change-server server)
- ;; is this needed?
+ ;; (nnir-possibly-change-group nil server)
(erase-buffer)
(case (setq gnus-headers-retrieved-by
(or
@@ -694,6 +730,7 @@ Add an entry here when adding a new search engine.")
'nov)))
(deffoo nnir-request-article (article &optional group server to-buffer)
+ (nnir-possibly-change-group group server)
(if (and (stringp article)
(not (eq 'nnimap (car (gnus-server-to-method server)))))
(nnheader-report
@@ -702,35 +739,35 @@ Add an entry here when adding a new search engine.")
server)
(save-excursion
(let ((article article)
- query)
- (when (stringp article)
- (setq gnus-override-method (gnus-server-to-method server))
- (setq query
- (list
- (cons 'query (format "HEADER Message-ID %s" article))
- (cons 'unique-id article)
- (cons 'criteria "")
- (cons 'shortcut t)))
- (unless (and (equal query nnir-current-query)
- (equal server nnir-current-server))
- (setq nnir-artlist (nnir-run-imap query server))
- (setq nnir-current-query query)
- (setq nnir-current-server server))
- (setq article 1))
- (unless (zerop (length nnir-artlist))
- (let ((artfullgroup (nnir-article-group article))
- (artno (nnir-article-number article)))
- (message "Requesting article %d from group %s"
- artno artfullgroup)
- (if to-buffer
- (with-current-buffer to-buffer
- (let ((gnus-article-decode-hook nil))
- (gnus-request-article-this-buffer artno artfullgroup)))
- (gnus-request-article artno artfullgroup))
- (cons artfullgroup artno)))))))
+ query)
+ (when (stringp article)
+ (setq gnus-override-method (gnus-server-to-method server))
+ (setq query
+ (list
+ (cons 'query (format "HEADER Message-ID %s" article))
+ (cons 'criteria "")
+ (cons 'shortcut t)))
+ (unless (and nnir-artlist (equal query nnir-memo-query)
+ (equal server nnir-memo-server))
+ (setq nnir-artlist (nnir-run-imap query server)
+ nnir-memo-query query
+ nnir-memo-server server))
+ (setq article 1))
+ (unless (zerop (nnir-artlist-length nnir-artlist))
+ (let ((artfullgroup (nnir-article-group article))
+ (artno (nnir-article-number article)))
+ (message "Requesting article %d from group %s"
+ artno artfullgroup)
+ (if to-buffer
+ (with-current-buffer to-buffer
+ (let ((gnus-article-decode-hook nil))
+ (gnus-request-article-this-buffer artno artfullgroup)))
+ (gnus-request-article artno artfullgroup))
+ (cons artfullgroup artno)))))))
(deffoo nnir-request-move-article (article group server accept-form
&optional last internal-move-group)
+ (nnir-possibly-change-group group server)
(let* ((artfullgroup (nnir-article-group article))
(artno (nnir-article-number article))
(to-newsgroup (nth 1 accept-form))
@@ -751,6 +788,7 @@ Add an entry here when adding a new search engine.")
(gnus-group-real-name to-newsgroup)))))
(deffoo nnir-request-expire-articles (articles group &optional server force)
+ (nnir-possibly-change-group group server)
(if force
(let ((articles-by-group (nnir-categorize
articles nnir-article-group nnir-article-ids))
@@ -772,22 +810,103 @@ Add an entry here when adding a new search engine.")
articles))
(deffoo nnir-warp-to-article ()
+ (nnir-possibly-change-group gnus-newsgroup-name)
(let* ((cur (if (> (gnus-summary-article-number) 0)
(gnus-summary-article-number)
- (error "This is not a real article")))
+ (error "Can't warp to a pseudo-article")))
(backend-article-group (nnir-article-group cur))
(backend-article-number (nnir-article-number cur))
(quit-config (gnus-ephemeral-group-p gnus-newsgroup-name)))
- ;; first exit from the nnir summary buffer.
- (gnus-summary-exit)
+
+ ;; what should we do here? we could leave all the buffers around
+ ;; and assume that we have to exit from them one by one. or we can
+ ;; try to clean up directly
+
+ ;;first exit from the nnir summary buffer.
+; (gnus-summary-exit)
;; and if the nnir summary buffer in turn came from another
;; summary buffer we have to clean that summary up too.
- (when (eq (cdr quit-config) 'summary)
- (gnus-summary-exit))
+ ; (when (not (eq (cdr quit-config) 'group))
+; (gnus-summary-exit))
(gnus-summary-read-group-1 backend-article-group t t nil
- nil (list backend-article-number))))
+ nil (list backend-article-number))))
+
+(deffoo nnir-request-update-mark (group article mark)
+ (let ((artgroup (nnir-article-group article))
+ (artnumber (nnir-article-number article)))
+ (gnus-request-update-mark artgroup artnumber mark)))
+
+(deffoo nnir-request-set-mark (group actions &optional server)
+ (nnir-possibly-change-group group server)
+ (let (mlist)
+ (dolist (action actions)
+ (destructuring-bind (range action marks) action
+ (let ((articles-by-group (nnir-categorize
+ (gnus-uncompress-range range)
+ nnir-article-group nnir-article-number)))
+ (dolist (artgroup articles-by-group)
+ (push (list
+ (car artgroup)
+ (list (gnus-compress-sequence
+ (sort (cadr artgroup) '<)) action marks)) mlist)))))
+ (dolist (request (nnir-categorize mlist car cadr))
+ (gnus-request-set-mark (car request) (cadr request)))))
+
+
+(deffoo nnir-request-update-info (group info &optional server)
+ (nnir-possibly-change-group group server)
+ ;; clear out all existing marks.
+ (gnus-info-set-marks info nil)
+ (gnus-info-set-read info nil)
+ (let ((group (gnus-group-guess-full-name-from-command-method group))
+ (articles-by-group
+ (nnir-categorize
+ (gnus-uncompress-range (cons 1 (nnir-artlist-length nnir-artlist)))
+ nnir-article-group nnir-article-ids)))
+ (gnus-set-active group
+ (cons 1 (nnir-artlist-length nnir-artlist)))
+ (while (not (null articles-by-group))
+ (let* ((group-articles (pop articles-by-group))
+ (articleids (reverse (cadr group-articles)))
+ (group-info (gnus-get-info (car group-articles)))
+ (marks (gnus-info-marks group-info))
+ (read (gnus-info-read group-info)))
+ (gnus-info-set-read
+ info
+ (gnus-add-to-range
+ (gnus-info-read info)
+ (delq nil
+ (mapcar
+ #'(lambda (art)
+ (when (gnus-member-of-range (cdr art) read) (car art)))
+ articleids))))
+ (dolist (mark marks)
+ (destructuring-bind (type . range) mark
+ (gnus-add-marked-articles
+ group type
+ (delq nil
+ (mapcar
+ #'(lambda (art)
+ (when (gnus-member-of-range (cdr art) range) (car art)))
+ articleids)))))))))
+
+
+(deffoo nnir-close-group (group &optional server)
+ (nnir-possibly-change-group group server)
+ (let ((pgroup (gnus-group-guess-full-name-from-command-method group)))
+ (when (and nnir-artlist (not (gnus-ephemeral-group-p pgroup)))
+ (gnus-group-set-parameter pgroup 'nnir-artlist nnir-artlist))
+ (setq nnir-artlist nil)
+ (when (gnus-ephemeral-group-p pgroup)
+ (gnus-kill-ephemeral-group pgroup)
+ (setq gnus-ephemeral-servers
+ (delq (assq 'nnir gnus-ephemeral-servers)
+ gnus-ephemeral-servers)))))
+;; (gnus-opened-servers-remove
+;; (car (assoc '(nnir "nnir-ephemeral" (nnir-address "nnir"))
+;; gnus-opened-servers))))
+
-(nnoo-define-skeleton nnir)
(defmacro nnir-add-result (dirnam artno score prefix server artlist)
@@ -813,7 +932,7 @@ ready to be added to the list of search results."
;; remove trailing slash and, for nnmaildir, cur/new/tmp
(setq dirnam
(substring dirnam 0
- (if (string-match "^nnmaildir:" (gnus-group-server server))
+ (if (string-match "\\`nnmaildir:" (gnus-group-server server))
-5 -1)))
;; Set group to dirnam without any leading dots or slashes,
@@ -823,7 +942,7 @@ ready to be added to the list of search results."
"[/\\]" "." t)))
(vector (gnus-group-full-name group server)
- (if (string-match "^nnmaildir:" (gnus-group-server server))
+ (if (string-match "\\`nnmaildir:" (gnus-group-server server))
(nnmaildir-base-name-to-article-number
(substring article 0 (string-match ":" article))
group nil)
@@ -850,35 +969,36 @@ details on the language and supported extensions."
(apply
'vconcat
(catch 'found
- (mapcar
- (lambda (group)
- (let (artlist)
- (condition-case ()
- (when (nnimap-possibly-change-group
- (gnus-group-short-name group) server)
- (with-current-buffer (nnimap-buffer)
- (message "Searching %s..." group)
- (let ((arts 0)
- (result (nnimap-command "UID SEARCH %s"
- (if (string= criteria "")
- qstring
- (nnir-imap-make-query
- criteria qstring)))))
- (mapc
- (lambda (artnum)
- (let ((artn (string-to-number artnum)))
- (when (> artn 0)
- (push (vector group artn 100)
- artlist)
- (when (assq 'shortcut query)
- (throw 'found (list artlist)))
- (setq arts (1+ arts)))))
- (and (car result) (cdr (assoc "SEARCH" (cdr result)))))
- (message "Searching %s... %d matches" group arts)))
- (message "Searching %s...done" group))
- (quit nil))
- (nreverse artlist)))
- groups))))))
+ (mapcar
+ #'(lambda (group)
+ (let (artlist)
+ (condition-case ()
+ (when (nnimap-possibly-change-group
+ (gnus-group-short-name group) server)
+ (with-current-buffer (nnimap-buffer)
+ (message "Searching %s..." group)
+ (let ((arts 0)
+ (result (nnimap-command "UID SEARCH %s"
+ (if (string= criteria "")
+ qstring
+ (nnir-imap-make-query
+ criteria qstring)))))
+ (mapc
+ (lambda (artnum)
+ (let ((artn (string-to-number artnum)))
+ (when (> artn 0)
+ (push (vector group artn 100)
+ artlist)
+ (when (assq 'shortcut query)
+ (throw 'found (list artlist)))
+ (setq arts (1+ arts)))))
+ (and (car result)
+ (cdr (assoc "SEARCH" (cdr result)))))
+ (message "Searching %s... %d matches" group arts)))
+ (message "Searching %s...done" group))
+ (quit nil))
+ (nreverse artlist)))
+ groups))))))
(defun nnir-imap-make-query (criteria qstring)
"Parse the query string and criteria into an appropriate IMAP search
@@ -1073,14 +1193,14 @@ Windows NT 4.0."
(save-excursion
(let ( (qstring (cdr (assq 'query query)))
- (groupspec (cdr (assq 'group query)))
+ (groupspec (cdr (assq 'swish++-group query)))
(prefix (nnir-read-server-parm 'nnir-swish++-remove-prefix server))
artlist
;; nnml-use-compressed-files might be any string, but probably this
;; is sufficient. Note that we can't only use the value of
;; nnml-use-compressed-files because old articles might have been
;; saved with a different value.
- (article-pattern (if (string-match "^nnmaildir:"
+ (article-pattern (if (string-match "\\`nnmaildir:"
(gnus-group-server server))
":[0-9]+"
"^[0-9]+\\(\\.[a-z0-9]+\\)?$"))
@@ -1247,7 +1367,7 @@ Tested with swish-e-2.0.1 on Windows NT 4.0."
(defun nnir-run-hyrex (query server &optional group)
(save-excursion
(let ((artlist nil)
- (groupspec (cdr (assq 'group query)))
+ (groupspec (cdr (assq 'hyrex-group query)))
(qstring (cdr (assq 'query query)))
(prefix (nnir-read-server-parm 'nnir-hyrex-remove-prefix server))
score artno dirnam)
@@ -1323,7 +1443,7 @@ Tested with Namazu 2.0.6 on a GNU/Linux system."
;; (when group
;; (error "The Namazu backend cannot search specific groups"))
(save-excursion
- (let ((article-pattern (if (string-match "^nnmaildir:"
+ (let ((article-pattern (if (string-match "\\`nnmaildir:"
(gnus-group-server server))
":[0-9]+"
"^[0-9]+$"))
@@ -1394,10 +1514,10 @@ actually)."
(save-excursion
(let ( (qstring (cdr (assq 'query query)))
- (groupspec (cdr (assq 'group query)))
+ (groupspec (cdr (assq 'notmuch-group query)))
(prefix (nnir-read-server-parm 'nnir-notmuch-remove-prefix server))
artlist
- (article-pattern (if (string-match "^nnmaildir:"
+ (article-pattern (if (string-match "\\`nnmaildir:"
(gnus-group-server server))
":[0-9]+"
"^[0-9]+$"))
@@ -1467,24 +1587,23 @@ actually)."
(directory (cadr (assoc sym (cddr method))))
(regexp (cdr (assoc 'query query)))
(grep-options (cdr (assoc 'grep-options query)))
- (grouplist (or grouplist (nnir-get-active server)))
- artlist)
+ (grouplist (or grouplist (nnir-get-active server))))
(unless directory
(error "No directory found in method specification of server %s"
server))
(apply
'vconcat
(mapcar (lambda (x)
- (let ((group x))
+ (let ((group x)
+ artlist)
(message "Searching %s using find-grep..."
(or group server))
(save-window-excursion
(set-buffer (get-buffer-create nnir-tmp-buffer))
- (erase-buffer)
(if (> gnus-verbose 6)
(pop-to-buffer (current-buffer)))
(cd directory) ; Using relative paths simplifies
- ; postprocessing.
+ ; postprocessing.
(let ((group
(if (not group)
"."
@@ -1507,7 +1626,8 @@ actually)."
(save-excursion
(apply
'call-process "find" nil t
- "find" group "-type" "f" "-name" "[0-9]*" "-exec"
+ "find" group "-maxdepth" "1" "-type" "f"
+ "-name" "[0-9]*" "-exec"
"grep"
`("-l" ,@(and grep-options
(split-string grep-options "\\s-" t))
@@ -1557,8 +1677,8 @@ actually)."
(error "Can't search non-gmane groups: %s" x)))
groups " "))
(authorspec
- (if (assq 'author query)
- (format "author:%s" (cdr (assq 'author query))) ""))
+ (if (assq 'gmane-author query)
+ (format "author:%s" (cdr (assq 'gmane-author query))) ""))
(search (format "%s %s %s"
qstring groupspec authorspec))
(gnus-inhibit-demon t)
@@ -1594,11 +1714,16 @@ actually)."
;;; Util Code:
-(defun nnir-read-parms (query nnir-search-engine)
+(defun gnus-nnir-group-p (group)
+ "Say whether GROUP is nnir or not."
+ (if (gnus-group-prefixed-p group)
+ (eq 'nnir (car (gnus-find-method-for-group group)))
+ (and group (string-match "^nnir" group))))
+
+(defun nnir-read-parms (nnir-search-engine)
"Reads additional search parameters according to `nnir-engines'."
(let ((parmspec (caddr (assoc nnir-search-engine nnir-engines))))
- (append query
- (mapcar 'nnir-read-parm parmspec))))
+ (mapcar 'nnir-read-parm parmspec)))
(defun nnir-read-parm (parmspec)
"Reads a single search parameter.
@@ -1612,46 +1737,23 @@ actually)."
(cons sym (format (cdr mapping) result)))
(cons sym (read-string prompt)))))
-(autoload 'gnus-group-topic-name "gnus-topic")
-
-(defun nnir-run-query (query)
- "Invoke appropriate search engine function (see `nnir-engines').
- If some groups were process-marked, run the query for each of the groups
- and concat the results."
- (let ((q (car (read-from-string query)))
- (groups (if (not (string= "nnir" nnir-address))
- (list (list nnir-address))
- (nnir-categorize
- (or gnus-group-marked
- (if (gnus-group-group-name)
- (list (gnus-group-group-name))
- (cdr (assoc (gnus-group-topic-name)
- gnus-topic-alist))))
- gnus-group-server))))
- (apply 'vconcat
- (mapcar
- (lambda (x)
- (let* ((server (car x))
- (nnir-search-engine
- (or (nnir-read-server-parm 'nnir-search-engine
- server t)
- (cdr (assoc (car
- (gnus-server-to-method server))
- nnir-method-default-engines))))
- search-func)
- (setq search-func (cadr (assoc nnir-search-engine
- nnir-engines)))
- (if search-func
- (funcall
- search-func
- (if nnir-extra-parms
- (or (and (eq nnir-search-engine 'imap)
- (assq 'criteria q) q)
- (setq q (nnir-read-parms q nnir-search-engine)))
- q)
- server (cadr x))
- nil)))
- groups))))
+(defun nnir-run-query (specs)
+ "Invoke appropriate search engine function (see `nnir-engines')."
+ (apply 'vconcat
+ (mapcar
+ (lambda (x)
+ (let* ((server (car x))
+ (search-engine (nnir-server-to-search-engine server))
+ (search-func (cadr (assoc search-engine nnir-engines))))
+ (and search-func
+ (funcall search-func (cdr (assq 'nnir-query-spec specs))
+ server (cadr x)))))
+ (cdr (assq 'nnir-group-spec specs)))))
+
+(defun nnir-server-to-search-engine (server)
+ (or (nnir-read-server-parm 'nnir-search-engine server t)
+ (cdr (assoc (car (gnus-server-to-method server))
+ nnir-method-default-engines))))
(defun nnir-read-server-parm (key server &optional not-global)
"Returns the parameter value corresponding to `key' for
@@ -1663,36 +1765,43 @@ environment unless `not-global' is non-nil."
((and (not not-global) (boundp key)) (symbol-value key))
(t nil))))
+(defun nnir-possibly-change-group (group &optional server)
+ (or (not server) (nnir-server-opened server) (nnir-open-server server))
+ (when (gnus-nnir-group-p group)
+ (setq nnir-artlist (gnus-group-get-parameter
+ (gnus-group-prefixed-name
+ (gnus-group-short-name group) '(nnir "nnir"))
+ 'nnir-artlist t))))
-(defun nnir-possibly-change-server (server)
- (unless (and server (nnir-server-opened server))
- (nnir-open-server server)))
-
+(defun nnir-server-opened (&optional server)
+ (let ((backend (car (gnus-server-to-method server))))
+ (nnoo-current-server-p (or backend 'nnir) server)))
(defun nnir-search-thread (header)
- "Make an nnir group based on the thread containing the article header"
- (let ((parm (list
- (cons 'query
- (nnimap-make-thread-query header))
- (cons 'criteria "")
- (cons 'server (gnus-method-to-server
- (gnus-find-method-for-group
- gnus-newsgroup-name))))))
- (gnus-group-make-nnir-group nil parm)
+ "Make an nnir group based on the thread containing the article
+header. The current server will be searched. If the registry is
+installed, the server that the registry reports the current
+article came from is also searched."
+ (let* ((query
+ (list (cons 'query (nnimap-make-thread-query header))
+ (cons 'criteria "")))
+ (server
+ (list (list (gnus-method-to-server
+ (gnus-find-method-for-group gnus-newsgroup-name)))))
+ (registry-group (and
+ (gnus-bound-and-true-p 'gnus-registry-enabled)
+ (car (gnus-registry-get-id-key
+ (mail-header-id header) 'group))))
+ (registry-server
+ (and registry-group
+ (gnus-method-to-server
+ (gnus-find-method-for-group registry-group)))))
+ (when registry-server (add-to-list 'server (list registry-server)))
+ (gnus-group-make-nnir-group nil (list
+ (cons 'nnir-query-spec query)
+ (cons 'nnir-group-spec server)))
(gnus-summary-goto-subject (gnus-id-to-article (mail-header-id header)))))
-;; unused?
-(defun nnir-artlist-groups (artlist)
- "Returns a list of all groups in the given ARTLIST."
- (let ((res nil)
- (with-dups nil))
- ;; from each artitem, extract group component
- (setq with-dups (mapcar 'nnir-artitem-group artlist))
- ;; remove duplicates from above
- (mapc (function (lambda (x) (add-to-list 'res x)))
- with-dups)
- res))
-
(defun nnir-get-active (srv)
(let ((method (gnus-server-to-method srv))
groups)
@@ -1757,6 +1866,53 @@ environment unless `not-global' is non-nil."
(add-hook 'gnus-summary-article-expire-hook 'nnir-registry-action t t))))
+(defun gnus-summary-create-nnir-group ()
+ (interactive)
+ (or (nnir-server-opened "") (nnir-open-server "nnir"))
+ (let ((name (gnus-read-group "Group name: "))
+ (method '(nnir ""))
+ (pgroup
+ (gnus-group-guess-full-name-from-command-method gnus-newsgroup-name)))
+ (with-current-buffer gnus-group-buffer
+ (gnus-group-make-group
+ name method nil
+ (gnus-group-find-parameter pgroup)))))
+
+
+(deffoo nnir-request-create-group (group &optional server args)
+ (message "Creating nnir group %s" group)
+ (let* ((group (gnus-group-prefixed-name group '(nnir "nnir")))
+ (specs (assq 'nnir-specs args))
+ (query-spec
+ (or (cdr (assq 'nnir-query-spec specs))
+ (list (cons 'query
+ (read-string "Query: " nil 'nnir-search-history)))))
+ (group-spec
+ (or (cdr (assq 'nnir-group-spec specs))
+ (list (list (read-string "Server: " nil nil)))))
+ (nnir-specs (list (cons 'nnir-query-spec query-spec)
+ (cons 'nnir-group-spec group-spec))))
+ (gnus-group-set-parameter group 'nnir-specs nnir-specs)
+ (gnus-group-set-parameter
+ group 'nnir-artlist
+ (or (cdr (assq 'nnir-artlist args))
+ (nnir-run-query nnir-specs)))
+ (nnir-request-update-info group (gnus-get-info group)))
+ t)
+
+(deffoo nnir-request-delete-group (group &optional force server)
+ t)
+
+(deffoo nnir-request-list (&optional server)
+ t)
+
+(deffoo nnir-request-scan (group method)
+ t)
+
+(deffoo nnir-request-close ()
+ t)
+
+(nnoo-define-skeleton nnir)
;; The end.
(provide 'nnir)
diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el
index a21fc85752c..58135a1e598 100644
--- a/lisp/gnus/nntp.el
+++ b/lisp/gnus/nntp.el
@@ -1282,7 +1282,7 @@ If SEND-IF-FORCE, only send authinfo to the server if the
"nntpd" pbuffer nntp-address nntp-port-number
:type (cadr (assoc nntp-open-connection-function map))
:end-of-command "^\\([2345]\\|[.]\\).*\n"
- :capability-command "CAPABILITIES\r\n"
+ :capability-command "HELP\r\n"
:success "^3"
:starttls-function
(lambda (capabilities)
diff --git a/lisp/gnus/pop3.el b/lisp/gnus/pop3.el
index 719dff471ad..5ccbd197ff0 100644
--- a/lisp/gnus/pop3.el
+++ b/lisp/gnus/pop3.el
@@ -98,20 +98,53 @@ set this to 1."
: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 you may get duplicate mails or the whole
-thing can fall apart and leave you with a corrupt mailbox."
- ;; We can't use the UILD support from XEmacs mail-lib or cvs.m17n.org:
- ;; http://thread.gmane.org/v9lld8fml4.fsf@marauder.physik.uni-ulm.de
- ;; http://thread.gmane.org/b9yy8hzy9ej.fsf@jpl.org
- ;; Any volunteer to re-implement this?
- :version "22.1" ;; Oort Gnus
- :type 'boolean
+ "Non-nil if the mail is to be left on the POP server after fetching.
+Mails once fetched will never be fetched again by the UIDL control.
+
+If this is neither nil nor a number, all mails will be left on the
+server. If this is a number, leave mails on the server for this many
+days since you first checked new mails. If this is nil, mails will be
+deleted on the server right after fetching.
+
+Gnus users should use the `:leave' keyword in a mail source to direct
+the behaviour per server, rather than directly modifying this value.
+
+Note that POP servers maintain no state information between sessions,
+so what the client believes is there and what is actually there may
+not match up. If they do not, then you may get duplicate mails or
+the whole thing can fall apart and leave you with a corrupt mailbox."
+ :version "24.4"
+ :type '(choice (const :tag "Don't leave mails" nil)
+ (const :tag "Leave all mails" t)
+ (number :tag "Leave mails for this many days" :value 14))
+ :group 'pop3)
+
+(defcustom pop3-uidl-file "~/.pop3-uidl"
+ "File used to save UIDL."
+ :version "24.4"
+ :type 'file
+ :group 'pop3)
+
+(defcustom pop3-uidl-file-backup '(0 9)
+ "How to backup the UIDL file `pop3-uidl-file' when updating.
+If it is a list of numbers, the first one binds `kept-old-versions' and
+the other binds `kept-new-versions' to keep number of oldest and newest
+versions. Otherwise, the value binds `version-control' (which see).
+
+Note: Backup will take place whenever you check new mails on a server.
+So, you may lose the backup files having been saved before a trouble
+if you set it so as to make too few backups whereas you have access to
+many servers."
+ :version "24.4"
+ :type '(choice (group :tag "Keep versions" :format "\n%v" :indent 3
+ (number :tag "oldest")
+ (number :tag "newest"))
+ (sexp :format "%v"
+ :match (lambda (widget value)
+ (condition-case nil
+ (not (and (numberp (car value))
+ (numberp (car (cdr value)))))
+ (error t)))))
:group 'pop3)
(defvar pop3-timestamp nil
@@ -144,34 +177,66 @@ Shorter values mean quicker response, but are more CPU intensive.")
(truncate pop3-read-timeout))
1000))))))
+(defvar pop3-uidl)
+;; List of UIDLs of existing messages at present in the server:
+;; ("UIDL1" "UIDL2" "UIDL3"...)
+
+(defvar pop3-uidl-saved)
+;; Locally saved UIDL data; an alist of the server, the user, and the UIDL
+;; and timestamp pairs:
+;; (("SERVER_A" ("USER_A1" "UIDL1" TIMESTAMP1 "UIDL2" TIMESTAMP2...)
+;; ("USER_A2" "UIDL1" TIMESTAMP1 "UIDL2" TIMESTAMP2...)
+;; ...)
+;; ("SERVER_B" ("USER_B1" "UIDL1" TIMESTAMP1 "UIDL2" TIMESTAMP2...)
+;; ("USER_B2" "UIDL1" TIMESTAMP1 "UIDL2" TIMESTAMP2...)
+;; ...))
+;; Where TIMESTAMP is the most significant two digits of an Emacs time,
+;; i.e. the return value of `current-time'.
+
;;;###autoload
(defun pop3-movemail (file)
"Transfer contents of a maildrop to the specified FILE.
Use streaming commands."
- (let* ((process (pop3-open-server pop3-mailhost pop3-port))
- message-count message-total-size)
+ (let ((process (pop3-open-server pop3-mailhost pop3-port))
+ messages total-size
+ pop3-uidl
+ pop3-uidl-saved)
(pop3-logon process)
- (with-current-buffer (process-buffer process)
+ (if pop3-leave-mail-on-server
+ (setq messages (pop3-uidl-stat process)
+ total-size (cadr messages)
+ messages (car messages))
(let ((size (pop3-stat process)))
- (setq message-count (car size)
- message-total-size (cadr size)))
- (when (> message-count 0)
- (pop3-send-streaming-command
- process "RETR" message-count message-total-size)
- (pop3-write-to-file file)
+ (dotimes (i (car size)) (push (1+ i) messages))
+ (setq messages (nreverse messages)
+ total-size (cadr size))))
+ (when messages
+ (with-current-buffer (process-buffer process)
+ (pop3-send-streaming-command process "RETR" messages total-size)
+ (pop3-write-to-file file messages)
(unless pop3-leave-mail-on-server
- (pop3-send-streaming-command
- process "DELE" message-count nil))))
- (pop3-quit process)
+ (pop3-send-streaming-command process "DELE" messages nil))))
+ (if pop3-leave-mail-on-server
+ (when (prog1 (pop3-uidl-dele process) (pop3-quit process))
+ (pop3-uidl-save))
+ (pop3-quit process)
+ ;; Remove UIDL data for the account that got not to leave mails.
+ (setq pop3-uidl-saved (pop3-uidl-load))
+ (let ((elt (assoc pop3-maildrop
+ (cdr (assoc pop3-mailhost pop3-uidl-saved)))))
+ (when elt
+ (setcdr elt nil)
+ (pop3-uidl-save))))
t))
-(defun pop3-send-streaming-command (process command count total-size)
+(defun pop3-send-streaming-command (process command messages total-size)
(erase-buffer)
- (let ((i 1)
+ (let ((count (length messages))
+ (i 1)
(start-point (point-min))
(waited-for 0))
- (while (>= count i)
- (process-send-string process (format "%s %d\r\n" command i))
+ (while messages
+ (process-send-string process (format "%s %d\r\n" command (pop messages)))
;; Only do 100 messages at a time to avoid pipe stalls.
(when (zerop (% i pop3-stream-length))
(setq start-point
@@ -207,7 +272,7 @@ Use streaming commands."
(pop3-accept-process-output process))
start-point)
-(defun pop3-write-to-file (file)
+(defun pop3-write-to-file (file messages)
(let ((pop-buffer (current-buffer))
(start (point-min))
beg end
@@ -230,6 +295,8 @@ Use streaming commands."
(pop3-clean-region hstart (point))
(goto-char (point-max))
(pop3-munge-message-separator hstart (point))
+ (when pop3-leave-mail-on-server
+ (pop3-uidl-add-xheader hstart (pop messages)))
(goto-char (point-max))))))
(let ((coding-system-for-write 'binary))
(goto-char (point-min))
@@ -275,6 +342,184 @@ Use streaming commands."
(pop3-quit process)
message-count))
+(defun pop3-uidl-stat (process)
+ "Return a list of unread message numbers and total size."
+ (pop3-send-command process "UIDL")
+ (let (err messages size)
+ (if (condition-case code
+ (progn
+ (pop3-read-response process)
+ t)
+ (error (setq err (error-message-string code))
+ nil))
+ (let ((start pop3-read-point)
+ saved list)
+ (with-current-buffer (process-buffer process)
+ (while (not (re-search-forward "^\\.\r\n" nil t))
+ (unless (memq (process-status process) '(open run))
+ (error "pop3 server closed the connection"))
+ (pop3-accept-process-output process)
+ (goto-char start))
+ (setq pop3-read-point (point-marker)
+ pop3-uidl nil)
+ (while (progn (forward-line -1) (>= (point) start))
+ (when (looking-at "[0-9]+ \\([^\n\r ]+\\)")
+ (push (match-string 1) pop3-uidl)))
+ (when pop3-uidl
+ (setq pop3-uidl-saved (pop3-uidl-load)
+ saved (cdr (assoc pop3-maildrop
+ (cdr (assoc pop3-mailhost
+ pop3-uidl-saved)))))
+ (let ((i (length pop3-uidl)))
+ (while (> i 0)
+ (unless (member (nth (1- i) pop3-uidl) saved)
+ (push i messages))
+ (decf i)))
+ (when messages
+ (setq list (pop3-list process)
+ size 0)
+ (dolist (msg messages)
+ (setq size (+ size (cdr (assq msg list)))))
+ (list messages size)))))
+ (message "%s doesn't support UIDL (%s), so we try a regressive way..."
+ pop3-mailhost err)
+ (sit-for 1)
+ (setq size (pop3-stat process))
+ (dotimes (i (car size)) (push (1+ i) messages))
+ (setcar size (nreverse messages))
+ size)))
+
+(defun pop3-uidl-dele (process)
+ "Delete messages according to `pop3-leave-mail-on-server'.
+Return non-nil if it is necessary to update the local UIDL file."
+ (let* ((ctime (current-time))
+ (srvr (assoc pop3-mailhost pop3-uidl-saved))
+ (saved (assoc pop3-maildrop (cdr srvr)))
+ i uidl mod new tstamp dele)
+ (setcdr (cdr ctime) nil)
+ ;; Add new messages to the data to be saved.
+ (cond ((and pop3-uidl saved)
+ (setq i (1- (length pop3-uidl)))
+ (while (>= i 0)
+ (unless (member (setq uidl (nth i pop3-uidl)) (cdr saved))
+ (push ctime new)
+ (push uidl new))
+ (decf i)))
+ (pop3-uidl
+ (setq new (apply 'nconc (mapcar (lambda (elt) (list elt ctime))
+ pop3-uidl)))))
+ (when new (setq mod t))
+ ;; List expirable messages and delete them from the data to be saved.
+ (setq ctime (when (numberp pop3-leave-mail-on-server)
+ (/ (+ (* (car ctime) 65536.0) (cadr ctime)) 86400))
+ i (1- (length saved)))
+ (while (> i 0)
+ (if (member (setq uidl (nth (1- i) saved)) pop3-uidl)
+ (progn
+ (setq tstamp (nth i saved))
+ (if (and ctime
+ (> (- ctime (/ (+ (* (car tstamp) 65536.0) (cadr tstamp))
+ 86400))
+ pop3-leave-mail-on-server))
+ ;; Mails to delete.
+ (progn
+ (setq mod t)
+ (push uidl dele))
+ ;; Mails to keep.
+ (push tstamp new)
+ (push uidl new)))
+ ;; Mails having been deleted in the server.
+ (setq mod t))
+ (decf i 2))
+ (cond (saved
+ (setcdr saved new))
+ (srvr
+ (setcdr (last srvr) (list (cons pop3-maildrop new))))
+ (t
+ (add-to-list 'pop3-uidl-saved
+ (list pop3-mailhost (cons pop3-maildrop new))
+ t)))
+ ;; Actually delete the messages in the server.
+ (when dele
+ (setq uidl nil
+ i (length pop3-uidl))
+ (while (> i 0)
+ (when (member (nth (1- i) pop3-uidl) dele)
+ (push i uidl))
+ (decf i))
+ (when uidl
+ (pop3-send-streaming-command process "DELE" uidl nil)))
+ mod))
+
+(defun pop3-uidl-load ()
+ "Load saved UIDL."
+ (when (file-exists-p pop3-uidl-file)
+ (with-temp-buffer
+ (condition-case code
+ (progn
+ (insert-file-contents pop3-uidl-file)
+ (goto-char (point-min))
+ (read (current-buffer)))
+ (error
+ (message "Error while loading %s (%s)"
+ pop3-uidl-file (error-message-string code))
+ (sit-for 1)
+ nil)))))
+
+(defun pop3-uidl-save ()
+ "Save UIDL."
+ (with-temp-buffer
+ (if pop3-uidl-saved
+ (progn
+ (insert "(")
+ (dolist (srvr pop3-uidl-saved)
+ (when (cdr srvr)
+ (insert "(\"" (pop srvr) "\"\n ")
+ (dolist (elt srvr)
+ (when (cdr elt)
+ (insert "(\"" (pop elt) "\"\n ")
+ (while elt
+ (insert (format "\"%s\" %s\n " (pop elt) (pop elt))))
+ (delete-char -4)
+ (insert ")\n ")))
+ (delete-char -3)
+ (if (eq (char-before) ?\))
+ (insert ")\n ")
+ (goto-char (1+ (point-at-bol)))
+ (delete-region (point) (point-max)))))
+ (when (eq (char-before) ? )
+ (delete-char -2))
+ (insert ")\n"))
+ (insert "()\n"))
+ (let ((buffer-file-name pop3-uidl-file)
+ (delete-old-versions t)
+ (kept-new-versions kept-new-versions)
+ (kept-old-versions kept-old-versions)
+ (version-control version-control))
+ (if (consp pop3-uidl-file-backup)
+ (setq kept-new-versions (cadr pop3-uidl-file-backup)
+ kept-old-versions (car pop3-uidl-file-backup)
+ version-control t)
+ (setq version-control pop3-uidl-file-backup))
+ (save-buffer))))
+
+(defun pop3-uidl-add-xheader (start msgno)
+ "Add X-UIDL header."
+ (let ((case-fold-search t))
+ (save-restriction
+ (narrow-to-region start (progn
+ (goto-char start)
+ (search-forward "\n\n" nil 'move)
+ (1- (point))))
+ (goto-char start)
+ (while (re-search-forward "^x-uidl:" nil t)
+ (while (progn
+ (forward-line 1)
+ (memq (char-after) '(?\t ? ))))
+ (delete-region (match-beginning 0) (point)))
+ (goto-char (point-max))
+ (insert "X-UIDL: " (nth (1- msgno) pop3-uidl) "\n"))))
+
(defcustom pop3-stream-type nil
"*Transport security type for POP3 connections.
This may be either nil (plain connection), `ssl' (use an
@@ -663,6 +908,13 @@ and close the connection."
;; Possible responses:
;; +OK [all delete marks removed]
+;; UIDL [msg]
+;; Arguments: a message-id (optional)
+;; Restrictions: transaction state; msg must not be deleted
+;; Possible responses:
+;; +OK [uidl listing follows]
+;; -ERR [no such message]
+
;;; UPDATE STATE
;; QUIT
diff --git a/lisp/gnus/shr.el b/lisp/gnus/shr.el
index ae3108a0a67..293ba2445e9 100644
--- a/lisp/gnus/shr.el
+++ b/lisp/gnus/shr.el
@@ -347,11 +347,11 @@ size, and full-buffer size."
((eq shr-folding-mode 'none)
(insert text))
(t
- (when (and (string-match "\\`[ \t\n]" text)
+ (when (and (string-match "\\`[ \t\n ]" text)
(not (bolp))
(not (eq (char-after (1- (point))) ? )))
(insert " "))
- (dolist (elem (split-string text "[ \f\t\n\r\v]+" t))
+ (dolist (elem (split-string text "[ \f\t\n\r\v ]+" t))
(when (and (bolp)
(> shr-indentation 0))
(shr-indent))
@@ -391,7 +391,7 @@ size, and full-buffer size."
(shr-indent))
(end-of-line))
(insert " ")))
- (unless (string-match "[ \t\r\n]\\'" text)
+ (unless (string-match "[ \t\r\n ]\\'" text)
(delete-char -1)))))
(defun shr-find-fill-point ()
@@ -520,6 +520,11 @@ size, and full-buffer size."
(dolist (type types)
(shr-add-font (or shr-start (point)) (point) type))))
+(defun shr-make-overlay (beg end &optional buffer front-advance rear-advance)
+ (let ((overlay (make-overlay beg end buffer front-advance rear-advance)))
+ (overlay-put overlay 'evaporate t)
+ overlay))
+
;; Add an overlay in the region, but avoid putting the font properties
;; on blank text at the start of the line, and the newline at the end,
;; to avoid ugliness.
@@ -529,7 +534,7 @@ size, and full-buffer size."
(while (< (point) end)
(when (bolp)
(skip-chars-forward " "))
- (let ((overlay (make-overlay (point) (min (line-end-position) end))))
+ (let ((overlay (shr-make-overlay (point) (min (line-end-position) end))))
(overlay-put overlay 'face type))
(if (< (line-end-position) end)
(forward-line 1)
@@ -588,6 +593,17 @@ size, and full-buffer size."
(put-text-property start (point) type value))))))))))
(kill-buffer image-buffer)))
+(defun shr-image-from-data (data)
+ "Return an image from the data: URI content DATA."
+ (when (string-match
+ "\\(\\([^/;,]+\\(/[^;,]+\\)?\\)\\(;[^;,]+\\)*\\)?,\\(.*\\)"
+ data)
+ (let ((param (match-string 4 data))
+ (payload (url-unhex-string (match-string 5 data))))
+ (when (string-match "^.*\\(;[ \t]*base64\\)$" param)
+ (setq payload (base64-decode-string payload)))
+ payload)))
+
(defun shr-put-image (data alt &optional flags)
"Put image DATA with a string ALT. Return image."
(if (display-graphic-p)
@@ -615,7 +631,12 @@ size, and full-buffer size."
(overlay-put overlay 'face 'default)))
(insert-image image (or alt "*")))
(put-text-property start (point) 'image-size size)
- (when (image-animated-p image)
+ (when (if (fboundp 'image-multi-frame-p)
+ ;; Only animate multi-frame things that specify a
+ ;; delay; eg animated gifs as opposed to
+ ;; multi-page tiffs. FIXME?
+ (cdr (image-multi-frame-p image))
+ (image-animated-p image))
(image-animate image nil 60)))
image)
(insert alt)))
@@ -785,7 +806,7 @@ ones, in case fg and bg are nil."
(when (and (< (setq column (current-column)) width)
(< (setq column (shr-previous-newline-padding-width column))
width))
- (let ((overlay (make-overlay (point) (1+ (point)))))
+ (let ((overlay (shr-make-overlay (point) (1+ (point)))))
(overlay-put overlay 'before-string
(concat
(mapconcat
@@ -931,7 +952,8 @@ ones, in case fg and bg are nil."
(start (point))
shr-start)
(shr-generic cont)
- (shr-urlify (or shr-start start) (shr-expand-url url) title)))
+ (when url
+ (shr-urlify (or shr-start start) (shr-expand-url url) title))))
(defun shr-tag-object (cont)
(let ((start (point))
@@ -972,6 +994,12 @@ ones, in case fg and bg are nil."
;; Ignore zero-sized or single-pixel images.
)
((and (not shr-inhibit-images)
+ (string-match "\\`data:" url))
+ (let ((image (shr-image-from-data (substring url (match-end 0)))))
+ (if image
+ (funcall shr-put-image-function image alt)
+ (insert alt))))
+ ((and (not shr-inhibit-images)
(string-match "\\`cid:" url))
(let ((url (substring url (match-end 0)))
image)
@@ -1232,8 +1260,8 @@ ones, in case fg and bg are nil."
(end-of-line)
(insert line shr-table-vertical-line)
(dolist (overlay overlay-line)
- (let ((o (make-overlay (- (point) (nth 0 overlay) 1)
- (- (point) (nth 1 overlay) 1)))
+ (let ((o (shr-make-overlay (- (point) (nth 0 overlay) 1)
+ (- (point) (nth 1 overlay) 1)))
(properties (nth 2 overlay)))
(while properties
(overlay-put o (pop properties) (pop properties)))))
@@ -1334,8 +1362,8 @@ ones, in case fg and bg are nil."
(let ((end (length (car cache))))
(dolist (overlay (cadr cache))
(let ((new-overlay
- (make-overlay (1+ (- end (nth 0 overlay)))
- (1+ (- end (nth 1 overlay)))))
+ (shr-make-overlay (1+ (- end (nth 0 overlay)))
+ (1+ (- end (nth 1 overlay)))))
(properties (nth 2 overlay)))
(while properties
(overlay-put new-overlay
@@ -1465,7 +1493,7 @@ ones, in case fg and bg are nil."
(provide 'shr)
;; Local Variables:
-;; coding: iso-8859-1
+;; coding: utf-8
;; End:
;;; shr.el ends here
diff --git a/lisp/gnus/sieve-mode.el b/lisp/gnus/sieve-mode.el
index 712ba34fb68..64768370488 100644
--- a/lisp/gnus/sieve-mode.el
+++ b/lisp/gnus/sieve-mode.el
@@ -131,14 +131,17 @@
(eval-when-compile
(list
;; control commands
- (cons (regexp-opt '("require" "if" "else" "elsif" "stop"))
+ (cons (regexp-opt '("require" "if" "else" "elsif" "stop")
+ 'words)
'sieve-control-commands-face)
;; action commands
- (cons (regexp-opt '("fileinto" "redirect" "reject" "keep" "discard"))
+ (cons (regexp-opt '("fileinto" "redirect" "reject" "keep" "discard")
+ 'words)
'sieve-action-commands-face)
;; test commands
(cons (regexp-opt '("address" "allof" "anyof" "exists" "false"
- "true" "header" "not" "size" "envelope"))
+ "true" "header" "not" "size" "envelope")
+ 'words)
'sieve-test-commands-face)
(cons "\\Sw+:\\sw+"
'sieve-tagged-arguments-face))))
diff --git a/lisp/gnus/smiley.el b/lisp/gnus/smiley.el
index 6381f5bf9d9..eb71134457c 100644
--- a/lisp/gnus/smiley.el
+++ b/lisp/gnus/smiley.el
@@ -59,7 +59,10 @@
(defcustom smiley-style
(if (or (and (fboundp 'face-attribute)
- (>= (face-attribute 'default :height) 160))
+ ;; In batch mode, attributes can be unspecified.
+ (condition-case nil
+ (>= (face-attribute 'default :height) 160)
+ (error nil)))
(and (fboundp 'face-height)
(>= (face-height 'default) 14)))
'medium
diff --git a/lisp/gnus/spam-stat.el b/lisp/gnus/spam-stat.el
index 1ef645d2003..d75e8198842 100644
--- a/lisp/gnus/spam-stat.el
+++ b/lisp/gnus/spam-stat.el
@@ -494,6 +494,18 @@ where DIFF is the difference between SCORE and 0.5."
(setcdr (nthcdr 14 result) nil)
result))
+(eval-when-compile
+ (defmacro spam-stat-called-interactively-p (kind)
+ (condition-case nil
+ (progn
+ (eval '(called-interactively-p 'any))
+ ;; Emacs >=23.2
+ `(called-interactively-p ,kind))
+ ;; Emacs <23.2
+ (wrong-number-of-arguments '(called-interactively-p))
+ ;; XEmacs
+ (void-function '(interactive-p)))))
+
(defun spam-stat-score-buffer ()
"Return a score describing the spam-probability for this buffer.
Add user supplied modifications if supplied."
@@ -511,7 +523,7 @@ Add user supplied modifications if supplied."
(error nil)))
(ans
(if score1s (+ score0 score1s) score0)))
- (when (interactive-p)
+ (when (spam-stat-called-interactively-p 'any)
(message "%S" ans))
ans))
diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el
index d84518b68b5..063ba28d6eb 100644
--- a/lisp/gnus/spam.el
+++ b/lisp/gnus/spam.el
@@ -2092,22 +2092,24 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
(declare-function gnus-extract-address-components "gnus-util" (from))
(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-buffer 'ignore)
- (defalias 'bbdb-create-internal 'ignore)
- (defalias 'bbdb-records 'ignore)
- (defalias 'spam-BBDB-register-routine 'ignore)
- (defalias 'spam-enter-ham-BBDB 'ignore)
- (defalias 'spam-exists-in-BBDB-p 'ignore)
- (defalias 'bbdb-gethash 'ignore)
- nil))
+ (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-buffer 'ignore)
+ (defalias 'bbdb-create-internal 'ignore)
+ (defalias 'bbdb-records 'ignore)
+ (defalias 'spam-BBDB-register-routine 'ignore)
+ (defalias 'spam-enter-ham-BBDB 'ignore)
+ (defalias 'spam-exists-in-BBDB-p 'ignore)
+ (defalias 'bbdb-gethash 'ignore)
+ nil)))
+(eval-and-compile
+ (when (featurep '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))
diff --git a/lisp/gnus/utf7.el b/lisp/gnus/utf7.el
index 69b189b6b53..b55b77a383b 100644
--- a/lisp/gnus/utf7.el
+++ b/lisp/gnus/utf7.el
@@ -1,4 +1,4 @@
-;;; utf7.el --- UTF-7 encoding/decoding for Emacs -*-coding: iso-8859-1;-*-
+;;; utf7.el --- UTF-7 encoding/decoding for Emacs -*-coding: utf-8;-*-
;; Copyright (C) 1999-2013 Free Software Foundation, Inc.
@@ -52,10 +52,10 @@
;; necessary coding system. The code below doesn't seem to DTRT
;; generally. E.g.:
;;
-;; (utf7-encode "a+")
+;; (utf7-encode "a+£")
;; => "a+ACsAow-"
;;
-;; $ echo "a+"|iconv -f iso-8859-1 -t utf-7
+;; $ echo "a+£"|iconv -f utf-8 -t utf-7
;; a+-+AKM
;;
;; -- fx