Merge changes made in Gnus trunk.

nnimap.el (nnimap-wait-for-response): Always look (at least) at the previous line.
nnimap.el (nnimap-quirk): New function.
 (nnimap-retrieve-group-data-early): Use it.
 (nnimap-quirks): New alist.
gnus.texi (Foreign Groups): Added clarification of foreign groups.
gnus-sum.el (gnus-summary-push-marks-to-backend): Fix the logic for copying read-ness to the backends.
gnus-group.el (gnus-group-kill-group): Notify the backend that the group has been killed.
 (gnus-group-yank-group): Ditto.
gnus-start.el (gnus-subscribe-newsgroup): Notify the backend.
nnir.el: Improve customizations.
gnus.texi (Archived Messages): Removed outdated comment and text.
nnfolder.el (nnfolder-save-all-buffers): Refactor out into its own function.
 (nnfolder-request-expire-articles): Save all the buffers after doing expiry.
nnmail.el (nnmail-expiry-target-group): Revert the "all articles are the last article", since that led to serious performance regressions when expiring nnml groups.
gnus-html.el (gnus-html-schedule-image-fetching): Make sure the HTML fetching stops when Gnus exits.
gnus-srvr.el: Avoid passing nil regexp argument to delete-matching-lines.
auth-source.el (auth-source-gpg-encrypt-to): New variable to set the list of recipient keys, or use symmetric encryption if not a list.
 (auth-source-create): Use it to make `epa-file-encrypt-to' local for an EPA override, replacing the call to `netrc-store-data'.
This commit is contained in:
Gnus developers 2010-12-16 22:22:28 +00:00 committed by Katsumi Yamaoka
parent aa936e8e0a
commit 549c9aed8d
14 changed files with 189 additions and 43 deletions

View file

@ -1,3 +1,11 @@
2010-12-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Archived Messages): Remove outdated text.
2010-12-16 Teodor Zlatanov <tzz@lifelogs.com>
* gnus.texi (Foreign Groups): Added clarification of foreign groups.
2010-12-15 Andrew Cohen <cohen@andy.bu.edu>
* gnus.texi (The hyrex Engine): Say that this engine as obsolete.

View file

@ -2512,6 +2512,15 @@ the command to be executed.
@section Foreign Groups
@cindex foreign groups
If you recall how to subscribe to servers (@pxref{Finding the News})
you will remember that @code{gnus-secondary-select-methods} and
@code{gnus-select-method} let you write a definition in Emacs Lisp of
what servers you want to see when you start up. The alternate
approach is to use foreign servers and groups. ``Foreign'' here means
they are not coming from the select methods. All foreign server
configuration and subscriptions are stored only in the
@file{~/.newsrc.eld} file.
Below are some group mode commands for making and editing general foreign
groups, as well as commands to ease the creation of a few
special-purpose groups. All these commands insert the newly created
@ -12611,9 +12620,6 @@ messages in one file per month:
(concat "mail." (format-time-string "%Y-%m")))))
@end lisp
@c (XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
@c use a different value for @code{gnus-message-archive-group} there.)
Now, when you send a message off, it will be stored in the appropriate
group. (If you want to disable storing for just one particular message,
you can just remove the @code{Gcc} header that has been inserted.) The
@ -12625,11 +12631,6 @@ if (using @kbd{G r} in the group buffer) to something
nice---@samp{misc-mail-september-1995}, or whatever. New messages will
continue to be stored in the old (now empty) group.
That's the default method of archiving sent messages. Gnus offers a
different way for the people who don't like the default method. In that
case you should set @code{gnus-message-archive-group} to @code{nil};
this will disable archiving.
@table @code
@item gnus-gcc-mark-as-read
@vindex gnus-gcc-mark-as-read

View file

