GNU bug report logs - #77718
31.0.50; completion styles substring and flex are broken

Previous Next

Package: emacs;

Reported by: Stephen Berman <stephen.berman <at> gmx.net>

Date: Thu, 10 Apr 2025 22:23:02 UTC

Severity: normal

Found in version 31.0.50

Done: Stefan Monnier <monnier <at> iro.umontreal.ca>

Full log


View this message in rfc822 format

From: Stephen Berman <stephen.berman <at> gmx.net>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: Spencer Baugh <sbaugh <at> janestreet.com>, Eli Zaretskii <eliz <at> gnu.org>, 77718-done <at> debbugs.gnu.org
Subject: bug#77718: 31.0.50; completion styles substring and flex are broken
Date: Tue, 29 Apr 2025 12:19:11 +0200
[Message part 1 (text/plain, inline)]
On Mon, 28 Apr 2025 14:01:18 -0400 Stefan Monnier <monnier <at> iro.umontreal.ca> wrote:

>> But actually there's a simpler and better way to do that: just duplicate
>> all the $s to $$, then substitute-in-file-name turns all the $$ back to
>> $ without expanding environment variables.  So I did that in the
>> attached updated patch.
>
> LGTM, pushed to `master`.

This patch causes two regressions wrt emacs-30.  One I pointed out
upthread (<87a58hal6w.fsf <at> gmx.net>,
<https://lists.gnu.org/archive/html/bug-gnu-emacs/2025-04/msg00884.html>).
For this, the following patch fixes the regression according to my
testing:
[Message part 2 (text/x-patch, attachment)]
[Message part 3 (text/plain, inline)]
For the other regression, here is a reproducer:

0. mkdir /tmp/{Test,retest}
1. emacs -Q --eval "(custom-set-variables                        \
   '(completion-category-overrides '((file (styles substring)))) \
   '(read-file-name-completion-ignore-case t))"
2. Type `C-x d /tmp/tes TAB': this completes to /tmp/test/
3. Type TAB again: Emacs dings and shows "[no match]"

If you repeat this recipe in emacs-30, then after the TAB in step 3, this
completion is shown: /tmp/Test/. and typing TAB again pops up the
*Completions* buffer displaying the two completions ../ and ./

While the result in emacs-30 seems suboptimal, since it omits the
possible completion /tmp/retest/, still it's better than "[no match]".

A workaround for both emacs-30 and master is to enter at step 2 `C-x d
/tmp/*tes TAB'. This shows the completion /tmp/*test/, then hitting TAB
again shows /tmp/*test/., and hitting TAB a third time pops up the
*Completions* buffer showing the four completions Test/../, Test/./,
retest/../, and retest/./

Steve Berman

This bug report was last modified today.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.