help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Gnus: Thread notes?


From: Eric Abrahamsen
Subject: Re: Gnus: Thread notes?
Date: Wed, 13 Dec 2017 10:03:06 -0800
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)

Michael Heerdegen <michael_heerdegen@web.de> writes:

> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>
>> > `gnus-alter-articles-to-read-function' [...]
>>
>> Interesting! I'd never looked at that option before. I'd still like to
>> keep the manual command, for those who don't want this to happen
>> automatically, but yes, it wouldn't be hard to refactor.
>
> Yes, I agree we should keep it.
>
>> It would also require some sort of internal caching first -- right now
>> it's too slow to have it running each time you enter a group.
>
> In my tests, I didn't see a delay.  It probably depends on how much you
> used the registry.

I use it pretty heavily! I'll implement this and test, and see how it
shakes out. A big slow-down comes in doing the
message-id-->article-number lookup each time. In the past I saved
article numbers to the registry, before realizing that was a bad idea,
but I've been considering re-introducing a per-Gnus-session cache, which
would be almost as helpful.

>> > (1) I think `gnus-alter-articles-to-read-function' should better
>> >  default to a function (lambda (_group-name article-list)
>> > article-list), not to nil, so that one could use `add-function' on
>> > it.
>>
>> Or the code could coerce the value to a list, and map all the functions.
>> Maybe that would be more intuitive than `add-function'?
>
> But for a list, you can't control how the functions are combined.  It is
> always the same, e.g., all the return values are appended.  Then it is
> impossible to use the thing for limiting shown articles.  That's quite a
> limitation.  With `add-function', there would not be such a restriction
> - and one could use priorities (aka advice depth) to control the order
> of processing.
>
> But I know some people refrain from using `add-function'.  We could
> support both mechanisms at the same time: If
> `gnus-alter-articles-to-read-function' is `functionp', call it as a
> function, else, treat it as a list (of functions).

Right, that's what I was thinking of. I do think it's bad in principle
to expect uses of `add-function'.

The following feels awkward to me, but I can't find any sort of "reverse
reduce" function in the libs. Is there a sexier way of doing this?

diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 4dee306c81..eae0ebf130 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -5917,8 +5917,12 @@ gnus-articles-to-read
       (when gnus-alter-articles-to-read-function
        (setq articles
              (sort
-              (funcall gnus-alter-articles-to-read-function
-                       gnus-newsgroup-name articles)
+              (if (functionp gnus-alter-articles-to-read-function)
+                  (funcall gnus-alter-articles-to-read-function
+                           gnus-newsgroup-name articles)
+                (let ((ret articles))
+                  (dolist (f gnus-alter-articles-to-read-function)
+                    (setq ret (funcall f gnus-newsgroup-name ret)))))
               '<)))
       articles)))
 
Eric

reply via email to

[Prev in Thread] Current Thread [Next in Thread]