Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: BUG: Extended completion with alternative completion
- X-seq: zsh-workers 4504
- From: "Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxx>
- To: Sven Wischnowsky <wischnow@xxxxxxxxxxxxxxxxxxxxxxx>, zsh-workers@xxxxxxxxxxxxxxx
- Subject: Re: BUG: Extended completion with alternative completion
- Date: Mon, 2 Nov 1998 09:20:45 -0800
- In-reply-to: <199811021143.MAA22063@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
- References: <199811021143.MAA22063@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
On Nov 2, 12:43pm, Sven Wischnowsky wrote:
} Subject: Re: BUG: Extended completion with alternative completion
}
} Bart Schaefer wrote:
} > There are two problems: (1) in get_ccompctl(), when we chose to return
} > the n[] completion, we lose track of the alternative (which hangs off
} > the xor pointer in the head of the linked list of -x patterns); (2) we're
} > prematurely returning an error in makecomplist(), so even if we still had
} > the handle to the xor, we'd never follow it.
}
} Well, (1) is taken care of in the modifications of the completion code
} that are soon to appear.
That's good.
} And I have to admit that I don't really understand your other
} problem. If you want cdmatch to be called even if the cursor is before
} the '/', you should use `C[0,*/*]', the manual says that with `n[i,s]'
} anything up to the i'th occurrence of s is not part of the completion
I don't actually want cdmatch to be called; I just used that as an example
because I can't get -anything- to be called.
What I want is for something else to be called when cdmatch doesn't give
any completions, e.g., cdmatch was called for n[-1,/] but result=(). The
definition of alternative completion is that the next alternative is tried
when the previous one doesn't produce any matches; that's all I'm trying to
get to have happen, and even the 3.0.5 manual claims that it should work
with the extended completion form that I used (`+' after the `--').
} Also I don't have any trouble with your second compctl-version
} (trouble in the sense of SEGV or something like that).
No, I don't either; just a feep() I that shouldn't be feeped.
} So, could you please tell me what you wanted to have completed after
} the `cd S/M'? (I guess you want `cd Src/Modules' but that would also
} require a change in cdmatch.) Maybe I will then understand which fix
} you are suggesting for (2).
I can show you directly what fix I'm suggesting for (2) (note, I do NOT
at this point recommend that anyone apply this patch, it has minimal
usefulness without also fixing what we're calling (1) here):
Index: zle_tricky.c
===================================================================
RCS file: /extra/cvsroot/zsh/zsh-3.1/Src/Zle/zle_tricky.c,v
retrieving revision 1.15
diff -u -r1.15 zle_tricky.c
--- zle_tricky.c 1998/10/30 17:52:48 1.15
+++ zle_tricky.c 1998/11/02 08:31:00
@@ -2290,7 +2290,7 @@
s += *compadd;
if ((offs -= *compadd) < 0)
/* It's bigger than our word prefix, so we can't help here... */
- return 1;
+ goto xornext;
/* Insert the prefix (compctl -P), if any. */
if (cc->prefix) {
@@ -3037,6 +3037,8 @@
validlist = 1;
if (nmatches && !errflag)
return 0;
+
+ xornext:
if ((isf || cc->xor) && !parampre) {
/* We found no matches, but there is a xor'ed completion: *
(In the `if ((isf ...' block is another goto that jumps back to the top
of makecomplist() to try again with cc->xor.)
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Messages sorted by:
Reverse Date,
Date,
Thread,
Author