zsh-workers
 help / color / mirror / code / Atom feed
From: Oliver Kiddle <okiddle@yahoo.co.uk>
To: "zsh-workers@zsh.org" <zsh-workers@zsh.org>,
	"Saverio M." <saverio.pub2@gmail.com>
Subject: Re: Perplexing `COMP_POINT` value on bashcompinit tab completion
Date: Mon, 23 Jul 2018 00:14:10 +0200	[thread overview]
Message-ID: <24815.1532297650@thecus> (raw)
In-Reply-To: <CAH+w=7bgknH=X4i_jbY3bhcoidBsBV0YmqFM=HzHQJCUZNkw9g@mail.gmail.com>

Bart wrote:
>
> > I use the OMZ/`bashcompinit` combination in order to write my tab completion scripts.
>
> I'll note that as soon as you introduce OMZ, things get a little murky

I wouldn't really recommend the use of bashcompinit either. It
compromises completion on zsh heavily and if you're providing the
function to users, they're unlikely to be able to use it without going
to some effort to enable it.

It's a lot cleaner to provide separate functions.

> I'm fairly certain this happens because arrays in bash are
> zero-base-indexed, whereas arrays in zsh are one-base-indexed.  So the

I don't think that's it.

> COMP_POINT is computed like this:
>
> (( COMP_POINT = 1 + ${#${(j. .)words[1,CURRENT-1]}} + $#QIPREFIX +
> $#IPREFIX + $#PREFIX ))
>
> However, "1 +" is probably wrong here because the stand-in for compgen
> re-asserts KSH_ARRAYS.  There was an attempt to fix this in

The 1 + looks right. It covers the space following the previous word
because joining the words with (j. .) doesn't account for that word
separator. It is broken if you use multiple spaces to separate words and
wouldn't be correct for completion in command position - which doesn't
matter because bashcompinit would never be used in command position.

I wonder if COMP_POINT could perhaps simply be computed with
${#LBUFFER}.

> zsh-workers articles 31031 to 30137 but the wrong fix was done,

The change there was to include the length of the current word which is
clearly wrong because that's covered by the prefix variables.

Looking over those changes, I'm really quite sceptical about most
of them in general. 29135 is also questionable. It does, strictly
speaking, bring behaviour closer to bash but the original intention
was for bashcompinit to defer to zsh's matching. Perhaps that could be
configurable with a style.

> > Zsh sends `COMP_LINE=/home/oooh_my_tab/scr a`, and the now more perplexing `COMP_POINT=25`, which adds an unexpected extra unit to what was, in the previous example, an already apparently off-by-one value.

COMP_LINE being expanded to /home/oooh_my_tab/scr seems strange. I
suspect that scr is perhaps aliased to /home/oooh_my_tab/scr. Perhaps we
do need to use $LBUFFER there too. Will need to test with some actual
bash completions.

> I don't see any obvious reason for this in the current sources, but
> what version of zsh do you have?  The "different bug" I mention above
> was present from November 2013 to January 2017 and fixed in zsh
> version 5.4.2, and that bug might explain the additional offset.

I'm inclined to suspect that a zsh from that time range is being used.

Oliver


      reply	other threads:[~2018-07-22 22:21 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-21 11:15 Fwd: " Geoff Wing
2018-07-22  0:27 ` Bart Schaefer
2018-07-22 22:14   ` Oliver Kiddle [this message]

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=24815.1532297650@thecus \
    --to=okiddle@yahoo.co.uk \
    --cc=saverio.pub2@gmail.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).