@ -1,8 +1,65 @@
2010-12-16 Daiki Ueno <ueno@unixuser.org>
* auth-source.el (auth-source-gpg-encrypt-to): New variable to set the
list of recipient keys, or use symmetric encryption if not a list.
(auth-source-create): Use it to make `epa-file-encrypt-to' local for an
EPA override, replacing the call to `netrc-store-data'.
2010-12-16 Dan Davison <dandavison7@gmail.com> (tiny change)
* gnus-srvr.el: Avoid passing nil regexp argument to
delete-matching-lines.
2010-12-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus-html.el (gnus-html-schedule-image-fetching): Make sure the HTML
fetching stops when Gnus exits.
* nnfolder.el (nnfolder-save-all-buffers): Refactor out into its own
function.
(nnfolder-request-expire-articles): Save all the buffers after doing
expiry.
* nnmail.el (nnmail-expiry-target-group): Revert the "all articles are
the last article", since that led to serious performance regressions
when expiring nnml groups.
2010-12-16 Andrew Cohen <cohen@andy.bu.edu>
* nnir.el: Improve customizations.
2010-12-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus-start.el (gnus-subscribe-newsgroup): Notify the backend.
* gnus-group.el (gnus-group-kill-group): Notify the backend that the
group has been killed.
(gnus-group-yank-group): Ditto.
* gnus-srvr.el (gnus-browse-unsubscribe-group): Ditto.
* nnimap.el (nnimap-request-update-group-status): New function.
* gnus-int.el (gnus-request-update-group-status): New interface
function.
* gnus-sum.el (gnus-summary-push-marks-to-backend): Fix the logic for
copying read-ness to the backends.
* nnimap.el (nnimap-quirk): New function.
(nnimap-retrieve-group-data-early): Use it.
(nnimap-quirks): New alist.
2010-12-16 Katsumi Yamaoka <yamaoka@jpl.org>
* shr.el (shr-insert): Set shr-start after deleting trailing space;
don't delete it within indentation.
2010-12-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
* nnimap.el (nnimap-wait-for-response): Always look (at least) at the
previous line.
2010-12-15 Lars Magne Ingebrigtsen <larsi@gnus.org>
* nnimap.el (nnimap-retrieve-group-data-early): Fix the syntax of the

View file

