aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGnus developers2011-02-15 11:24:37 +0000
committerKatsumi Yamaoka2011-02-15 11:24:37 +0000
commit5415d0766d91aa8ab4dcedc6f7dd0b85edc915a3 (patch)
tree603a3a33dbbff9e2fb8d2145e94957f1a08a7bd4
parentc5ca3aa00840c5dfa0aa7eeb8483ea077e5577bc (diff)
downloademacs-5415d0766d91aa8ab4dcedc6f7dd0b85edc915a3.tar.gz
emacs-5415d0766d91aa8ab4dcedc6f7dd0b85edc915a3.zip
Merge changes made in Gnus trunk.
auth.texi (Help for users): Login collection is "Login" and not "login". gnus-sum.el (gnus-propagate-marks): Default to nil. (gnus-summary-exit): Kill the correct article buffer on exit from a `C-d' group. gnus-start.el (gnus-use-backend-marks): Removed, since it duplicates gnus-propagate-marks. gnus-sum.el (gnus-summary-exit-no-update): Restore the group conf before killing the buffers so that a non-full window conf gets handled correctly. (gnus-summary-exit): Ditto. (gnus-summary-read-group-1): Ditto. nntp.el (nntp-retrieve-group-data-early): Reinstate the two-part async code again so that we can debug it properly. message.el (message-reply): Take an optional switch-buffer parameter so that Gnus window confs are respected better. auth-source.el (auth-source-secrets-search): Use `delete-dups', `append mapcar', and `butlast' instead of `remove-duplicates', `mapcan', and `subseq'. (auth-sources, auth-source-backend-parse, auth-source-secrets-search): Login collection is "Login" and not "login". gnus-art.el (article-update-date-lapsed): Don't bug out when updating multiple headers.
-rw-r--r--doc/misc/ChangeLog6
-rw-r--r--doc/misc/auth.texi4
-rw-r--r--lisp/gnus/ChangeLog28
-rw-r--r--lisp/gnus/auth-source.el70
-rw-r--r--lisp/gnus/gnus-art.el9
-rw-r--r--lisp/gnus/gnus-msg.el8
-rw-r--r--lisp/gnus/gnus-start.el9
-rw-r--r--lisp/gnus/gnus-sum.el36
-rw-r--r--lisp/gnus/message.el5
-rw-r--r--lisp/gnus/nntp.el13
10 files changed, 111 insertions, 77 deletions
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index 20463724c79..34096144066 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -3,6 +3,10 @@
3 Merge from gnulib. 3 Merge from gnulib.
4 * texinfo.tex: Update to version 2011-02-14.11. 4 * texinfo.tex: Update to version 2011-02-14.11.
5 5
62011-02-14 Teodor Zlatanov <tzz@lifelogs.com>
7
8 * auth.texi (Help for users): Login collection is "Login" and not "login".
9
62011-02-13 Michael Albinus <michael.albinus@gmx.de> 102011-02-13 Michael Albinus <michael.albinus@gmx.de>
7 11
8 * tramp.texi (History): Remove IMAP support. 12 * tramp.texi (History): Remove IMAP support.
@@ -21,7 +25,7 @@
21 25
22 * sc.texi (Getting Connected): Remove old index entries. 26 * sc.texi (Getting Connected): Remove old index entries.
23 27
242011-02-12 Ulrich Mueller <ulm@gentoo.org> 282011-02-12 Ulrich Mueller <ulm@gentoo.org>
25 29
26 * url.texi: Remove duplicate @dircategory (Bug#7942). 30 * url.texi: Remove duplicate @dircategory (Bug#7942).
27 31
diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi
index 2541dba9873..020c582305c 100644
--- a/doc/misc/auth.texi
+++ b/doc/misc/auth.texi
@@ -161,8 +161,8 @@ and simplest configuration is:
161(setq auth-sources '((:source "~/.authinfo.gpg"))) 161(setq auth-sources '((:source "~/.authinfo.gpg")))
162;;; even shorter and the @emph{default}: 162;;; even shorter and the @emph{default}:
163(setq auth-sources '("~/.authinfo.gpg" "~/.authinfo")) 163(setq auth-sources '("~/.authinfo.gpg" "~/.authinfo"))
164;;; use the Secrets API @var{login} collection (@pxref{Secret Service API}) 164;;; use the Secrets API @var{Login} collection (@pxref{Secret Service API})
165(setq auth-sources '("secrets:login")) 165(setq auth-sources '("secrets:Login"))
166@end lisp 166@end lisp
167 167
168By adding multiple entries to @code{auth-sources} with a particular 168By adding multiple entries to @code{auth-sources} with a particular
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 747f71f835a..71034376133 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,11 +1,39 @@
12011-02-14 Lars Ingebrigtsen <larsi@gnus.org>
2
3 * gnus-sum.el (gnus-propagate-marks): Default to nil.
4 (gnus-summary-exit): Kill the correct article buffer on exit from a
5 `C-d' group.
6
7 * gnus-start.el (gnus-use-backend-marks): Removed, since it duplicates
8 gnus-propagate-marks.
9
10 * gnus-sum.el (gnus-summary-exit-no-update): Restore the group conf
11 before killing the buffers so that a non-full window conf gets handled
12 correctly.
13 (gnus-summary-exit): Ditto.
14 (gnus-summary-read-group-1): Ditto.
15
16 * nntp.el (nntp-retrieve-group-data-early): Reinstate the two-part
17 async code again so that we can debug it properly.
18
19 * message.el (message-reply): Take an optional switch-buffer parameter
20 so that Gnus window confs are respected better.
21
12011-02-14 Teodor Zlatanov <tzz@lifelogs.com> 222011-02-14 Teodor Zlatanov <tzz@lifelogs.com>
2 23
3 * auth-source.el (auth-source-backend-parse-parameters): Don't rely on 24 * auth-source.el (auth-source-backend-parse-parameters): Don't rely on
4 `plist-get' to accept non-list parameters (XEmacs issue). Fix 25 `plist-get' to accept non-list parameters (XEmacs issue). Fix
5 docstring. 26 docstring.
27 (auth-source-secrets-search): Use `delete-dups', `append mapcar', and
28 `butlast' instead of `remove-duplicates', `mapcan', and `subseq'.
29 (auth-sources, auth-source-backend-parse, auth-source-secrets-search):
30 Login collection is "Login" and not "login".
6 31
72011-02-14 Lars Ingebrigtsen <larsi@gnus.org> 322011-02-14 Lars Ingebrigtsen <larsi@gnus.org>
8 33
34 * gnus-art.el (article-update-date-lapsed): Don't bug out when updating
35 multiple headers.
36
9 * nnimap.el (nnimap-inhibit-logging): New variable. 37 * nnimap.el (nnimap-inhibit-logging): New variable.
10 (nnimap-log-command): Don't log login commands. 38 (nnimap-log-command): Don't log login commands.
11 39
diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el
index be698ad35d0..0692dbb538b 100644
--- a/lisp/gnus/auth-source.el
+++ b/lisp/gnus/auth-source.el
@@ -173,7 +173,7 @@ can get pretty complex."
173 (choice 173 (choice
174 (string :tag "Just a file") 174 (string :tag "Just a file")
175 (const :tag "Default Secrets API Collection" 'default) 175 (const :tag "Default Secrets API Collection" 'default)
176 (const :tag "Login Secrets API Collection" "secrets:login") 176 (const :tag "Login Secrets API Collection" "secrets:Login")
177 (const :tag "Temp Secrets API Collection" "secrets:session") 177 (const :tag "Temp Secrets API Collection" "secrets:session")
178 (list :tag "Source definition" 178 (list :tag "Source definition"
179 (const :format "" :value :source) 179 (const :format "" :value :source)
@@ -185,7 +185,7 @@ can get pretty complex."
185 (choice :tag "Collection to use" 185 (choice :tag "Collection to use"
186 (string :tag "Collection name") 186 (string :tag "Collection name")
187 (const :tag "Default" 'default) 187 (const :tag "Default" 'default)
188 (const :tag "Login" "login") 188 (const :tag "Login" "Login")
189 (const 189 (const
190 :tag "Temporary" "session")))) 190 :tag "Temporary" "session"))))
191 (repeat :tag "Extra Parameters" :inline t 191 (repeat :tag "Extra Parameters" :inline t
@@ -252,19 +252,19 @@ If the value is not a list, symmetric encryption will be used."
252;; (auth-source-pick t :host "any" :protocol 'imap :user "joe") 252;; (auth-source-pick t :host "any" :protocol 'imap :user "joe")
253;; (setq auth-sources '((:source (:secrets default) :host t :protocol t :user "joe") 253;; (setq auth-sources '((:source (:secrets default) :host t :protocol t :user "joe")
254;; (:source (:secrets "session") :host t :protocol t :user "joe") 254;; (:source (:secrets "session") :host t :protocol t :user "joe")
255;; (:source (:secrets "login") :host t :protocol t) 255;; (:source (:secrets "Login") :host t :protocol t)
256;; (:source "~/.authinfo.gpg" :host t :protocol t))) 256;; (:source "~/.authinfo.gpg" :host t :protocol t)))
257 257
258;; (setq auth-sources '((:source (:secrets default) :host t :protocol t :user "joe") 258;; (setq auth-sources '((:source (:secrets default) :host t :protocol t :user "joe")
259;; (:source (:secrets "session") :host t :protocol t :user "joe") 259;; (:source (:secrets "session") :host t :protocol t :user "joe")
260;; (:source (:secrets "login") :host t :protocol t) 260;; (:source (:secrets "Login") :host t :protocol t)
261;; )) 261;; ))
262 262
263;; (setq auth-sources '((:source "~/.authinfo.gpg" :host t :protocol t))) 263;; (setq auth-sources '((:source "~/.authinfo.gpg" :host t :protocol t)))
264 264
265;; (auth-source-backend-parse "myfile.gpg") 265;; (auth-source-backend-parse "myfile.gpg")
266;; (auth-source-backend-parse 'default) 266;; (auth-source-backend-parse 'default)
267;; (auth-source-backend-parse "secrets:login") 267;; (auth-source-backend-parse "secrets:Login")
268 268
269(defun auth-source-backend-parse (entry) 269(defun auth-source-backend-parse (entry)
270 "Creates an auth-source-backend from an ENTRY in `auth-sources'." 270 "Creates an auth-source-backend from an ENTRY in `auth-sources'."
@@ -307,10 +307,10 @@ If the value is not a list, symmetric encryption will be used."
307 "session"))) 307 "session")))
308 308
309 ;; if the source is a symbol, we look for the alias named so, 309 ;; if the source is a symbol, we look for the alias named so,
310 ;; and if that alias is missing, we use "login" 310 ;; and if that alias is missing, we use "Login"
311 (when (symbolp source) 311 (when (symbolp source)
312 (setq source (or (secrets-get-alias (symbol-name source)) 312 (setq source (or (secrets-get-alias (symbol-name source))
313 "login"))) 313 "Login")))
314 314
315 (auth-source-backend 315 (auth-source-backend
316 (format "Secrets API (%s)" source) 316 (format "Secrets API (%s)" source)
@@ -938,8 +938,8 @@ See `auth-source-search' for details on SPEC."
938;;; (let ((auth-sources '(default))) (auth-source-search :max 1 :delete t)) 938;;; (let ((auth-sources '(default))) (auth-source-search :max 1 :delete t))
939;;; (let ((auth-sources '(default))) (auth-source-search :max 1)) 939;;; (let ((auth-sources '(default))) (auth-source-search :max 1))
940;;; (let ((auth-sources '(default))) (auth-source-search)) 940;;; (let ((auth-sources '(default))) (auth-source-search))
941;;; (let ((auth-sources '("secrets:login"))) (auth-source-search :max 1)) 941;;; (let ((auth-sources '("secrets:Login"))) (auth-source-search :max 1))
942;;; (let ((auth-sources '("secrets:login"))) (auth-source-search :max 1 :signon_realm "https://git.gnus.org/Git")) 942;;; (let ((auth-sources '("secrets:Login"))) (auth-source-search :max 1 :signon_realm "https://git.gnus.org/Git"))
943 943
944(defun* auth-source-secrets-search (&rest 944(defun* auth-source-secrets-search (&rest
945 spec 945 spec
@@ -957,23 +957,23 @@ matching, do a wider search and narrow it down yourself.
957 957
958You'll get back all the properties of the token as a plist. 958You'll get back all the properties of the token as a plist.
959 959
960Here's an example that looks for the first item in the 'login' 960Here's an example that looks for the first item in the 'Login'
961Secrets collection: 961Secrets collection:
962 962
963 \(let ((auth-sources '(\"secrets:login\"))) 963 \(let ((auth-sources '(\"secrets:Login\")))
964 (auth-source-search :max 1) 964 (auth-source-search :max 1)
965 965
966Here's another that looks for the first item in the 'login' 966Here's another that looks for the first item in the 'Login'
967Secrets collection whose label contains 'gnus': 967Secrets collection whose label contains 'gnus':
968 968
969 \(let ((auth-sources '(\"secrets:login\"))) 969 \(let ((auth-sources '(\"secrets:Login\")))
970 (auth-source-search :max 1 :label \"gnus\") 970 (auth-source-search :max 1 :label \"gnus\")
971 971
972And this one looks for the first item in the 'login' Secrets 972And this one looks for the first item in the 'Login' Secrets
973collection that's a Google Chrome entry for the git.gnus.org site 973collection that's a Google Chrome entry for the git.gnus.org site
974login: 974authentication tokens:
975 975
976 \(let ((auth-sources '(\"secrets:login\"))) 976 \(let ((auth-sources '(\"secrets:Login\")))
977 (auth-source-search :max 1 :signon_realm \"https://git.gnus.org/Git\")) 977 (auth-source-search :max 1 :signon_realm \"https://git.gnus.org/Git\"))
978" 978"
979 979
@@ -993,21 +993,23 @@ login:
993 collect (nth i spec))) 993 collect (nth i spec)))
994 ;; build a search spec without the ignored keys 994 ;; build a search spec without the ignored keys
995 ;; if a search key is nil or t (match anything), we skip it 995 ;; if a search key is nil or t (match anything), we skip it
996 (search-spec (mapcan (lambda (k) (if (or (null (plist-get spec k)) 996 (search-spec (apply 'append (mapcar
997 (eq t (plist-get spec k))) 997 (lambda (k)
998 nil 998 (if (or (null (plist-get spec k))
999 (list k (plist-get spec k)))) 999 (eq t (plist-get spec k)))
1000 search-keys)) 1000 nil
1001 (list k (plist-get spec k))))
1002 search-keys)))
1001 ;; needed keys (always including host, login, protocol, and secret) 1003 ;; needed keys (always including host, login, protocol, and secret)
1002 (returned-keys (remove-duplicates (append 1004 (returned-keys (delete-dups (append
1003 '(:host :login :protocol :secret) 1005 '(:host :login :protocol :secret)
1004 search-keys))) 1006 search-keys)))
1005 (items (loop for item in (apply 'secrets-search-items coll search-spec) 1007 (items (loop for item in (apply 'secrets-search-items coll search-spec)
1006 unless (and (stringp label) 1008 unless (and (stringp label)
1007 (not (string-match label item))) 1009 (not (string-match label item)))
1008 collect item)) 1010 collect item))
1009 ;; TODO: respect max in `secrets-search-items', not after the fact 1011 ;; TODO: respect max in `secrets-search-items', not after the fact
1010 (items (subseq items 0 (min (length items) max))) 1012 (items (butlast items (- (length items) max)))
1011 ;; convert the item name to a full plist 1013 ;; convert the item name to a full plist
1012 (items (mapcar (lambda (item) 1014 (items (mapcar (lambda (item)
1013 (append 1015 (append
@@ -1017,18 +1019,20 @@ login:
1017 (lexical-let ((v (secrets-get-secret coll item))) 1019 (lexical-let ((v (secrets-get-secret coll item)))
1018 (lambda () v))) 1020 (lambda () v)))
1019 ;; rewrite the entry from ((k1 v1) (k2 v2)) to plist 1021 ;; rewrite the entry from ((k1 v1) (k2 v2)) to plist
1020 (mapcan (lambda (entry) 1022 (apply 'append
1021 (list (car entry) (cdr entry))) 1023 (mapcar (lambda (entry)
1022 (secrets-get-attributes coll item)))) 1024 (list (car entry) (cdr entry)))
1025 (secrets-get-attributes coll item)))))
1023 items)) 1026 items))
1024 ;; ensure each item has each key in `returned-keys' 1027 ;; ensure each item has each key in `returned-keys'
1025 (items (mapcar (lambda (plist) 1028 (items (mapcar (lambda (plist)
1026 (append 1029 (append
1027 (mapcan (lambda (req) 1030 (apply 'append
1028 (if (plist-get plist req) 1031 (mapcar (lambda (req)
1029 nil 1032 (if (plist-get plist req)
1030 (list req nil))) 1033 nil
1031 returned-keys) 1034 (list req nil)))
1035 returned-keys))
1032 plist)) 1036 plist))
1033 items))) 1037 items)))
1034 items)) 1038 items))
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 3e1630804f7..82ad4974fd4 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -3641,10 +3641,11 @@ function and want to see what the date was before converting."
3641 (let ((type (get-text-property (match-beginning 0) 3641 (let ((type (get-text-property (match-beginning 0)
3642 'gnus-date-type))) 3642 'gnus-date-type)))
3643 (when (memq type '(lapsed combined-lapsed user-format)) 3643 (when (memq type '(lapsed combined-lapsed user-format))
3644 (unless (= window-start 3644 (when (and window-start
3645 (save-excursion 3645 (not (= window-start
3646 (forward-line 1) 3646 (save-excursion
3647 (point))) 3647 (forward-line 1)
3648 (point)))))
3648 (setq window-start nil)) 3649 (setq window-start nil))
3649 (save-excursion 3650 (save-excursion
3650 (article-date-ut type t (match-beginning 0))) 3651 (article-date-ut type t (match-beginning 0)))
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el
index 08fef2327ad..b199dcc572c 100644
--- a/lisp/gnus/gnus-msg.el
+++ b/lisp/gnus/gnus-msg.el
@@ -1081,14 +1081,14 @@ If VERY-WIDE, make a very wide reply."
1081 (gnus-summary-work-articles 1)))) 1081 (gnus-summary-work-articles 1))))
1082 ;; Allow user to require confirmation before replying by mail to the 1082 ;; Allow user to require confirmation before replying by mail to the
1083 ;; author of a news article (or mail message). 1083 ;; author of a news article (or mail message).
1084 (when (or 1084 (when (or (not (or (gnus-news-group-p gnus-newsgroup-name)
1085 (not (or (gnus-news-group-p gnus-newsgroup-name)
1086 gnus-confirm-treat-mail-like-news)) 1085 gnus-confirm-treat-mail-like-news))
1087 (not (cond ((stringp gnus-confirm-mail-reply-to-news) 1086 (not (cond ((stringp gnus-confirm-mail-reply-to-news)
1088 (string-match gnus-confirm-mail-reply-to-news 1087 (string-match gnus-confirm-mail-reply-to-news
1089 gnus-newsgroup-name)) 1088 gnus-newsgroup-name))
1090 ((functionp gnus-confirm-mail-reply-to-news) 1089 ((functionp gnus-confirm-mail-reply-to-news)
1091 (funcall gnus-confirm-mail-reply-to-news gnus-newsgroup-name)) 1090 (funcall gnus-confirm-mail-reply-to-news
1091 gnus-newsgroup-name))
1092 (t gnus-confirm-mail-reply-to-news))) 1092 (t gnus-confirm-mail-reply-to-news)))
1093 (if (or wide very-wide) 1093 (if (or wide very-wide)
1094 t ;; Ignore gnus-confirm-mail-reply-to-news for wide and very 1094 t ;; Ignore gnus-confirm-mail-reply-to-news for wide and very
@@ -1123,7 +1123,7 @@ If VERY-WIDE, make a very wide reply."
1123 (insert headers)) 1123 (insert headers))
1124 (goto-char (point-max))) 1124 (goto-char (point-max)))
1125 (mml-quote-region (point) (point-max)) 1125 (mml-quote-region (point) (point-max))
1126 (message-reply nil wide) 1126 (message-reply nil wide 'switch-to-buffer)
1127 (when yank 1127 (when yank
1128 (gnus-inews-yank-articles yank)) 1128 (gnus-inews-yank-articles yank))
1129 (gnus-summary-handle-replysign))))) 1129 (gnus-summary-handle-replysign)))))
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index b8a6be8702e..b493a93d40c 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -380,13 +380,6 @@ disc."
380 :group 'gnus-newsrc 380 :group 'gnus-newsrc
381 :type 'boolean) 381 :type 'boolean)
382 382
383(defcustom gnus-use-backend-marks nil
384 "If non-nil, Gnus will store and retrieve marks from the backends.
385This means that marks will be stored both in .newsrc.eld and in
386the backend, and will slow operation down somewhat."
387 :group 'gnus-newsrc
388 :type 'boolean)
389
390(defcustom gnus-check-bogus-groups-hook nil 383(defcustom gnus-check-bogus-groups-hook nil
391 "A hook run after removing bogus groups." 384 "A hook run after removing bogus groups."
392 :group 'gnus-start-server 385 :group 'gnus-start-server
@@ -1509,7 +1502,7 @@ If SCAN, request a scan of that group as well."
1509 (gnus-activate-group (gnus-info-group info) nil t)) 1502 (gnus-activate-group (gnus-info-group info) nil t))
1510 1503
1511 ;; Allow backends to update marks, 1504 ;; Allow backends to update marks,
1512 (when gnus-use-backend-marks 1505 (when gnus-propagate-marks
1513 (let ((method (inline (gnus-find-method-for-group 1506 (let ((method (inline (gnus-find-method-for-group
1514 (gnus-info-group info))))) 1507 (gnus-info-group info)))))
1515 (when (gnus-check-backend-function 'request-marks (car method)) 1508 (when (gnus-check-backend-function 'request-marks (car method))
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 8fac5021df3..4dfc79a8883 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -1234,9 +1234,11 @@ For example: ((1 . cn-gb-2312) (2 . big5))."
1234 :type 'boolean 1234 :type 'boolean
1235 :group 'gnus-summary-marks) 1235 :group 'gnus-summary-marks)
1236 1236
1237(defcustom gnus-propagate-marks t 1237(defcustom gnus-propagate-marks nil
1238 "If non-nil, do not propagate marks to the backends." 1238 "If non-nil, Gnus will store and retrieve marks from the backends.
1239 :version "23.1" ;; No Gnus 1239This means that marks will be stored both in .newsrc.eld and in
1240the backend, and will slow operation down somewhat."
1241 :version "24.1"
1240 :type 'boolean 1242 :type 'boolean
1241 :group 'gnus-summary-marks) 1243 :group 'gnus-summary-marks)
1242 1244
@@ -4067,6 +4069,7 @@ If NO-DISPLAY, don't generate a summary buffer."
4067 ;; gnus-summary-prepare-hook since kill processing may not 4069 ;; gnus-summary-prepare-hook since kill processing may not
4068 ;; work with hidden articles. 4070 ;; work with hidden articles.
4069 (gnus-summary-maybe-hide-threads) 4071 (gnus-summary-maybe-hide-threads)
4072 (gnus-configure-windows 'summary)
4070 (when kill-buffer 4073 (when kill-buffer
4071 (gnus-kill-or-deaden-summary kill-buffer)) 4074 (gnus-kill-or-deaden-summary kill-buffer))
4072 (gnus-summary-auto-select-subject) 4075 (gnus-summary-auto-select-subject)
@@ -4076,7 +4079,6 @@ If NO-DISPLAY, don't generate a summary buffer."
4076 gnus-newsgroup-unreads 4079 gnus-newsgroup-unreads
4077 gnus-auto-select-first) 4080 gnus-auto-select-first)
4078 (progn 4081 (progn
4079 (gnus-configure-windows 'summary)
4080 (let ((art (gnus-summary-article-number))) 4082 (let ((art (gnus-summary-article-number)))
4081 (unless (and (not gnus-plugged) 4083 (unless (and (not gnus-plugged)
4082 (or (memq art gnus-newsgroup-undownloaded) 4084 (or (memq art gnus-newsgroup-undownloaded)
@@ -7168,6 +7170,7 @@ If FORCE (the prefix), also save the .newsrc file(s)."
7168 (let* ((group gnus-newsgroup-name) 7170 (let* ((group gnus-newsgroup-name)
7169 (quit-config (gnus-group-quit-config gnus-newsgroup-name)) 7171 (quit-config (gnus-group-quit-config gnus-newsgroup-name))
7170 (gnus-group-is-exiting-p t) 7172 (gnus-group-is-exiting-p t)
7173 (article-buffer gnus-article-buffer)
7171 (mode major-mode) 7174 (mode major-mode)
7172 (group-point nil) 7175 (group-point nil)
7173 (buf (current-buffer))) 7176 (buf (current-buffer)))
@@ -7220,16 +7223,6 @@ If FORCE (the prefix), also save the .newsrc file(s)."
7220 (when (eq mode 'gnus-summary-mode) 7223 (when (eq mode 'gnus-summary-mode)
7221 (gnus-kill-buffer buf))) 7224 (gnus-kill-buffer buf)))
7222 7225
7223 ;; If we have several article buffers, we kill them at exit.
7224 (unless gnus-single-article-buffer
7225 (when (gnus-buffer-live-p gnus-article-buffer)
7226 (with-current-buffer gnus-article-buffer
7227 ;; Don't kill sticky article buffers
7228 (unless (eq major-mode 'gnus-sticky-article-mode)
7229 (gnus-kill-buffer gnus-article-buffer)
7230 (setq gnus-article-current nil))))
7231 (gnus-kill-buffer gnus-original-article-buffer))
7232
7233 (setq gnus-current-select-method gnus-select-method) 7226 (setq gnus-current-select-method gnus-select-method)
7234 (set-buffer gnus-group-buffer) 7227 (set-buffer gnus-group-buffer)
7235 (if quit-config 7228 (if quit-config
@@ -7241,6 +7234,17 @@ If FORCE (the prefix), also save the .newsrc file(s)."
7241 (if win (set-window-point win (point)))) 7234 (if win (set-window-point win (point))))
7242 (unless leave-hidden 7235 (unless leave-hidden
7243 (gnus-configure-windows 'group 'force))) 7236 (gnus-configure-windows 'group 'force)))
7237
7238 ;; If we have several article buffers, we kill them at exit.
7239 (unless gnus-single-article-buffer
7240 (when (gnus-buffer-live-p article-buffer)
7241 (with-current-buffer article-buffer
7242 ;; Don't kill sticky article buffers
7243 (unless (eq major-mode 'gnus-sticky-article-mode)
7244 (gnus-kill-buffer article-buffer)
7245 (setq gnus-article-current nil))))
7246 (gnus-kill-buffer gnus-original-article-buffer))
7247
7244 ;; Clear the current group name. 7248 ;; Clear the current group name.
7245 (unless quit-config 7249 (unless quit-config
7246 (setq gnus-newsgroup-name nil))))) 7250 (setq gnus-newsgroup-name nil)))))
@@ -7269,6 +7273,8 @@ If FORCE (the prefix), also save the .newsrc file(s)."
7269 (gnus-kill-buffer gnus-article-buffer) 7273 (gnus-kill-buffer gnus-article-buffer)
7270 (gnus-kill-buffer gnus-original-article-buffer) 7274 (gnus-kill-buffer gnus-original-article-buffer)
7271 (setq gnus-article-current nil)) 7275 (setq gnus-article-current nil))
7276 ;; Return to the group buffer.
7277 (gnus-configure-windows 'group 'force)
7272 (if (not gnus-kill-summary-on-exit) 7278 (if (not gnus-kill-summary-on-exit)
7273 (gnus-deaden-summary) 7279 (gnus-deaden-summary)
7274 (gnus-close-group group) 7280 (gnus-close-group group)
@@ -7280,8 +7286,6 @@ If FORCE (the prefix), also save the .newsrc file(s)."
7280 (gnus-async-prefetch-remove-group group) 7286 (gnus-async-prefetch-remove-group group)
7281 (when (get-buffer gnus-article-buffer) 7287 (when (get-buffer gnus-article-buffer)
7282 (bury-buffer gnus-article-buffer)) 7288 (bury-buffer gnus-article-buffer))
7283 ;; Return to the group buffer.
7284 (gnus-configure-windows 'group 'force)
7285 ;; Clear the current group name. 7289 ;; Clear the current group name.
7286 (setq gnus-newsgroup-name nil) 7290 (setq gnus-newsgroup-name nil)
7287 (unless (gnus-ephemeral-group-p group) 7291 (unless (gnus-ephemeral-group-p group)
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 42b61950986..58daf1baf94 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -6779,7 +6779,7 @@ Useful functions to put in this list include:
6779 subject) 6779 subject)
6780 6780
6781;;;###autoload 6781;;;###autoload
6782(defun message-reply (&optional to-address wide) 6782(defun message-reply (&optional to-address wide switch-function)
6783 "Start editing a reply to the article in the current buffer." 6783 "Start editing a reply to the article in the current buffer."
6784 (interactive) 6784 (interactive)
6785 (require 'gnus-sum) ; for gnus-list-identifiers 6785 (require 'gnus-sum) ; for gnus-list-identifiers
@@ -6822,7 +6822,8 @@ Useful functions to put in this list include:
6822 (message-pop-to-buffer 6822 (message-pop-to-buffer
6823 (message-buffer-name 6823 (message-buffer-name
6824 (if wide "wide reply" "reply") from 6824 (if wide "wide reply" "reply") from
6825 (if wide to-address nil)))) 6825 (if wide to-address nil))
6826 switch-function))
6826 6827
6827 (setq message-reply-headers 6828 (setq message-reply-headers
6828 (vector 0 subject from date message-id references 0 0 "")) 6829 (vector 0 subject from date message-id references 0 0 ""))
diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el
index 4b42637978e..0fc38553c29 100644
--- a/lisp/gnus/nntp.el
+++ b/lisp/gnus/nntp.el
@@ -774,7 +774,7 @@ command whose response triggered the error."
774 (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max)) 774 (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max))
775 'headers))))) 775 'headers)))))
776 776
777(deffoo nntp-retrieve-group-data-early-disabled (server infos) 777(deffoo nntp-retrieve-group-data-early (server infos)
778 "Retrieve group info on INFOS." 778 "Retrieve group info on INFOS."
779 (nntp-with-open-group nil server 779 (nntp-with-open-group nil server
780 (when (nntp-find-connection-buffer nntp-server-buffer) 780 (when (nntp-find-connection-buffer nntp-server-buffer)
@@ -793,7 +793,7 @@ command whose response triggered the error."
793 nil command (gnus-group-real-name (gnus-info-group info))))) 793 nil command (gnus-group-real-name (gnus-info-group info)))))
794 (length infos))))) 794 (length infos)))))
795 795
796(deffoo nntp-finish-retrieve-group-infos-disabled (server infos count) 796(deffoo nntp-finish-retrieve-group-infos (server infos count)
797 (nntp-with-open-group nil server 797 (nntp-with-open-group nil server
798 (let ((buf (nntp-find-connection-buffer nntp-server-buffer)) 798 (let ((buf (nntp-find-connection-buffer nntp-server-buffer))
799 (method (gnus-find-method-for-group 799 (method (gnus-find-method-for-group
@@ -814,10 +814,7 @@ command whose response triggered the error."
814 (< received count))) 814 (< received count)))
815 (nntp-accept-response)) 815 (nntp-accept-response))
816 ;; We now have all the entries. Remove CRs. 816 ;; We now have all the entries. Remove CRs.
817 (goto-char (point-min)) 817 (nnheader-strip-cr)
818 (while (search-forward "\r" nil t)
819 (replace-match "" t t))
820
821 (if (not nntp-server-list-active-group) 818 (if (not nntp-server-list-active-group)
822 (progn 819 (progn
823 (nntp-copy-to-buffer nntp-server-buffer 820 (nntp-copy-to-buffer nntp-server-buffer
@@ -830,7 +827,9 @@ command whose response triggered the error."
830 (delete-region (match-beginning 0) 827 (delete-region (match-beginning 0)
831 (progn (forward-line 1) (point)))) 828 (progn (forward-line 1) (point))))
832 (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max)) 829 (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max))
833 (gnus-active-to-gnus-format method gnus-active-hashtb nil t))))))) 830 (with-current-buffer nntp-server-buffer
831 (gnus-active-to-gnus-format method gnus-active-hashtb
832 nil t))))))))
834 833
835(deffoo nntp-retrieve-groups (groups &optional server) 834(deffoo nntp-retrieve-groups (groups &optional server)
836 "Retrieve group info on GROUPS." 835 "Retrieve group info on GROUPS."