From 5415d0766d91aa8ab4dcedc6f7dd0b85edc915a3 Mon Sep 17 00:00:00 2001 From: Gnus developers Date: Tue, 15 Feb 2011 11:24:37 +0000 Subject: [PATCH] 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. --- doc/misc/ChangeLog | 6 +++- doc/misc/auth.texi | 4 +-- lisp/gnus/ChangeLog | 28 ++++++++++++++++ lisp/gnus/auth-source.el | 70 +++++++++++++++++++++------------------- lisp/gnus/gnus-art.el | 9 +++--- lisp/gnus/gnus-msg.el | 8 ++--- lisp/gnus/gnus-start.el | 9 +----- lisp/gnus/gnus-sum.el | 36 ++++++++++++--------- lisp/gnus/message.el | 5 +-- lisp/gnus/nntp.el | 13 ++++---- 10 files changed, 111 insertions(+), 77 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 20463724c7..3409614406 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -3,6 +3,10 @@ Merge from gnulib. * texinfo.tex: Update to version 2011-02-14.11. +2011-02-14 Teodor Zlatanov + + * auth.texi (Help for users): Login collection is "Login" and not "login". + 2011-02-13 Michael Albinus * tramp.texi (History): Remove IMAP support. @@ -21,7 +25,7 @@ * sc.texi (Getting Connected): Remove old index entries. -2011-02-12 Ulrich Mueller +2011-02-12 Ulrich Mueller * url.texi: Remove duplicate @dircategory (Bug#7942). diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi index 2541dba987..020c582305 100644 --- a/doc/misc/auth.texi +++ b/doc/misc/auth.texi @@ -161,8 +161,8 @@ and simplest configuration is: (setq auth-sources '((:source "~/.authinfo.gpg"))) ;;; even shorter and the @emph{default}: (setq auth-sources '("~/.authinfo.gpg" "~/.authinfo")) -;;; use the Secrets API @var{login} collection (@pxref{Secret Service API}) -(setq auth-sources '("secrets:login")) +;;; use the Secrets API @var{Login} collection (@pxref{Secret Service API}) +(setq auth-sources '("secrets:Login")) @end lisp By adding multiple entries to @code{auth-sources} with a particular diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 747f71f835..7103437613 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,11 +1,39 @@ +2011-02-14 Lars Ingebrigtsen + + * 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. + 2011-02-14 Teodor Zlatanov * auth-source.el (auth-source-backend-parse-parameters): Don't rely on `plist-get' to accept non-list parameters (XEmacs issue). Fix docstring. + (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". 2011-02-14 Lars Ingebrigtsen + * gnus-art.el (article-update-date-lapsed): Don't bug out when updating + multiple headers. + * nnimap.el (nnimap-inhibit-logging): New variable. (nnimap-log-command): Don't log login commands. diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el index be698ad35d..0692dbb538 100644 --- a/lisp/gnus/auth-source.el +++ b/lisp/gnus/auth-source.el @@ -173,7 +173,7 @@ can get pretty complex." (choice (string :tag "Just a file") (const :tag "Default Secrets API Collection" 'default) - (const :tag "Login Secrets API Collection" "secrets:login") + (const :tag "Login Secrets API Collection" "secrets:Login") (const :tag "Temp Secrets API Collection" "secrets:session") (list :tag "Source definition" (const :format "" :value :source) @@ -185,7 +185,7 @@ can get pretty complex." (choice :tag "Collection to use" (string :tag "Collection name") (const :tag "Default" 'default) - (const :tag "Login" "login") + (const :tag "Login" "Login") (const :tag "Temporary" "session")))) (repeat :tag "Extra Parameters" :inline t @@ -252,19 +252,19 @@ If the value is not a list, symmetric encryption will be used." ;; (auth-source-pick t :host "any" :protocol 'imap :user "joe") ;; (setq auth-sources '((:source (:secrets default) :host t :protocol t :user "joe") ;; (:source (:secrets "session") :host t :protocol t :user "joe") -;; (:source (:secrets "login") :host t :protocol t) +;; (:source (:secrets "Login") :host t :protocol t) ;; (:source "~/.authinfo.gpg" :host t :protocol t))) ;; (setq auth-sources '((:source (:secrets default) :host t :protocol t :user "joe") ;; (:source (:secrets "session") :host t :protocol t :user "joe") -;; (:source (:secrets "login") :host t :protocol t) +;; (:source (:secrets "Login") :host t :protocol t) ;; )) ;; (setq auth-sources '((:source "~/.authinfo.gpg" :host t :protocol t))) ;; (auth-source-backend-parse "myfile.gpg") ;; (auth-source-backend-parse 'default) -;; (auth-source-backend-parse "secrets:login") +;; (auth-source-backend-parse "secrets:Login") (defun auth-source-backend-parse (entry) "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." "session"))) ;; if the source is a symbol, we look for the alias named so, - ;; and if that alias is missing, we use "login" + ;; and if that alias is missing, we use "Login" (when (symbolp source) (setq source (or (secrets-get-alias (symbol-name source)) - "login"))) + "Login"))) (auth-source-backend (format "Secrets API (%s)" source) @@ -938,8 +938,8 @@ See `auth-source-search' for details on SPEC." ;;; (let ((auth-sources '(default))) (auth-source-search :max 1 :delete t)) ;;; (let ((auth-sources '(default))) (auth-source-search :max 1)) ;;; (let ((auth-sources '(default))) (auth-source-search)) -;;; (let ((auth-sources '("secrets:login"))) (auth-source-search :max 1)) -;;; (let ((auth-sources '("secrets:login"))) (auth-source-search :max 1 :signon_realm "https://git.gnus.org/Git")) +;;; (let ((auth-sources '("secrets:Login"))) (auth-source-search :max 1)) +;;; (let ((auth-sources '("secrets:Login"))) (auth-source-search :max 1 :signon_realm "https://git.gnus.org/Git")) (defun* auth-source-secrets-search (&rest spec @@ -957,23 +957,23 @@ matching, do a wider search and narrow it down yourself. You'll get back all the properties of the token as a plist. -Here's an example that looks for the first item in the 'login' +Here's an example that looks for the first item in the 'Login' Secrets collection: - \(let ((auth-sources '(\"secrets:login\"))) + \(let ((auth-sources '(\"secrets:Login\"))) (auth-source-search :max 1) -Here's another that looks for the first item in the 'login' +Here's another that looks for the first item in the 'Login' Secrets collection whose label contains 'gnus': - \(let ((auth-sources '(\"secrets:login\"))) + \(let ((auth-sources '(\"secrets:Login\"))) (auth-source-search :max 1 :label \"gnus\") -And this one looks for the first item in the 'login' Secrets +And this one looks for the first item in the 'Login' Secrets collection that's a Google Chrome entry for the git.gnus.org site -login: +authentication tokens: - \(let ((auth-sources '(\"secrets:login\"))) + \(let ((auth-sources '(\"secrets:Login\"))) (auth-source-search :max 1 :signon_realm \"https://git.gnus.org/Git\")) " @@ -993,21 +993,23 @@ login: collect (nth i spec))) ;; build a search spec without the ignored keys ;; if a search key is nil or t (match anything), we skip it - (search-spec (mapcan (lambda (k) (if (or (null (plist-get spec k)) - (eq t (plist-get spec k))) - nil - (list k (plist-get spec k)))) - search-keys)) + (search-spec (apply 'append (mapcar + (lambda (k) + (if (or (null (plist-get spec k)) + (eq t (plist-get spec k))) + nil + (list k (plist-get spec k)))) + search-keys))) ;; needed keys (always including host, login, protocol, and secret) - (returned-keys (remove-duplicates (append - '(:host :login :protocol :secret) - search-keys))) + (returned-keys (delete-dups (append + '(:host :login :protocol :secret) + search-keys))) (items (loop for item in (apply 'secrets-search-items coll search-spec) unless (and (stringp label) (not (string-match label item))) collect item)) ;; TODO: respect max in `secrets-search-items', not after the fact - (items (subseq items 0 (min (length items) max))) + (items (butlast items (- (length items) max))) ;; convert the item name to a full plist (items (mapcar (lambda (item) (append @@ -1017,18 +1019,20 @@ login: (lexical-let ((v (secrets-get-secret coll item))) (lambda () v))) ;; rewrite the entry from ((k1 v1) (k2 v2)) to plist - (mapcan (lambda (entry) - (list (car entry) (cdr entry))) - (secrets-get-attributes coll item)))) + (apply 'append + (mapcar (lambda (entry) + (list (car entry) (cdr entry))) + (secrets-get-attributes coll item))))) items)) ;; ensure each item has each key in `returned-keys' (items (mapcar (lambda (plist) (append - (mapcan (lambda (req) - (if (plist-get plist req) - nil - (list req nil))) - returned-keys) + (apply 'append + (mapcar (lambda (req) + (if (plist-get plist req) + nil + (list req nil))) + returned-keys)) plist)) items))) items)) diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 3e1630804f..82ad4974fd 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." (let ((type (get-text-property (match-beginning 0) 'gnus-date-type))) (when (memq type '(lapsed combined-lapsed user-format)) - (unless (= window-start - (save-excursion - (forward-line 1) - (point))) + (when (and window-start + (not (= window-start + (save-excursion + (forward-line 1) + (point))))) (setq window-start nil)) (save-excursion (article-date-ut type t (match-beginning 0))) diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el index 08fef2327a..b199dcc572 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." (gnus-summary-work-articles 1)))) ;; Allow user to require confirmation before replying by mail to the ;; author of a news article (or mail message). - (when (or - (not (or (gnus-news-group-p gnus-newsgroup-name) + (when (or (not (or (gnus-news-group-p gnus-newsgroup-name) gnus-confirm-treat-mail-like-news)) (not (cond ((stringp gnus-confirm-mail-reply-to-news) (string-match gnus-confirm-mail-reply-to-news gnus-newsgroup-name)) ((functionp gnus-confirm-mail-reply-to-news) - (funcall gnus-confirm-mail-reply-to-news gnus-newsgroup-name)) + (funcall gnus-confirm-mail-reply-to-news + gnus-newsgroup-name)) (t gnus-confirm-mail-reply-to-news))) (if (or wide very-wide) t ;; Ignore gnus-confirm-mail-reply-to-news for wide and very @@ -1123,7 +1123,7 @@ If VERY-WIDE, make a very wide reply." (insert headers)) (goto-char (point-max))) (mml-quote-region (point) (point-max)) - (message-reply nil wide) + (message-reply nil wide 'switch-to-buffer) (when yank (gnus-inews-yank-articles yank)) (gnus-summary-handle-replysign))))) diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el index b8a6be8702..b493a93d40 100644 --- a/lisp/gnus/gnus-start.el +++ b/lisp/gnus/gnus-start.el @@ -380,13 +380,6 @@ disc." :group 'gnus-newsrc :type 'boolean) -(defcustom gnus-use-backend-marks nil - "If non-nil, Gnus will store and retrieve marks from the backends. -This means that marks will be stored both in .newsrc.eld and in -the backend, and will slow operation down somewhat." - :group 'gnus-newsrc - :type 'boolean) - (defcustom gnus-check-bogus-groups-hook nil "A hook run after removing bogus groups." :group 'gnus-start-server @@ -1509,7 +1502,7 @@ If SCAN, request a scan of that group as well." (gnus-activate-group (gnus-info-group info) nil t)) ;; Allow backends to update marks, - (when gnus-use-backend-marks + (when gnus-propagate-marks (let ((method (inline (gnus-find-method-for-group (gnus-info-group info))))) (when (gnus-check-backend-function 'request-marks (car method)) diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index 8fac5021df..4dfc79a888 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))." :type 'boolean :group 'gnus-summary-marks) -(defcustom gnus-propagate-marks t - "If non-nil, do not propagate marks to the backends." - :version "23.1" ;; No Gnus +(defcustom gnus-propagate-marks nil + "If non-nil, Gnus will store and retrieve marks from the backends. +This means that marks will be stored both in .newsrc.eld and in +the backend, and will slow operation down somewhat." + :version "24.1" :type 'boolean :group 'gnus-summary-marks) @@ -4067,6 +4069,7 @@ If NO-DISPLAY, don't generate a summary buffer." ;; gnus-summary-prepare-hook since kill processing may not ;; work with hidden articles. (gnus-summary-maybe-hide-threads) + (gnus-configure-windows 'summary) (when kill-buffer (gnus-kill-or-deaden-summary kill-buffer)) (gnus-summary-auto-select-subject) @@ -4076,7 +4079,6 @@ If NO-DISPLAY, don't generate a summary buffer." gnus-newsgroup-unreads gnus-auto-select-first) (progn - (gnus-configure-windows 'summary) (let ((art (gnus-summary-article-number))) (unless (and (not gnus-plugged) (or (memq art gnus-newsgroup-undownloaded) @@ -7168,6 +7170,7 @@ If FORCE (the prefix), also save the .newsrc file(s)." (let* ((group gnus-newsgroup-name) (quit-config (gnus-group-quit-config gnus-newsgroup-name)) (gnus-group-is-exiting-p t) + (article-buffer gnus-article-buffer) (mode major-mode) (group-point nil) (buf (current-buffer))) @@ -7220,16 +7223,6 @@ If FORCE (the prefix), also save the .newsrc file(s)." (when (eq mode 'gnus-summary-mode) (gnus-kill-buffer buf))) - ;; If we have several article buffers, we kill them at exit. - (unless gnus-single-article-buffer - (when (gnus-buffer-live-p gnus-article-buffer) - (with-current-buffer gnus-article-buffer - ;; Don't kill sticky article buffers - (unless (eq major-mode 'gnus-sticky-article-mode) - (gnus-kill-buffer gnus-article-buffer) - (setq gnus-article-current nil)))) - (gnus-kill-buffer gnus-original-article-buffer)) - (setq gnus-current-select-method gnus-select-method) (set-buffer gnus-group-buffer) (if quit-config @@ -7241,6 +7234,17 @@ If FORCE (the prefix), also save the .newsrc file(s)." (if win (set-window-point win (point)))) (unless leave-hidden (gnus-configure-windows 'group 'force))) + + ;; If we have several article buffers, we kill them at exit. + (unless gnus-single-article-buffer + (when (gnus-buffer-live-p article-buffer) + (with-current-buffer article-buffer + ;; Don't kill sticky article buffers + (unless (eq major-mode 'gnus-sticky-article-mode) + (gnus-kill-buffer article-buffer) + (setq gnus-article-current nil)))) + (gnus-kill-buffer gnus-original-article-buffer)) + ;; Clear the current group name. (unless quit-config (setq gnus-newsgroup-name nil))))) @@ -7269,6 +7273,8 @@ If FORCE (the prefix), also save the .newsrc file(s)." (gnus-kill-buffer gnus-article-buffer) (gnus-kill-buffer gnus-original-article-buffer) (setq gnus-article-current nil)) + ;; Return to the group buffer. + (gnus-configure-windows 'group 'force) (if (not gnus-kill-summary-on-exit) (gnus-deaden-summary) (gnus-close-group group) @@ -7280,8 +7286,6 @@ If FORCE (the prefix), also save the .newsrc file(s)." (gnus-async-prefetch-remove-group group) (when (get-buffer gnus-article-buffer) (bury-buffer gnus-article-buffer)) - ;; Return to the group buffer. - (gnus-configure-windows 'group 'force) ;; Clear the current group name. (setq gnus-newsgroup-name nil) (unless (gnus-ephemeral-group-p group) diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 42b6195098..58daf1baf9 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -6779,7 +6779,7 @@ Useful functions to put in this list include: subject) ;;;###autoload -(defun message-reply (&optional to-address wide) +(defun message-reply (&optional to-address wide switch-function) "Start editing a reply to the article in the current buffer." (interactive) (require 'gnus-sum) ; for gnus-list-identifiers @@ -6822,7 +6822,8 @@ Useful functions to put in this list include: (message-pop-to-buffer (message-buffer-name (if wide "wide reply" "reply") from - (if wide to-address nil)))) + (if wide to-address nil)) + switch-function)) (setq message-reply-headers (vector 0 subject from date message-id references 0 0 "")) diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el index 4b42637978..0fc38553c2 100644 --- a/lisp/gnus/nntp.el +++ b/lisp/gnus/nntp.el @@ -774,7 +774,7 @@ command whose response triggered the error." (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max)) 'headers))))) -(deffoo nntp-retrieve-group-data-early-disabled (server infos) +(deffoo nntp-retrieve-group-data-early (server infos) "Retrieve group info on INFOS." (nntp-with-open-group nil server (when (nntp-find-connection-buffer nntp-server-buffer) @@ -793,7 +793,7 @@ command whose response triggered the error." nil command (gnus-group-real-name (gnus-info-group info))))) (length infos))))) -(deffoo nntp-finish-retrieve-group-infos-disabled (server infos count) +(deffoo nntp-finish-retrieve-group-infos (server infos count) (nntp-with-open-group nil server (let ((buf (nntp-find-connection-buffer nntp-server-buffer)) (method (gnus-find-method-for-group @@ -814,10 +814,7 @@ command whose response triggered the error." (< received count))) (nntp-accept-response)) ;; We now have all the entries. Remove CRs. - (goto-char (point-min)) - (while (search-forward "\r" nil t) - (replace-match "" t t)) - + (nnheader-strip-cr) (if (not nntp-server-list-active-group) (progn (nntp-copy-to-buffer nntp-server-buffer @@ -830,7 +827,9 @@ command whose response triggered the error." (delete-region (match-beginning 0) (progn (forward-line 1) (point)))) (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max)) - (gnus-active-to-gnus-format method gnus-active-hashtb nil t))))))) + (with-current-buffer nntp-server-buffer + (gnus-active-to-gnus-format method gnus-active-hashtb + nil t)))))))) (deffoo nntp-retrieve-groups (groups &optional server) "Retrieve group info on GROUPS." -- 2.20.1