Subject: Re: bug#79330: misleading ring-convert-sequence-to-ring

From: Liu Hui <[email-masked]>
Date: Fri, 29 Aug 2025 11:35:11 +0800

On Thu, Aug 28, 2025 at 6:59 PM Eli Zaretskii <[email-masked]> wrote:
>
> --text follows this line-
> > From: Liu Hui <[email-masked]>
> > Date: Thu, 28 Aug 2025 18:47:00 +0800
> >
> > The docstring of ring-convert-sequence-to-ring says it "convert
> > sequence SEQ to a ring", but it actually ignores any item equal to the
> > first item, which is not mentioned:
> >
> > ELISP> (ring-convert-sequence-to-ring '(a a a))
> > (2 1 . [nil nil a])
> >
> > ELISP> (ring-convert-sequence-to-ring '(a b c a b c))
> > (1 5 . [nil c b c b a])
> >
> > I think either the function or the docstring need to be fixed.
>
> To decide whether we can fix the code would need to look at the
> existing users of this function (not only in our tree), since it works
> like it works for the last 18 years.

I have checked the only one usage (i.e. eshell-index-value) in emacs
and many other examples in github. I think all users don't expect to
ignore an item that is equal to the first item. For example:

1. emacs -Q
2. (setq eshell-history-file-name nil)
3. M-x eshell
4. type the following commands separately in eshell buffer

echo 1
echo 2
echo 1
echo 2
echo $eshell-history-ring[-4..]

There should be four items in the last output, but actually three
items due to ring-convert-sequence-to-ring.

In other cases, the SEQ usually contains different items, so it works
in these years.