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:
Miles Bader 2004-10-19 22:38:28 +00:00
parent 9b0eaaa714
commit 54506618c7
12 changed files with 1403 additions and 623 deletions

View file

@ -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

View file

@ -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

View file

@ -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."

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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."

View file

@ -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)