1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-11-01 18:30:55 +01:00

fix for partial word completion with empty parts and common suffix (10774)

This commit is contained in:
Sven Wischnowsky 2000-04-17 07:56:25 +00:00
parent 5c53fb9500
commit 8c474bbcd4
2 changed files with 53 additions and 18 deletions

View file

@ -1,3 +1,8 @@
2000-04-17 Sven Wischnowsky <wischnow@informatik.hu-berlin.de>
* 10774: Src/Zle/compmatch.c: fix for partial word completion with
empty parts and common suffix
2000-04-16 Peter Stephenson <pws@pwstephenson.fsnet.co.uk>
* 10771: Etc/MACHINES: successful compilation on OpenBSD, from

View file

@ -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;
}
}
}
}