Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-628
Merge from gnus--rel--5.10 Patches applied: * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-55 Update from CVS 2004-10-19 Katsumi Yamaoka <yamaoka@jpl.org> * lisp/gnus/gnus-sum.el (gnus-update-summary-mark-positions): Search for dummy marks in the right way. 2004-10-18 Kevin Greiner <kgreiner@compsol.cc> * lisp/gnus/nnagent.el (nnagent-request-type): Bind gnus-agent to nil to avoid infinite recursion via gnus-get-function. 2004-10-18 Kevin Greiner <kgreiner@compsol.cc> * lisp/gnus/gnus-agent.el (gnus-agent-synchronize-group-flags): When necessary, pass full group name to gnus-request-set-marks. (gnus-agent-synchronize-group-flags): Added support for sync'ing tick marks. (gnus-agent-synchronize-flags-server): Be silent when writing file. 2004-10-18 Kevin Greiner <kgreiner@compsol.cc> * lisp/gnus/gnus-agent.el (gnus-agent-synchronize-group-flags): Replaced gnus-request-update-info with explicit code to sync the in-memory info read flags with the marks being sync'd to the backend. 2004-10-18 Kevin Greiner <kgreiner@compsol.cc> * lisp/gnus/gnus-agent.el (gnus-agent-possibly-synchronize-flags): Ignore servers that are offline. Avoids having gnus-agent-toggle-plugged first ask if you want to open a server and then, even when you responded with no, asking if you want to synchronize the server's flags. (gnus-agent-synchronize-flags-server): Rewrote read loop to handle multi-line expressions. (gnus-agent-synchronize-group-flags): New internal function. Updates marks in memory (in the info structure) AND in the backend. (gnus-agent-check-overview-buffer): Fixed range of deletion to remove entire duplicate line. Fixes merged article number bug. * lisp/gnus/gnus-util.el (gnus-remassoc): Fixed typo in documentation. * lisp/gnus/nnagent.el (nnagent-request-set-mark): Use gnus-agent-synchronize-group-flags, not backend's request-set-mark method, to ensure that synchronization updates marks in the backend and in the info (in memory) structure. 2004-10-18 Kevin Greiner <kgreiner@compsol.cc> * lisp/gnus/gnus-agent.el (gnus-agent-synchronize-flags-server): Do nothing unless plugged. Disable the agent so that an open failure causes an error. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Reiner Steib <Reiner.Steib@gmx.de> * lisp/gnus/gnus-agent.el (gnus-agent-fetched-hook): Add :version. (gnus-agent-go-online): Change :version. (gnus-agent-expire-unagentized-dirs) (gnus-agent-auto-agentize-methods): Add :version. 2004-10-18 Kevin Greiner <kgreiner@compsol.cc> * lisp/gnus/legacy-gnus-agent.el (gnus-agent-convert-to-compressed-agentview-prompt): New function. Used internally to only display 'gnus converting files' message when actually necessary. * lisp/gnus/gnus-sum.el (): Removed (require 'gnus-agent) as required methods now autoloaded. * lisp/gnus/gnus-int.el (gnus-request-move-article): Use gnus-agent-unfetch-articles in place of gnus-agent-expire to improve performance. 2004-10-18 Kevin Greiner <kgreiner@compsol.cc> * lisp/gnus/gnus-agent.el (gnus-agent-cat-groups): rewrote avoiding defsetf to avoid run-time CL dependencies. (gnus-agent-unfetch-articles): New function. (gnus-agent-fetch-headers): Use gnus-agent-braid-nov to validate article numbers even when local .overview file is missing. (gnus-agent-read-article-number): New function. Only accepts 27-bit article numbers. (gnus-agent-copy-nov-line, gnus-agent-uncached-articles): Use gnus-agent-read-article-number. (gnus-agent-braid-nov): Rewrote to validate article numbers coming from backend while recognizing that article numbers in .overview must be valid. * lisp/gnus/gnus-start.el (gnus-convert-old-newsrc): Changed message text as some users confused by references to .newsrc when they only have a .newsrc.eld file. (gnus-convert-mark-converter-prompt, gnus-convert-converter-needs-prompt): Fixed use of property list. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> * lisp/gnus/gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> * lisp/gnus/gnus-start.el (gnus-get-unread-articles-in-group): Don't do stuff for non-living groups. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> * lisp/gnus/gnus-agent.el (gnus-agent-synchronize-flags): Default to nil. (gnus-agent-regenerate-group): Using nil messages aren't valid. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> * lisp/gnus/gnus-agent.el (gnus-agent-read-agentview): Inline gnus-uncompress-range. 2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com> * lisp/gnus/legacy-gnus-agent.el (gnus-agent-convert-to-compressed-agentview): Fixed typos with help from Florian Weimer <fw@deneb.enyo.de> * lisp/gnus/gnus-agent.el (gnus-agentize): gnus-agent-send-mail-real-function no longer set to current value of message-send-mail-function but rather a lambda that calls message-send-mail-function. The change makes the agent real-time responsive to user changes to message-send-mail-function. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Reiner Steib <Reiner.Steib@gmx.de> * lisp/gnus/gnus-start.el (gnus-get-unread-articles): Fix last commit. 2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com> * lisp/gnus/gnus-cache.el (gnus-cache-rename-group): New function. (gnus-cache-delete-group): New function. * lisp/gnus/gnus-agent.el (gnus-agent-rename-group): New function. (gnus-agent-delete-group): New function. (gnus-agent-save-group-info): Use gnus-command-method when `method' parameter is nil. Don't write nil entries into the active file. (gnus-agent-get-group-info): New function. (gnus-agent-get-local): Added optional parameters to avoid calling gnus-group-real-name and gnus-find-method-for-group. (gnus-agent-set-local): Delete stored entry if either min, or max, are nil. (gnus-agent-fetch-session): Reworded error/quit messages. On quit, use gnus-agent-regenerate-group to record existance of any articles fetched to disk before the quit occurred. * lisp/gnus/gnus-int.el (gnus-request-delete-group): Use gnus-cache-delete-group and gnus-agent-delete-group to keep the local disk in sync with the server. (gnus-request-rename-group): Use gnus-cache-rename-group and gnus-agent-rename-group to keep the local disk in sync with the server. * lisp/gnus/gnus-start.el (gnus-get-unread-articles): Cosmetic simplification to logic. * lisp/gnus/gnus-group.el (): (gnus-group-delete-group): No longer update gnus-cache-active-altered as gnus-request-delete-group now keeps the cache in sync. (gnus-group-list-active): Let the agent store a server's active list if currently plugged. * lisp/gnus/gnus-util.el (gnus-rename-file): New function. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> * lisp/gnus/gnus-agent.el (gnus-agent-regenerate-group): Activate the group when the group's active is not available. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> * lisp/gnus/gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to error. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> * lisp/gnus/gnus-start.el (gnus-convert-old-newsrc): Only write the conversion message to newsrc-dribble when an actual conversion is performed. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> * lisp/gnus/gnus-agent.el (gnus-agent-read-local): Bind nnheader-file-coding-system to gnus-agent-file-coding-system to avoid the implicit assumption that they will always be equal. (gnus-agent-save-local): Bind buffer-file-coding-system, not coding-system-for-write, as the with-temp-file macro first prints to a buffer then saves the buffer. 2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com> * lisp/gnus/legacy-gnus-agent.el (): New. Provides converters that are only loaded when gnus-convert-old-newsrc needs to call them. * lisp/gnus/gnus-agent.el (gnus-agent-read-agentview): Removed support for old file versions. (gnus-group-prepare-hook): Removed function that converted list form of gnus-agent-expire-days to group properties. * lisp/gnus/gnus-start.el (gnus-convert-old-newsrc): Registered new converters to handle old agent file formats. Added logic for a "backup before upgrading warning". (gnus-convert-mark-converter-prompt): Developers can mark functions as needing (default), or not needing, gnus-convert-old-newsrc's "backup before upgrading warning". (gnus-convert-converter-needs-prompt): Tests whether the user should be protected from potentially irreversable changes by the function. 2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com> * lisp/gnus/gnus-int.el (gnus-request-accept-article): Inform the agent that articles are being added to a group. (gnus-request-replace-article): Inform the agent that articles need to be uncached as the cached contents are no longer valid. * lisp/gnus/gnus-agent.el (gnus-agent-file-header-cache): Removed. (gnus-agent-possibly-alter-active): Avoid null in numeric comparison. (gnus-agent-set-local): Refuse to save null in local object table. (gnus-agent-regenerate-group): The REREAD parameter can now be a list of articles that will be marked as unread. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> * lisp/gnus/gnus-range.el (gnus-sorted-range-intersection): Now accepts single-interval range of the form (min . max). Previously the range had to look like ((min . max)). Likewise, return (min . max) rather than ((min . max)). (gnus-range-map): Use gnus-range-normalize to accept single-interval range. * lisp/gnus/gnus-sum.el (gnus-summary-highlight-line): Articles stored in the cache, but not the agent, now appear with their usual face. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> * lisp/gnus/gnus-sum.el (gnus-adjust-marks): Now correctly handles a list of marks consisting of a single range {for example, (3 . 5)} rather than a list of a single range { ((3 . 5)) }. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> * lisp/gnus/gnus-sum.el (gnus-adjust-marks): Avoid splicing null INTO the uncompressed list. 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> * lisp/gnus/gnus-draft.el (gnus-group-send-queue): Pass the group name "nndraft:queue" along to gnus-draft-send. Use gnus-agent-prompt-send-queue. (gnus-draft-send): Rebind gnus-agent-queue-mail to nil when group is "nndraft:queue". Suggested by Gaute Strokkenes <gs234@srcf.ucam.org> * lisp/gnus/gnus-group.el (gnus-group-catchup): Use new gnus-sequence-of-unread-articles, not gnus-list-of-unread-articles, to avoid exhausting memory with huge numbers of articles. Use gnus-range-map to avoid having to uncompress the unread list. (gnus-group-archive-directory, gnus-group-recent-archive-directory): Fixed invalid ange-ftp reference. * lisp/gnus/gnus-range.el (gnus-range-map): Iterate over list or sequence. (gnus-sorted-range-intersection): Intersection of two ranges without requiring that they first be uncompressed. * lisp/gnus/gnus-start.el (gnus-activate-group): Unless blocked by the caller, possibly expand the active range to include both cached and agentized articles. (gnus-convert-old-newsrc): Rewrote in anticipation of having multiple version-dependent converters. (gnus-groups-to-gnus-format): Replaced gnus-agent-save-groups with gnus-agent-save-active. (gnus-save-newsrc-file): Save dirty agent range limits. * lisp/gnus/gnus-sum.el (gnus-select-newgroup): Replaced inline code with gnus-agent-possibly-alter-active. (gnus-adjust-marked-articles): Faster handling of simple lists 2004-10-18 David Edmondson <dme@dme.org> * lisp/gnus/mm-view.el (mm-w3m-cid-retrieve-1): Don't use recursive call excessively.
This commit is contained in:
parent
9b0eaaa714
commit
54506618c7
12 changed files with 1403 additions and 623 deletions
|
@ -1,3 +1,290 @@
|
|||
2004-10-19 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* gnus-sum.el (gnus-update-summary-mark-positions): Search for
|
||||
dummy marks in the right way.
|
||||
|
||||
2004-10-18 Kevin Greiner <kgreiner@compsol.cc>
|
||||
|
||||
* nnagent.el (nnagent-request-type): Bind gnus-agent to nil to
|
||||
avoid infinite recursion via gnus-get-function.
|
||||
|
||||
2004-10-18 Kevin Greiner <kgreiner@compsol.cc>
|
||||
|
||||
* gnus-agent.el (gnus-agent-synchronize-group-flags): When
|
||||
necessary, pass full group name to gnus-request-set-marks.
|
||||
(gnus-agent-synchronize-group-flags): Added support for sync'ing
|
||||
tick marks.
|
||||
(gnus-agent-synchronize-flags-server): Be silent when writing file.
|
||||
|
||||
2004-10-18 Kevin Greiner <kgreiner@compsol.cc>
|
||||
|
||||
* gnus-agent.el (gnus-agent-synchronize-group-flags): Replaced
|
||||
gnus-request-update-info with explicit code to sync the in-memory
|
||||
info read flags with the marks being sync'd to the backend.
|
||||
|
||||
2004-10-18 Kevin Greiner <kgreiner@compsol.cc>
|
||||
|
||||
* gnus-agent.el (gnus-agent-possibly-synchronize-flags): Ignore
|
||||
servers that are offline. Avoids having gnus-agent-toggle-plugged
|
||||
first ask if you want to open a server and then, even when you
|
||||
responded with no, asking if you want to synchronize the server's
|
||||
flags.
|
||||
(gnus-agent-synchronize-flags-server): Rewrote read loop to handle
|
||||
multi-line expressions.
|
||||
(gnus-agent-synchronize-group-flags): New internal function.
|
||||
Updates marks in memory (in the info structure) AND in the
|
||||
backend.
|
||||
(gnus-agent-check-overview-buffer): Fixed range of
|
||||
deletion to remove entire duplicate line. Fixes merged article
|
||||
number bug.
|
||||
|
||||
* gnus-util.el (gnus-remassoc): Fixed typo in documentation.
|
||||
|
||||
* nnagent.el (nnagent-request-set-mark): Use
|
||||
gnus-agent-synchronize-group-flags, not backend's request-set-mark
|
||||
method, to ensure that synchronization updates marks in the
|
||||
backend and in the info (in memory) structure.
|
||||
|
||||
2004-10-18 Kevin Greiner <kgreiner@compsol.cc>
|
||||
|
||||
* gnus-agent.el (gnus-agent-synchronize-flags-server): Do nothing
|
||||
unless plugged. Disable the agent so that an open failure causes
|
||||
an error.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Reiner Steib <Reiner.Steib@gmx.de>
|
||||
* gnus-agent.el (gnus-agent-fetched-hook): Add :version.
|
||||
(gnus-agent-go-online): Change :version.
|
||||
(gnus-agent-expire-unagentized-dirs)
|
||||
(gnus-agent-auto-agentize-methods): Add :version.
|
||||
|
||||
2004-10-18 Kevin Greiner <kgreiner@compsol.cc>
|
||||
|
||||
* legacy-gnus-agent.el (gnus-agent-convert-to-compressed-agentview-prompt):
|
||||
New function. Used internally to only display 'gnus converting
|
||||
files' message when actually necessary.
|
||||
|
||||
* gnus-sum.el (): Removed (require 'gnus-agent) as required
|
||||
methods now autoloaded.
|
||||
|
||||
* gnus-int.el (gnus-request-move-article): Use
|
||||
gnus-agent-unfetch-articles in place of gnus-agent-expire to
|
||||
improve performance.
|
||||
|
||||
2004-10-18 Kevin Greiner <kgreiner@compsol.cc>
|
||||
|
||||
* gnus-agent.el (gnus-agent-cat-groups): rewrote avoiding defsetf
|
||||
to avoid run-time CL dependencies.
|
||||
(gnus-agent-unfetch-articles): New function.
|
||||
(gnus-agent-fetch-headers): Use gnus-agent-braid-nov to validate
|
||||
article numbers even when local .overview file is missing.
|
||||
(gnus-agent-read-article-number): New function. Only accepts
|
||||
27-bit article numbers.
|
||||
(gnus-agent-copy-nov-line, gnus-agent-uncached-articles): Use
|
||||
gnus-agent-read-article-number.
|
||||
(gnus-agent-braid-nov): Rewrote to validate article numbers coming
|
||||
from backend while recognizing that article numbers in .overview
|
||||
must be valid.
|
||||
|
||||
* gnus-start.el (gnus-convert-old-newsrc): Changed message text as
|
||||
some users confused by references to .newsrc when they only have a
|
||||
.newsrc.eld file.
|
||||
(gnus-convert-mark-converter-prompt,
|
||||
gnus-convert-converter-needs-prompt): Fixed use of property list.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* gnus-start.el (gnus-get-unread-articles-in-group): Don't do
|
||||
stuff for non-living groups.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* gnus-agent.el (gnus-agent-synchronize-flags): Default to nil.
|
||||
(gnus-agent-regenerate-group): Using nil messages aren't valid.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* gnus-agent.el (gnus-agent-read-agentview): Inline
|
||||
gnus-uncompress-range.
|
||||
|
||||
2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com>
|
||||
|
||||
* legacy-gnus-agent.el
|
||||
(gnus-agent-convert-to-compressed-agentview): Fixed typos with
|
||||
help from Florian Weimer <fw@deneb.enyo.de>
|
||||
|
||||
* gnus-agent.el (gnus-agentize):
|
||||
gnus-agent-send-mail-real-function no longer set to current value
|
||||
of message-send-mail-function but rather a lambda that calls
|
||||
message-send-mail-function. The change makes the agent real-time
|
||||
responsive to user changes to message-send-mail-function.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Reiner Steib <Reiner.Steib@gmx.de>
|
||||
|
||||
* gnus-start.el (gnus-get-unread-articles): Fix last commit.
|
||||
|
||||
2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com>
|
||||
|
||||
* gnus-cache.el (gnus-cache-rename-group): New function.
|
||||
(gnus-cache-delete-group): New function.
|
||||
|
||||
* gnus-agent.el (gnus-agent-rename-group): New function.
|
||||
(gnus-agent-delete-group): New function.
|
||||
(gnus-agent-save-group-info): Use gnus-command-method when
|
||||
`method' parameter is nil. Don't write nil entries into the
|
||||
active file.
|
||||
(gnus-agent-get-group-info): New function.
|
||||
(gnus-agent-get-local): Added optional parameters to avoid calling
|
||||
gnus-group-real-name and gnus-find-method-for-group.
|
||||
(gnus-agent-set-local): Delete stored entry if either min, or max,
|
||||
are nil.
|
||||
(gnus-agent-fetch-session): Reworded error/quit messages. On
|
||||
quit, use gnus-agent-regenerate-group to record existance of any
|
||||
articles fetched to disk before the quit occurred.
|
||||
|
||||
* gnus-int.el (gnus-request-delete-group): Use
|
||||
gnus-cache-delete-group and gnus-agent-delete-group to keep the
|
||||
local disk in sync with the server.
|
||||
(gnus-request-rename-group): Use
|
||||
gnus-cache-rename-group and gnus-agent-rename-group to keep the
|
||||
local disk in sync with the server.
|
||||
|
||||
* gnus-start.el (gnus-get-unread-articles): Cosmetic
|
||||
simplification to logic.
|
||||
|
||||
* gnus-group.el (): (gnus-group-delete-group): No longer update
|
||||
gnus-cache-active-altered as gnus-request-delete-group now keeps
|
||||
the cache in sync.
|
||||
(gnus-group-list-active): Let the agent store a server's active
|
||||
list if currently plugged.
|
||||
|
||||
* gnus-util.el (gnus-rename-file): New function.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* gnus-agent.el (gnus-agent-regenerate-group): Activate the group
|
||||
when the group's active is not available.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to
|
||||
error.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
|
||||
|
||||
* gnus-start.el (gnus-convert-old-newsrc): Only write the
|
||||
conversion message to newsrc-dribble when an actual conversion is
|
||||
performed.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
|
||||
|
||||
* gnus-agent.el (gnus-agent-read-local): Bind
|
||||
nnheader-file-coding-system to gnus-agent-file-coding-system to
|
||||
avoid the implicit assumption that they will always be equal.
|
||||
(gnus-agent-save-local): Bind buffer-file-coding-system, not
|
||||
coding-system-for-write, as the with-temp-file macro first prints
|
||||
to a buffer then saves the buffer.
|
||||
|
||||
2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com>
|
||||
|
||||
* legacy-gnus-agent.el (): New. Provides converters that are only
|
||||
loaded when gnus-convert-old-newsrc needs to call them.
|
||||
|
||||
* gnus-agent.el (gnus-agent-read-agentview): Removed support for
|
||||
old file versions.
|
||||
(gnus-group-prepare-hook): Removed function that converted list
|
||||
form of gnus-agent-expire-days to group properties.
|
||||
|
||||
* gnus-start.el (gnus-convert-old-newsrc): Registered new
|
||||
converters to handle old agent file formats. Added logic for a
|
||||
"backup before upgrading warning".
|
||||
(gnus-convert-mark-converter-prompt): Developers can mark
|
||||
functions as needing (default), or not needing,
|
||||
gnus-convert-old-newsrc's "backup before upgrading warning".
|
||||
(gnus-convert-converter-needs-prompt): Tests whether the user
|
||||
should be protected from potentially irreversable changes by the
|
||||
function.
|
||||
|
||||
2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com>
|
||||
|
||||
* gnus-int.el (gnus-request-accept-article): Inform the agent that
|
||||
articles are being added to a group.
|
||||
(gnus-request-replace-article): Inform the agent that articles
|
||||
need to be uncached as the cached contents are no longer valid.
|
||||
|
||||
* gnus-agent.el (gnus-agent-file-header-cache): Removed.
|
||||
(gnus-agent-possibly-alter-active): Avoid null in numeric
|
||||
comparison.
|
||||
(gnus-agent-set-local): Refuse to save null in local object table.
|
||||
(gnus-agent-regenerate-group): The REREAD parameter can now be a
|
||||
list of articles that will be marked as unread.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
|
||||
|
||||
* gnus-range.el (gnus-sorted-range-intersection): Now accepts
|
||||
single-interval range of the form (min . max). Previously the
|
||||
range had to look like ((min . max)). Likewise, return
|
||||
(min . max) rather than ((min . max)).
|
||||
(gnus-range-map): Use gnus-range-normalize to accept
|
||||
single-interval range.
|
||||
|
||||
* gnus-sum.el (gnus-summary-highlight-line): Articles stored in
|
||||
the cache, but not the agent, now appear with their usual face.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
|
||||
|
||||
* gnus-sum.el (gnus-adjust-marks): Now correctly handles a list of
|
||||
marks consisting of a single range {for example, (3 . 5)} rather
|
||||
than a list of a single range { ((3 . 5)) }.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
|
||||
|
||||
* gnus-sum.el (gnus-adjust-marks): Avoid splicing null INTO the
|
||||
uncompressed list.
|
||||
|
||||
2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
|
||||
|
||||
* gnus-draft.el (gnus-group-send-queue): Pass the group name
|
||||
"nndraft:queue" along to gnus-draft-send. Use
|
||||
gnus-agent-prompt-send-queue.
|
||||
(gnus-draft-send): Rebind gnus-agent-queue-mail to nil when group
|
||||
is "nndraft:queue". Suggested by Gaute Strokkenes
|
||||
<gs234@srcf.ucam.org>
|
||||
|
||||
* gnus-group.el (gnus-group-catchup): Use new
|
||||
gnus-sequence-of-unread-articles, not
|
||||
gnus-list-of-unread-articles, to avoid exhausting memory with huge
|
||||
numbers of articles. Use gnus-range-map to avoid having to
|
||||
uncompress the unread list.
|
||||
(gnus-group-archive-directory,
|
||||
gnus-group-recent-archive-directory): Fixed invalid ange-ftp
|
||||
reference.
|
||||
|
||||
* gnus-range.el (gnus-range-map): Iterate over list or sequence.
|
||||
(gnus-sorted-range-intersection): Intersection of two ranges
|
||||
without requiring that they first be uncompressed.
|
||||
|
||||
* gnus-start.el (gnus-activate-group): Unless blocked by the
|
||||
caller, possibly expand the active range to include both cached
|
||||
and agentized articles.
|
||||
(gnus-convert-old-newsrc): Rewrote in anticipation of having
|
||||
multiple version-dependent converters.
|
||||
(gnus-groups-to-gnus-format): Replaced gnus-agent-save-groups with
|
||||
gnus-agent-save-active.
|
||||
(gnus-save-newsrc-file): Save dirty agent range limits.
|
||||
|
||||
* gnus-sum.el (gnus-select-newgroup): Replaced inline code with
|
||||
gnus-agent-possibly-alter-active.
|
||||
(gnus-adjust-marked-articles): Faster handling of simple lists
|
||||
|
||||
2004-10-18 David Edmondson <dme@dme.org>
|
||||
|
||||
* mm-view.el (mm-w3m-cid-retrieve-1): Don't use recursive call
|
||||
excessively.
|
||||
|
||||
2004-10-18 Reiner Steib <Reiner.Steib@gmx.de>
|
||||
|
||||
* mml.el (mml-preview): Use `pop-to-buffer'.
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -726,6 +726,46 @@ If GROUP is non-nil, also cater to `gnus-cacheable-groups' and
|
|||
(or (not gnus-uncacheable-groups)
|
||||
(not (string-match gnus-uncacheable-groups group)))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun gnus-cache-rename-group (old-group new-group)
|
||||
"Rename OLD-GROUP as NEW-GROUP. Always updates the cache, even when
|
||||
disabled, as the old cache files would corrupt gnus when the cache was
|
||||
next enabled. Depends upon the caller to determine whether group renaming is supported."
|
||||
(let ((old-dir (gnus-cache-file-name old-group ""))
|
||||
(new-dir (gnus-cache-file-name new-group "")))
|
||||
(gnus-rename-file old-dir new-dir t))
|
||||
|
||||
(let ((no-save gnus-cache-active-hashtb))
|
||||
(unless gnus-cache-active-hashtb
|
||||
(gnus-cache-read-active))
|
||||
(let* ((old-group-hash-value (gnus-gethash old-group gnus-cache-active-hashtb))
|
||||
(new-group-hash-value (gnus-gethash new-group gnus-cache-active-hashtb))
|
||||
(delta (or old-group-hash-value new-group-hash-value)))
|
||||
(gnus-sethash new-group old-group-hash-value gnus-cache-active-hashtb)
|
||||
(gnus-sethash old-group nil gnus-cache-active-hashtb)
|
||||
|
||||
(if no-save
|
||||
(setq gnus-cache-active-altered delta)
|
||||
(gnus-cache-write-active delta)))))
|
||||
|
||||
;;;###autoload
|
||||
(defun gnus-cache-delete-group (group)
|
||||
"Delete GROUP. Always updates the cache, even when
|
||||
disabled, as the old cache files would corrupt gnus when the cache was
|
||||
next enabled. Depends upon the caller to determine whether group deletion is supported."
|
||||
(let ((dir (gnus-cache-file-name group "")))
|
||||
(gnus-delete-file dir))
|
||||
|
||||
(let ((no-save gnus-cache-active-hashtb))
|
||||
(unless gnus-cache-active-hashtb
|
||||
(gnus-cache-read-active))
|
||||
(let* ((group-hash-value (gnus-gethash group gnus-cache-active-hashtb)))
|
||||
(gnus-sethash group nil gnus-cache-active-hashtb)
|
||||
|
||||
(if no-save
|
||||
(setq gnus-cache-active-altered group-hash-value)
|
||||
(gnus-cache-write-active group-hash-value)))))
|
||||
|
||||
(provide 'gnus-cache)
|
||||
|
||||
;;; arch-tag: 05a79442-8c58-4e65-bd0a-3cbb1b89a33a
|
||||
|
|
|
@ -132,17 +132,21 @@
|
|||
|
||||
(defun gnus-draft-send (article &optional group interactive)
|
||||
"Send message ARTICLE."
|
||||
(let ((message-syntax-checks (if interactive message-syntax-checks
|
||||
'dont-check-for-anything-just-trust-me))
|
||||
(message-hidden-headers nil)
|
||||
(message-inhibit-body-encoding (or (not group)
|
||||
(equal group "nndraft:queue")
|
||||
message-inhibit-body-encoding))
|
||||
(message-send-hook (and group (not (equal group "nndraft:queue"))
|
||||
message-send-hook))
|
||||
(message-setup-hook (and group (not (equal group "nndraft:queue"))
|
||||
message-setup-hook))
|
||||
type method move-to)
|
||||
(let* ((is-queue (or (not group)
|
||||
(equal group "nndraft:queue")))
|
||||
(message-syntax-checks (if interactive message-syntax-checks
|
||||
'dont-check-for-anything-just-trust-me))
|
||||
(message-hidden-headers nil)
|
||||
(message-inhibit-body-encoding (or is-queue
|
||||
message-inhibit-body-encoding))
|
||||
(message-send-hook (and (not is-queue)
|
||||
message-send-hook))
|
||||
(message-setup-hook (and (not is-queue)
|
||||
message-setup-hook))
|
||||
(gnus-agent-queue-mail (and (not is-queue)
|
||||
gnus-agent-queue-mail))
|
||||
(rfc2047-encode-encoded-words nil)
|
||||
type method move-to)
|
||||
(gnus-draft-setup article (or group "nndraft:queue"))
|
||||
;; We read the meta-information that says how and where
|
||||
;; this message is to be sent.
|
||||
|
@ -196,22 +200,25 @@
|
|||
(defun gnus-group-send-queue ()
|
||||
"Send all sendable articles from the queue group."
|
||||
(interactive)
|
||||
(gnus-activate-group "nndraft:queue")
|
||||
(save-excursion
|
||||
(let* ((articles (nndraft-articles))
|
||||
(unsendable (gnus-uncompress-range
|
||||
(cdr (assq 'unsend
|
||||
(gnus-info-marks
|
||||
(gnus-get-info "nndraft:queue"))))))
|
||||
(gnus-posting-styles nil)
|
||||
(total (length articles))
|
||||
article)
|
||||
(while (setq article (pop articles))
|
||||
(unless (memq article unsendable)
|
||||
(let ((message-sending-message
|
||||
(format "Sending message %d of %d..."
|
||||
(- total (length articles)) total)))
|
||||
(gnus-draft-send article)))))))
|
||||
(when (or gnus-plugged
|
||||
(not gnus-agent-prompt-send-queue)
|
||||
(gnus-y-or-n-p "Gnus is unplugged; really send queue? "))
|
||||
(gnus-activate-group "nndraft:queue")
|
||||
(save-excursion
|
||||
(let* ((articles (nndraft-articles))
|
||||
(unsendable (gnus-uncompress-range
|
||||
(cdr (assq 'unsend
|
||||
(gnus-info-marks
|
||||
(gnus-get-info "nndraft:queue"))))))
|
||||
(gnus-posting-styles nil)
|
||||
(total (length articles))
|
||||
article)
|
||||
(while (setq article (pop articles))
|
||||
(unless (memq article unsendable)
|
||||
(let ((message-sending-message
|
||||
(format "Sending message %d of %d..."
|
||||
(- total (length articles)) total)))
|
||||
(gnus-draft-send article))))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun gnus-draft-reminder ()
|
||||
|
@ -265,12 +272,13 @@
|
|||
`(lambda (arg)
|
||||
(gnus-post-method arg ,(car ga))))
|
||||
(unless (equal (cadr ga) "")
|
||||
(message-add-action
|
||||
`(progn
|
||||
(gnus-add-mark ,(car ga) 'replied ,(cadr ga))
|
||||
(gnus-request-set-mark ,(car ga) (list (list (list ,(cadr ga))
|
||||
'add '(reply)))))
|
||||
'send))))))
|
||||
(dolist (article (cdr ga))
|
||||
(message-add-action
|
||||
`(progn
|
||||
(gnus-add-mark ,(car ga) 'replied ,article)
|
||||
(gnus-request-set-mark ,(car ga) (list (list (list ,article)
|
||||
'add '(reply)))))
|
||||
'send)))))))
|
||||
|
||||
(defun gnus-draft-article-sendable-p (article)
|
||||
"Say whether ARTICLE is sendable."
|
||||
|
|
|
@ -44,13 +44,13 @@
|
|||
(eval-when-compile (require 'mm-url))
|
||||
|
||||
(defcustom gnus-group-archive-directory
|
||||
"*ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list/"
|
||||
"/ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list/"
|
||||
"*The address of the (ding) archives."
|
||||
:group 'gnus-group-foreign
|
||||
:type 'directory)
|
||||
|
||||
(defcustom gnus-group-recent-archive-directory
|
||||
"*ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list-recent/"
|
||||
"/ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list-recent/"
|
||||
"*The address of the most recent (ding) articles."
|
||||
:group 'gnus-group-foreign
|
||||
:type 'directory)
|
||||
|
@ -2283,8 +2283,6 @@ ADDRESS."
|
|||
(lambda (group)
|
||||
(gnus-group-delete-group group nil t))))))
|
||||
|
||||
(defvar gnus-cache-active-altered)
|
||||
|
||||
(defun gnus-group-delete-group (group &optional force no-prompt)
|
||||
"Delete the current group. Only meaningful with editable groups.
|
||||
If FORCE (the prefix) is non-nil, all the articles in the group will
|
||||
|
@ -2314,10 +2312,6 @@ be removed from the server, even when it's empty."
|
|||
(gnus-group-goto-group group)
|
||||
(gnus-group-kill-group 1 t)
|
||||
(gnus-sethash group nil gnus-active-hashtb)
|
||||
(if (boundp 'gnus-cache-active-hashtb)
|
||||
(when gnus-cache-active-hashtb
|
||||
(gnus-sethash group nil gnus-cache-active-hashtb)
|
||||
(setq gnus-cache-active-altered t)))
|
||||
t))
|
||||
(gnus-group-position-point)))
|
||||
|
||||
|
@ -3133,7 +3127,7 @@ or nil if no action could be taken."
|
|||
(let* ((entry (gnus-gethash group gnus-newsrc-hashtb))
|
||||
(num (car entry))
|
||||
(marks (nth 3 (nth 2 entry)))
|
||||
(unread (gnus-list-of-unread-articles group)))
|
||||
(unread (gnus-sequence-of-unread-articles group)))
|
||||
;; Remove entries for this group.
|
||||
(nnmail-purge-split-history (gnus-group-real-name group))
|
||||
;; Do the updating only if the newsgroup isn't killed.
|
||||
|
@ -3146,16 +3140,17 @@ or nil if no action could be taken."
|
|||
'del '(tick))
|
||||
(list (cdr (assq 'dormant marks))
|
||||
'del '(dormant))))
|
||||
(setq unread (gnus-uncompress-range
|
||||
(gnus-range-add (gnus-range-add
|
||||
unread (cdr (assq 'dormant marks)))
|
||||
(cdr (assq 'tick marks)))))
|
||||
(setq unread (gnus-range-add (gnus-range-add
|
||||
unread (cdr (assq 'dormant marks)))
|
||||
(cdr (assq 'tick marks))))
|
||||
(gnus-add-marked-articles group 'tick nil nil 'force)
|
||||
(gnus-add-marked-articles group 'dormant nil nil 'force))
|
||||
;; Do auto-expirable marks if that's required.
|
||||
(when (gnus-group-auto-expirable-p group)
|
||||
(gnus-add-marked-articles group 'expire unread)
|
||||
(gnus-request-set-mark group (list (list unread 'add '(expire)))))
|
||||
(gnus-range-map (lambda (article)
|
||||
(gnus-add-marked-articles group 'expire (list article))
|
||||
(gnus-request-set-mark group (list (list (list article) 'add '(expire)))))
|
||||
unread))
|
||||
(let ((gnus-newsgroup-name group))
|
||||
(gnus-run-hooks 'gnus-group-catchup-group-hook))
|
||||
num)))
|
||||
|
@ -3517,7 +3512,7 @@ entail asking the server for the groups."
|
|||
;; First we make sure that we have really read the active file.
|
||||
(unless (gnus-read-active-file-p)
|
||||
(let ((gnus-read-active-file t)
|
||||
(gnus-agent nil)) ; Trick the agent into ignoring the active file.
|
||||
(gnus-agent gnus-plugged)); If we're actually plugged, store the active file in the agent.
|
||||
(gnus-read-active-file)))
|
||||
;; Find all groups and sort them.
|
||||
(let ((groups
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
(require 'gnus-range)
|
||||
|
||||
(autoload 'gnus-agent-expire "gnus-agent")
|
||||
(autoload 'gnus-agent-regenerate-group "gnus-agent")
|
||||
(autoload 'gnus-agent-read-servers-validate-native "gnus-agent")
|
||||
|
||||
(defcustom gnus-open-server-hook nil
|
||||
|
@ -176,7 +177,7 @@ If it is down, start it up (again)."
|
|||
(setq method (gnus-server-to-method method)))
|
||||
;; Check cache of constructed names.
|
||||
(let* ((method-sym (if gnus-agent
|
||||
(gnus-agent-get-function method)
|
||||
(inline (gnus-agent-get-function method))
|
||||
(car method)))
|
||||
(method-fns (get method-sym 'gnus-method-functions))
|
||||
(func (let ((method-fnlist-elt (assq function method-fns)))
|
||||
|
@ -570,7 +571,7 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
|
|||
(nth 1 gnus-command-method) accept-function last)))
|
||||
(when (and result gnus-agent
|
||||
(gnus-agent-method-p gnus-command-method))
|
||||
(gnus-agent-expire (list article) group 'force))
|
||||
(gnus-agent-unfetch-articles group (list article)))
|
||||
result))
|
||||
|
||||
(defun gnus-request-accept-article (group &optional gnus-command-method last
|
||||
|
@ -580,7 +581,8 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
|
|||
(setq gnus-command-method (gnus-server-to-method gnus-command-method)))
|
||||
(when (and (not gnus-command-method)
|
||||
(stringp group))
|
||||
(setq gnus-command-method (gnus-group-name-to-method group)))
|
||||
(setq gnus-command-method (or (gnus-find-method-for-group group)
|
||||
(gnus-group-name-to-method group))))
|
||||
(goto-char (point-max))
|
||||
(unless (bolp)
|
||||
(insert "\n"))
|
||||
|
@ -592,12 +594,17 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
|
|||
(let ((mail-parse-charset message-default-charset))
|
||||
(mail-encode-encoded-word-buffer)))
|
||||
(message-encode-message-body)))
|
||||
(let ((gnus-command-method (or gnus-command-method
|
||||
(gnus-find-method-for-group group))))
|
||||
(funcall (gnus-get-function gnus-command-method 'request-accept-article)
|
||||
(if (stringp group) (gnus-group-real-name group) group)
|
||||
(cadr gnus-command-method)
|
||||
last)))
|
||||
(let ((gnus-command-method (or gnus-command-method
|
||||
(gnus-find-method-for-group group)))
|
||||
(result
|
||||
(funcall
|
||||
(gnus-get-function gnus-command-method 'request-accept-article)
|
||||
(if (stringp group) (gnus-group-real-name group) group)
|
||||
(cadr gnus-command-method)
|
||||
last)))
|
||||
(when (and gnus-agent (gnus-agent-method-p gnus-command-method))
|
||||
(gnus-agent-regenerate-group group (list (cdr result))))
|
||||
result))
|
||||
|
||||
(defun gnus-request-replace-article (article group buffer &optional no-encode)
|
||||
(unless no-encode
|
||||
|
@ -608,9 +615,12 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
|
|||
(let ((mail-parse-charset message-default-charset))
|
||||
(mail-encode-encoded-word-buffer)))
|
||||
(message-encode-message-body)))
|
||||
(let ((func (car (gnus-group-name-to-method group))))
|
||||
(funcall (intern (format "%s-request-replace-article" func))
|
||||
article (gnus-group-real-name group) buffer)))
|
||||
(let* ((func (car (gnus-group-name-to-method group)))
|
||||
(result (funcall (intern (format "%s-request-replace-article" func))
|
||||
article (gnus-group-real-name group) buffer)))
|
||||
(when (and gnus-agent (gnus-agent-method-p gnus-command-method))
|
||||
(gnus-agent-regenerate-group group (list article)))
|
||||
result))
|
||||
|
||||
(defun gnus-request-associate-buffer (group)
|
||||
(let ((gnus-command-method (gnus-find-method-for-group group)))
|
||||
|
@ -633,15 +643,25 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
|
|||
(gnus-group-real-name group) (nth 1 gnus-command-method) args)))
|
||||
|
||||
(defun gnus-request-delete-group (group &optional force)
|
||||
(let ((gnus-command-method (gnus-find-method-for-group group)))
|
||||
(funcall (gnus-get-function gnus-command-method 'request-delete-group)
|
||||
(gnus-group-real-name group) force (nth 1 gnus-command-method))))
|
||||
(let* ((gnus-command-method (gnus-find-method-for-group group))
|
||||
(result
|
||||
(funcall (gnus-get-function gnus-command-method 'request-delete-group)
|
||||
(gnus-group-real-name group) force (nth 1 gnus-command-method))))
|
||||
(when result
|
||||
(gnus-cache-delete-group group)
|
||||
(gnus-agent-delete-group group))
|
||||
result))
|
||||
|
||||
(defun gnus-request-rename-group (group new-name)
|
||||
(let ((gnus-command-method (gnus-find-method-for-group group)))
|
||||
(funcall (gnus-get-function gnus-command-method 'request-rename-group)
|
||||
(gnus-group-real-name group)
|
||||
(gnus-group-real-name new-name) (nth 1 gnus-command-method))))
|
||||
(let* ((gnus-command-method (gnus-find-method-for-group group))
|
||||
(result
|
||||
(funcall (gnus-get-function gnus-command-method 'request-rename-group)
|
||||
(gnus-group-real-name group)
|
||||
(gnus-group-real-name new-name) (nth 1 gnus-command-method))))
|
||||
(when result
|
||||
(gnus-cache-rename-group group new-name)
|
||||
(gnus-agent-rename-group group new-name))
|
||||
result))
|
||||
|
||||
(defun gnus-close-backends ()
|
||||
;; Send a close request to all backends that support such a request.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;;; gnus-range.el --- range and sequence functions for Gnus
|
||||
|
||||
;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
|
||||
;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004
|
||||
;; Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
@ -183,6 +183,58 @@ LIST1 and LIST2 have to be sorted over <."
|
|||
(setq list2 (cdr list2)))))
|
||||
(nreverse out)))
|
||||
|
||||
;;;###autoload
|
||||
(defun gnus-sorted-range-intersection (range1 range2)
|
||||
"Return intersection of RANGE1 and RANGE2.
|
||||
RANGE1 and RANGE2 have to be sorted over <."
|
||||
(let* (out
|
||||
(min1 (car range1))
|
||||
(max1 (if (numberp min1)
|
||||
(if (numberp (cdr range1))
|
||||
(prog1 (cdr range1)
|
||||
(setq range1 nil)) min1)
|
||||
(prog1 (cdr min1)
|
||||
(setq min1 (car min1)))))
|
||||
(min2 (car range2))
|
||||
(max2 (if (numberp min2)
|
||||
(if (numberp (cdr range2))
|
||||
(prog1 (cdr range2)
|
||||
(setq range2 nil)) min2)
|
||||
(prog1 (cdr min2)
|
||||
(setq min2 (car min2))))))
|
||||
(setq range1 (cdr range1)
|
||||
range2 (cdr range2))
|
||||
(while (and min1 min2)
|
||||
(cond ((< max1 min2) ; range1 preceeds range2
|
||||
(setq range1 (cdr range1)
|
||||
min1 nil))
|
||||
((< max2 min1) ; range2 preceeds range1
|
||||
(setq range2 (cdr range2)
|
||||
min2 nil))
|
||||
(t ; some sort of overlap is occurring
|
||||
(let ((min (max min1 min2))
|
||||
(max (min max1 max2)))
|
||||
(setq out (if (= min max)
|
||||
(cons min out)
|
||||
(cons (cons min max) out))))
|
||||
(if (< max1 max2) ; range1 ends before range2
|
||||
(setq min1 nil) ; incr range1
|
||||
(setq min2 nil)))) ; incr range2
|
||||
(unless min1
|
||||
(setq min1 (car range1)
|
||||
max1 (if (numberp min1) min1 (prog1 (cdr min1) (setq min1 (car min1))))
|
||||
range1 (cdr range1)))
|
||||
(unless min2
|
||||
(setq min2 (car range2)
|
||||
max2 (if (numberp min2) min2 (prog1 (cdr min2) (setq min2 (car min2))))
|
||||
range2 (cdr range2))))
|
||||
(cond ((cdr out)
|
||||
(nreverse out))
|
||||
((numberp (car out))
|
||||
out)
|
||||
(t
|
||||
(car out)))))
|
||||
|
||||
;;;###autoload
|
||||
(defalias 'gnus-set-sorted-intersection 'gnus-sorted-nintersection)
|
||||
|
||||
|
@ -589,6 +641,19 @@ LIST is a sorted list."
|
|||
(setcdr prev (cons num list)))
|
||||
(cdr top)))
|
||||
|
||||
(defun gnus-range-map (func range)
|
||||
"Apply FUNC to each value contained by RANGE."
|
||||
(setq range (gnus-range-normalize range))
|
||||
(while range
|
||||
(let ((span (pop range)))
|
||||
(if (numberp span)
|
||||
(funcall func span)
|
||||
(let ((first (car span))
|
||||
(last (cdr span)))
|
||||
(while (<= first last)
|
||||
(funcall func first)
|
||||
(setq first (1+ first))))))))
|
||||
|
||||
(provide 'gnus-range)
|
||||
|
||||
;;; arch-tag: 4780bdd8-5a15-4aff-be28-18727895b6ad
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
;;; gnus-start.el --- startup functions for Gnus
|
||||
;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
||||
;; Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
@ -34,8 +34,15 @@
|
|||
(require 'gnus-util)
|
||||
(autoload 'message-make-date "message")
|
||||
(autoload 'gnus-agent-read-servers-validate "gnus-agent")
|
||||
(autoload 'gnus-agent-save-local "gnus-agent")
|
||||
(autoload 'gnus-agent-possibly-alter-active "gnus-agent")
|
||||
(eval-when-compile (require 'cl))
|
||||
|
||||
(eval-when-compile
|
||||
(require 'cl)
|
||||
|
||||
(defvar gnus-agent-covered-methods nil)
|
||||
(defvar gnus-agent-file-loading-local nil)
|
||||
(defvar gnus-agent-file-loading-cache nil))
|
||||
|
||||
(defcustom gnus-startup-file (nnheader-concat gnus-home-directory ".newsrc")
|
||||
"Your `.newsrc' file.
|
||||
|
@ -663,6 +670,8 @@ the first newsgroup."
|
|||
(setq gnus-list-of-killed-groups nil
|
||||
gnus-have-read-active-file nil
|
||||
gnus-agent-covered-methods nil
|
||||
gnus-agent-file-loading-local nil
|
||||
gnus-agent-file-loading-cache nil
|
||||
gnus-server-method-cache nil
|
||||
gnus-newsrc-alist nil
|
||||
gnus-newsrc-hashtb nil
|
||||
|
@ -1511,12 +1520,21 @@ If SCAN, request a scan of that group as well."
|
|||
(gnus-active group))
|
||||
(gnus-active group)
|
||||
|
||||
;; If a cache is present, we may have to alter the active info.
|
||||
(when gnus-use-cache
|
||||
(inline (gnus-cache-possibly-alter-active
|
||||
group active)))
|
||||
|
||||
;; If the agent is enabled, we may have to alter the active info.
|
||||
(when gnus-agent
|
||||
(gnus-agent-possibly-alter-active group active))
|
||||
|
||||
(gnus-set-active group active)
|
||||
;; Return the new active info.
|
||||
active)))))
|
||||
|
||||
(defun gnus-get-unread-articles-in-group (info active &optional update)
|
||||
(when active
|
||||
(when (and info active)
|
||||
;; Allow the backend to update the info in the group.
|
||||
(when (and update
|
||||
(gnus-request-update-info
|
||||
|
@ -1526,6 +1544,10 @@ If SCAN, request a scan of that group as well."
|
|||
|
||||
(let* ((range (gnus-info-read info))
|
||||
(num 0))
|
||||
|
||||
;; These checks are present in gnus-activate-group but skipped
|
||||
;; due to setting dont-check in the preceeding call.
|
||||
|
||||
;; If a cache is present, we may have to alter the active info.
|
||||
(when (and gnus-use-cache info)
|
||||
(inline (gnus-cache-possibly-alter-active
|
||||
|
@ -1533,8 +1555,7 @@ If SCAN, request a scan of that group as well."
|
|||
|
||||
;; If the agent is enabled, we may have to alter the active info.
|
||||
(when (and gnus-agent info)
|
||||
(gnus-agent-possibly-alter-active
|
||||
(gnus-info-group info) active))
|
||||
(gnus-agent-possibly-alter-active (gnus-info-group info) active info))
|
||||
|
||||
;; Modify the list of read articles according to what articles
|
||||
;; are available; then tally the unread articles and add the
|
||||
|
@ -1630,7 +1651,7 @@ If SCAN, request a scan of that group as well."
|
|||
|
||||
(while newsrc
|
||||
(setq active (gnus-active (setq group (gnus-info-group
|
||||
(setq info (pop newsrc))))))
|
||||
(setq info (pop newsrc))))))
|
||||
|
||||
;; Check newsgroups. If the user doesn't want to check them, or
|
||||
;; they can't be checked (for instance, if the news server can't
|
||||
|
@ -1653,61 +1674,60 @@ If SCAN, request a scan of that group as well."
|
|||
(when (and method
|
||||
(not (setq method-type (cdr (assoc method type-cache)))))
|
||||
(setq method-type
|
||||
(cond
|
||||
((gnus-secondary-method-p method)
|
||||
'secondary)
|
||||
((inline (gnus-server-equal gnus-select-method method))
|
||||
'primary)
|
||||
(t
|
||||
'foreign)))
|
||||
(cond
|
||||
((gnus-secondary-method-p method)
|
||||
'secondary)
|
||||
((inline (gnus-server-equal gnus-select-method method))
|
||||
'primary)
|
||||
(t
|
||||
'foreign)))
|
||||
(push (cons method method-type) type-cache))
|
||||
(if (and method
|
||||
(eq method-type 'foreign))
|
||||
;; These groups are foreign. Check the level.
|
||||
(when (and (<= (gnus-info-level info) foreign-level)
|
||||
(setq active (gnus-activate-group group 'scan)))
|
||||
;; Let the Gnus agent save the active file.
|
||||
(when (and gnus-agent active (gnus-online method))
|
||||
(gnus-agent-save-group-info
|
||||
method (gnus-group-real-name group) active))
|
||||
(unless (inline (gnus-virtual-group-p group))
|
||||
(inline (gnus-close-group group)))
|
||||
(when (fboundp (intern (concat (symbol-name (car method))
|
||||
"-request-update-info")))
|
||||
(inline (gnus-request-update-info info method))))
|
||||
;; These groups are native or secondary.
|
||||
(cond
|
||||
;; We don't want these groups.
|
||||
((> (gnus-info-level info) level)
|
||||
(setq active 'ignore))
|
||||
;; Activate groups.
|
||||
((not gnus-read-active-file)
|
||||
(if (gnus-check-backend-function 'retrieve-groups group)
|
||||
;; if server support gnus-retrieve-groups we push
|
||||
;; the group onto retrievegroups for later checking
|
||||
(if (assoc method retrieve-groups)
|
||||
(setcdr (assoc method retrieve-groups)
|
||||
(cons group (cdr (assoc method retrieve-groups))))
|
||||
(push (list method group) retrieve-groups))
|
||||
;; hack: `nnmail-get-new-mail' changes the mail-source depending
|
||||
;; on the group, so we must perform a scan for every group
|
||||
;; if the users has any directory mail sources.
|
||||
;; hack: if `nnmail-scan-directory-mail-source-once' is non-nil,
|
||||
;; for it scan all spool files even when the groups are
|
||||
;; not required.
|
||||
(if (and
|
||||
(or nnmail-scan-directory-mail-source-once
|
||||
(null (assq 'directory
|
||||
(or mail-sources
|
||||
(if (listp nnmail-spool-file)
|
||||
nnmail-spool-file
|
||||
(list nnmail-spool-file))))))
|
||||
(member method scanned-methods))
|
||||
(setq active (gnus-activate-group group))
|
||||
(setq active (gnus-activate-group group 'scan))
|
||||
(push method scanned-methods))
|
||||
(when active
|
||||
(gnus-close-group group))))))
|
||||
|
||||
(cond ((and method (eq method-type 'foreign))
|
||||
;; These groups are foreign. Check the level.
|
||||
(when (and (<= (gnus-info-level info) foreign-level)
|
||||
(setq active (gnus-activate-group group 'scan)))
|
||||
;; Let the Gnus agent save the active file.
|
||||
(when (and gnus-agent active (gnus-online method))
|
||||
(gnus-agent-save-group-info
|
||||
method (gnus-group-real-name group) active))
|
||||
(unless (inline (gnus-virtual-group-p group))
|
||||
(inline (gnus-close-group group)))
|
||||
(when (fboundp (intern (concat (symbol-name (car method))
|
||||
"-request-update-info")))
|
||||
(inline (gnus-request-update-info info method)))))
|
||||
;; These groups are native or secondary.
|
||||
((> (gnus-info-level info) level)
|
||||
;; We don't want these groups.
|
||||
(setq active 'ignore))
|
||||
;; Activate groups.
|
||||
((not gnus-read-active-file)
|
||||
(if (gnus-check-backend-function 'retrieve-groups group)
|
||||
;; if server support gnus-retrieve-groups we push
|
||||
;; the group onto retrievegroups for later checking
|
||||
(if (assoc method retrieve-groups)
|
||||
(setcdr (assoc method retrieve-groups)
|
||||
(cons group (cdr (assoc method retrieve-groups))))
|
||||
(push (list method group) retrieve-groups))
|
||||
;; hack: `nnmail-get-new-mail' changes the mail-source depending
|
||||
;; on the group, so we must perform a scan for every group
|
||||
;; if the users has any directory mail sources.
|
||||
;; hack: if `nnmail-scan-directory-mail-source-once' is non-nil,
|
||||
;; for it scan all spool files even when the groups are
|
||||
;; not required.
|
||||
(if (and
|
||||
(or nnmail-scan-directory-mail-source-once
|
||||
(null (assq 'directory
|
||||
(or mail-sources
|
||||
(if (listp nnmail-spool-file)
|
||||
nnmail-spool-file
|
||||
(list nnmail-spool-file))))))
|
||||
(member method scanned-methods))
|
||||
(setq active (gnus-activate-group group))
|
||||
(setq active (gnus-activate-group group 'scan))
|
||||
(push method scanned-methods))
|
||||
(when active
|
||||
(gnus-close-group group)))))
|
||||
|
||||
;; Get the number of unread articles in the group.
|
||||
(cond
|
||||
|
@ -1734,8 +1754,8 @@ If SCAN, request a scan of that group as well."
|
|||
(when (gnus-check-backend-function 'request-scan (car method))
|
||||
(gnus-request-scan nil method))
|
||||
(gnus-read-active-file-2
|
||||
(mapcar (lambda (group) (gnus-group-real-name group)) groups)
|
||||
method)
|
||||
(mapcar (lambda (group) (gnus-group-real-name group)) groups)
|
||||
method)
|
||||
(dolist (group groups)
|
||||
(cond
|
||||
((setq active (gnus-active (gnus-info-group
|
||||
|
@ -1980,10 +2000,10 @@ If SCAN, request a scan of that group as well."
|
|||
(while (setq info (pop newsrc))
|
||||
(when (inline
|
||||
(gnus-server-equal
|
||||
(inline
|
||||
(gnus-find-method-for-group
|
||||
(gnus-info-group info) info))
|
||||
gmethod))
|
||||
(inline
|
||||
(gnus-find-method-for-group
|
||||
(gnus-info-group info) info))
|
||||
gmethod))
|
||||
(push (gnus-group-real-name (gnus-info-group info))
|
||||
groups)))
|
||||
(gnus-read-active-file-2 groups method)))
|
||||
|
@ -2127,7 +2147,7 @@ If SCAN, request a scan of that group as well."
|
|||
(gnus-online method)
|
||||
(gnus-agent-method-p method))
|
||||
(progn
|
||||
(gnus-agent-save-groups method)
|
||||
(gnus-agent-save-active method)
|
||||
(gnus-active-to-gnus-format method hashtb nil real-active))
|
||||
|
||||
(goto-char (point-min))
|
||||
|
@ -2203,17 +2223,93 @@ If FORCE is non-nil, the .newsrc file is read."
|
|||
(gnus-convert-old-newsrc))))
|
||||
|
||||
(defun gnus-convert-old-newsrc ()
|
||||
"Convert old newsrc into the new format, if needed."
|
||||
"Convert old newsrc formats into the current format, if needed."
|
||||
(let ((fcv (and gnus-newsrc-file-version
|
||||
(gnus-continuum-version gnus-newsrc-file-version))))
|
||||
(cond
|
||||
;; No .newsrc.eld file was loaded.
|
||||
((null fcv) nil)
|
||||
;; Gnus 5 .newsrc.eld was loaded.
|
||||
((< fcv (gnus-continuum-version "September Gnus v0.1"))
|
||||
(gnus-convert-old-ticks)))))
|
||||
(when fcv
|
||||
;; A newsrc file was loaded.
|
||||
(let (prompt-displayed
|
||||
(converters
|
||||
(sort
|
||||
(mapcar (lambda (date-func)
|
||||
(cons (gnus-continuum-version (car date-func))
|
||||
date-func))
|
||||
;; This is a list of converters that must be run
|
||||
;; to bring the newsrc file up to the current
|
||||
;; version. If you create an incompatibility
|
||||
;; with older versions, you should create an
|
||||
;; entry here. The entry should consist of the
|
||||
;; current gnus version (hardcoded so that it
|
||||
;; doesn't change with each release) and the
|
||||
;; function that must be applied to convert the
|
||||
;; previous version into the current version.
|
||||
'(("September Gnus v0.1" nil
|
||||
gnus-convert-old-ticks)
|
||||
("Oort Gnus v0.08" "legacy-gnus-agent"
|
||||
gnus-agent-convert-to-compressed-agentview)
|
||||
("No Gnus v0.2" "legacy-gnus-agent"
|
||||
gnus-agent-unlist-expire-days)
|
||||
("No Gnus v0.2" "legacy-gnus-agent"
|
||||
gnus-agent-unhook-expire-days)))
|
||||
#'car-less-than-car)))
|
||||
;; Skip converters older than the file version
|
||||
(while (and converters (>= fcv (caar converters)))
|
||||
(pop converters))
|
||||
|
||||
(defun gnus-convert-old-ticks ()
|
||||
;; Perform converters to bring older version up to date.
|
||||
(when (and converters (< fcv (caar converters)))
|
||||
(while (and converters (< fcv (caar converters)))
|
||||
(let* ((converter-spec (pop converters))
|
||||
(convert-to (nth 1 converter-spec))
|
||||
(load-from (nth 2 converter-spec))
|
||||
(func (nth 3 converter-spec)))
|
||||
(when (and load-from
|
||||
(not (fboundp func)))
|
||||
(load load-from t))
|
||||
|
||||
(or prompt-displayed
|
||||
(not (gnus-convert-converter-needs-prompt func))
|
||||
(while (let (c
|
||||
(cursor-in-echo-area t)
|
||||
(echo-keystrokes 0))
|
||||
(message "Convert gnus from version '%s' to '%s'? (n/y/?)"
|
||||
gnus-newsrc-file-version gnus-version)
|
||||
(setq c (read-char-exclusive))
|
||||
|
||||
(cond ((or (eq c ?n) (eq c ?N))
|
||||
(error "Can not start gnus without converting"))
|
||||
((or (eq c ?y) (eq c ?Y))
|
||||
(setq prompt-displayed t)
|
||||
nil)
|
||||
((eq c ?\?)
|
||||
(message "This conversion is irreversible. \
|
||||
To be safe, you should backup your files before proceeding.")
|
||||
(sit-for 5)
|
||||
t)
|
||||
(t
|
||||
(gnus-message 3 "Ignoring unexpected input")
|
||||
(sit-for 3)
|
||||
t)))))
|
||||
|
||||
(funcall func convert-to)))
|
||||
(gnus-dribble-enter
|
||||
(format ";Converted gnus from version '%s' to '%s'."
|
||||
gnus-newsrc-file-version gnus-version)))))))
|
||||
|
||||
(defun gnus-convert-mark-converter-prompt (converter no-prompt)
|
||||
"Indicate whether CONVERTER requires gnus-convert-old-newsrc to
|
||||
display the conversion prompt. NO-PROMPT may be nil (prompt),
|
||||
t (no prompt), or any form that can be called as a function.
|
||||
The form should return either t or nil."
|
||||
(put converter 'gnus-convert-no-prompt no-prompt))
|
||||
|
||||
(defun gnus-convert-converter-needs-prompt (converter)
|
||||
(let ((no-prompt (get converter 'gnus-convert-no-prompt)))
|
||||
(not (if (memq no-prompt '(t nil))
|
||||
no-prompt
|
||||
(funcall no-prompt)))))
|
||||
|
||||
(defun gnus-convert-old-ticks (converting-to)
|
||||
(let ((newsrc (cdr gnus-newsrc-alist))
|
||||
marks info dormant ticked)
|
||||
(while (setq info (pop newsrc))
|
||||
|
@ -2593,6 +2689,10 @@ If FORCE is non-nil, the .newsrc file is read."
|
|||
;; from the variable gnus-newsrc-alist.
|
||||
(when (and (or gnus-newsrc-alist gnus-killed-list)
|
||||
gnus-current-startup-file)
|
||||
;; Save agent range limits for the currently active method.
|
||||
(when gnus-agent
|
||||
(gnus-agent-save-local force))
|
||||
|
||||
(save-excursion
|
||||
(if (and (or gnus-use-dribble-file gnus-slave)
|
||||
(not force)
|
||||
|
@ -2610,6 +2710,7 @@ If FORCE is non-nil, the .newsrc file is read."
|
|||
(gnus-message 8 "Saving %s..." gnus-current-startup-file)
|
||||
(gnus-gnus-to-newsrc-format)
|
||||
(gnus-message 8 "Saving %s...done" gnus-current-startup-file))
|
||||
|
||||
;; Save .newsrc.eld.
|
||||
(set-buffer (gnus-get-buffer-create " *Gnus-newsrc*"))
|
||||
(make-local-variable 'version-control)
|
||||
|
|
|
@ -3234,28 +3234,34 @@ buffer that was in action when the last article was fetched."
|
|||
(save-excursion
|
||||
(gnus-set-work-buffer)
|
||||
(let ((gnus-summary-line-format-spec spec)
|
||||
(gnus-newsgroup-downloadable '(0)))
|
||||
(gnus-newsgroup-downloadable '(0))
|
||||
marks)
|
||||
(insert ?\200 "\200" ?\201 "\201" ?\202 "\202" ?\203 "\203")
|
||||
(while (not (bobp))
|
||||
(push (buffer-substring (1- (point)) (point)) marks)
|
||||
(backward-char))
|
||||
(erase-buffer)
|
||||
(gnus-summary-insert-line
|
||||
[0 "" "" "05 Apr 2001 23:33:09 +0400" "" "" 0 0 "" nil]
|
||||
0 nil t 128 t nil "" nil 1)
|
||||
(goto-char (point-min))
|
||||
(setq pos (list (cons 'unread
|
||||
(and (search-forward
|
||||
(mm-string-as-multibyte "\200") nil t)
|
||||
(and (or (search-forward (nth 0 marks) nil t)
|
||||
(search-forward (nth 1 marks) nil t))
|
||||
(- (point) (point-min) 1)))))
|
||||
(goto-char (point-min))
|
||||
(push (cons 'replied (and (search-forward
|
||||
(mm-string-as-multibyte "\201") nil t)
|
||||
(push (cons 'replied (and (or (search-forward (nth 2 marks) nil t)
|
||||
(search-forward (nth 3 marks) nil t))
|
||||
(- (point) (point-min) 1)))
|
||||
pos)
|
||||
(goto-char (point-min))
|
||||
(push (cons 'score (and (search-forward
|
||||
(mm-string-as-multibyte "\202") nil t)
|
||||
(push (cons 'score (and (or (search-forward (nth 4 marks) nil t)
|
||||
(search-forward (nth 5 marks) nil t))
|
||||
(- (point) (point-min) 1)))
|
||||
pos)
|
||||
(goto-char (point-min))
|
||||
(push (cons 'download (and (search-forward
|
||||
(mm-string-as-multibyte "\203") nil t)
|
||||
(push (cons 'download (and (or (search-forward (nth 6 marks) nil t)
|
||||
(search-forward (nth 7 marks) nil t))
|
||||
(- (point) (point-min) 1)))
|
||||
pos)))
|
||||
(setq gnus-summary-mark-positions pos))))
|
||||
|
@ -5070,17 +5076,8 @@ If SELECT-ARTICLES, only select those articles from GROUP."
|
|||
group (gnus-status-message group)))
|
||||
|
||||
(when gnus-agent
|
||||
;; The agent may be storing articles that are no longer in the
|
||||
;; server's active range. If that is the case, the active range
|
||||
;; needs to be expanded such that the agent's articles can be
|
||||
;; included in the summary.
|
||||
(let* ((gnus-command-method (gnus-find-method-for-group group))
|
||||
(alist (gnus-agent-load-alist group))
|
||||
(active (gnus-active group)))
|
||||
(if (and (car alist)
|
||||
(< (caar alist) (car active)))
|
||||
(gnus-set-active group (cons (caar alist) (cdr active)))))
|
||||
|
||||
(gnus-agent-possibly-alter-active group (gnus-active group) info)
|
||||
|
||||
(setq gnus-summary-use-undownloaded-faces
|
||||
(gnus-agent-find-parameter
|
||||
group
|
||||
|
@ -5409,7 +5406,8 @@ If SELECT-ARTICLES, only select those articles from GROUP."
|
|||
(min (car active))
|
||||
(max (cdr active))
|
||||
(types gnus-article-mark-lists)
|
||||
marks var articles article mark mark-type)
|
||||
marks var articles article mark mark-type
|
||||
bgn end)
|
||||
|
||||
(dolist (marks marked-lists)
|
||||
(setq mark (car marks)
|
||||
|
@ -5419,13 +5417,30 @@ If SELECT-ARTICLES, only select those articles from GROUP."
|
|||
;; We set the variable according to the type of the marks list,
|
||||
;; and then adjust the marks to a subset of the active articles.
|
||||
(cond
|
||||
;; Adjust "simple" lists.
|
||||
;; Adjust "simple" lists - compressed yet unsorted
|
||||
((eq mark-type 'list)
|
||||
(set var (setq articles (gnus-uncompress-range (cdr marks))))
|
||||
(when (memq mark '(tick dormant expire reply save))
|
||||
(while articles
|
||||
(when (or (< (setq article (pop articles)) min) (> article max))
|
||||
(set var (delq article (symbol-value var)))))))
|
||||
;; Simultaneously uncompress and clip to active range
|
||||
;; See gnus-uncompress-range for a description of possible marks
|
||||
(let (l lh)
|
||||
(if (not (cadr marks))
|
||||
(set var nil)
|
||||
(setq articles (if (numberp (cddr marks))
|
||||
(list (cdr marks))
|
||||
(cdr marks))
|
||||
lh (cons nil nil)
|
||||
l lh)
|
||||
|
||||
(while (setq article (pop articles))
|
||||
(cond ((consp article)
|
||||
(setq bgn (max (car article) min)
|
||||
end (min (cdr article) max))
|
||||
(while (<= bgn end)
|
||||
(setq l (setcdr l (cons bgn nil))
|
||||
bgn (1+ bgn))))
|
||||
((and (<= min article)
|
||||
(>= max article))
|
||||
(setq l (setcdr l (cons article nil))))))
|
||||
(set var (cdr lh)))))
|
||||
;; Adjust assocs.
|
||||
((eq mark-type 'tuple)
|
||||
(set var (setq articles (cdr marks)))
|
||||
|
@ -6358,15 +6373,15 @@ displayed, no centering will be performed."
|
|||
(while read
|
||||
(when first
|
||||
(while (< first nlast)
|
||||
(push first unread)
|
||||
(setq first (1+ first))))
|
||||
(setq unread (cons first unread)
|
||||
first (1+ first))))
|
||||
(setq first (1+ (if (atom (car read)) (car read) (cdar read))))
|
||||
(setq nlast (if (atom (cadr read)) (cadr read) (caadr read)))
|
||||
(setq read (cdr read)))))
|
||||
;; And add the last unread articles.
|
||||
(while (<= first last)
|
||||
(push first unread)
|
||||
(setq first (1+ first)))
|
||||
(setq unread (cons first unread)
|
||||
first (1+ first)))
|
||||
;; Return the list of unread articles.
|
||||
(delq 0 (nreverse unread))))
|
||||
|
||||
|
@ -6384,6 +6399,44 @@ displayed, no centering will be performed."
|
|||
(cdr (assq 'dormant marked)))
|
||||
(cdr (assq 'tick marked))))))
|
||||
|
||||
;; This function returns a sequence of article numbers based on the
|
||||
;; difference between the ranges of read articles in this group and
|
||||
;; the range of active articles.
|
||||
(defun gnus-sequence-of-unread-articles (group)
|
||||
(let* ((read (gnus-info-read (gnus-get-info group)))
|
||||
(active (or (gnus-active group) (gnus-activate-group group)))
|
||||
(last (cdr active))
|
||||
first nlast unread)
|
||||
;; If none are read, then all are unread.
|
||||
(if (not read)
|
||||
(setq first (car active))
|
||||
;; If the range of read articles is a single range, then the
|
||||
;; first unread article is the article after the last read
|
||||
;; article. Sounds logical, doesn't it?
|
||||
(if (and (not (listp (cdr read)))
|
||||
(or (< (car read) (car active))
|
||||
(progn (setq read (list read))
|
||||
nil)))
|
||||
(setq first (max (car active) (1+ (cdr read))))
|
||||
;; `read' is a list of ranges.
|
||||
(when (/= (setq nlast (or (and (numberp (car read)) (car read))
|
||||
(caar read)))
|
||||
1)
|
||||
(setq first (car active)))
|
||||
(while read
|
||||
(when first
|
||||
(push (cons first nlast) unread))
|
||||
(setq first (1+ (if (atom (car read)) (car read) (cdar read))))
|
||||
(setq nlast (if (atom (cadr read)) (cadr read) (caadr read)))
|
||||
(setq read (cdr read)))))
|
||||
;; And add the last unread articles.
|
||||
(cond ((< first last)
|
||||
(push (cons first last) unread))
|
||||
((= first last)
|
||||
(push first unread)))
|
||||
;; Return the sequence of unread articles.
|
||||
(delq 0 (nreverse unread))))
|
||||
|
||||
;; Various summary commands
|
||||
|
||||
(defun gnus-summary-select-article-buffer ()
|
||||
|
@ -11310,7 +11363,8 @@ If REVERSE, save parts that do not match TYPE."
|
|||
(default-high gnus-summary-default-high-score)
|
||||
(default-low gnus-summary-default-low-score)
|
||||
(uncached (and gnus-summary-use-undownloaded-faces
|
||||
(memq article gnus-newsgroup-undownloaded))))
|
||||
(memq article gnus-newsgroup-undownloaded)
|
||||
(not (memq article gnus-newsgroup-cached)))))
|
||||
(let ((face (funcall (gnus-summary-highlight-line-0))))
|
||||
(unless (eq face (get-text-property beg 'face))
|
||||
(gnus-put-text-property-excluding-characters-with-faces
|
||||
|
|
|
@ -38,7 +38,11 @@
|
|||
(eval-when-compile
|
||||
(require 'cl)
|
||||
;; Fixme: this should be a gnus variable, not nnmail-.
|
||||
(defvar nnmail-pathname-coding-system))
|
||||
(defvar nnmail-pathname-coding-system)
|
||||
|
||||
;; Inappropriate references to other parts of Gnus.
|
||||
(defvar gnus-emphasize-whitespace-regexp)
|
||||
)
|
||||
(require 'time-date)
|
||||
(require 'netrc)
|
||||
|
||||
|
@ -1186,7 +1190,7 @@ is run."
|
|||
"Delete by side effect any elements of LIST whose car is `equal' to KEY.
|
||||
The modified LIST is returned. If the first member
|
||||
of LIST has a car that is `equal' to KEY, there is no way to remove it
|
||||
by side effect; therefore, write `(setq foo (remassoc key foo))' to be
|
||||
by side effect; therefore, write `(setq foo (gnus-remassoc key foo))' to be
|
||||
sure of changing the value of `foo'."
|
||||
(when alist
|
||||
(if (equal key (caar alist))
|
||||
|
@ -1512,6 +1516,28 @@ predicate on the elements."
|
|||
"")))
|
||||
(t emacs-version))))
|
||||
|
||||
(defun gnus-rename-file (old-path new-path &optional trim)
|
||||
"Rename OLD-PATH as NEW-PATH. If TRIM, recursively delete
|
||||
empty directories from OLD-PATH."
|
||||
(when (file-exists-p old-path)
|
||||
(let* ((old-dir (file-name-directory old-path))
|
||||
(old-name (file-name-nondirectory old-path))
|
||||
(new-dir (file-name-directory new-path))
|
||||
(new-name (file-name-nondirectory new-path))
|
||||
temp)
|
||||
(gnus-make-directory new-dir)
|
||||
(rename-file old-path new-path t)
|
||||
(when trim
|
||||
(while (progn (setq temp (directory-files old-dir))
|
||||
(while (member (car temp) '("." ".."))
|
||||
(setq temp (cdr temp)))
|
||||
(= (length temp) 0))
|
||||
(delete-directory old-dir)
|
||||
(setq old-dir (file-name-as-directory
|
||||
(file-truename
|
||||
(concat old-dir "..")))))))))
|
||||
|
||||
|
||||
(provide 'gnus-util)
|
||||
|
||||
;;; arch-tag: f94991af-d32b-4c97-8c26-ca12a934de49
|
||||
|
|
|
@ -199,13 +199,14 @@
|
|||
(setq w3m-display-inline-images mm-inline-text-html-with-images))
|
||||
|
||||
(defun mm-w3m-cid-retrieve-1 (url handle)
|
||||
(if (mm-multiple-handles handle)
|
||||
(dolist (elem handle)
|
||||
(mm-w3m-cid-retrieve-1 url elem))
|
||||
(when (and (listp handle)
|
||||
(equal url (mm-handle-id handle)))
|
||||
(mm-insert-part handle)
|
||||
(throw 'found-handle (mm-handle-media-type handle)))))
|
||||
(dolist (elem handle)
|
||||
(when (listp elem)
|
||||
(if (equal url (mm-handle-id elem))
|
||||
(progn
|
||||
(mm-insert-part elem)
|
||||
(throw 'found-handle (mm-handle-media-type elem))))
|
||||
(if (equal "multipart" (mm-handle-media-supertype elem))
|
||||
(mm-w3m-cid-retrieve-1 url elem)))))
|
||||
|
||||
(defun mm-w3m-cid-retrieve (url &rest args)
|
||||
"Insert a content pointed by URL if it has the cid: scheme."
|
||||
|
|
|
@ -103,7 +103,7 @@
|
|||
|
||||
(defun nnagent-request-type (group article)
|
||||
(unless (stringp article)
|
||||
(let ((gnus-plugged t))
|
||||
(let ((gnus-agent nil))
|
||||
(if (not (gnus-check-backend-function
|
||||
'request-type (car gnus-command-method)))
|
||||
'unknown
|
||||
|
@ -122,9 +122,14 @@
|
|||
|
||||
(deffoo nnagent-request-set-mark (group action server)
|
||||
(with-temp-buffer
|
||||
(insert (format "(%s-request-set-mark \"%s\" '%s \"%s\")\n"
|
||||
(nth 0 gnus-command-method) group action
|
||||
(or server (nth 1 gnus-command-method))))
|
||||
(insert "(gnus-agent-synchronize-group-flags \""
|
||||
group
|
||||
"\" '")
|
||||
(gnus-pp action)
|
||||
(insert " \""
|
||||
(gnus-method-to-server gnus-command-method)
|
||||
"\"")
|
||||
(insert ")\n")
|
||||
(append-to-file (point-min) (point-max) (gnus-agent-lib-file "flags")))
|
||||
nil)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue