zsh-workers
 help / color / mirror / code / Atom feed
* [Bug] Doubled completions with suffix aliases and grouping
@ 2020-07-05 17:46 Guido Cella
  2020-07-05 18:09 ` Bart Schaefer
  0 siblings, 1 reply; 7+ messages in thread
From: Guido Cella @ 2020-07-05 17:46 UTC (permalink / raw)
  To: zsh-workers

[Bug] Doubled completions with suffix aliases and grouping
When completion grouping is enabled and a directory contains only regular files whose suffixes have aliases defined, file completions are listed twice. This seems to be caused by the fact that when there are no executables or directories to complete, zsh completes every file in the directory (grouped as "executable file"), and only later adds files that match suffix aliases.

This can be reproduced with:
alias -s txt=$EDITOR
autoload compinit
compinit
zstyle ':completion:*' group-name ''
zstyle ':completion:*:descriptions' format '%F{yellow}%B%d%b%f'
mkdir /tmp/foo
cd /tmp/foo
: >{1..9}.txt
./<Tab>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Bug] Doubled completions with suffix aliases and grouping
  2020-07-05 17:46 [Bug] Doubled completions with suffix aliases and grouping Guido Cella
@ 2020-07-05 18:09 ` Bart Schaefer
  2020-07-05 19:24   ` Guido Cella
  0 siblings, 1 reply; 7+ messages in thread
From: Bart Schaefer @ 2020-07-05 18:09 UTC (permalink / raw)
  To: zsh-workers

This isn't really a bug; completions are never de-duped across
groupings that are displayed separately.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Bug] Doubled completions with suffix aliases and grouping
  2020-07-05 18:09 ` Bart Schaefer
@ 2020-07-05 19:24   ` Guido Cella
  2020-07-07  4:51     ` Bart Schaefer
  0 siblings, 1 reply; 7+ messages in thread
From: Guido Cella @ 2020-07-05 19:24 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh-workers

On Sun, Jul 05, 2020 at 11:09:22AM -0700, Bart Schaefer wrote:
> This isn't really a bug; completions are never de-duped across
> groupings that are displayed separately.
I think that the bug is adding files that aren't executable to the
"executable file" grouping. If you create a directory or real executable
in the /tmp/foo diretory or my example, the txt files are no longer
grouped as executable file.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Bug] Doubled completions with suffix aliases and grouping
  2020-07-05 19:24   ` Guido Cella
@ 2020-07-07  4:51     ` Bart Schaefer
  2020-07-07  6:57       ` Guido Cella
  0 siblings, 1 reply; 7+ messages in thread
From: Bart Schaefer @ 2020-07-07  4:51 UTC (permalink / raw)
  To: Bart Schaefer, zsh-workers

On Sun, Jul 5, 2020 at 12:24 PM Guido Cella <guidocella91@gmail.com> wrote:
>
> I think that the bug is adding files that aren't executable to the
> "executable file" grouping.

Aye, well, that's not exactly a bug either.  The position taken when
developing the completion code was that it's always better to offer
something that the user might possibly mean rather than to offer
nothing; i.e., err on the side of too much information rather than too
little.  Because _command_names uses _alternative, the two branches
(executables and suffix-aliases) don't "know" that the other might
produce overlapping matches, so each generates its result
independently, and when executables finds nothing, it falls back to
all files.

There are two elements of your specific example that could potentially
be considered bugs.  The first is that there's no file-patterns zstyle
for the "executables" tag; the closest you can get is to set one for
the :completion:complete:-command-:: context.  The second is that this
doesn't work:

zstyle :completion::complete:-command-::executables ignored-patterns '*(^*)'

Instead you have to do this:

zstyle :completion::complete:-command-::executables ignored-patterns '*(#q^*)'

However, I think you'll find if you do that latter, you'll get what you want.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Bug] Doubled completions with suffix aliases and grouping
  2020-07-07  4:51     ` Bart Schaefer
@ 2020-07-07  6:57       ` Guido Cella
  2020-07-07 17:20         ` Bart Schaefer
  0 siblings, 1 reply; 7+ messages in thread
From: Guido Cella @ 2020-07-07  6:57 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh-workers

