zsh-workers
 help / color / mirror / code / Atom feed
* Completion of prefix redirections is -command- instead of -redirect-
@ 2015-08-26  5:39 Daniel Shahaf
  2015-08-26 18:18 ` Bart Schaefer
  0 siblings, 1 reply; 13+ messages in thread
From: Daniel Shahaf @ 2015-08-26  5:39 UTC (permalink / raw)
  To: zsh-workers

Typing "<" and <TAB> at the prompt tries these completions [wrapped by me]:

tags in context :completion::complete:-command-::
    commands builtins functions aliases suffix-aliases \
      reserved-words jobs parameters  (_alternative _command_names _autocd) 
    commands                          (_path_commands _path_commands _alternative _command_names _autocd) 
    jobs                              (_jobs _alternative _command_names _autocd) 
    parameters                        (_parameters _alternative _command_names _autocd)

it shouldn't be completing commands but files.


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-26  5:39 Completion of prefix redirections is -command- instead of -redirect- Daniel Shahaf
@ 2015-08-26 18:18 ` Bart Schaefer
  2015-08-27  0:16   ` Mikael Magnusson
  0 siblings, 1 reply; 13+ messages in thread
From: Bart Schaefer @ 2015-08-26 18:18 UTC (permalink / raw)
  To: zsh-workers

On Aug 26,  5:39am, Daniel Shahaf wrote:
}
} Typing "<" and <TAB> at the prompt tries these completions [wrapped by me]:
} 
} tags in context :completion::complete:-command-::

Confirm this is new since 5.0.8.

Looking at _complete_debug output, it seems to be ignoring the "<" and
completing as if the buffer were empty; there is nothing in the $words
array when entering compsys, so of course it tries commands.

Interestingly, compctl doesn't have this problem (though maybe not for
the right reason).


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-26 18:18 ` Bart Schaefer
@ 2015-08-27  0:16   ` Mikael Magnusson
  2015-08-27  4:35     ` Bart Schaefer
  0 siblings, 1 reply; 13+ messages in thread
From: Mikael Magnusson @ 2015-08-27  0:16 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh workers

On Wed, Aug 26, 2015 at 8:18 PM, Bart Schaefer
<schaefer@brasslantern.com> wrote:
> On Aug 26,  5:39am, Daniel Shahaf wrote:
> }
> } Typing "<" and <TAB> at the prompt tries these completions [wrapped by me]:
> }
> } tags in context :completion::complete:-command-::
>
> Confirm this is new since 5.0.8.
>
> Looking at _complete_debug output, it seems to be ignoring the "<" and
> completing as if the buffer were empty; there is nothing in the $words
> array when entering compsys, so of course it tries commands.
>
> Interestingly, compctl doesn't have this problem (though maybe not for
> the right reason).

249999cfb485914fe6f8630b1f4079e1227a5097 is the first bad commit
commit 249999cfb485914fe6f8630b1f4079e1227a5097
Author: Peter Stephenson <p.w.stephenson@ntlworld.com>
Date:   Sun Aug 9 18:40:54 2015 +0100

    36025: Fix completion aftoer "foo=bar; setopt ".

    Done by catching a case that doesn't seem to be handled otherwise,
    so there's some hope it doesn't screw up too much.


With the above commit reverted, < <tab> completes files again, but so
does ; <tab>.

