From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4182 invoked from network); 17 Apr 2000 07:55:20 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 17 Apr 2000 07:55:20 -0000 Received: (qmail 7176 invoked by alias); 17 Apr 2000 07:55:09 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 10774 Received: (qmail 7163 invoked from network); 17 Apr 2000 07:55:09 -0000 Date: Mon, 17 Apr 2000 09:55:04 +0200 (MET DST) Message-Id: <200004170755.JAA08001@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk Subject: PATCH: partial word completion This could fail terribly with a common suffix and with empty parts. Bye Sven Index: Src/Zle/compmatch.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/compmatch.c,v retrieving revision 1.4 diff -u -r1.4 compmatch.c --- Src/Zle/compmatch.c 2000/04/07 09:16:37 1.4 +++ Src/Zle/compmatch.c 2000/04/17 07:44:01 @@ -1767,7 +1767,7 @@ free_cline(o); x = o; o = tn; - if (po && cmp_anchors(x, po, 0)) { + if (po && po->prefix && cmp_anchors(x, po, 0)) { po->flags |= CLF_MISS; po->max += diff; } else { @@ -1784,7 +1784,7 @@ if (tn && cmp_anchors(o, tn, 0)) { diff = sub_join(o, n, tn, 0); - if (po && cmp_anchors(n, pn, 0)) { + if (po && po->prefix && cmp_anchors(n, pn, 0)) { po->flags |= CLF_MISS; po->max += diff; } else { @@ -1850,7 +1850,7 @@ if (tn) { diff = sub_join(o, n, tn, 0); - if (po && cmp_anchors(n, pn, 0)) { + if (po && po->prefix && cmp_anchors(n, pn, 0)) { po->flags |= CLF_MISS; po->max += diff; } else { @@ -1864,19 +1864,21 @@ n = n->next; continue; } else { - for (t = o; (tn = t->next) && !cmp_anchors(n, tn, 1); - t = tn); + Cline to; - if (tn) { - diff = sub_join(n, o, tn, 1); + for (t = o; (to = t->next) && !cmp_anchors(n, to, 1); + t = to); + if (to) { + diff = sub_join(n, o, to, 1); + if (po) - po->next = tn; + po->next = to; else - oo = tn; + oo = to; x = o; - o = tn; - if (po && cmp_anchors(x, po, 0)) { + o = to; + if (po && po->prefix && cmp_anchors(x, po, 0)) { po->flags |= CLF_MISS; po->max += diff; } else { @@ -1885,14 +1887,42 @@ } continue; } else { - if (o->flags & CLF_SUF) - break; + Cline tt = NULL; - o->word = o->line = o->orig = NULL; - o->wlen = 0; - free_cline(o->next); - o->next = NULL; - o->flags |= CLF_MISS; + for (t = n; (tn = t->next); t = tn) { + for (tt = o; + (to = tt->next) && + !cmp_anchors(tn, to, 1); tt = to); + if (tt) + break; + } + if (tt) { + diff = sub_join(n, o, to, 1); + + if (po) + po->next = to; + else + oo = to; + x = o; + o = to; + if (po && po->prefix && cmp_anchors(x, po, 0)) { + po->flags |= CLF_MISS; + po->max += diff; + } else { + o->flags |= CLF_MISS; + o->max += diff; + } + continue; + } else { + if (o->flags & CLF_SUF) + break; + + o->word = o->line = o->orig = NULL; + o->wlen = 0; + free_cline(o->next); + o->next = NULL; + o->flags |= CLF_MISS; + } } } } -- Sven Wischnowsky wischnow@informatik.hu-berlin.de