From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19556 invoked from network); 10 Jul 2001 09:21:56 -0000 Received: from sunsite.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 10 Jul 2001 09:21:56 -0000 Received: (qmail 12130 invoked by alias); 10 Jul 2001 09:21:50 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 15357 Received: (qmail 12119 invoked from network); 10 Jul 2001 09:21:49 -0000 From: Sven Wischnowsky Date: Tue, 10 Jul 2001 11:19:16 +0200 (MET DST) Message-Id: <200107100919.LAA16859@beta.informatik.hu-berlin.de> To: zsh-workers@sunsite.dk Subject: Re: zsh 4.x bug in completion? In-Reply-To: <1010710081054.ZM28108@candle.brasslantern.com> Bart Schaefer wrote: > I get very strange behavior from 4.0.2. > > With > > zstyle ':completion:*' completer _complete _prefix > > I get: > > schaefer<503> > schaefer<503> echo foo > schaefer<503> sudecho foo > schaefer<503> sudoecho foo > ^ > cursor here > > That is, it inserts `sudo' with no trailing space, but then moves to > the end of the word `echo' and adds a space *there*. That is almost > certainly wrong? > > I get exactly the same thing from 4.1.0-dev-2. > > If I then add > > zstyle ':completion:*' add-space yes > > I get `sudo echo foo', that is, it has added a space both after `sudo' > and after `echo'. Hm, yes. These were both caused by _prefix being actually a hack. But we can hack some more when there is a single match, to trick it into leaving the cursor where it should be left. And then we need that hunk in the C-code because if the user requests that no list is shown, we should do that and not print the explanation strings. > And, by the way, with TAB bound to expand-or-complete-prefix, I can in > fact reproduce the original complaint. Auto-removing the space may make > sense when completing in the middle of a file path, but it doesn't when > completing in command position. That's the hunk in zle_tricky.c. It turns off the auto-suffix behaviour if completion left us after a space, leaving the space if a non-space character is typed next. I hope this is the most sensible thing to do. Should this and/or the _man thing go into the stable branch? (I.e., is that to be updated until the next stable release?) Bye Sven Index: Completion/Base/Completer/_prefix =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Base/Completer/_prefix,v retrieving revision 1.1 diff -u -r1.1 _prefix --- Completion/Base/Completer/_prefix 2001/04/02 11:08:54 1.1 +++ Completion/Base/Completer/_prefix 2001/07/10 09:16:04 @@ -4,7 +4,7 @@ [[ _matcher_num -gt 1 || -z "$SUFFIX" ]] && return 1 -local comp curcontext="$curcontext" tmp \ +local comp curcontext="$curcontext" tmp suf="$SUFFIX" \ _completer _completer_num \ _matcher _c_matcher _matchers _matcher_num @@ -44,7 +44,13 @@ _matcher="$_c_matcher" fi - [[ "$tmp" != _prefix ]] && "$tmp" && return 0 + if [[ "$tmp" != _prefix ]] && "$tmp"; then + [[ compstate[nmatches] -gt 1 ]] && return 0 + compadd -U -i "$IPREFIX" -I "$ISUFFIX" - "${compstate[unambiguous]%$suf}x" + compstate[list]= + compstate[insert]=unambiguous + return 0 + fi (( _matcher_num++ )) done (( _completer_num++ )) Index: Src/Zle/compcore.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/compcore.c,v retrieving revision 1.45 diff -u -r1.45 compcore.c --- Src/Zle/compcore.c 2001/02/28 09:12:57 1.45 +++ Src/Zle/compcore.c 2001/07/10 09:16:05 @@ -420,7 +420,7 @@ cs = origcs; } /* Print the explanation strings if needed. */ - if (!showinglist && validlist && usemenu != 2 && + if (!showinglist && validlist && usemenu != 2 && uselist && (nmatches != 1 || diffmatches) && useline >= 0 && useline != 2 && (!oldlist || !listshown)) { onlyexpl = 3; Index: Src/Zle/zle_tricky.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_tricky.c,v retrieving revision 1.30 diff -u -r1.30 zle_tricky.c --- Src/Zle/zle_tricky.c 2001/06/25 09:32:21 1.30 +++ Src/Zle/zle_tricky.c 2001/07/10 09:16:06 @@ -2363,6 +2363,8 @@ comppref = 1; ret = expandorcomplete(args); + if (cs && line[cs - 1] == ' ') + makesuffixstr(NULL, "\\-", 0); comppref = 0; return ret; } -- Sven Wischnowsky wischnow@informatik.hu-berlin.de