Subject: bug#38476: 27.0.50; substring completion feature request

From: Stephen Berman <[email-masked]>
Date: Fri, 20 May 2022 14:28:23 +0200

On Fri, 20 May 2022 13:39:58 +0200 Lars Ingebrigtsen <[email-masked]> wrote:

> Stephen Berman <[email-masked]> writes:
>
>> The placement of point in substring completion is sometimes suboptimal.
>> E.g. if there two files (or buffers) file1test and file2test and you
>> enter `fi TAB' then it completes to `file' with point after the `e',
>> which is fine for further input; but if you enter `te TAB' then it
>> completes to `test' with point after the second `t', so you have to move
>> point to complete the name.  It would be nice if in such cases point
>> were placed at the start rather than the end of the partial match.
>
> (I'm going through old bug reports that unfortunately weren't resolved
> at the time.)
>
> I'm not able to reproduce this in Emacs 29 -- it just says "no match"
> with "te TAB".

Sorry, my bug report was woefully incomplete.  It was filed as a
followup to bug bug#38458 at the request of Stefan Monnier, but I should
have made it self-contained.  Here's the recipe:

0. $ mkdir /tmp/test; touch /tmp/test/{file1test,file2test}
1. $ emacs-master -Q --eval "(setq completion-category-overrides
     '((buffer (styles substring)) (file (styles substring))))"
2. Type `C-x C-f /tmp/test/te TAB'
=> The minibuffer displays the following, with point at the end of the line:

Find file: /tmp/test/test

Typing TAB a second time pops up a the *Completions* buffer showing
file1test and file2test as the two possible completions.  But to
complete either of these in the minibuffer you have to move point.
That's the bug (or feature request).

> With "*te TAB" it completes to file*test with point after *, which seems
> correct, too.

Yes, that input didn't occur to me when I filed the report.  I just now
scrolled through the Completion node of the Emacs manual and didn't see
a reference to it; is it documented?  If not, perhaps it should be.
Anyway, using * comes close to satisfying the feature request, so if
it's too hard to make it work without the *, I can live with having to
use *.

Steve Berman