From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1569 invoked from network); 5 Nov 1998 13:06:09 -0000 Received: from math.gatech.edu (list@130.207.146.50) by ns1.primenet.com.au with SMTP; 5 Nov 1998 13:06:09 -0000 Received: (from list@localhost) by math.gatech.edu (8.9.1/8.9.1) id HAA24346; Thu, 5 Nov 1998 07:59:43 -0500 (EST) Resent-Date: Thu, 5 Nov 1998 07:59:43 -0500 (EST) Message-Id: <9811051244.AA17981@ibmth.df.unipi.it> To: zsh-workers@math.gatech.edu (Zsh hackers list) Subject: PATCH: Re: Two more (possible) problems with the new completion... In-Reply-To: "Sven Wischnowsky"'s message of "Thu, 05 Nov 1998 13:05:24 NFT." <199811051205.NAA31465@beta.informatik.hu-berlin.de> Date: Thu, 05 Nov 1998 13:44:27 +0100 From: Peter Stephenson Resent-Message-ID: <"whLAq2.0.Ly5._4QGs"@math> Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/4556 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu Sven Wischnowsky wrote: > `-W' behaves like `-k', you only need `compctl -W cdpath -/ cd'. There > is some extra hacklet that ensures that the old style (giving one > directory) still works (in most cases): if the string isn't an > parameter name, it is used directly as a directory name. So, unless > you have a directory named `$cdpath' (*not* the value of `cdpath') it > will produce no matches. Fine, but ... :-) In this case the return value of get_user_var() is a pointer to the stored array itself, so the array shouldn't be modified. The present code does a mischief to the value of $cdpath after the completion is finished. The patch below fixes it (I can even do this one myself). > > so at some point the cursor is being put one character too far back. > > It doesn't happen with a `genuine' autoremoveslash. > > This is a real bug (there really is an embarassing number of them, > sigh). The cursor should be moved on the suffix only when completing > inside words (paths, whatever). This works fine. I don't think it's suprising that there are small bugs left, it was a major change to the most complicated part of the shell (possibly the most complicated part of any shell). *** Src/Zle/zle_tricky.c.arr Thu Nov 5 13:16:46 1998 --- Src/Zle/zle_tricky.c Thu Nov 5 13:31:47 1998 *************** *** 3854,3872 **** addwhat = CC_FILES; if (cc->withd) { ! char **pp, *tp; int tl = strlen(ppre) + 2, pl; ! if ((dirs = pp = get_user_var(cc->withd))) { while (*pp) { pl = strlen(*pp); tp = (char *) halloc(strlen(*pp) + tl); strcpy(tp, *pp); tp[pl] = '/'; strcpy(tp + pl + 1, ppre); ! *pp = tp; pp++; } } } if (!dirs) { --- 3854,3875 ---- addwhat = CC_FILES; if (cc->withd) { ! char **pp, **npp, *tp; int tl = strlen(ppre) + 2, pl; ! if ((pp = get_user_var(cc->withd))) { ! dirs = npp = ! (char*) halloc(sizeof(char *)*(arrlen(pp)+1)); while (*pp) { pl = strlen(*pp); tp = (char *) halloc(strlen(*pp) + tl); strcpy(tp, *pp); tp[pl] = '/'; strcpy(tp + pl + 1, ppre); ! *npp++ = tp; pp++; } + *npp = '\0'; } } if (!dirs) { -- Peter Stephenson Tel: +39 050 844536 WWW: http://www.ifh.de/~pws/ Dipartimento di Fisica, Via Buonarotti 2, 56100 Pisa, Italy