Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: Re: Two more (possible) problems with the new completion...



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 <pws@xxxxxxxxxxxxxxxxx>       Tel: +39 050 844536
WWW:  http://www.ifh.de/~pws/
Dipartimento di Fisica, Via Buonarotti 2, 56100 Pisa, Italy



Messages sorted by: Reverse Date, Date, Thread, Author