zsh-workers
 help / color / mirror / code / Atom feed
From: Oliver Kiddle <okiddle@yahoo.co.uk>
To: zsh-workers@zsh.org
Subject: Re: compset -q oddities
Date: Wed, 14 Sep 2016 21:52:35 +0200	[thread overview]
Message-ID: <67318.1473882755@hydra.kiddle.eu> (raw)
In-Reply-To: <160914075946.ZM28998@torch.brasslantern.com>

Bart wrote:
> } That's a bit tricky.  I think it should append an escaped space, e.g.,
> } "sh -c touc<TAB>" should append <h> <Backslash> <Space>.
>
> No, that's *exactly* the kind of DWIM-ing that we abandoned.  If the user
> wants the space quoted, then he should start with "sh -c 'touc<TAB>".

For this specific case, I don't entirely agree because in theory the
mechanics are in place for that to work.

compset -q appears to disable the default suffix that completions have:
  _foo() {
    compset -q
    compadd one two three
  }
  foo "on<tab>  completes one without a space suffix.
I'm not sure why. Any ideas?

The other problem in this case is that suffixes are not quoted in
general. You're supposed to do that manually with compquote but we only
ever bother to do that in generic helpers. So the following does work as
Daniel wished:
  _foo() {
    suf=' '
    compquote suf
    compadd -S $suf one two three
  }          
  sh -c "foo on<tab>

You might even use ${compstate[quote]:#\\}$suf as the suffix to
close any inner quoting. -P prefixes and -S suffixes are added
unquoted: in contrast to -p/-s. This was probably done so that it
can include the closing quote. Either that or because that's how
compctl originally did things long before completion was complex
enough to worry much about quotes.

Adding calls to compquote in every function that needs a suffix is
not a good idea. With a code refactoring, perhaps the suffix could
be quoted automatically but we'd need an option that makes it easier
to indicate that quoting levels should be closed (accumulating them
as completion functions call each other). And I'm not sure about
prefixes.

In the past, I've looked at the compset code when noticing other odd
cases like those Daniel has mentioned. There's loads of edge cases that
are handled with bits of code that all dig into the parser code.
And the parser is not my favourite bit of zsh code either. Trying to fix
them just involves adding more hacks that are only making it worse. A
proper solution would need more flexible values in compqstack.

One other thing I notice in the code for compset -q is that it is
a completely different function internally from that which does the
initial word split when completion starts. I don't entirely understand
why because logically it ought to be possible to reuse the same
code. It'd be nice if vared could be used without the initial parse:
variable values aren't necessarily shell syntax.

Oliver


  reply	other threads:[~2016-09-14 19:58 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-11  7:30 Daniel Shahaf
2016-09-12  2:14 ` Bart Schaefer
2016-09-12 23:06   ` Daniel Shahaf
2016-09-13  6:28     ` Bart Schaefer
2016-09-13 10:21       ` Peter Stephenson
2016-09-14 17:56         ` Bart Schaefer
2016-09-15  5:10           ` Daniel Shahaf
2016-09-16  0:40             ` Bart Schaefer
2016-09-16  3:05               ` [PATCH] Etc/BUGS: Remove fixed items, add 'compset -q' item from workers/39306 Daniel Shahaf
2016-09-16  5:00                 ` Bart Schaefer
2016-09-14  3:22       ` compset -q oddities Daniel Shahaf
2016-09-14  5:20         ` Bart Schaefer
2016-09-14  6:12           ` Daniel Shahaf
2016-09-14 14:59             ` Bart Schaefer
2016-09-14 19:52               ` Oliver Kiddle [this message]
2016-09-15  3:08                 ` Bart Schaefer
2016-09-14  8:31           ` Peter Stephenson
2016-09-14 16:04             ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=67318.1473882755@hydra.kiddle.eu \
    --to=okiddle@yahoo.co.uk \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).