From mboxrd@z Thu Jan 1 00:00:00 1970 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes Date: Mon, 1 Feb 1999 10:01:10 +0100 (MET) Message-Id: <199902010901.KAA06905@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk Subject: PATCH: another completion matcher cleanup X-Mailing-List: 5144 The patch below fixes two problems with the completion matching stuff. Using it for partial-word matching, completing words that contained consecutive part-separators failed (e.g. `f--'). Also, with partial-word matching the cursor was sometimes left in the wrong place. The patch works with a nicely patched pws-5 and with a pws-6. Bye Sven diff -u os/Zle/zle_tricky.c Src/Zle/zle_tricky.c --- os/Zle/zle_tricky.c Fri Jan 29 15:56:35 1999 +++ Src/Zle/zle_tricky.c Sat Jan 30 16:05:25 1999 @@ -1906,8 +1906,10 @@ while (ll && lw) { for (ms = mstack; ms; ms = ms->next) { for (mp = ms->matcher; mp; mp = mp->next) { - if (nm == mp || lm == mp) + if (nm == mp || lm == mp) { + nm = NULL; continue; + } t = 1; /* Try to match the prefix, if any. */ if (mp->flags & CMF_LEFT) { @@ -1943,7 +1945,7 @@ NULL, NULL, mp)) break; } - if (k) { + if (k && i) { if (nlp) { nw = addtoword(&rw, &rwlen, nw, mp, l, w, i, 0); @@ -2119,8 +2121,10 @@ while (ll && lw) { for (ms = mstack; ms; ms = ms->next) { for (mp = ms->matcher; mp; mp = mp->next) { - if (nm == mp || lm == mp) + if (nm == mp || lm == mp) { + nm = NULL; continue; + } t = 1; if (mp->flags & CMF_RIGHT) { if (il < mp->ralen || iw < mp->ralen) @@ -2148,13 +2152,13 @@ if (t) { int i = 0, j = iw, k = lw; int jj = il + mp->llen, kk = ll - mp->llen; - char *p = l - mp->llen, *q = w; + char *p = l - mp->llen - 1, *q = w - 1; for (; k; i++, j++, k--, q--) - if (match_sfx(p, q, NULL, NULL, - NULL, mp)) + if (match_pfx(p, q, NULL, NULL, + NULL, NULL, mp)) break; - if (k) { + if (k && i) { if (nlp) { nw = addtoword(&rw, &rwlen, nw, mp, l - mp->llen, w - i, @@ -2164,10 +2168,10 @@ ((mp->flags & CMF_LEFT) ? CLF_SUF : 0)); } - w = q; + w = q + 1; iw = j; lw = k; - l = p; + l = p + 1; il = jj; ll = kk; bc -= i; -- Sven Wischnowsky wischnow@informatik.hu-berlin.de