diff options
| author | Miles Bader | 2008-03-10 00:50:22 +0000 |
|---|---|---|
| committer | Miles Bader | 2008-03-10 00:50:22 +0000 |
| commit | 8f7abae3a9c0dcb827f50688e802d634c7461ece (patch) | |
| tree | fb3d3a87b3fef4ddb3e308aa57c378f424a2dc18 | |
| parent | 390b81fa98fa581afe965a2943d81d7dd07f0dc5 (diff) | |
| download | emacs-8f7abae3a9c0dcb827f50688e802d634c7461ece.tar.gz emacs-8f7abae3a9c0dcb827f50688e802d634c7461ece.zip | |
Merge from gnus--devo--0
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1097
| -rw-r--r-- | doc/misc/ChangeLog | 5 | ||||
| -rw-r--r-- | doc/misc/gnus-coding.texi | 4 | ||||
| -rw-r--r-- | lisp/gnus/ChangeLog | 80 | ||||
| -rw-r--r-- | lisp/gnus/auth-source.el | 86 | ||||
| -rw-r--r-- | lisp/gnus/gnus-art.el | 87 | ||||
| -rw-r--r-- | lisp/gnus/gnus-bookmark.el | 8 | ||||
| -rw-r--r-- | lisp/gnus/gnus-group.el | 4 | ||||
| -rw-r--r-- | lisp/gnus/gnus-registry.el | 200 | ||||
| -rw-r--r-- | lisp/gnus/gnus-sum.el | 13 | ||||
| -rw-r--r-- | lisp/gnus/message.el | 96 | ||||
| -rw-r--r-- | lisp/gnus/mm-decode.el | 24 | ||||
| -rw-r--r-- | lisp/gnus/mm-view.el | 2 | ||||
| -rw-r--r-- | lisp/gnus/mml.el | 29 | ||||
| -rw-r--r-- | lisp/gnus/mml2015.el | 11 | ||||
| -rw-r--r-- | lisp/net/imap.el | 1 | ||||
| -rw-r--r-- | lisp/net/netrc.el | 2 |
16 files changed, 511 insertions, 141 deletions
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index e89a7e31ec0..65f8a57c4fd 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2008-03-10 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 2 | |||
| 3 | * gnus-coding.texi (Gnus Maintainance Guide): Update conventions for | ||
| 4 | custom versions. | ||
| 5 | |||
| 1 | 2008-03-07 Alan Mackenzie <acm@muc.de> | 6 | 2008-03-07 Alan Mackenzie <acm@muc.de> |
| 2 | 7 | ||
| 3 | * cc-mode.texi (Limitations and Known Bugs): State that the number of | 8 | * cc-mode.texi (Limitations and Known Bugs): State that the number of |
diff --git a/doc/misc/gnus-coding.texi b/doc/misc/gnus-coding.texi index b6dc3148da2..3b0df9fb322 100644 --- a/doc/misc/gnus-coding.texi +++ b/doc/misc/gnus-coding.texi | |||
| @@ -256,7 +256,7 @@ changes. Only after a new major release, e.g. 5.10.1, there's usually a | |||
| 256 | feature period of several months. After the release of Gnus 5.10.6 the | 256 | feature period of several months. After the release of Gnus 5.10.6 the |
| 257 | development of new features started again on the trunk while the 5.10 | 257 | development of new features started again on the trunk while the 5.10 |
| 258 | series is continued on the stable branch (v5-10) from which more stable | 258 | series is continued on the stable branch (v5-10) from which more stable |
| 259 | releases will be done when needed (5.10.7, @dots{}). | 259 | releases will be done when needed (5.10.8, @dots{}). |
| 260 | @ref{Gnus Development, ,Gnus Development, gnus, The Gnus Newsreader} | 260 | @ref{Gnus Development, ,Gnus Development, gnus, The Gnus Newsreader} |
| 261 | 261 | ||
| 262 | Stable releases of Gnus finally become part of Emacs. E.g. Gnus 5.8 | 262 | Stable releases of Gnus finally become part of Emacs. E.g. Gnus 5.8 |
| @@ -366,7 +366,7 @@ v5-10 branch) use @code{:version "22.1" ;; Oort Gnus} (including the | |||
| 366 | comment) or e.g. @code{:version "22.2" ;; Gnus 5.10.10} if the feature | 366 | comment) or e.g. @code{:version "22.2" ;; Gnus 5.10.10} if the feature |
| 367 | was added for Emacs 22.2 and Gnus 5.10.10. | 367 | was added for Emacs 22.2 and Gnus 5.10.10. |
| 368 | @c | 368 | @c |
| 369 | If the variable is new in No Gnus use @code{:version "23.0" ;; No Gnus}. | 369 | If the variable is new in No Gnus use @code{:version "23.1" ;; No Gnus}. |
| 370 | 370 | ||
| 371 | The same applies for customizable variables when its default value was | 371 | The same applies for customizable variables when its default value was |
| 372 | changed. | 372 | changed. |
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 7cc373e435b..e86ac06e974 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,13 +1,40 @@ | |||
| 1 | 2008-03-07 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 2 | |||
| 3 | * gnus-art.el (gnus-narrow-to-page): Position point properly. | ||
| 4 | (gnus-article-goto-prev-page): Work for articles having ^L's. | ||
| 5 | |||
| 6 | * gnus-sum.el (gnus-summary-end-of-article): Remove needless narrowing. | ||
| 7 | |||
| 8 | * mm-view.el (mm-w3m-standalone-supports-m17n-p): Fix typo. | ||
| 9 | |||
| 1 | 2008-03-07 Karl Fogel <kfogel@red-bean.com> | 10 | 2008-03-07 Karl Fogel <kfogel@red-bean.com> |
| 2 | 11 | ||
| 3 | * gnus-bookmark.el: Adjust for renames in bookmark.el. | 12 | * gnus-bookmark.el: Adjust for renames in bookmark.el. |
| 4 | (gnus-bookmark-make-record): Was `gnus-bookmark-make-cell'. | 13 | (gnus-bookmark-make-record): Was `gnus-bookmark-make-cell'. |
| 5 | (gnus-bookmark-jump): Adjust some variable names. | 14 | (gnus-bookmark-jump): Adjust some variable names. |
| 6 | 15 | ||
| 7 | 2008-03-05 Reiner Steib <Reiner.Steib@gmx.de> | 16 | 2008-03-06 Teodor Zlatanov <tzz@lifelogs.com> |
| 8 | 17 | ||
| 9 | * gnus-sum.el (gnus-print-buffer): Honor ps-print-color-p. | 18 | * auth-source.el: New package. |
| 10 | Suggested by <chris.anderton@zetnet.co.uk>. | 19 | (auth-source-choices): Add customization entry point variable. |
| 20 | |||
| 21 | * gnus-registry.el (gnus-registry-user-format-function-M): Fix concat | ||
| 22 | bug. | ||
| 23 | |||
| 24 | 2008-03-05 Teodor Zlatanov <tzz@lifelogs.com> | ||
| 25 | |||
| 26 | * gnus-registry.el (gnus-registry-install): Allow 'ask as an option. | ||
| 27 | (gnus-registry-initialize, gnus-registry-install-p): Use it. | ||
| 28 | (gnus-registry-install-shortcuts): Renamed from | ||
| 29 | gnus-registry-install-shortcuts-and-menus. Installs the shortcuts in | ||
| 30 | the `gnus-registry-mark-map' keymap dynamically from | ||
| 31 | `gnus-registry-marks'. The generated functions update the summary line | ||
| 32 | when a registry mark is added or deleted, and will call | ||
| 33 | `gnus-registry-install-p' (see the comments in the code). | ||
| 34 | (gnus-registry-user-format-function-M): Use concat intelligently. | ||
| 35 | |||
| 36 | * gnus-sum.el (gnus-summary-make-menu-bar): Add menu entries for all | ||
| 37 | the registry mark functions. | ||
| 11 | 38 | ||
| 12 | 2008-03-05 Glenn Morris <rgm@gnu.org> | 39 | 2008-03-05 Glenn Morris <rgm@gnu.org> |
| 13 | 40 | ||
| @@ -16,12 +43,34 @@ | |||
| 16 | gnus-art. | 43 | gnus-art. |
| 17 | (top-level): No need to load own source when compiling. | 44 | (top-level): No need to load own source when compiling. |
| 18 | 45 | ||
| 46 | 2008-03-04 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 47 | |||
| 48 | * gnus-sum.el (gnus-print-buffer): Honor ps-print-color-p. | ||
| 49 | Suggested by <chris.anderton@zetnet.co.uk>. | ||
| 50 | |||
| 19 | 2008-03-04 Glenn Morris <rgm@gnu.org> | 51 | 2008-03-04 Glenn Morris <rgm@gnu.org> |
| 20 | 52 | ||
| 21 | * gnus-sum.el (top-level): No need to require gnus when compiling, | 53 | * gnus-sum.el (top-level): No need to require gnus when compiling, |
| 22 | since unconditionally required near start of file. | 54 | since unconditionally required near start of file. |
| 23 | (gnus-summary-display-while-building): Move definition before use. | 55 | (gnus-summary-display-while-building): Move definition before use. |
| 24 | 56 | ||
| 57 | 2008-03-04 Teodor Zlatanov <tzz@lifelogs.com> | ||
| 58 | |||
| 59 | * gnus-registry.el (gnus-registry-user-format-function-M): Add | ||
| 60 | formatting function. | ||
| 61 | |||
| 62 | 2008-03-03 Teodor Zlatanov <tzz@lifelogs.com> | ||
| 63 | |||
| 64 | * gnus-registry.el (gnus-registry-marks): Changed format to be nicer | ||
| 65 | with plists. | ||
| 66 | (gnus-registry-do-marks, gnus-registry-install-shortcuts-and-menus): | ||
| 67 | Use new format. | ||
| 68 | |||
| 69 | 2008-03-03 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 70 | |||
| 71 | * gnus-art.el (gnus-article-describe-bindings): Work for the version of | ||
| 72 | `where-is-internal' that returns a range of key sequences. | ||
| 73 | |||
| 25 | 2008-03-03 Stefan Monnier <monnier@iro.umontreal.ca> | 74 | 2008-03-03 Stefan Monnier <monnier@iro.umontreal.ca> |
| 26 | 75 | ||
| 27 | * mm-bodies.el (mm-decode-content-transfer-encoding): Simplify. | 76 | * mm-bodies.el (mm-decode-content-transfer-encoding): Simplify. |
| @@ -36,6 +85,31 @@ | |||
| 36 | * gnus-group.el (gnus-update-group-mark-positions): | 85 | * gnus-group.el (gnus-update-group-mark-positions): |
| 37 | Use mm-string-to-multibyte. | 86 | Use mm-string-to-multibyte. |
| 38 | 87 | ||
| 88 | 2008-03-02 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 89 | |||
| 90 | * mml2015.el (mml2015-extract-cleartext-signature): Explain that it | ||
| 91 | doesn't handle NotDashEscaped. | ||
| 92 | |||
| 93 | * mml.el (mml-menu): Improve help entries. Move Sign/Encrypt Part. | ||
| 94 | (mml-dnd-attach-options): Fix typo in custom choice. | ||
| 95 | |||
| 96 | * gnus-group.el (gnus-group-read-ephemeral-gmane-group): Change | ||
| 97 | nndoc-article-type to mbox. | ||
| 98 | (gnus-group-read-ephemeral-gmane-group-url): Support permalink. | ||
| 99 | |||
| 100 | * mm-decode.el (mm-text-html-renderer): Prefer w3m over w3. Fall back | ||
| 101 | to nil, instead of html2text. | ||
| 102 | |||
| 103 | * imap.el (imap-debug): Add `imap-ping-server'. | ||
| 104 | |||
| 105 | * gnus-bookmark.el: Add FIXMEs. | ||
| 106 | |||
| 107 | * message.el (message-form-letter-separator) | ||
| 108 | (message-send-form-letter-delay): New variables. | ||
| 109 | (message-send-form-letter): Use them. New command to send form | ||
| 110 | letters. Requested by Uwe Siart. | ||
| 111 | (message-send-mail-function): Doc fix. Add "Other" custom option. | ||
| 112 | |||
| 39 | 2008-02-29 Andreas Seltenreich <andreas@gate450.dyndns.org> | 113 | 2008-02-29 Andreas Seltenreich <andreas@gate450.dyndns.org> |
| 40 | 114 | ||
| 41 | * nnweb.el (nnweb-google-parse-1): Fix date parsing on articles with | 115 | * nnweb.el (nnweb-google-parse-1): Fix date parsing on articles with |
diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el new file mode 100644 index 00000000000..116d8b4a6a1 --- /dev/null +++ b/lisp/gnus/auth-source.el | |||
| @@ -0,0 +1,86 @@ | |||
| 1 | ;;; auth-source.el --- authentication sources for Gnus and Emacs | ||
| 2 | |||
| 3 | ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, | ||
| 4 | ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. | ||
| 5 | |||
| 6 | ;; Author: Ted Zlatanov <tzz@lifelogs.com> | ||
| 7 | ;; Keywords: news | ||
| 8 | |||
| 9 | ;; This file is part of GNU Emacs. | ||
| 10 | |||
| 11 | ;; GNU Emacs is free software; you can redistribute it and/or modify | ||
| 12 | ;; it under the terms of the GNU General Public License as published by | ||
| 13 | ;; the Free Software Foundation; either version 3, or (at your option) | ||
| 14 | ;; any later version. | ||
| 15 | |||
| 16 | ;; GNU Emacs is distributed in the hope that it will be useful, | ||
| 17 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | ;; GNU General Public License for more details. | ||
| 20 | |||
| 21 | ;; You should have received a copy of the GNU General Public License | ||
| 22 | ;; along with GNU Emacs; see the file COPYING. If not, write to the | ||
| 23 | ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||
| 24 | ;; Boston, MA 02110-1301, USA. | ||
| 25 | |||
| 26 | ;;; Commentary: | ||
| 27 | |||
| 28 | ;; This is the auth-source.el package. It lets users tell Gnus how to | ||
| 29 | ;; authenticate in a single place. Simplicity is the goal. Instead | ||
| 30 | ;; of providing 5000 options, we'll stick to simple, easy to | ||
| 31 | ;; understand options. | ||
| 32 | ;;; Code: | ||
| 33 | |||
| 34 | (eval-when-compile (require 'cl)) | ||
| 35 | |||
| 36 | (defgroup auth-source nil | ||
| 37 | "Authentication sources." | ||
| 38 | :version "22.1" | ||
| 39 | :group 'gnus) | ||
| 40 | |||
| 41 | (defcustom auth-source-choices nil | ||
| 42 | "List of authentication sources. | ||
| 43 | |||
| 44 | Each entry is the authentication type with optional properties." | ||
| 45 | :group 'auth-source | ||
| 46 | :type '(repeat :tag "Authentication Sources" | ||
| 47 | (cons :tag "Source definition" | ||
| 48 | (group :tag "Select a source" :inline t | ||
| 49 | (const :format "" :value :source) | ||
| 50 | (choice :tag "Authentication information" | ||
| 51 | (const :tag "None" nil) | ||
| 52 | (file :tag "File"))) | ||
| 53 | (checklist :tag "Options" :greedy t | ||
| 54 | (group :inline t | ||
| 55 | (choice :tag "Choose the hosts" | ||
| 56 | (group :tag "Select host by name" :inline t | ||
| 57 | (const :format "" :value :host) | ||
| 58 | (string :tag "Host name")) | ||
| 59 | (group :tag "Select host by regular expression" :inline t | ||
| 60 | (const :format "" :value :host-regex) | ||
| 61 | (regexp :tag "Host regular expression")) | ||
| 62 | (group :tag "Use any host" :inline t | ||
| 63 | (const :format "" :value :host-any) | ||
| 64 | (const :tag "Any" t)) | ||
| 65 | (group :tag "Use if no other host matches" :inline t | ||
| 66 | (const :tag "Fallback" nil)))) | ||
| 67 | (group :tag "Choose the protocol" :inline t | ||
| 68 | (const :format "" :value :protocol) | ||
| 69 | (choice :tag "Protocol" | ||
| 70 | (const :tag "Any" t) | ||
| 71 | (const :tag "Fallback (used if no others match)" nil) | ||
| 72 | (const :tag "IMAP" imap) | ||
| 73 | (const :tag "POP3" pop3) | ||
| 74 | (const :tag "SSH" ssh) | ||
| 75 | (const :tag "SFTP" sftp) | ||
| 76 | (const :tag "SMTP" smtp))))))) | ||
| 77 | |||
| 78 | ;; temp for debugging | ||
| 79 | ;; (customize-variable 'auth-source-choices) | ||
| 80 | ;; (setq auth-source-choices nil) | ||
| 81 | ;; (format "%S" auth-source-choices) | ||
| 82 | |||
| 83 | (provide 'auth-source) | ||
| 84 | |||
| 85 | ;; arch-tag: ff1afe78-06e9-42c2-b693-e9f922cbe4ab | ||
| 86 | ;;; auth-source.el ends here | ||
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 0b3293f4bb9..9033ef1ff35 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el | |||
| @@ -5988,39 +5988,51 @@ If given a numerical ARG, move forward ARG pages." | |||
| 5988 | (interactive "P") | 5988 | (interactive "P") |
| 5989 | (setq arg (if arg (prefix-numeric-value arg) 0)) | 5989 | (setq arg (if arg (prefix-numeric-value arg) 0)) |
| 5990 | (with-current-buffer gnus-article-buffer | 5990 | (with-current-buffer gnus-article-buffer |
| 5991 | (goto-char (point-min)) | ||
| 5992 | (widen) | 5991 | (widen) |
| 5993 | ;; Remove any old next/prev buttons. | 5992 | ;; Remove any old next/prev buttons. |
| 5994 | (when (gnus-visual-p 'page-marker) | 5993 | (when (gnus-visual-p 'page-marker) |
| 5995 | (let ((inhibit-read-only t)) | 5994 | (let ((inhibit-read-only t)) |
| 5996 | (gnus-remove-text-with-property 'gnus-prev) | 5995 | (gnus-remove-text-with-property 'gnus-prev) |
| 5997 | (gnus-remove-text-with-property 'gnus-next))) | 5996 | (gnus-remove-text-with-property 'gnus-next))) |
| 5998 | (if | 5997 | (let (st nd pt) |
| 5999 | (cond ((< arg 0) | 5998 | (when (save-excursion |
| 6000 | (re-search-backward page-delimiter nil 'move (1+ (abs arg)))) | 5999 | (cond ((< arg 0) |
| 6001 | ((> arg 0) | 6000 | (if (re-search-backward page-delimiter nil 'move (abs arg)) |
| 6002 | (re-search-forward page-delimiter nil 'move arg))) | 6001 | (prog1 |
| 6003 | (goto-char (match-end 0)) | 6002 | (setq nd (match-beginning 0) |
| 6004 | (save-excursion | 6003 | pt nd) |
| 6005 | (goto-char (point-min)) | 6004 | (when (re-search-backward page-delimiter nil t) |
| 6006 | (setq gnus-page-broken | 6005 | (setq st (match-end 0)))) |
| 6007 | (and (re-search-forward page-delimiter nil t) t)))) | 6006 | (when (re-search-forward page-delimiter nil t) |
| 6008 | (when gnus-page-broken | 6007 | (setq nd (match-beginning 0) |
| 6009 | (narrow-to-region | 6008 | pt (point-min))))) |
| 6010 | (point) | 6009 | ((> arg 0) |
| 6011 | (if (re-search-forward page-delimiter nil 'move) | 6010 | (if (re-search-forward page-delimiter nil 'move arg) |
| 6012 | (match-beginning 0) | 6011 | (prog1 |
| 6013 | (point))) | 6012 | (setq st (match-end 0) |
| 6014 | (when (and (gnus-visual-p 'page-marker) | 6013 | pt st) |
| 6015 | (> (point-min) (save-restriction (widen) (point-min)))) | 6014 | (when (re-search-forward page-delimiter nil t) |
| 6016 | (save-excursion | 6015 | (setq nd (match-beginning 0)))) |
| 6017 | (goto-char (point-min)) | 6016 | (when (re-search-backward page-delimiter nil t) |
| 6018 | (gnus-insert-prev-page-button))) | 6017 | (setq st (match-end 0) |
| 6019 | (when (and (gnus-visual-p 'page-marker) | 6018 | pt (point-max))))) |
| 6020 | (< (point-max) (save-restriction (widen) (point-max)))) | 6019 | (t |
| 6021 | (save-excursion | 6020 | (when (re-search-backward page-delimiter nil t) |
| 6022 | (goto-char (point-max)) | 6021 | (goto-char (setq st (match-end 0)))) |
| 6023 | (gnus-insert-next-page-button)))))) | 6022 | (when (re-search-forward page-delimiter nil t) |
| 6023 | (setq nd (match-beginning 0))) | ||
| 6024 | (or st nd)))) | ||
| 6025 | (setq gnus-page-broken t) | ||
| 6026 | (when pt (goto-char pt)) | ||
| 6027 | (narrow-to-region (or st (point-min)) (or nd (point-max))) | ||
| 6028 | (when (gnus-visual-p 'page-marker) | ||
| 6029 | (save-excursion | ||
| 6030 | (when nd | ||
| 6031 | (goto-char nd) | ||
| 6032 | (gnus-insert-next-page-button)) | ||
| 6033 | (when st | ||
| 6034 | (goto-char st) | ||
| 6035 | (gnus-insert-prev-page-button)))))))) | ||
| 6024 | 6036 | ||
| 6025 | ;; Article mode commands | 6037 | ;; Article mode commands |
| 6026 | 6038 | ||
| @@ -6035,7 +6047,7 @@ If given a numerical ARG, move forward ARG pages." | |||
| 6035 | (defun gnus-article-goto-prev-page () | 6047 | (defun gnus-article-goto-prev-page () |
| 6036 | "Show the previous page of the article." | 6048 | "Show the previous page of the article." |
| 6037 | (interactive) | 6049 | (interactive) |
| 6038 | (if (bobp) | 6050 | (if (save-restriction (widen) (bobp)) ;; Real beginning-of-buffer? |
| 6039 | (gnus-article-read-summary-keys nil (gnus-character-to-event ?p)) | 6051 | (gnus-article-read-summary-keys nil (gnus-character-to-event ?p)) |
| 6040 | (gnus-article-prev-page nil))) | 6052 | (gnus-article-prev-page nil))) |
| 6041 | 6053 | ||
| @@ -6395,10 +6407,21 @@ then we display only bindings that start with that prefix." | |||
| 6395 | (define-key map [t] nil) | 6407 | (define-key map [t] nil) |
| 6396 | (with-current-buffer gnus-article-current-summary | 6408 | (with-current-buffer gnus-article-current-summary |
| 6397 | (set-keymap-parent map (key-binding "S")) | 6409 | (set-keymap-parent map (key-binding "S")) |
| 6398 | (let (def gnus-pick-mode) | 6410 | (let (key def gnus-pick-mode) |
| 6399 | (dolist (key sumkeys) | 6411 | (while sumkeys |
| 6400 | (when (setq def (key-binding key)) | 6412 | (setq key (pop sumkeys)) |
| 6401 | (define-key keymap key def)))) | 6413 | (cond ((and (vectorp key) (= (length key) 1) |
| 6414 | (consp (setq def (aref key 0))) | ||
| 6415 | (numberp (car def)) (numberp (cdr def))) | ||
| 6416 | (when (< (max (car def) (cdr def)) 128) | ||
| 6417 | (setq sumkeys | ||
| 6418 | (append (mapcar | ||
| 6419 | #'vector | ||
| 6420 | (nreverse (gnus-uncompress-range def))) | ||
| 6421 | sumkeys)))) | ||
| 6422 | ((setq def (key-binding key)) | ||
| 6423 | (unless (eq def 'undefined) | ||
| 6424 | (define-key keymap key def)))))) | ||
| 6402 | (when (boundp 'gnus-agent-summary-mode) | 6425 | (when (boundp 'gnus-agent-summary-mode) |
| 6403 | (setq agent gnus-agent-summary-mode)) | 6426 | (setq agent gnus-agent-summary-mode)) |
| 6404 | (when (boundp 'gnus-draft-mode) | 6427 | (when (boundp 'gnus-draft-mode) |
diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el index 41b124e697a..076ac52406d 100644 --- a/lisp/gnus/gnus-bookmark.el +++ b/lisp/gnus/gnus-bookmark.el | |||
| @@ -62,6 +62,14 @@ | |||
| 62 | ;; (define-key global-map "\C-crj" 'gnus-bookmark-jump) | 62 | ;; (define-key global-map "\C-crj" 'gnus-bookmark-jump) |
| 63 | ;; (define-key global-map "\C-crl" 'gnus-bookmark-bmenu-list) | 63 | ;; (define-key global-map "\C-crl" 'gnus-bookmark-bmenu-list) |
| 64 | 64 | ||
| 65 | ;; FIXME: Add keybindings, see | ||
| 66 | ;; http://thread.gmane.org/gmane.emacs.gnus.general/63101/focus=63379 | ||
| 67 | ;; http://thread.gmane.org/v9fxx9fkm4.fsf@marauder.physik.uni-ulm.de | ||
| 68 | |||
| 69 | ;; FIXME: Check if `gnus-bookmark.el' should use | ||
| 70 | ;; `bookmark-make-cell-function'. | ||
| 71 | ;; Cf. http://article.gmane.org/gmane.emacs.gnus.general/66076 | ||
| 72 | |||
| 65 | (defgroup gnus-bookmark nil | 73 | (defgroup gnus-bookmark nil |
| 66 | "Setting, annotation and jumping to Gnus bookmarks." | 74 | "Setting, annotation and jumping to Gnus bookmarks." |
| 67 | :group 'gnus) | 75 | :group 'gnus) |
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index 466a846c675..8e2f82b5402 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el | |||
| @@ -2363,7 +2363,7 @@ specified by `gnus-group-gmane-group-download-format'." | |||
| 2363 | (gnus-group-read-ephemeral-group | 2363 | (gnus-group-read-ephemeral-group |
| 2364 | (format "%s.start-%s.range-%s" group start range) | 2364 | (format "%s.start-%s.range-%s" group start range) |
| 2365 | `(nndoc ,tmpfile | 2365 | `(nndoc ,tmpfile |
| 2366 | (nndoc-article-type guess)))) | 2366 | (nndoc-article-type mbox)))) |
| 2367 | (delete-file tmpfile))) | 2367 | (delete-file tmpfile))) |
| 2368 | 2368 | ||
| 2369 | (defun gnus-group-read-ephemeral-gmane-group-url (url) | 2369 | (defun gnus-group-read-ephemeral-gmane-group-url (url) |
| @@ -2397,7 +2397,7 @@ Valid input formats include: | |||
| 2397 | ;; URLs providing `group' and `start': | 2397 | ;; URLs providing `group' and `start': |
| 2398 | ((or (string-match | 2398 | ((or (string-match |
| 2399 | ;; http://article.gmane.org/gmane.comp.gnu.make.bugs/3584 | 2399 | ;; http://article.gmane.org/gmane.comp.gnu.make.bugs/3584 |
| 2400 | "^http://\\(?:thread\\|article\\)\.gmane\.org/\\([^/]+\\)/\\([0-9]+\\)" | 2400 | "^http://\\(?:thread\\|article\\|permalink\\)\.gmane\.org/\\([^/]+\\)/\\([0-9]+\\)" |
| 2401 | url) | 2401 | url) |
| 2402 | (string-match | 2402 | (string-match |
| 2403 | ;; Don't advertize these in the doc string yet: | 2403 | ;; Don't advertize these in the doc string yet: |
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el index 2803cd9db6d..5141a5e2d32 100644 --- a/lisp/gnus/gnus-registry.el +++ b/lisp/gnus/gnus-registry.el | |||
| @@ -80,20 +80,20 @@ | |||
| 80 | 80 | ||
| 81 | (defcustom gnus-registry-marks | 81 | (defcustom gnus-registry-marks |
| 82 | '((Important | 82 | '((Important |
| 83 | (char . ?i) | 83 | :char ?i |
| 84 | (image . "summary_important")) | 84 | :image "summary_important") |
| 85 | (Work | 85 | (Work |
| 86 | (char . ?w) | 86 | :char ?w |
| 87 | (image . "summary_work")) | 87 | :image "summary_work") |
| 88 | (Personal | 88 | (Personal |
| 89 | (char . ?p) | 89 | :char ?p |
| 90 | (image . "summary_personal")) | 90 | :image "summary_personal") |
| 91 | (To-Do | 91 | (To-Do |
| 92 | (char . ?t) | 92 | :char ?t |
| 93 | (image . "summary_todo")) | 93 | :image "summary_todo") |
| 94 | (Later | 94 | (Later |
| 95 | (char . ?l) | 95 | :char ?l |
| 96 | (image . "summary_later"))) | 96 | :image "summary_later")) |
| 97 | 97 | ||
| 98 | "List of registry marks and their options. | 98 | "List of registry marks and their options. |
| 99 | 99 | ||
| @@ -106,14 +106,16 @@ line display and for keyboard shortcuts. | |||
| 106 | Each entry must have an image string to be useful for visual | 106 | Each entry must have an image string to be useful for visual |
| 107 | display." | 107 | display." |
| 108 | :group 'gnus-registry | 108 | :group 'gnus-registry |
| 109 | :type '(alist :key-type symbol | 109 | :type '(repeat :tag "Registry Marks" |
| 110 | :value-type (set :tag "Mark details" | 110 | (cons :tag "Mark" |
| 111 | (cons :tag "Shortcut" | 111 | (symbol :tag "Name") |
| 112 | (const :tag "Character code" char) | 112 | (checklist :tag "Options" :greedy t |
| 113 | character) | 113 | (group :inline t |
| 114 | (cons :tag "Visual" | 114 | (const :format "" :value :char) |
| 115 | (const :tag "Image" image) | 115 | (character :tag "Character code")) |
| 116 | string)))) | 116 | (group :inline t |
| 117 | (const :format "" :value :image) | ||
| 118 | (string :tag "Image")))))) | ||
| 117 | 119 | ||
| 118 | (defcustom gnus-registry-default-mark 'To-Do | 120 | (defcustom gnus-registry-default-mark 'To-Do |
| 119 | "The default mark. Should be a valid key for `gnus-registry-marks'." | 121 | "The default mark. Should be a valid key for `gnus-registry-marks'." |
| @@ -130,10 +132,12 @@ references.'" | |||
| 130 | :group 'gnus-registry | 132 | :group 'gnus-registry |
| 131 | :type '(repeat regexp)) | 133 | :type '(repeat regexp)) |
| 132 | 134 | ||
| 133 | (defcustom gnus-registry-install nil | 135 | (defcustom gnus-registry-install 'ask |
| 134 | "Whether the registry should be installed." | 136 | "Whether the registry should be installed." |
| 135 | :group 'gnus-registry | 137 | :group 'gnus-registry |
| 136 | :type 'boolean) | 138 | :type '(choice (const :tag "Never Install" nil) |
| 139 | (const :tag "Always Install" t) | ||
| 140 | (const :tag "Ask Me" ask))) | ||
| 137 | 141 | ||
| 138 | (defcustom gnus-registry-clean-empty t | 142 | (defcustom gnus-registry-clean-empty t |
| 139 | "Whether the empty registry entries should be deleted. | 143 | "Whether the empty registry entries should be deleted. |
| @@ -700,24 +704,22 @@ Consults `gnus-registry-unfollowed-groups' and | |||
| 700 | 704 | ||
| 701 | FUNCTION should take two parameters, a mark symbol and the cell value." | 705 | FUNCTION should take two parameters, a mark symbol and the cell value." |
| 702 | (dolist (mark-info gnus-registry-marks) | 706 | (dolist (mark-info gnus-registry-marks) |
| 703 | (let ((mark (car-safe mark-info)) | 707 | (let* ((mark (car-safe mark-info)) |
| 704 | (data (cdr-safe mark-info))) | 708 | (data (cdr-safe mark-info)) |
| 705 | (dolist (cell data) | 709 | (cell-data (plist-get data type))) |
| 706 | (let ((cell-type (car-safe cell)) | 710 | (when cell-data |
| 707 | (cell-data (cdr-safe cell))) | 711 | (funcall function mark cell-data))))) |
| 708 | (when (equal type cell-type) | ||
| 709 | (funcall function mark cell-data))))))) | ||
| 710 | 712 | ||
| 711 | ;;; this is ugly code, but I don't know how to do it better | 713 | ;;; this is ugly code, but I don't know how to do it better |
| 712 | ;;; TODO: clear the gnus-registry-mark-map before running | 714 | (defun gnus-registry-install-shortcuts () |
| 713 | (defun gnus-registry-install-shortcuts-and-menus () | ||
| 714 | "Install the keyboard shortcuts and menus for the registry. | 715 | "Install the keyboard shortcuts and menus for the registry. |
| 715 | Uses `gnus-registry-marks' to find what shortcuts to install." | 716 | Uses `gnus-registry-marks' to find what shortcuts to install." |
| 716 | (gnus-registry-do-marks | 717 | (let (keys-plist) |
| 717 | 'char | 718 | (gnus-registry-do-marks |
| 718 | (lambda (mark data) | 719 | :char |
| 719 | (let ((function-format | 720 | (lambda (mark data) |
| 720 | (format "gnus-registry-%%s-article-%s-mark" mark))) | 721 | (let ((function-format |
| 722 | (format "gnus-registry-%%s-article-%s-mark" mark))) | ||
| 721 | 723 | ||
| 722 | ;;; The following generates these functions: | 724 | ;;; The following generates these functions: |
| 723 | ;;; (defun gnus-registry-set-article-Important-mark (&rest articles) | 725 | ;;; (defun gnus-registry-set-article-Important-mark (&rest articles) |
| @@ -729,44 +731,69 @@ Uses `gnus-registry-marks' to find what shortcuts to install." | |||
| 729 | ;;; (interactive (gnus-summary-work-articles current-prefix-arg)) | 731 | ;;; (interactive (gnus-summary-work-articles current-prefix-arg)) |
| 730 | ;;; (gnus-registry-set-article-mark-internal 'Important articles t t)) | 732 | ;;; (gnus-registry-set-article-mark-internal 'Important articles t t)) |
| 731 | 733 | ||
| 732 | (dolist (remove '(t nil)) | 734 | (dolist (remove '(t nil)) |
| 733 | (let* ((variant-name (if remove "remove" "set")) | 735 | (let* ((variant-name (if remove "remove" "set")) |
| 734 | (function-name (format function-format variant-name)) | 736 | (function-name (format function-format variant-name)) |
| 735 | (shortcut (format "%c" data)) | 737 | (shortcut (format "%c" data)) |
| 736 | (shortcut (if remove (upcase shortcut) shortcut))) | 738 | (shortcut (if remove (upcase shortcut) shortcut))) |
| 737 | (unintern function-name) | 739 | (unintern function-name) |
| 738 | (eval | 740 | (eval |
| 739 | `(defun | 741 | `(defun |
| 740 | ;; function name | 742 | ;; function name |
| 741 | ,(intern function-name) | 743 | ,(intern function-name) |
| 742 | ;; parameter definition | 744 | ;; parameter definition |
| 743 | (&rest articles) | 745 | (&rest articles) |
| 744 | ;; documentation | 746 | ;; documentation |
| 745 | ,(format | 747 | ,(format |
| 746 | "%s the %s mark over process-marked ARTICLES." | 748 | "%s the %s mark over process-marked ARTICLES." |
| 747 | (upcase-initials variant-name) | 749 | (upcase-initials variant-name) |
| 748 | mark) | 750 | mark) |
| 749 | ;; interactive definition | 751 | ;; interactive definition |
| 750 | (interactive | 752 | (interactive |
| 751 | (gnus-summary-work-articles current-prefix-arg)) | 753 | (gnus-summary-work-articles current-prefix-arg)) |
| 752 | ;; actual code | 754 | ;; actual code |
| 753 | (gnus-registry-set-article-mark-internal | 755 | |
| 754 | ;; all this just to get the mark, I must be doing it wrong | 756 | ;; if this is called and the user doesn't want the |
| 755 | (intern ,(symbol-name mark)) | 757 | ;; registry enabled, we'll ask anyhow |
| 756 | articles ,remove t)))))))) | 758 | (when (eq gnus-registry-install nil) |
| 757 | ;; I don't know how to do this inside the loop above, because | 759 | (setq gnus-registry-install 'ask)) |
| 758 | ;; gnus-define-keys is a macro | 760 | |
| 759 | (gnus-define-keys (gnus-registry-mark-map "M" gnus-summary-mark-map) | 761 | ;; now the user is asked if gnus-registry-install is 'ask |
| 760 | "i" gnus-registry-set-article-Important-mark | 762 | (when (gnus-registry-install-p) |
| 761 | "I" gnus-registry-remove-article-Important-mark | 763 | (gnus-registry-set-article-mark-internal |
| 762 | "w" gnus-registry-set-article-Work-mark | 764 | ;; all this just to get the mark, I must be doing it wrong |
| 763 | "W" gnus-registry-remove-article-Work-mark | 765 | (intern ,(symbol-name mark)) |
| 764 | "l" gnus-registry-set-article-Later-mark | 766 | articles ,remove t) |
| 765 | "L" gnus-registry-remove-article-Later-mark | 767 | (dolist (article articles) |
| 766 | "p" gnus-registry-set-article-Personal-mark | 768 | (gnus-summary-update-article |
| 767 | "P" gnus-registry-remove-article-Personal-mark | 769 | article |
| 768 | "t" gnus-registry-set-article-To-Do-mark | 770 | (assoc article (gnus-data-list nil))))))) |
| 769 | "T" gnus-registry-remove-article-To-Do-mark)) | 771 | (push (intern function-name) keys-plist) |
| 772 | (push shortcut keys-plist) | ||
| 773 | (gnus-message | ||
| 774 | 9 | ||
| 775 | "Defined mark handling function %s" | ||
| 776 | function-name)))))) | ||
| 777 | (gnus-define-keys-1 | ||
| 778 | '(gnus-registry-mark-map "M" gnus-summary-mark-map) | ||
| 779 | keys-plist))) | ||
| 780 | |||
| 781 | ;;; use like this: | ||
| 782 | ;;; (defalias 'gnus-user-format-function-M | ||
| 783 | ;;; 'gnus-registry-user-format-function-M) | ||
| 784 | (defun gnus-registry-user-format-function-M (headers) | ||
| 785 | (let* ((id (mail-header-message-id headers)) | ||
| 786 | (marks (when id (gnus-registry-fetch-extra-marks id)))) | ||
| 787 | (apply 'concat (mapcar (lambda(mark) | ||
| 788 | (let ((c | ||
| 789 | (plist-get | ||
| 790 | (cdr-safe | ||
| 791 | (assoc mark gnus-registry-marks)) | ||
| 792 | :char))) | ||
| 793 | (if c | ||
| 794 | (list c) | ||
| 795 | nil))) | ||
| 796 | marks)))) | ||
| 770 | 797 | ||
| 771 | (defun gnus-registry-read-mark () | 798 | (defun gnus-registry-read-mark () |
| 772 | "Read a mark name from the user with completion." | 799 | "Read a mark name from the user with completion." |
| @@ -1033,10 +1060,12 @@ Returns the first place where the trail finds a group name." | |||
| 1033 | 1060 | ||
| 1034 | ;;;###autoload | 1061 | ;;;###autoload |
| 1035 | (defun gnus-registry-initialize () | 1062 | (defun gnus-registry-initialize () |
| 1063 | "Initialize the Gnus registry." | ||
| 1036 | (interactive) | 1064 | (interactive) |
| 1037 | (setq gnus-registry-install t) | 1065 | (gnus-message 5 "Initializing the registry") |
| 1066 | (setq gnus-registry-install t) ; in case it was 'ask or nil | ||
| 1038 | (gnus-registry-install-hooks) | 1067 | (gnus-registry-install-hooks) |
| 1039 | (gnus-registry-install-shortcuts-and-menus) | 1068 | (gnus-registry-install-shortcuts) |
| 1040 | (gnus-registry-read)) | 1069 | (gnus-registry-read)) |
| 1041 | 1070 | ||
| 1042 | ;;;###autoload | 1071 | ;;;###autoload |
| @@ -1068,11 +1097,24 @@ Returns the first place where the trail finds a group name." | |||
| 1068 | 1097 | ||
| 1069 | (add-hook 'gnus-registry-unload-hook 'gnus-registry-unload-hook) | 1098 | (add-hook 'gnus-registry-unload-hook 'gnus-registry-unload-hook) |
| 1070 | 1099 | ||
| 1071 | (when gnus-registry-install | 1100 | (defun gnus-registry-install-p () |
| 1072 | (gnus-registry-install-hooks) | 1101 | (interactive) |
| 1073 | (gnus-registry-read)) | 1102 | (when (eq gnus-registry-install 'ask) |
| 1074 | 1103 | (setq gnus-registry-install | |
| 1075 | ;; TODO: a lot of things | 1104 | (gnus-y-or-n-p |
| 1105 | (concat "Enable the Gnus registry? " | ||
| 1106 | "See the variable `gnus-registry-install' " | ||
| 1107 | "to get rid of this query permanently. "))) | ||
| 1108 | (when gnus-registry-install | ||
| 1109 | ;; we just set gnus-registry-install to t, so initialize the registry! | ||
| 1110 | (gnus-registry-initialize))) | ||
| 1111 | ;;; we could call it here: (customize-variable 'gnus-registry-install) | ||
| 1112 | gnus-registry-install) | ||
| 1113 | |||
| 1114 | (when (gnus-registry-install-p) | ||
| 1115 | (gnus-registry-initialize)) | ||
| 1116 | |||
| 1117 | ;; TODO: a few things | ||
| 1076 | 1118 | ||
| 1077 | (provide 'gnus-registry) | 1119 | (provide 'gnus-registry) |
| 1078 | 1120 | ||
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index 48232ae53f7..d6abbd6c131 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el | |||
| @@ -2582,6 +2582,17 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) | |||
| 2582 | ["Set expirable mark" gnus-summary-mark-as-expirable t] | 2582 | ["Set expirable mark" gnus-summary-mark-as-expirable t] |
| 2583 | ["Set bookmark" gnus-summary-set-bookmark t] | 2583 | ["Set bookmark" gnus-summary-set-bookmark t] |
| 2584 | ["Remove bookmark" gnus-summary-remove-bookmark t]) | 2584 | ["Remove bookmark" gnus-summary-remove-bookmark t]) |
| 2585 | ("Registry Mark" | ||
| 2586 | ["Important" gnus-registry-set-article-Important-mark t] | ||
| 2587 | ["Not Important" gnus-registry-remove-article-Important-mark t] | ||
| 2588 | ["Work" gnus-registry-set-article-Work-mark t] | ||
| 2589 | ["Not Work" gnus-registry-remove-article-Work-mark t] | ||
| 2590 | ["Later" gnus-registry-set-article-Later-mark t] | ||
| 2591 | ["Not Later" gnus-registry-remove-article-Later-mark t] | ||
| 2592 | ["Personal" gnus-registry-set-article-Personal-mark t] | ||
| 2593 | ["Not Personal" gnus-registry-remove-article-Personal-mark t] | ||
| 2594 | ["To Do" gnus-registry-set-article-To-Do-mark t] | ||
| 2595 | ["Not To Do" gnus-registry-remove-article-To-Do-mark t]) | ||
| 2585 | ("Limit to" | 2596 | ("Limit to" |
| 2586 | ["Marks..." gnus-summary-limit-to-marks t] | 2597 | ["Marks..." gnus-summary-limit-to-marks t] |
| 2587 | ["Subject..." gnus-summary-limit-to-subject t] | 2598 | ["Subject..." gnus-summary-limit-to-subject t] |
| @@ -9210,8 +9221,6 @@ article. If BACKWARD (the prefix) is non-nil, search backward instead." | |||
| 9210 | (goto-char (point-max)) | 9221 | (goto-char (point-max)) |
| 9211 | (recenter -3) | 9222 | (recenter -3) |
| 9212 | (when gnus-break-pages | 9223 | (when gnus-break-pages |
| 9213 | (when (re-search-backward page-delimiter nil t) | ||
| 9214 | (narrow-to-region (match-end 0) (point-max))) | ||
| 9215 | (gnus-narrow-to-page)))) | 9224 | (gnus-narrow-to-page)))) |
| 9216 | 9225 | ||
| 9217 | (defun gnus-summary-print-truncate-and-quote (string &optional len) | 9226 | (defun gnus-summary-print-truncate-and-quote (string &optional len) |
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 32f191d918b..44c282bbd36 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el | |||
| @@ -652,7 +652,8 @@ Valid values include `message-send-mail-with-sendmail' | |||
| 652 | `message-send-mail-with-mh', `message-send-mail-with-qmail', | 652 | `message-send-mail-with-mh', `message-send-mail-with-qmail', |
| 653 | `message-smtpmail-send-it', `smtpmail-send-it', | 653 | `message-smtpmail-send-it', `smtpmail-send-it', |
| 654 | `feedmail-send-it' and `message-send-mail-with-mailclient'. The | 654 | `feedmail-send-it' and `message-send-mail-with-mailclient'. The |
| 655 | default is system dependent. | 655 | default is system dependent and determined by the function |
| 656 | `message-send-mail-function'. | ||
| 656 | 657 | ||
| 657 | See also `send-mail-function'." | 658 | See also `send-mail-function'." |
| 658 | :type '(radio (function-item message-send-mail-with-sendmail) | 659 | :type '(radio (function-item message-send-mail-with-sendmail) |
| @@ -661,7 +662,6 @@ See also `send-mail-function'." | |||
| 661 | (function-item message-smtpmail-send-it) | 662 | (function-item message-smtpmail-send-it) |
| 662 | (function-item smtpmail-send-it) | 663 | (function-item smtpmail-send-it) |
| 663 | (function-item feedmail-send-it) | 664 | (function-item feedmail-send-it) |
| 664 | (function :tag "Other") | ||
| 665 | (function-item message-send-mail-with-mailclient | 665 | (function-item message-send-mail-with-mailclient |
| 666 | :tag "Use Mailclient package") | 666 | :tag "Use Mailclient package") |
| 667 | (function :tag "Other")) | 667 | (function :tag "Other")) |
| @@ -7807,6 +7807,98 @@ From headers in the original article." | |||
| 7807 | (delete-region start end) | 7807 | (delete-region start end) |
| 7808 | (insert match))))) | 7808 | (insert match))))) |
| 7809 | 7809 | ||
| 7810 | ;; To send pre-formatted letters like the example below, you can use | ||
| 7811 | ;; `message-send-form-letter': | ||
| 7812 | ;; --8<---------------cut here---------------start------------->8--- | ||
| 7813 | ;; To: alice@invalid.invalid | ||
| 7814 | ;; Subject: Verification of your contact information | ||
| 7815 | ;; From: Contact verification <admin@foo.invalid> | ||
| 7816 | ;; --text follows this line-- | ||
| 7817 | ;; Hi Alice, | ||
| 7818 | ;; please verify that your contact information is still valid: | ||
| 7819 | ;; Alice A, A avenue 11, 1111 A town, Austria | ||
| 7820 | ;; ----------next form letter message follows this line---------- | ||
| 7821 | ;; To: bob@invalid.invalid | ||
| 7822 | ;; Subject: Verification of your contact information | ||
| 7823 | ;; From: Contact verification <admin@foo.invalid> | ||
| 7824 | ;; --text follows this line-- | ||
| 7825 | ;; Hi Bob, | ||
| 7826 | ;; please verify that your contact information is still valid: | ||
| 7827 | ;; Bob, B street 22, 22222 Be town, Belgium | ||
| 7828 | ;; ----------next form letter message follows this line---------- | ||
| 7829 | ;; To: charlie@invalid.invalid | ||
| 7830 | ;; Subject: Verification of your contact information | ||
| 7831 | ;; From: Contact verification <admin@foo.invalid> | ||
| 7832 | ;; --text follows this line-- | ||
| 7833 | ;; Hi Charlie, | ||
| 7834 | ;; please verify that your contact information is still valid: | ||
| 7835 | ;; Charlie Chaplin, C plaza 33, 33333 C town, Chile | ||
| 7836 | ;; --8<---------------cut here---------------end--------------->8--- | ||
| 7837 | |||
| 7838 | ;; FIXME: What is the most common term (circular letter, form letter, serial | ||
| 7839 | ;; letter, standard letter) for such kind of letter? See also | ||
| 7840 | ;; <http://en.wikipedia.org/wiki/Form_letter> | ||
| 7841 | |||
| 7842 | ;; FIXME: Maybe extent message-mode's font-lock support to recognize | ||
| 7843 | ;; `message-form-letter-separator', i.e. highlight each message like a single | ||
| 7844 | ;; message. | ||
| 7845 | |||
| 7846 | (defcustom message-form-letter-separator | ||
| 7847 | "\n----------next form letter message follows this line----------\n" | ||
| 7848 | "Separator for `message-send-form-letter'." | ||
| 7849 | ;; :group 'message-form-letter | ||
| 7850 | :group 'message-various | ||
| 7851 | :version "23.1" ;; No Gnus | ||
| 7852 | :type 'string) | ||
| 7853 | |||
| 7854 | (defcustom message-send-form-letter-delay 1 | ||
| 7855 | "Delay in seconds when sending a message with `message-send-form-letter'. | ||
| 7856 | Only used when `message-send-form-letter' is called with non-nil | ||
| 7857 | argument `force'." | ||
| 7858 | ;; :group 'message-form-letter | ||
| 7859 | :group 'message-various | ||
| 7860 | :version "23.1" ;; No Gnus | ||
| 7861 | :type 'integer) | ||
| 7862 | |||
| 7863 | (defun message-send-form-letter (&optional force) | ||
| 7864 | "Sent all form letter messages from current buffer. | ||
| 7865 | Unless FORCE, prompt before sending. | ||
| 7866 | |||
| 7867 | The messages are separated by `message-form-letter-separator'. | ||
| 7868 | Header and body are separated by `mail-header-separator'." | ||
| 7869 | (interactive "P") | ||
| 7870 | (let ((sent 0) (skipped 0) | ||
| 7871 | start end text | ||
| 7872 | buff | ||
| 7873 | to done) | ||
| 7874 | (goto-char (point-min)) | ||
| 7875 | (while (not done) | ||
| 7876 | (setq start (point) | ||
| 7877 | end (if (search-forward message-form-letter-separator nil t) | ||
| 7878 | (- (point) (length message-form-letter-separator) -1) | ||
| 7879 | (setq done t) | ||
| 7880 | (point-max))) | ||
| 7881 | (setq text | ||
| 7882 | (buffer-substring-no-properties start end)) | ||
| 7883 | (setq buff (generate-new-buffer "*mail - form letter*")) | ||
| 7884 | (with-current-buffer buff | ||
| 7885 | (insert text) | ||
| 7886 | (message-mode) | ||
| 7887 | (setq to (message-fetch-field "To")) | ||
| 7888 | (switch-to-buffer buff) | ||
| 7889 | (when force | ||
| 7890 | (sit-for message-send-form-letter-delay)) | ||
| 7891 | (if (or force | ||
| 7892 | (y-or-n-p (format "Send message to `%s'? " to))) | ||
| 7893 | (progn | ||
| 7894 | (setq sent (1+ sent)) | ||
| 7895 | (message-send-and-exit)) | ||
| 7896 | (message (format "Message to `%s' skipped." to)) | ||
| 7897 | (setq skipped (1+ skipped))) | ||
| 7898 | (when (buffer-live-p buff) | ||
| 7899 | (kill-buffer buff)))) | ||
| 7900 | (message "%s message(s) sent, %s skipped." sent skipped))) | ||
| 7901 | |||
| 7810 | (when (featurep 'xemacs) | 7902 | (when (featurep 'xemacs) |
| 7811 | (require 'messagexmas) | 7903 | (require 'messagexmas) |
| 7812 | (message-xmas-redefine)) | 7904 | (message-xmas-redefine)) |
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index 98d444665b2..46bf4b8d8fe 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el | |||
| @@ -106,31 +106,33 @@ | |||
| 106 | ,disposition ,description ,cache ,id)) | 106 | ,disposition ,description ,cache ,id)) |
| 107 | 107 | ||
| 108 | (defcustom mm-text-html-renderer | 108 | (defcustom mm-text-html-renderer |
| 109 | (cond ((locate-library "w3") 'w3) | 109 | (cond ((executable-find "w3m") |
| 110 | ((executable-find "w3m") (if (locate-library "w3m") | 110 | (if (locate-library "w3m") |
| 111 | 'w3m | 111 | 'w3m |
| 112 | 'w3m-standalone)) | 112 | 'w3m-standalone)) |
| 113 | ((executable-find "links") 'links) | 113 | ((executable-find "links") 'links) |
| 114 | ((executable-find "lynx") 'lynx) | 114 | ((executable-find "lynx") 'lynx) |
| 115 | (t 'html2text)) | 115 | ((locate-library "w3") 'w3) |
| 116 | ((locate-library "html2text") 'html2text) | ||
| 117 | (t nil)) | ||
| 116 | "Render of HTML contents. | 118 | "Render of HTML contents. |
| 117 | It is one of defined renderer types, or a rendering function. | 119 | It is one of defined renderer types, or a rendering function. |
| 118 | The defined renderer types are: | 120 | The defined renderer types are: |
| 119 | `w3' : use Emacs/W3; | ||
| 120 | `w3m' : use emacs-w3m; | 121 | `w3m' : use emacs-w3m; |
| 121 | `w3m-standalone': use w3m; | 122 | `w3m-standalone': use w3m; |
| 122 | `links': use links; | 123 | `links': use links; |
| 123 | `lynx' : use lynx; | 124 | `lynx' : use lynx; |
| 125 | `w3' : use Emacs/W3; | ||
| 124 | `html2text' : use html2text; | 126 | `html2text' : use html2text; |
| 125 | nil : use external viewer." | 127 | nil : use external viewer (default web browser)." |
| 126 | :version "22.1" | 128 | :version "23.0" ;; No Gnus |
| 127 | :type '(choice (const w3) | 129 | :type '(choice (const w3) |
| 128 | (const w3m) | 130 | (const w3m :tag "emacs-w3m") |
| 129 | (const w3m-standalone) | 131 | (const w3m-standalone :tag "standalone w3m" ) |
| 130 | (const links) | 132 | (const links) |
| 131 | (const lynx) | 133 | (const lynx) |
| 132 | (const html2text) | 134 | (const html2text) |
| 133 | (const nil) | 135 | (const nil :tag "External viewer") |
| 134 | (function)) | 136 | (function)) |
| 135 | :group 'mime-display) | 137 | :group 'mime-display) |
| 136 | 138 | ||
diff --git a/lisp/gnus/mm-view.el b/lisp/gnus/mm-view.el index 5abeea16812..9e9414f8fe2 100644 --- a/lisp/gnus/mm-view.el +++ b/lisp/gnus/mm-view.el | |||
| @@ -289,7 +289,7 @@ | |||
| 289 | (let ((coding-system-for-write 'iso-2022-jp) | 289 | (let ((coding-system-for-write 'iso-2022-jp) |
| 290 | (coding-system-for-read 'iso-2022-jp) | 290 | (coding-system-for-read 'iso-2022-jp) |
| 291 | (str (mm-decode-coding-string "\ | 291 | (str (mm-decode-coding-string "\ |
| 292 | \e$B#D#o#e#s!!#w#3#m!!#s#u#p#p#o#r#t#s!!#m#1#7#n!)\e(B" 'iso-2022-jp))) | 292 | \e$B#D#o#e#s!!#w#3#m!!#s#u#p#p#o#r#t!!#m#1#7#n!)\e(B" 'iso-2022-jp))) |
| 293 | (mm-with-multibyte-buffer | 293 | (mm-with-multibyte-buffer |
| 294 | (insert str) | 294 | (insert str) |
| 295 | (call-process-region | 295 | (call-process-region |
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el index c703e1365f6..0a7aac29ed9 100644 --- a/lisp/gnus/mml.el +++ b/lisp/gnus/mml.el | |||
| @@ -1017,6 +1017,14 @@ If HANDLES is non-nil, use it instead reparsing the buffer." | |||
| 1017 | (define-key main "\C-c\C-m" map) | 1017 | (define-key main "\C-c\C-m" map) |
| 1018 | main)) | 1018 | main)) |
| 1019 | 1019 | ||
| 1020 | ;; (defun mml-toggle-gcc-externalize-attachments () | ||
| 1021 | ;; (interactive) | ||
| 1022 | ;; (prog1 | ||
| 1023 | ;; (setq gnus-gcc-externalize-attachments | ||
| 1024 | ;; (not gnus-gcc-externalize-attachments)) | ||
| 1025 | ;; (message "gnus-gcc-externalize-attachments is `%s'." | ||
| 1026 | ;; gnus-gcc-externalize-attachments))) | ||
| 1027 | |||
| 1020 | (easy-menu-define | 1028 | (easy-menu-define |
| 1021 | mml-menu mml-mode-map "" | 1029 | mml-menu mml-mode-map "" |
| 1022 | `("Attachments" | 1030 | `("Attachments" |
| @@ -1025,10 +1033,18 @@ If HANDLES is non-nil, use it instead reparsing the buffer." | |||
| 1025 | '(:help "Attach a file at point"))] | 1033 | '(:help "Attach a file at point"))] |
| 1026 | ["Attach Buffer..." mml-attach-buffer | 1034 | ["Attach Buffer..." mml-attach-buffer |
| 1027 | ,@(if (featurep 'xemacs) '(t) | 1035 | ,@(if (featurep 'xemacs) '(t) |
| 1028 | '(:help "Attach a buffer to the outgoing MIME message"))] | 1036 | '(:help "Attach a buffer to the outgoing message"))] |
| 1029 | ["Attach External..." mml-attach-external | 1037 | ["Attach External..." mml-attach-external |
| 1030 | ,@(if (featurep 'xemacs) '(t) | 1038 | ,@(if (featurep 'xemacs) '(t) |
| 1031 | '(:help "Attach reference to file"))] | 1039 | '(:help "Attach reference to an external file"))] |
| 1040 | ;; ["Externalize Attachments" | ||
| 1041 | ;; (lambda () (interactive) (mml-toggle-gcc-externalize-attachments)) | ||
| 1042 | ;; ,@(if (featurep 'xemacs) nil | ||
| 1043 | ;; '(:help "Save attachments as external parts in Gcc copies")) | ||
| 1044 | ;; :visible (booleanp gnus-gcc-externalize-attachments) | ||
| 1045 | ;; :style radio | ||
| 1046 | ;; :selected (equal gnus-gcc-externalize-attachments t) ] | ||
| 1047 | "----" | ||
| 1032 | ;; | 1048 | ;; |
| 1033 | ("Change Security Method" | 1049 | ("Change Security Method" |
| 1034 | ["PGP/MIME" | 1050 | ["PGP/MIME" |
| @@ -1056,6 +1072,10 @@ If HANDLES is non-nil, use it instead reparsing the buffer." | |||
| 1056 | ["Encrypt/Sign off" mml-unsecure-message | 1072 | ["Encrypt/Sign off" mml-unsecure-message |
| 1057 | ,@(if (featurep 'xemacs) '(t) | 1073 | ,@(if (featurep 'xemacs) '(t) |
| 1058 | '(:help "Don't Encrypt/Sign Message"))] | 1074 | '(:help "Don't Encrypt/Sign Message"))] |
| 1075 | ;; Do we have separate encrypt and encrypt/sign commands for parts? | ||
| 1076 | ["Sign Part" mml-secure-sign t] | ||
| 1077 | ["Encrypt Part" mml-secure-encrypt t] | ||
| 1078 | "----" | ||
| 1059 | ;; Maybe we could remove these, because people who write MML most probably | 1079 | ;; Maybe we could remove these, because people who write MML most probably |
| 1060 | ;; don't use the menu: | 1080 | ;; don't use the menu: |
| 1061 | ["Insert Part..." mml-insert-part | 1081 | ["Insert Part..." mml-insert-part |
| @@ -1063,9 +1083,6 @@ If HANDLES is non-nil, use it instead reparsing the buffer." | |||
| 1063 | ["Insert Multipart..." mml-insert-multipart | 1083 | ["Insert Multipart..." mml-insert-multipart |
| 1064 | :active (message-in-body-p)] | 1084 | :active (message-in-body-p)] |
| 1065 | ;; | 1085 | ;; |
| 1066 | ;; Do we have separate encrypt and encrypt/sign commands for parts? | ||
| 1067 | ["Sign Part" mml-secure-sign t] | ||
| 1068 | ["Encrypt Part" mml-secure-encrypt t] | ||
| 1069 | ;;["Narrow" mml-narrow-to-part t] | 1086 | ;;["Narrow" mml-narrow-to-part t] |
| 1070 | ["Quote MML in region" mml-quote-region | 1087 | ["Quote MML in region" mml-quote-region |
| 1071 | :active (message-mark-active-p) | 1088 | :active (message-mark-active-p) |
| @@ -1222,7 +1239,7 @@ If it is a list, valid members are `type', `description' and | |||
| 1222 | don't ask for options. If it is t, ask the user whether or not | 1239 | don't ask for options. If it is t, ask the user whether or not |
| 1223 | to specify options." | 1240 | to specify options." |
| 1224 | :type '(choice | 1241 | :type '(choice |
| 1225 | (const :tag "Non" nil) | 1242 | (const :tag "None" nil) |
| 1226 | (const :tag "Query" t) | 1243 | (const :tag "Query" t) |
| 1227 | (list :value (type description disposition) | 1244 | (list :value (type description disposition) |
| 1228 | (set :inline t | 1245 | (set :inline t |
diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el index b4d301190d0..8add5e5215f 100644 --- a/lisp/gnus/mml2015.el +++ b/lisp/gnus/mml2015.el | |||
| @@ -153,6 +153,17 @@ Whether the passphrase is cached at all is controlled by | |||
| 153 | ;; should be done by GnuPG rather than Elisp, but older PGP backends | 153 | ;; should be done by GnuPG rather than Elisp, but older PGP backends |
| 154 | ;; (such as Mailcrypt, PGG, and gpg.el) discard the output from GnuPG. | 154 | ;; (such as Mailcrypt, PGG, and gpg.el) discard the output from GnuPG. |
| 155 | (defun mml2015-extract-cleartext-signature () | 155 | (defun mml2015-extract-cleartext-signature () |
| 156 | ;; Daiki Ueno in | ||
| 157 | ;; <54a15d860801080142l70b95d7dkac4bf51a86196011@mail.gmail.com>: ``I still | ||
| 158 | ;; believe that the right way is to use the plaintext output from GnuPG as | ||
| 159 | ;; it is, and mml2015-extract-cleartext-signature is just a kludge for | ||
| 160 | ;; misdesigned libraries like PGG, which have no ability to do that. So, I | ||
| 161 | ;; think it should not have descriptive documentation.'' | ||
| 162 | ;; | ||
| 163 | ;; This function doesn't handle NotDashEscaped correctly. EasyPG handles it | ||
| 164 | ;; correctly. | ||
| 165 | ;; http://thread.gmane.org/gmane.emacs.gnus.general/66062/focus=66082 | ||
| 166 | ;; http://thread.gmane.org/gmane.emacs.gnus.general/65087/focus=65109 | ||
| 156 | (goto-char (point-min)) | 167 | (goto-char (point-min)) |
| 157 | (forward-line) | 168 | (forward-line) |
| 158 | ;; We need to be careful not to strip beyond the armor headers. | 169 | ;; We need to be careful not to strip beyond the armor headers. |
diff --git a/lisp/net/imap.el b/lisp/net/imap.el index 2ec29252d47..399d5ec8237 100644 --- a/lisp/net/imap.el +++ b/lisp/net/imap.el | |||
| @@ -2923,6 +2923,7 @@ Return nil if no complete line has arrived." | |||
| 2923 | imap-open-1 | 2923 | imap-open-1 |
| 2924 | imap-open | 2924 | imap-open |
| 2925 | imap-opened | 2925 | imap-opened |
| 2926 | imap-ping-server | ||
| 2926 | imap-authenticate | 2927 | imap-authenticate |
| 2927 | imap-close | 2928 | imap-close |
| 2928 | imap-capability | 2929 | imap-capability |
diff --git a/lisp/net/netrc.el b/lisp/net/netrc.el index 8c588a11451..de82ae7473d 100644 --- a/lisp/net/netrc.el +++ b/lisp/net/netrc.el | |||
| @@ -61,7 +61,7 @@ | |||
| 61 | 61 | ||
| 62 | (defun netrc-parse (file) | 62 | (defun netrc-parse (file) |
| 63 | (interactive "fFile to Parse: ") | 63 | (interactive "fFile to Parse: ") |
| 64 | "Parse FILE and return an list of all entries in the file." | 64 | "Parse FILE and return a list of all entries in the file." |
| 65 | (when (file-exists-p file) | 65 | (when (file-exists-p file) |
| 66 | (with-temp-buffer | 66 | (with-temp-buffer |
| 67 | (let ((tokens '("machine" "default" "login" | 67 | (let ((tokens '("machine" "default" "login" |