From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23185 invoked from network); 2 Nov 1999 11:02:06 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 2 Nov 1999 11:02:06 -0000 Received: (qmail 16092 invoked by alias); 2 Nov 1999 11:01:58 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 8481 Received: (qmail 16084 invoked from network); 2 Nov 1999 11:01:57 -0000 Date: Tue, 2 Nov 1999 12:01:55 +0100 (MET) Message-Id: <199911021101.MAA30678@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk Subject: PATCH: small fix for compmatchers An empty string in `compmatchers' should mean that completion without global match specs should be tried. Weird, I thought I already had made sure that that worked... Bye Sven diff -u oldsrc/Zle/compcore.c Src/Zle/compcore.c --- oldsrc/Zle/compcore.c Fri Oct 29 15:03:06 1999 +++ Src/Zle/compcore.c Tue Nov 2 11:55:57 1999 @@ -800,15 +800,14 @@ int n; for (n = 0; m; m = m->next, n++) { - if (m->matcher) { - *mp = (Cmlist) zhalloc(sizeof(struct cmlist)); - (*mp)->matcher = m->matcher; - (*mp)->next = NULL; - (*mp)->str = dupstring(m->str); - mp = &((*mp)->next); - addlinknode(matchers, m->matcher); + *mp = (Cmlist) zhalloc(sizeof(struct cmlist)); + (*mp)->matcher = m->matcher; + (*mp)->next = NULL; + (*mp)->str = dupstring(m->str); + mp = &((*mp)->next); + addlinknode(matchers, m->matcher); + if (m->matcher) m->matcher->refc++; - } } m = mm; compmatcher = 1; diff -u oldsrc/Zle/compmatch.c Src/Zle/compmatch.c --- oldsrc/Zle/compmatch.c Fri Oct 29 15:03:06 1999 +++ Src/Zle/compmatch.c Tue Nov 2 11:55:49 1999 @@ -1016,7 +1016,7 @@ while (len) { for (t = 0, ms = bmatchers; ms && !t; ms = ms->next) { mp = ms->matcher; - if (mp->flags == CMF_RIGHT && mp->wlen == -1 && + if (mp && mp->flags == CMF_RIGHT && mp->wlen == -1 && !mp->llen && len >= mp->ralen && mp->ralen && pattern_match(mp->right, str, NULL, NULL)) { int olen = str - p, llen; @@ -1136,7 +1136,7 @@ t = 0; for (ms = bmatchers; ms && !t; ms = ms->next) { mp = ms->matcher; - if (!mp->flags && mp->wlen <= wlen && mp->llen <= l && + if (mp && !mp->flags && mp->wlen <= wlen && mp->llen <= l && pattern_match(mp->line, (sfx ? line - mp->llen : line), NULL, ea) && pattern_match(mp->word, (sfx ? word - mp->wlen : word), @@ -1186,7 +1186,7 @@ /* Different characters, try the matchers. */ for (t = 0, ms = bmatchers; ms && !t; ms = ms->next) { mp = ms->matcher; - if (!mp->flags && mp->wlen > 0 && mp->llen > 0 && + if (mp && !mp->flags && mp->wlen > 0 && mp->llen > 0 && mp->wlen <= la && mp->wlen <= lb) { /* The pattern has no anchors and the word * pattern fits, try it. */ @@ -1373,7 +1373,7 @@ /* We use only those patterns that match a non-empty * string in both the line and the word and that have * no anchors. */ - if (!mp->flags && mp->wlen > 0 && mp->llen > 0) { + if (mp && !mp->flags && mp->wlen > 0 && mp->llen > 0) { /* We first test, if the old string matches already the * new one. */ if (mp->llen <= ol && mp->wlen <= nl && -- Sven Wischnowsky wischnow@informatik.hu-berlin.de