-- 
Mikael Magnusson


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-27  0:16   ` Mikael Magnusson
@ 2015-08-27  4:35     ` Bart Schaefer
  2015-08-27  4:47       ` Bart Schaefer
  0 siblings, 1 reply; 13+ messages in thread
From: Bart Schaefer @ 2015-08-27  4:35 UTC (permalink / raw)
  To: zsh workers

On Aug 27,  2:16am, Mikael Magnusson wrote:
}
} commit 249999cfb485914fe6f8630b1f4079e1227a5097
} Author: Peter Stephenson <p.w.stephenson@ntlworld.com>
} Date:   Sun Aug 9 18:40:54 2015 +0100
} 
}     36025: Fix completion aftoer "foo=bar; setopt ".
} 
}     Done by catching a case that doesn't seem to be handled otherwise,
}     so there's some hope it doesn't screw up too much.
} 
} With the above commit reverted, < <tab> completes files again, but so
} does ; <tab>.

Does this do it?


diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
index b87b99b..cb17bde 100644
--- a/Src/Zle/zle_tricky.c
+++ b/Src/Zle/zle_tricky.c
@@ -1184,11 +1184,12 @@ get_comp_string(void)
 	 * considering a new command.  Consequently, although this looks
 	 * relatively harmless by itself, it's probably incomplete.
 	 */
-	lincmd = (incmdpos && !ins && !incond) ||
-	    (oins == 2 && wordpos == 2) ||
-	    (ins == 3 && wordpos == 1) ||
-	    (cmdtok == NULLTOK && !incond);
 	linredir = (inredir && !ins);
+	lincmd = !linredir &&
+	    ((incmdpos && !ins && !incond) ||
+	     (oins == 2 && wordpos == 2) ||
+	     (ins == 3 && wordpos == 1) ||
+	     (cmdtok == NULLTOK && !incond));
 	oins = ins;
 	/* Get the next token. */
 	if (linarr)


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-27  4:35     ` Bart Schaefer
@ 2015-08-27  4:47       ` Bart Schaefer
  2015-08-27  4:54         ` Mikael Magnusson
  0 siblings, 1 reply; 13+ messages in thread
From: Bart Schaefer @ 2015-08-27  4:47 UTC (permalink / raw)
  To: zsh workers

On Aug 26,  9:35pm, Bart Schaefer wrote:
}
} Does this do it?

To answer my own question, no, it doesn't ... or at least not entirely.

Both WITH and WITHOUT the change in 36285, completing after this:

% ls < ;

