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:
parent
aa936e8e0a
commit
549c9aed8d
14 changed files with 189 additions and 43 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))))
|
||||
|
|
|
@ -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))))
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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))))))))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue