zsh-workers
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: zsh-workers@zsh.org
Subject: While on the subject of expansion ...
Date: Fri, 27 Dec 2013 10:05:56 -0800	[thread overview]
Message-ID: <131227100556.ZM25175@torch.brasslantern.com> (raw)

I noticed that the built-in expand-word widget also mishandles the case
with a backslashed quote.  There's a bit of a disagreement between
doexpansion() and get_comp_string() over who is responsible for what.
get_comp_string() strips out the backslashes, but it also "leaves ...
quotes unchanged when they are inside parameter expansions" according
to the comment in doexpansion().

2187     /* get_comp_string() leaves these quotes unchanged when they are
2188      * inside parameter expansions. */
2189     for (ts = ss; *ts; ts++)
2190         if (*ts == '"')
2191             *ts = Dnull;
2192         else if (*ts == '\'')
2193             *ts = Snull;

Therefore doexpansion() attempts to fix up the quotes, but gets it
wrong in some of the cases because it doesn't have full context at
each character position.  The "inwhat" and "instring" globals give
some hints but only for the position of the cursor, and there may be
multiple differently-quoted substrings of the current word.

Unlike the _expand completer which tries globbing separately from other
expansions, doexpansion() attempts to set up for everything to expand
at once [via a call to prefork()].  This makes the completion-oriented
[de-]quoting applied by get_comp_string() problematic.  I wonder which
kinds of parameter expansions would break if we skipped that part.

Again I suppose the theory is that quotes are much less likely to
appear in globs than they are in parameter references, so handling the
more common case is the right thing.

Incidental aside:  Both doexpansion() and expandorcomplete() contain
code to fall back on docompletion() if expansion does not change the
word, but I can't figure out how to get that branch in doexpansion()
to ever be taken.  It has something to do with words that start with
a tilde.


             reply	other threads:[~2013-12-27 18:05 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-27 18:05 Bart Schaefer [this message]
2013-12-28  8:23 ` Bart Schaefer
2014-01-02 18:40 ` Peter Stephenson

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=131227100556.ZM25175@torch.brasslantern.com \
    --to=schaefer@brasslantern.com \
    --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).