completes files rather than commands.  I suppose if you've botched the
syntax you have no right to expect sanity, and the foregoing hasn't
changed since 5.0.7, so we're no worse off.


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-27  4:47       ` Bart Schaefer
@ 2015-08-27  4:54         ` Mikael Magnusson
  2015-08-27  5:14           ` Bart Schaefer
  0 siblings, 1 reply; 13+ messages in thread
From: Mikael Magnusson @ 2015-08-27  4:54 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh workers

On Thu, Aug 27, 2015 at 6:47 AM, Bart Schaefer
<schaefer@brasslantern.com> wrote:
> On Aug 26,  9:35pm, Bart Schaefer wrote:
> }
> } Does this do it?
>
> To answer my own question, no, it doesn't ... or at least not entirely.
>
> Both WITH and WITHOUT the change in 36285, completing after this:
>
> % ls < ;
>
> completes files rather than commands.  I suppose if you've botched the
> syntax you have no right to expect sanity, and the foregoing hasn't
> changed since 5.0.7, so we're no worse off.

Yeah, it's better than either with or without the 36285 patch, but
still doesn't handle all cases,

< <tab> gives files (correct)
; <tab> gives commands (correct)
< ; <tab> gives commands (correct)
foo < ; <tab> gives files (wrong-ish)
; < <tab> gives commands (wrong)
foo=bar; < <tab> gives commands (wrong, presumably same case as the above)
; < : <tab> gives commands (correct)
; < : : <tab> gives files (correct)

Is there any reason we can't just reset state to 'this is a new
command' when we see an unquoted solo semicolon? Or is determining
that this is the case in fact the trouble?

-- 
Mikael Magnusson


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-27  4:54         ` Mikael Magnusson
@ 2015-08-27  5:14           ` Bart Schaefer
  2015-08-27  6:22             ` Mikael Magnusson
  2015-08-27  8:42             ` Peter Stephenson
  0 siblings, 2 replies; 13+ messages in thread
From: Bart Schaefer @ 2015-08-27  5:14 UTC (permalink / raw)
  To: zsh workers

On Aug 27,  6:54am, Mikael Magnusson wrote:
}
} < ; <tab> gives commands (correct)

This is better than 5.0.7, which gives files here.

} foo < ; <tab> gives files (wrong-ish)

Hasn't changed from 5.0.7.

} ; < <tab> gives commands (wrong)

This has changed, 5.0.7 gets it right.

} foo=bar; < <tab> gives commands (wrong, presumably same case as the above)

Hasn't changed since 5.0.7.

} Is there any reason we can't just reset state to 'this is a new
} command' when we see an unquoted solo semicolon? Or is determining
} that this is the case in fact the trouble?

My recollection of all of this is that it has to do with completing
in the middle of for/while/repeat type constructs, where the ";" may
be followed by "do" after which you have to stay in command position,
or you may be in shortloops syntax, etc.  But I don't recall (and
likely never really understood Sven's explanation of) all the details.

The below seems to make it better, the only case that is still wrong
after this is "foo < ; <tab>".  But I haven't more than minimally
checked that completing in e.g. "for" loops still works properly.

diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
index cb17bde..97bdcc0 100644
--- a/Src/Zle/zle_tricky.c
+++ b/Src/Zle/zle_tricky.c
@@ -1185,7 +1185,7 @@ get_comp_string(void)
 	 * relatively harmless by itself, it's probably incomplete.
 	 */
 	linredir = (inredir && !ins);
-	lincmd = !linredir &&
+	lincmd = !inredir &&
 	    ((incmdpos && !ins && !incond) ||
 	     (oins == 2 && wordpos == 2) ||
 	     (ins == 3 && wordpos == 1) ||


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-27  5:14           ` Bart Schaefer
@ 2015-08-27  6:22             ` Mikael Magnusson
  2015-08-27 16:47               ` Bart Schaefer
  2015-08-27  8:42             ` Peter Stephenson
  1 sibling, 1 reply; 13+ messages in thread
From: Mikael Magnusson @ 2015-08-27  6:22 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh workers

On Thu, Aug 27, 2015 at 7:14 AM, Bart Schaefer
<schaefer@brasslantern.com> wrote:
> On Aug 27,  6:54am, Mikael Magnusson wrote:
> }
> } < ; <tab> gives commands (correct)
>
> This is better than 5.0.7, which gives files here.
>
> } foo < ; <tab> gives files (wrong-ish)
>
> Hasn't changed from 5.0.7.
>
> } ; < <tab> gives commands (wrong)
>
> This has changed, 5.0.7 gets it right.
>
> } foo=bar; < <tab> gives commands (wrong, presumably same case as the above)
>
> Hasn't changed since 5.0.7.
>
> } Is there any reason we can't just reset state to 'this is a new
> } command' when we see an unquoted solo semicolon? Or is determining
> } that this is the case in fact the trouble?
>
> My recollection of all of this is that it has to do with completing
> in the middle of for/while/repeat type constructs, where the ";" may
> be followed by "do" after which you have to stay in command position,
> or you may be in shortloops syntax, etc.  But I don't recall (and
> likely never really understood Sven's explanation of) all the details.
>
> The below seems to make it better, the only case that is still wrong
> after this is "foo < ; <tab>".  But I haven't more than minimally
> checked that completing in e.g. "for" loops still works properly.

When I try this patch, I get all my previous cases right except the
one you mentioned, but also
; < : <tab>
completes files instead of commands now (before, it completed commands
both with and without the : there, so not more correct in total).
However,
foo=bar; < : <tab>
does work, so I can't imagine anyone complaining about this particular
case soon.

I'll run with both of the patches applied for a while and see if
anything more pops out.

PS
If anyone can get
for (a b) {<tab>
to complete commands, that would be nice too :). (this never worked)

-- 
Mikael Magnusson


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-27  5:14           ` Bart Schaefer
  2015-08-27  6:22             ` Mikael Magnusson
@ 2015-08-27  8:42             ` Peter Stephenson
  1 sibling, 0 replies; 13+ messages in thread
