From eb41692bc56f22c7587426c4e5fa3c75ea0dfeab Mon Sep 17 00:00:00 2001 From: Sven Wischnowsky Date: Mon, 5 Mar 2001 10:48:10 +0000 Subject: fix for matching control, try harder to merge separately completed parts to avoid losing user-typed characters (13565) --- Src/Zle/compmatch.c | 26 ++++++++++++++++++++++++-- Src/Zle/compresult.c | 4 ++-- 2 files changed, 26 insertions(+), 4 deletions(-) (limited to 'Src') diff --git a/Src/Zle/compmatch.c b/Src/Zle/compmatch.c index 0bd8e82f3..45220a298 100644 --- a/Src/Zle/compmatch.c +++ b/Src/Zle/compmatch.c @@ -2001,8 +2001,7 @@ join_clines(Cline o, Cline n) else oo = to; o = to; - } - if (tn) { + diff = sub_join(o, n, tn, 0); o->flags |= CLF_MISS; @@ -2064,6 +2063,29 @@ join_clines(Cline o, Cline n) } continue; } else { + for (tn = n; tn; tn = tn->next) + if ((tn->flags & CLF_NEW) == + (o->flags & CLF_NEW) && + cmp_anchors(tn, o, 1)) break; + + if (tn) { + if ((diff = sub_join(o, n, tn, 0))) { + if (po) { + po->flags |= CLF_MISS; + po->max += diff; + } + else { + o->flags |= CLF_MISS; + o->max += diff; + } + } + n = tn; + po = o; + o = o->next; + pn = n; + n = n->next; + continue; + } if (o->flags & CLF_SUF) break; diff --git a/Src/Zle/compresult.c b/Src/Zle/compresult.c index b2c240188..9b85948f9 100644 --- a/Src/Zle/compresult.c +++ b/Src/Zle/compresult.c @@ -253,7 +253,7 @@ cline_str(Cline l, int ins, int *csp, LinkList posl) opos = npos; addlinknode(posl, (void *) ((long) npos)); } - if (((pmax < (l->max - l->min) || (pma && l->max != l->min)) && + if (((pmax <= (l->max - l->min) || (pma && l->max != l->min)) && (!pmm || (l->flags & CLF_MATCHED))) || ((l->flags & CLF_MATCHED) && !pmm)) { pm = cs; pmax = l->max - l->min; pmm = l->flags & CLF_MATCHED; @@ -307,7 +307,7 @@ cline_str(Cline l, int ins, int *csp, LinkList posl) opos = npos; addlinknode(posl, (void *) ((long) npos)); } - if (((smax < (l->min - l->max) || (sma && l->max != l->min)) && + if (((smax <= (l->min - l->max) || (sma && l->max != l->min)) && (!smm || (l->flags & CLF_MATCHED))) || ((l->flags & CLF_MATCHED) && !smm)) { sm = cs; smax = l->min - l->max; smm = l->flags & CLF_MATCHED; -- cgit 1.4.1