aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2006-11-16 11:10:48 +0000
committerMiles Bader2006-11-16 11:10:48 +0000
commit4573e0dfb8136b7b92a4caee7f87c2561565fbae (patch)
tree840828881f53083d7841cf910f454f9dd3e68551
parent033ecf787a3e1a250a43d179dec788f6c90c0482 (diff)
downloademacs-4573e0dfb8136b7b92a4caee7f87c2561565fbae.tar.gz
emacs-4573e0dfb8136b7b92a4caee7f87c2561565fbae.zip
Merge from gnus--rel--5.10
Patches applied: * gnus--rel--5.10 (patch 164-166) - Update from CVS 2006-11-15 Reiner Steib <Reiner.Steib@gmx.de> * lisp/gnus/gnus-util.el (gnus-extract-address-components): Improve comment. 2006-11-14 Katsumi Yamaoka <yamaoka@jpl.org> * lisp/gnus/gnus-util.el (gnus-extract-address-components): Work with address in which the name portion contains @. 2006-11-14 Reiner Steib <Reiner.Steib@gmx.de> * lisp/gnus/gnus.el (gnus-start): Move custom group up. (gnus-select-method): Don't autoload, but make it available for `customize-variable'. (gnus-getenv-nntpserver): Don't autoload. 2006-11-14 Katsumi Yamaoka <yamaoka@jpl.org> * lisp/gnus/mml.el (mml-generate-mime-1): Use mm-string-as-unibyte instead of mm-with-unibyte-current-buffer to make string unibyte. * lisp/gnus/mm-decode.el (mm-insert-part): Use mm-string-to-multibyte instead of mm-string-as-multibyte. 2006-11-09 Reiner Steib <Reiner.Steib@gmx.de> * lisp/gnus/message.el: Merge from the trunk to fix the bug WRT double encoded subjects. (message-replacement-char): New variable. (message-fix-before-sending): Use it. (message-simplify-subject): New function to remove duplicate code. (message-reply, message-followup): Use it. (message-simplify-subject-functions): New variable. (message-strip-subject-encoded-words): New function 2006-11-08 Wolfgang Jenkner <wjenkner@inode.at> (tiny change) * lisp/gnus/gnus-sum.el (gnus-summary-catchup): Use gnus-sorted-intersection instead of gnus-intersection because arguments of gnus-sorted-nunion must be sorted. This avoids corruption of gnus-newsgroup-unreads. Revision: emacs@sv.gnu.org/emacs--devo--0--patch-515
-rw-r--r--lisp/gnus/ChangeLog41
-rw-r--r--lisp/gnus/gnus-sum.el4
-rw-r--r--lisp/gnus/gnus-util.el9
-rw-r--r--lisp/gnus/gnus.el17
-rw-r--r--lisp/gnus/message.el146
-rw-r--r--lisp/gnus/mm-decode.el2
-rw-r--r--lisp/gnus/mml.el6
7 files changed, 198 insertions, 27 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index aa222ee43a5..95e8bff4d16 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,44 @@
12006-11-15 Reiner Steib <Reiner.Steib@gmx.de>
2
3 * gnus-util.el (gnus-extract-address-components): Improve comment.
4
52006-11-14 Katsumi Yamaoka <yamaoka@jpl.org>
6
7 * gnus-util.el (gnus-extract-address-components): Work with address in
8 which the name portion contains @.
9
102006-11-14 Reiner Steib <Reiner.Steib@gmx.de>
11
12 * gnus.el (gnus-start): Move custom group up.
13 (gnus-select-method): Don't autoload, but make it available for
14 `customize-variable'.
15 (gnus-getenv-nntpserver): Don't autoload.
16
172006-11-14 Katsumi Yamaoka <yamaoka@jpl.org>
18
19 * mml.el (mml-generate-mime-1): Use mm-string-as-unibyte instead of
20 mm-with-unibyte-current-buffer to make string unibyte.
21
22 * mm-decode.el (mm-insert-part): Use mm-string-to-multibyte instead of
23 mm-string-as-multibyte.
24
252006-11-09 Reiner Steib <Reiner.Steib@gmx.de>
26
27 * message.el: Merge from the trunk to fix the bug WRT double encoded
28 subjects.
29 (message-replacement-char): New variable.
30 (message-fix-before-sending): Use it.
31 (message-simplify-subject): New function to remove duplicate code.
32 (message-reply, message-followup): Use it.
33 (message-simplify-subject-functions): New variable.
34 (message-strip-subject-encoded-words): New function
35
362006-11-08 Wolfgang Jenkner <wjenkner@inode.at> (tiny change)
37
38 * gnus-sum.el (gnus-summary-catchup): Use gnus-sorted-intersection
39 instead of gnus-intersection because arguments of gnus-sorted-nunion
40 must be sorted. This avoids corruption of gnus-newsgroup-unreads.
41
12006-11-03 Juanma Barranquero <lekktu@gmail.com> 422006-11-03 Juanma Barranquero <lekktu@gmail.com>
2 43
3 * gnus-diary.el (gnus-diary-delay-format-function): 44 * gnus-diary.el (gnus-diary-delay-format-function):
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 7d0b7203654..6bf4142216d 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -10470,8 +10470,8 @@ The number of articles marked as read is returned."
10470 gnus-newsgroup-dormant nil)) 10470 gnus-newsgroup-dormant nil))
10471 (setq gnus-newsgroup-unreads 10471 (setq gnus-newsgroup-unreads
10472 (gnus-sorted-nunion 10472 (gnus-sorted-nunion
10473 (gnus-intersection gnus-newsgroup-unreads 10473 (gnus-sorted-intersection gnus-newsgroup-unreads
10474 gnus-newsgroup-downloadable) 10474 gnus-newsgroup-downloadable)
10475 gnus-newsgroup-unfetched))) 10475 gnus-newsgroup-unfetched)))
10476 ;; We actually mark all articles as canceled, which we 10476 ;; We actually mark all articles as canceled, which we
10477 ;; have to do when using auto-expiry or adaptive scoring. 10477 ;; have to do when using auto-expiry or adaptive scoring.
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 09d7ab9432e..b88a433b5fc 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -202,8 +202,13 @@ is slower."
202 ;; First find the address - the thing with the @ in it. This may 202 ;; First find the address - the thing with the @ in it. This may
203 ;; not be accurate in mail addresses, but does the trick most of 203 ;; not be accurate in mail addresses, but does the trick most of
204 ;; the time in news messages. 204 ;; the time in news messages.
205 (when (string-match "\\b[^@ \t<>]+[!@][^@ \t<>]+\\b" from) 205 (cond (;; Check ``<foo@bar>'' first in order to handle the quite common
206 (setq address (substring from (match-beginning 0) (match-end 0)))) 206 ;; form ``"abc@xyz" <foo@bar>'' (i.e. ``@'' as part of a comment)
207 ;; correctly.
208 (string-match "<\\([^@ \t<>]+[!@][^@ \t<>]+\\)>" from)
209 (setq address (substring from (match-beginning 1) (match-end 1))))
210 ((string-match "\\b[^@ \t<>]+[!@][^@ \t<>]+\\b" from)
211 (setq address (substring from (match-beginning 0) (match-end 0)))))
207 ;; Then we check whether the "name <address>" format is used. 212 ;; Then we check whether the "name <address>" format is used.
208 (and address 213 (and address
209 ;; Linear white space is not required. 214 ;; Linear white space is not required.
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index 94e890b02c3..41a79ccc1ca 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -51,6 +51,10 @@
51 :group 'news 51 :group 'news
52 :group 'mail) 52 :group 'mail)
53 53
54(defgroup gnus-start nil
55 "Starting your favorite newsreader."
56 :group 'gnus)
57
54(defgroup gnus-format nil 58(defgroup gnus-format nil
55 "Dealing with formatting issues." 59 "Dealing with formatting issues."
56 :group 'gnus) 60 :group 'gnus)
@@ -70,10 +74,6 @@
70 "Article Registry." 74 "Article Registry."
71 :group 'gnus) 75 :group 'gnus)
72 76
73(defgroup gnus-start nil
74 "Starting your favorite newsreader."
75 :group 'gnus)
76
77(defgroup gnus-start-server nil 77(defgroup gnus-start-server nil
78 "Server options at startup." 78 "Server options at startup."
79 :group 'gnus-start) 79 :group 'gnus-start)
@@ -1239,7 +1239,6 @@ used to 899, you would say something along these lines:
1239 :group 'gnus-server 1239 :group 'gnus-server
1240 :type 'file) 1240 :type 'file)
1241 1241
1242;;;###autoload
1243(defun gnus-getenv-nntpserver () 1242(defun gnus-getenv-nntpserver ()
1244 "Find default nntp server. 1243 "Find default nntp server.
1245Check the NNTPSERVER environment variable and the 1244Check the NNTPSERVER environment variable and the
@@ -1251,7 +1250,11 @@ Check the NNTPSERVER environment variable and the
1251 (when (re-search-forward "[^ \t\n\r]+" nil t) 1250 (when (re-search-forward "[^ \t\n\r]+" nil t)
1252 (match-string 0)))))) 1251 (match-string 0))))))
1253 1252
1254;;;###autoload 1253;; `M-x customize-variable RET gnus-select-method RET' should work without
1254;; starting or even loading Gnus.
1255;;;###autoload(when (fboundp 'custom-autoload)
1256;;;###autoload (custom-autoload 'gnus-select-method "gnus"))
1257
1255(defcustom gnus-select-method 1258(defcustom gnus-select-method
1256 (condition-case nil 1259 (condition-case nil
1257 (nconc 1260 (nconc
@@ -1285,6 +1288,8 @@ If you use this variable, you must set `gnus-nntp-server' to nil.
1285There is a lot more to know about select methods and virtual servers - 1288There is a lot more to know about select methods and virtual servers -
1286see the manual for details." 1289see the manual for details."
1287 :group 'gnus-server 1290 :group 'gnus-server
1291 :group 'gnus-start
1292 :initialize 'custom-initialize-default
1288 :type 'gnus-select-method) 1293 :type 'gnus-select-method)
1289 1294
1290(defcustom gnus-message-archive-method "archive" 1295(defcustom gnus-message-archive-method "archive"
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index fc3859345f3..a3d0298ce0e 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -1786,6 +1786,96 @@ see `message-narrow-to-headers-or-head'."
1786 (substring subject (match-end 0)) 1786 (substring subject (match-end 0))
1787 subject)) 1787 subject))
1788 1788
1789(defcustom message-replacement-char "."
1790 "Replacement character used instead of unprintable or not decodable chars."
1791 :group 'message-various
1792 :version "22.1" ;; Gnus 5.10.9
1793 :type '(choice string
1794 (const ".")
1795 (const "?")))
1796
1797;; FIXME: We also should call `message-strip-subject-encoded-words'
1798;; when forwarding. Probably in `message-make-forward-subject' and
1799;; `message-forward-make-body'.
1800
1801(defun message-strip-subject-encoded-words (subject)
1802 "Fix non-decodable words in SUBJECT."
1803 ;; Cf. `gnus-simplify-subject-fully'.
1804 (let* ((case-fold-search t)
1805 (replacement-chars (format "[%s%s%s]"
1806 message-replacement-char
1807 message-replacement-char
1808 message-replacement-char))
1809 (enc-word-re "=\\?\\([^?]+\\)\\?\\([QB]\\)\\?\\([^?]+\\)\\(\\?=\\)")
1810 cs-string
1811 (have-marker
1812 (with-temp-buffer
1813 (insert subject)
1814 (goto-char (point-min))
1815 (when (re-search-forward enc-word-re nil t)
1816 (setq cs-string (match-string 1)))))
1817 cs-coding q-or-b word-beg word-end)
1818 (if (or (not have-marker) ;; No encoded word found...
1819 ;; ... or double encoding was correct:
1820 (and (stringp cs-string)
1821 (setq cs-string (downcase cs-string))
1822 (mm-coding-system-p (intern cs-string))
1823 (not (prog1
1824 (y-or-n-p
1825 (format "\
1826Decoded Subject \"%s\"
1827contains a valid encoded word. Decode again? "
1828 subject))
1829 (setq cs-coding (intern cs-string))))))
1830 subject
1831 (with-temp-buffer
1832 (insert subject)
1833 (goto-char (point-min))
1834 (while (re-search-forward enc-word-re nil t)
1835 (setq cs-string (downcase (match-string 1))
1836 q-or-b (match-string 2)
1837 word-beg (match-beginning 0)
1838 word-end (match-end 0))
1839 (setq cs-coding
1840 (if (mm-coding-system-p (intern cs-string))
1841 (setq cs-coding (intern cs-string))
1842 nil))
1843 ;; No double encoded subject? => bogus charset.
1844 (unless cs-coding
1845 (setq cs-coding
1846 (mm-read-coding-system
1847 (format "\
1848Decoded Subject \"%s\"
1849contains an encoded word. The charset `%s' is unknown or invalid.
1850Hit RET to replace non-decodable characters with \"%s\" or enter replacement
1851charset: "
1852 subject cs-string message-replacement-char)))
1853 (if cs-coding
1854 (replace-match (concat "=?" (symbol-name cs-coding)
1855 "?\\2?\\3\\4\\5"))
1856 (save-excursion
1857 (goto-char word-beg)
1858 (re-search-forward "=\\?\\([^?]+\\)\\?\\([QB]\\)\\?" word-end t)
1859 (replace-match "")
1860 ;; QP or base64
1861 (if (string-match "\\`Q\\'" q-or-b)
1862 ;; QP
1863 (progn
1864 (message "Replacing non-decodable characters with \"%s\"."
1865 message-replacement-char)
1866 (while (re-search-forward "\\(=[A-F0-9][A-F0-9]\\)+"
1867 word-end t)
1868 (replace-match message-replacement-char)))
1869 ;; base64
1870 (message "Replacing non-decodable characters with \"%s\"."
1871 replacement-chars)
1872 (re-search-forward "[^?]+" word-end t)
1873 (replace-match replacement-chars))
1874 (re-search-forward "\\?=")
1875 (replace-match "")))))
1876 (rfc2047-decode-region (point-min) (point-max))
1877 (buffer-string)))))
1878
1789;;; Start of functions adopted from `message-utils.el'. 1879;;; Start of functions adopted from `message-utils.el'.
1790 1880
1791(defun message-strip-subject-trailing-was (subject) 1881(defun message-strip-subject-trailing-was (subject)
@@ -3614,8 +3704,10 @@ It should typically alter the sending method in some way or other."
3614 (setq choice 3704 (setq choice
3615 (gnus-multiple-choice 3705 (gnus-multiple-choice
3616 "Non-printable characters found. Continue sending?" 3706 "Non-printable characters found. Continue sending?"
3617 '((?d "Remove non-printable characters and send") 3707 `((?d "Remove non-printable characters and send")
3618 (?r "Replace non-printable characters with dots and send") 3708 (?r ,(format
3709 "Replace non-printable characters with \"%s\" and send"
3710 message-replacement-char))
3619 (?i "Ignore non-printable characters and send") 3711 (?i "Ignore non-printable characters and send")
3620 (?e "Continue editing")))) 3712 (?e "Continue editing"))))
3621 (if (eq choice ?e) 3713 (if (eq choice ?e)
@@ -3638,7 +3730,7 @@ It should typically alter the sending method in some way or other."
3638 (message-kill-all-overlays) 3730 (message-kill-all-overlays)
3639 (delete-char 1) 3731 (delete-char 1)
3640 (when (eq choice ?r) 3732 (when (eq choice ?r)
3641 (insert ".")))) 3733 (insert message-replacement-char))))
3642 (forward-char) 3734 (forward-char)
3643 (skip-chars-forward mm-7bit-chars)))))) 3735 (skip-chars-forward mm-7bit-chars))))))
3644 3736
@@ -5816,6 +5908,39 @@ want to get rid of this query permanently.")))
5816 (push (cons 'Cc recipients) follow-to))) 5908 (push (cons 'Cc recipients) follow-to)))
5817 follow-to)) 5909 follow-to))
5818 5910
5911(defcustom message-simplify-subject-functions
5912 '(message-strip-list-identifiers
5913 message-strip-subject-re
5914 message-strip-subject-trailing-was
5915 message-strip-subject-encoded-words)
5916 "List of functions taking a string argument that simplify subjects.
5917The functions are applied when replying to a message.
5918
5919Useful functions to put in this list include:
5920`message-strip-list-identifiers', `message-strip-subject-re',
5921`message-strip-subject-trailing-was', and
5922`message-strip-subject-encoded-words'."
5923 :version "22.1" ;; Gnus 5.10.9
5924 :group 'message-various
5925 :type '(repeat function))
5926
5927(defun message-simplify-subject (subject &optional functions)
5928 "Return simplified SUBJECT."
5929 (unless functions
5930 ;; Simplify fully:
5931 (setq functions message-simplify-subject-functions))
5932 (when (and (memq 'message-strip-list-identifiers functions)
5933 gnus-list-identifiers)
5934 (setq subject (message-strip-list-identifiers subject)))
5935 (when (memq 'message-strip-subject-re functions)
5936 (setq subject (concat "Re: " (message-strip-subject-re subject))))
5937 (when (and (memq 'message-strip-subject-trailing-was functions)
5938 message-subject-trailing-was-query)
5939 (setq subject (message-strip-subject-trailing-was subject)))
5940 (when (memq 'message-strip-subject-encoded-words functions)
5941 (setq subject (message-strip-subject-encoded-words subject)))
5942 subject)
5943
5819;;;###autoload 5944;;;###autoload
5820(defun message-reply (&optional to-address wide) 5945(defun message-reply (&optional to-address wide)
5821 "Start editing a reply to the article in the current buffer." 5946 "Start editing a reply to the article in the current buffer."
@@ -5845,11 +5970,9 @@ want to get rid of this query permanently.")))
5845 date (message-fetch-field "date") 5970 date (message-fetch-field "date")
5846 from (or (message-fetch-field "from") "nobody") 5971 from (or (message-fetch-field "from") "nobody")
5847 subject (or (message-fetch-field "subject") "none")) 5972 subject (or (message-fetch-field "subject") "none"))
5848 (when gnus-list-identifiers 5973
5849 (setq subject (message-strip-list-identifiers subject))) 5974 ;; Strip list identifiers, "Re: ", and "was:"
5850 (setq subject (concat "Re: " (message-strip-subject-re subject))) 5975 (setq subject (message-simplify-subject subject))
5851 (when message-subject-trailing-was-query
5852 (setq subject (message-strip-subject-trailing-was subject)))
5853 5976
5854 (when (and (setq gnus-warning (message-fetch-field "gnus-warning")) 5977 (when (and (setq gnus-warning (message-fetch-field "gnus-warning"))
5855 (string-match "<[^>]+>" gnus-warning)) 5978 (string-match "<[^>]+>" gnus-warning))
@@ -5919,11 +6042,8 @@ If TO-NEWSGROUPS, use that as the new Newsgroups line."
5919 (let ((case-fold-search t)) 6042 (let ((case-fold-search t))
5920 (string-match "world" distribution))) 6043 (string-match "world" distribution)))
5921 (setq distribution nil)) 6044 (setq distribution nil))
5922 (if gnus-list-identifiers 6045 ;; Strip list identifiers, "Re: ", and "was:"
5923 (setq subject (message-strip-list-identifiers subject))) 6046 (setq subject (message-simplify-subject subject))
5924 (setq subject (concat "Re: " (message-strip-subject-re subject)))
5925 (when message-subject-trailing-was-query
5926 (setq subject (message-strip-subject-trailing-was subject)))
5927 (widen)) 6047 (widen))
5928 6048
5929 (message-pop-to-buffer (message-buffer-name "followup" from newsgroups)) 6049 (message-pop-to-buffer (message-buffer-name "followup" from newsgroups))
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index c5fd5d3c258..7e6f93be1f1 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -1135,7 +1135,7 @@ are ignored."
1135 (with-current-buffer (mm-handle-buffer handle) 1135 (with-current-buffer (mm-handle-buffer handle)
1136 (buffer-string))) 1136 (buffer-string)))
1137 ((mm-multibyte-p) 1137 ((mm-multibyte-p)
1138 (mm-string-as-multibyte (mm-get-part handle no-cache))) 1138 (mm-string-to-multibyte (mm-get-part handle no-cache)))
1139 (t 1139 (t
1140 (mm-get-part handle no-cache)))))) 1140 (mm-get-part handle no-cache))))))
1141 1141
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index 159039914f5..0ae4487f869 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -501,9 +501,9 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
501 (mm-with-unibyte-buffer 501 (mm-with-unibyte-buffer
502 (cond 502 (cond
503 ((cdr (assq 'buffer cont)) 503 ((cdr (assq 'buffer cont))
504 (insert (with-current-buffer (cdr (assq 'buffer cont)) 504 (insert (mm-string-as-unibyte
505 (mm-with-unibyte-current-buffer 505 (with-current-buffer (cdr (assq 'buffer cont))
506 (buffer-string))))) 506 (buffer-string)))))
507 ((and filename 507 ((and filename
508 (not (equal (cdr (assq 'nofile cont)) "yes"))) 508 (not (equal (cdr (assq 'nofile cont)) "yes")))
509 (let ((coding-system-for-read mm-binary-coding-system)) 509 (let ((coding-system-for-read mm-binary-coding-system))