From: Peter Stephenson @ 2015-08-27  8:42 UTC (permalink / raw)
  To: zsh workers

On Wed, 26 Aug 2015 22:14:13 -0700
Bart Schaefer <schaefer@brasslantern.com> wrote:
> The below seems to make it better, the only case that is still wrong
> after this is "foo < ; <tab>".  But I haven't more than minimally
> checked that completing in e.g. "for" loops still works properly.
> 
> diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
> index cb17bde..97bdcc0 100644
> --- a/Src/Zle/zle_tricky.c
> +++ b/Src/Zle/zle_tricky.c
> @@ -1185,7 +1185,7 @@ get_comp_string(void)
>  	 * relatively harmless by itself, it's probably incomplete.
>  	 */
>  	linredir = (inredir && !ins);
> -	lincmd = !linredir &&
> +	lincmd = !inredir &&
>  	    ((incmdpos && !ins && !incond) ||
>  	     (oins == 2 && wordpos == 2) ||
>  	     (ins == 3 && wordpos == 1) ||

That certainly ought to be on the right lines.  I would vaguely imagine
the incond and inredir ought to be doing roughly the same job, so maybe
if this works !incond should be pulled out.  The oins / ins / wordpos are
doing the cleverness with complex commands that no one quite
understands, which probably don't apply to either redirections or
conditions.

(You'd think there was a better way to do this using a state machine of
some sort.  There's a project for someone.)

pws


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-27  6:22             ` Mikael Magnusson
@ 2015-08-27 16:47               ` Bart Schaefer
  2015-08-27 18:54                 ` Mikael Magnusson
  0 siblings, 1 reply; 13+ messages in thread
From: Bart Schaefer @ 2015-08-27 16:47 UTC (permalink / raw)
  To: zsh workers

On Aug 27,  8:22am, Mikael Magnusson wrote:
} Subject: Re: Completion of prefix redirections is -command- instead of -re
}
} When I try this patch, I get all my previous cases right except the
} one you mentioned, but also
} ; < : <tab>
} completes files instead of commands now (before, it completed commands
} both with and without the : there, so not more correct in total).

It thinks ":" IS the command.

torch% ; < ls
tags in context :completion::complete:ls::
    argument-rest options  (_arguments _ls)
tags in context :completion::complete:ls:argument-rest:
    globbed-files  (_files _arguments _ls)

(The context for the ":" command is not ideal either since ":" is the
field separator ...)

} PS
} If anyone can get
} for (a b) {<tab>
} to complete commands, that would be nice too :). (this never worked)

I presume you mean without the parens around "a b"?  Otherwise it's not
valid syntax.

As PWS said, this is really a job for a state machine ... and not for a
hack this close to a release if it's something that hasn't ever worked.


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-27 16:47               ` Bart Schaefer
@ 2015-08-27 18:54                 ` Mikael Magnusson
  2015-08-27 19:00                   ` Mikael Magnusson
  2015-08-27 23:20                   ` Bart Schaefer
  0 siblings, 2 replies; 13+ messages in thread
From: Mikael Magnusson @ 2015-08-27 18:54 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh workers

On Thu, Aug 27, 2015 at 6:47 PM, Bart Schaefer
<schaefer@brasslantern.com> wrote:
> On Aug 27,  8:22am, Mikael Magnusson wrote:
> } Subject: Re: Completion of prefix redirections is -command- instead of -re
> }
> } When I try this patch, I get all my previous cases right except the
> } one you mentioned, but also
> } ; < : <tab>
> } completes files instead of commands now (before, it completed commands
> } both with and without the : there, so not more correct in total).
>
> It thinks ":" IS the command.

Hmm, indeed, I'm not sure what I was thinking there, my context is
long gone. It is possible that I meant to say "commands instead of
files", which is what happens when I test it now.

> } PS
> } If anyone can get
> } for (a b) {<tab>
> } to complete commands, that would be nice too :). (this never worked)
>
> I presume you mean without the parens around "a b"?  Otherwise it's not
> valid syntax.

I meant for a (b) {<tab>, yeah.

> As PWS said, this is really a job for a state machine ... and not for a
> hack this close to a release if it's something that hasn't ever worked.

Yeah, it was just a PS.

-- 
Mikael Magnusson


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-27 18:54                 ` Mikael Magnusson
@ 2015-08-27 19:00                   ` Mikael Magnusson
  2015-08-27 23:20                   ` Bart Schaefer
  1 sibling, 0 replies; 13+ messages in thread
From: Mikael Magnusson @ 2015-08-27 19:00 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh workers

On Thu, Aug 27, 2015 at 8:54 PM, Mikael Magnusson <mikachu@gmail.com> wrote:
> On Thu, Aug 27, 2015 at 6:47 PM, Bart Schaefer
> <schaefer@brasslantern.com> wrote:
>> On Aug 27,  8:22am, Mikael Magnusson wrote:
>> } Subject: Re: Completion of prefix redirections is -command- instead of -re
>> }
>> } When I try this patch, I get all my previous cases right except the
>> } one you mentioned, but also
>> } ; < : <tab>
>> } completes files instead of commands now (before, it completed commands
>> } both with and without the : there, so not more correct in total).
>>
>> It thinks ":" IS the command.
>
> Hmm, indeed, I'm not sure what I was thinking there, my context is
> long gone. It is possible that I meant to say "commands instead of
> files", which is what happens when I test it now.

