From 8c474bbcd4c78ec465e7198a0bbb47def78374a8 Mon Sep 17 00:00:00 2001 From: Sven Wischnowsky Date: Mon, 17 Apr 2000 07:56:25 +0000 Subject: fix for partial word completion with empty parts and common suffix (10774) --- ChangeLog | 5 ++++ Src/Zle/compmatch.c | 66 ++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 53 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0568efd49..69a521487 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2000-04-17 Sven Wischnowsky + + * 10774: Src/Zle/compmatch.c: fix for partial word completion with + empty parts and common suffix + 2000-04-16 Peter Stephenson * 10771: Etc/MACHINES: successful compilation on OpenBSD, from diff --git a/Src/Zle/compmatch.c b/Src/Zle/compmatch.c index 00072b0ee..f0e5a7c47 100644 --- a/Src/Zle/compmatch.c +++ b/Src/Zle/compmatch.c @@ -1767,7 +1767,7 @@ join_clines(Cline o, Cline n) 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 @@ join_clines(Cline o, Cline n) 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 @@ join_clines(Cline o, Cline n) 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 @@ join_clines(Cline o, Cline n) 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 @@ join_clines(Cline o, Cline n) } 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; + } } } } -- cgit 1.4.1