On Mon, Jul 06, 2020 at 09:51:06PM -0700, Bart Schaefer wrote:
> On Sun, Jul 5, 2020 at 12:24 PM Guido Cella <guidocella91@gmail.com> wrote:
> >
> > I think that the bug is adding files that aren't executable to the
> > "executable file" grouping.
> 
> Aye, well, that's not exactly a bug either.  The position taken when
> developing the completion code was that it's always better to offer
> something that the user might possibly mean rather than to offer
> nothing; i.e., err on the side of too much information rather than too
> little.  Because _command_names uses _alternative, the two branches
> (executables and suffix-aliases) don't "know" that the other might
> produce overlapping matches, so each generates its result
> independently, and when executables finds nothing, it falls back to
> all files.
> 
> There are two elements of your specific example that could potentially
> be considered bugs.  The first is that there's no file-patterns zstyle
> for the "executables" tag; the closest you can get is to set one for
> the :completion:complete:-command-:: context.  The second is that this
> doesn't work:
> 
> zstyle :completion::complete:-command-::executables ignored-patterns '*(^*)'
> 
> Instead you have to do this:
> 
> zstyle :completion::complete:-command-::executables ignored-patterns '*(#q^*)'
> 
> However, I think you'll find if you do that latter, you'll get what you want.
I agree that it's better to complete all files rather than to offer
nothing, my problem is that it completes all files again even when
suffix aliases do offer matches.

zstyle :completion::complete:-command-::executables ignored-patterns '*(#q^*)'
is worse since it stops completing directories (and real executables)
when there's matching suffix alias. :/

mkdir {1..9}
touch foo.txt
./<Tab>

Only foo.txt is completed.

Anyway, by navigating the completion code I could guess fixing this
would require changing the code too much because executables and suffix
aliases are completed from different places. I only enabled grouping so
I could set list-dirs-first and have suffix aliases for everything, so
it's annoying to get double completions, even of many files, each time I
browse a leaf directory.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Bug] Doubled completions with suffix aliases and grouping
  2020-07-07  6:57       ` Guido Cella
@ 2020-07-07 17:20         ` Bart Schaefer
  2020-07-07 17:59           ` Guido Cella
  0 siblings, 1 reply; 7+ messages in thread
From: Bart Schaefer @ 2020-07-07 17:20 UTC (permalink / raw)
  To: Bart Schaefer, zsh-workers

On Mon, Jul 6, 2020 at 11:57 PM Guido Cella <guidocella91@gmail.com> wrote:
>
> zstyle :completion::complete:-command-::executables ignored-patterns '*(#q^*)'
> is worse since it stops completing directories (and real executables)

Hmm, OK, I've forgotten that ignored-patterns is only doing name
matching, not globbing.

How about this?

zstyle -e :completion::complete:-command-::executables ignored-patterns \
  'reply=("*.(${(j:|:k)saliases})")'

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Bug] Doubled completions with suffix aliases and grouping
  2020-07-07 17:20         ` Bart Schaefer
@ 2020-07-07 17:59           ` Guido Cella
  0 siblings, 0 replies; 7+ messages in thread
From: Guido Cella @ 2020-07-07 17:59 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh-workers

On Tue, Jul 07, 2020 at 10:20:48AM -0700, Bart Schaefer wrote:
> On Mon, Jul 6, 2020 at 11:57 PM Guido Cella <guidocella91@gmail.com> wrote:
> >
> > zstyle :completion::complete:-command-::executables ignored-patterns '*(#q^*)'
> > is worse since it stops completing directories (and real executables)
> 
> Hmm, OK, I've forgotten that ignored-patterns is only doing name
> matching, not globbing.
> 
> How about this?
> 
> zstyle -e :completion::complete:-command-::executables ignored-patterns \
>   'reply=("*.(${(j:|:k)saliases})")'
That fixes the issues. Thank you!

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-07-07 18:00 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-05 17:46 [Bug] Doubled completions with suffix aliases and grouping Guido Cella
2020-07-05 18:09 ` Bart Schaefer
2020-07-05 19:24   ` Guido Cella
2020-07-07  4:51     ` Bart Schaefer
2020-07-07  6:57       ` Guido Cella
2020-07-07 17:20         ` Bart Schaefer
2020-07-07 17:59           ` Guido Cella

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).