Ignore the last part of this, I had the final patch reverted for
testing earlier and apparently upgraded libcap after that and the
subsequent reinstall failed, or something. It works correctly now.

-- 
Mikael Magnusson


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

* Re: Completion of prefix redirections is -command- instead of -redirect-
  2015-08-27 18:54                 ` Mikael Magnusson
  2015-08-27 19:00                   ` Mikael Magnusson
@ 2015-08-27 23:20                   ` Bart Schaefer
  1 sibling, 0 replies; 13+ messages in thread
From: Bart Schaefer @ 2015-08-27 23:20 UTC (permalink / raw)
  To: zsh workers

On Aug 27,  8:54pm, Mikael Magnusson wrote:
} Subject: Re: Completion of prefix redirections is -command- instead of -re
}
} On Thu, Aug 27, 2015 at 6:47 PM, Bart Schaefer
} <schaefer@brasslantern.com> wrote:
} > On Aug 27,  8:22am, Mikael Magnusson wrote:
} > } Subject: Re: Completion of prefix redirections is -command- instead of -re
} > }
} > } ; < : <tab>
} > } completes files instead of commands now (before, it completed commands
} > } both with and without the : there, so not more correct in total).
} >
} > It thinks ":" IS the command.
} 
} Hmm, indeed, I'm not sure what I was thinking there, my context is
} long gone. It is possible that I meant to say "commands instead of
} files", which is what happens when I test it now.

I get files instead of commands, as you originally wrote.  So something
is still not quite right there, but this is such a corner case that I
don't think we need to continue to wrestle with it before 5.1.


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

end of thread, other threads:[~2015-08-27 23:20 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-26  5:39 Completion of prefix redirections is -command- instead of -redirect- Daniel Shahaf
2015-08-26 18:18 ` Bart Schaefer
2015-08-27  0:16   ` Mikael Magnusson
2015-08-27  4:35     ` Bart Schaefer
2015-08-27  4:47       ` Bart Schaefer
2015-08-27  4:54         ` Mikael Magnusson
2015-08-27  5:14           ` Bart Schaefer
2015-08-27  6:22             ` Mikael Magnusson
2015-08-27 16:47               ` Bart Schaefer
2015-08-27 18:54                 ` Mikael Magnusson
2015-08-27 19:00                   ` Mikael Magnusson
2015-08-27 23:20                   ` Bart Schaefer
2015-08-27  8:42             ` Peter Stephenson

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).