@ -159,6 +159,15 @@ can get pretty complex."
(const :tag "Any" t)
(string :tag "Specific user name"))))))))
(defcustom auth-source-gpg-encrypt-to t
"List of recipient keys that `authinfo.gpg' encrypted to.
If the value is not a list, symmetric encryption will be used."
:group 'auth-source
:version "23.2" ;; No Gnus
:type '(choice (const :tag "Symmetric encryption" t)
(repeat :tag "Recipient public keys"
(string :tag "Recipient public key"))))
;; temp for debugging
;; (unintern 'auth-source-protocols)
;; (unintern 'auth-sources)
@ -352,9 +361,28 @@ Return structure as specified by MODE."
;; netrc interface.
(when (y-or-n-p (format "Do you want to save this password in %s? "
source))
(netrc-store-data source host prot
(or user (cdr (assoc "login" result)))
(cdr (assoc "password" result))))))
;; the code below is almost same as `netrc-store-data' except
;; the `epa-file-encrypt-to' hack (see bug#7487).
(with-temp-buffer
(when (file-exists-p source)
(insert-file-contents source))
(when auth-source-gpg-encrypt-to
;; making `epa-file-encrypt-to' local to this buffer lets
;; epa-file skip the key selection query (see the
;; `local-variable-p' check in `epa-file-write-region').
(unless (local-variable-p 'epa-file-encrypt-to)
(make-local-variable 'epa-file-encrypt-to))
(if (listp auth-source-gpg-encrypt-to)
(setq epa-file-encrypt-to auth-source-gpg-encrypt-to)))
(goto-char (point-max))
(unless (bolp)
(insert "\n"))
(insert (format "machine %s login %s password %s port %s\n"
host
(or user (cdr (assoc "login" result)))
(cdr (assoc "password" result))
prot))
(write-region (point-min) (point-max) source nil 'silent)))))
(if (consp mode)
(mapcar #'cdr result)
(cdar result))))

View file

@ -3781,6 +3781,7 @@ of groups killed."
gnus-list-of-killed-groups))
(gnus-group-change-level
(if entry entry group) gnus-level-killed (if entry nil level))
(gnus-request-update-group-status group 'unsubscribe)
(message "Killed group %s" (gnus-group-decoded-name group)))
;; If there are lots and lots of groups to be killed, we use
;; this thing instead.
@ -3803,7 +3804,8 @@ of groups killed."
(setq gnus-zombie-list (delete group gnus-zombie-list))))
;; There may be more than one instance displayed.
(while (gnus-group-goto-group group)
(gnus-delete-line)))
(gnus-delete-line))
(gnus-request-update-group-status group 'unsubscribe))
(gnus-make-hashtable-from-newsrc-alist))
(gnus-group-position-point)
@ -3831,6 +3833,7 @@ yanked) a list of yanked groups is returned."
(and prev (gnus-group-entry prev))
t)
(gnus-group-insert-group-line-info group)
(gnus-request-update-group-status group 'subscribe)
(gnus-undo-register
`(when (gnus-group-goto-group ,group)
(gnus-group-kill-group 1))))

View file

@ -395,7 +395,7 @@ Use ALT-TEXT for the image string."
4)
(setq args (nconc args (list t))))
(ignore-errors
(apply #'url-retrieve args))))
(push (apply #'url-retrieve args) gnus-buffers))))
(defun gnus-html-image-fetched (status buffer image)
"Callback function called when image has been fetched."

View file

@ -473,6 +473,18 @@ If FETCH-OLD, retrieve all headers (or some subset thereof) in the group."
(funcall (gnus-get-function gnus-command-method 'request-type)
(gnus-group-real-name group) article))))
(defun gnus-request-update-group-status (group status)
"Change the status of a group.
Valid statuses include `subscribe' and `unsubscribe'."
(let ((gnus-command-method (gnus-find-method-for-group group)))
(if (not (gnus-check-backend-function
'request-update-group-status (car gnus-command-method)))
nil
(funcall
(gnus-get-function gnus-command-method 'request-update-group-status)
(gnus-group-real-name group) status
(nth 1 gnus-command-method)))))
(defun gnus-request-set-mark (group action)
"Set marks on articles in the back end."
(let ((gnus-command-method (gnus-find-method-for-group group)))

View file

@ -766,7 +766,8 @@ claim them."
(with-current-buffer nntp-server-buffer
(let ((cur (current-buffer)))
(goto-char (point-min))
(unless (string= gnus-ignored-newsgroups "")
(unless (or (null gnus-ignored-newsgroups)
(string= gnus-ignored-newsgroups ""))
(delete-matching-lines gnus-ignored-newsgroups))
;; We treat NNTP as a special case to avoid problems with
;; garbage group names like `"foo' that appear in some badly
@ -992,7 +993,8 @@ how new groups will be entered into the group buffer."
;; mechanism for new group subscription.
(gnus-call-subscribe-functions
gnus-browse-subscribe-newsgroup-method
group)))
group)
(gnus-request-update-group-status group 'subscribe)))
(delete-char 1)
(insert (let ((lvl (gnus-group-level group)))
(cond

View file

@ -645,6 +645,7 @@ the first newsgroup."
(gnus-group-change-level
newsgroup gnus-level-default-subscribed
gnus-level-killed (gnus-group-entry (or next "dummy.group")))
(gnus-request-update-group-status newsgroup 'subscribe)
(gnus-message 5 "Subscribe newsgroup: %s" newsgroup)
(run-hook-with-args 'gnus-subscribe-newsgroup-hooks newsgroup)
t))

View file

@ -9958,7 +9958,7 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
(defun gnus-summary-push-marks-to-backend (article)
(let ((set nil)
(marks gnus-article-mark-lists))
(when (memq article gnus-newsgroup-unreads)
(unless (memq article gnus-newsgroup-unreads)
(push 'read set))
(while marks
(when (and (eq (gnus-article-mark-to-type (cdar marks)) 'list)

View file

@ -322,20 +322,20 @@ the group. Then the marks file will be regenerated properly by Gnus.")
(when nnfolder-get-new-mail
(nnfolder-possibly-change-group group server)
(nnmail-get-new-mail
'nnfolder
(lambda ()
(let ((bufs nnfolder-buffer-alist))
(save-excursion
(while bufs
(if (not (gnus-buffer-live-p (nth 1 (car bufs))))
(setq nnfolder-buffer-alist
(delq (car bufs) nnfolder-buffer-alist))
(set-buffer (nth 1 (car bufs)))
(nnfolder-save-buffer)
(kill-buffer (current-buffer)))
(setq bufs (cdr bufs))))))
nnfolder-directory
group)))
'nnfolder 'nnfolder-save-all-buffers
nnfolder-directory group)))
(defun nnfolder-save-all-buffers ()
(let ((bufs nnfolder-buffer-alist))
(save-excursion
(while bufs
(if (not (gnus-buffer-live-p (nth 1 (car bufs))))
(setq nnfolder-buffer-alist
(delq (car bufs) nnfolder-buffer-alist))
(set-buffer (nth 1 (car bufs)))
(nnfolder-save-buffer)
(kill-buffer (current-buffer)))
(setq bufs (cdr bufs))))))
;; Don't close the buffer if we're not shutting down the server. This way,
;; we can keep the buffer in the group buffer cache, and not have to grovel
@ -488,7 +488,8 @@ the group. Then the marks file will be regenerated properly by Gnus.")
(nnfolder-save-buffer)
(nnfolder-adjust-min-active newsgroup)
(nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
(gnus-sorted-difference articles (nreverse deleted-articles)))))
(gnus-sorted-difference articles (nreverse deleted-articles)))
(nnfolder-save-all-buffers)))
(deffoo nnfolder-request-move-article (article group server accept-form
&optional last move-is-internal)

View file

@ -139,6 +139,9 @@ textual parts.")
(download "gnus-download")
(forward "gnus-forward")))
(defvar nnimap-quirks
'(("QRESYNC" "Zimbra" "QRESYNC ")))
(defun nnimap-buffer ()
(nnimap-find-process-buffer nntp-server-buffer))
@ -897,6 +900,16 @@ textual parts.")
(push flag flags)))
flags))
(deffoo nnimap-request-update-group-status (group status &optional server)
(when (nnimap-possibly-change-group nil server)
(let ((command (assoc
status
'((subscribe "SUBSCRIBE")
(unsubscribe "UNSUBSCRIBE")))))
(when command
(with-current-buffer (nnimap-buffer)
(nnimap-command "%s %S" (cadr command) (utf7-encode group t)))))))
(deffoo nnimap-request-set-mark (group actions &optional server)
(when (nnimap-possibly-change-group group server)
(let (sequence)
@ -1080,8 +1093,9 @@ textual parts.")
uidvalidity
modseq)
(push
(list (nnimap-send-command "EXAMINE %S (QRESYNC (%s %s))"
(list (nnimap-send-command "EXAMINE %S (%s (%s %s))"
(utf7-encode group t)
(nnimap-quirk "QRESYNC")
uidvalidity modseq)
'qresync
nil group 'qresync)
@ -1107,6 +1121,15 @@ textual parts.")
sequences))))
sequences))))
(defun nnimap-quirk (command)
(let ((quirk (assoc command nnimap-quirks)))
;; If this server is of a type that matches a quirk, then return
;; the "quirked" command instead of the proper one.
(if (or (null quirk)
(not (string-match (nth 1 quirk) (nnimap-greeting nnimap-object))))
command
(nth 2 quirk))))
(deffoo nnimap-finish-retrieve-group-infos (server infos sequences)
(when (and sequences
(nnimap-possibly-change-group nil server))
@ -1541,7 +1564,11 @@ textual parts.")
(not (re-search-backward
(format "^%d .*\n" sequence)
(if nnimap-streaming
(max (point-min) (- (point) 500))
(max (point-min)
(- (point) 500)
(save-excursion
(forward-line -1)
(point)))
(point-min))
t)))
(when messagep

View file

@ -305,13 +305,6 @@ is `(valuefunc member)'."
"Search groups in Gnus with assorted seach engines."
:group 'gnus)
(defcustom nnir-method-default-engines
'((nnimap . imap)
(nntp . gmane))
"*Alist of default search engines keyed by server method."
:type '(alist)
:group 'nnir)
(defcustom nnir-ignored-newsgroups ""
"*A regexp to match newsgroups in the active file that should
be skipped when searching."
@ -329,7 +322,7 @@ with three items unique to nnir summary buffers:
%g Article original short group name (string)
If nil this will use `gnus-summary-line-format'."
:type '(regexp)
:type '(string)
:group 'nnir)
(defcustom nnir-retrieve-headers-override-function nil
@ -347,7 +340,8 @@ result, `gnus-retrieve-headers' will be called instead."
"*The default IMAP search key for an nnir search. Must be one of
the keys in `nnir-imap-search-arguments'. To use raw imap queries
by default set this to \"Imap\"."
:type '(string)
:type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem)))
nnir-imap-search-arguments))
:group 'nnir)
(defcustom nnir-swish++-configuration-file
@ -546,6 +540,18 @@ needs the variables `nnir-namazu-program',
Add an entry here when adding a new search engine.")
(defcustom nnir-method-default-engines
'((nnimap . imap)
(nntp . gmane))
"*Alist of default search engines keyed by server method."
:type `(repeat (cons (choice (const nnimap) (const nttp) (const nnspool)
(const nneething) (const nndir) (const nnmbox)
(const nnml) (const nnmh) (const nndraft)
(const nnfolder) (const nnmaildir))
(choice
,@(mapcar (lambda (elem) (list 'const (car elem)))
nnir-engines))))
:group 'nnir)
;; Gnus glue.

View file

@ -1915,7 +1915,7 @@ If TIME is nil, then return the cutoff time for oldness instead."
(unless (eq target 'delete)
(when (or (gnus-request-group target)
(gnus-request-create-group target))
(let ((group-art (gnus-request-accept-article target nil t t)))
(let ((group-art (gnus-request-accept-article target nil nil t)))
(when (and (consp group-art)
(cdr group-art))
(gnus-group-mark-article-read target (cdr group-art))))))))