diff options
Diffstat (limited to 'Src/Zle')
-rw-r--r-- | Src/Zle/compcore.c | 11 | ||||
-rw-r--r-- | Src/Zle/complist.c | 4 | ||||
-rw-r--r-- | Src/Zle/compresult.c | 11 |
3 files changed, 17 insertions, 9 deletions
diff --git a/Src/Zle/compcore.c b/Src/Zle/compcore.c index 1a18f14e3..ded5c3b31 100644 --- a/Src/Zle/compcore.c +++ b/Src/Zle/compcore.c @@ -440,7 +440,7 @@ do_completion(Hookdef dummy, Compldat dat) if (!showinglist && validlist && usemenu != 2 && (nmatches != 1 || diffmatches) && useline >= 0 && useline != 2 && (!oldlist || !listshown)) { - onlyexpl = 1; + onlyexpl = 3; showinglist = -2; } compend: @@ -802,7 +802,8 @@ callcompfunc(char *s, char *fn) else uselist = 0; forcelist = (complist && strstr(complist, "force")); - onlyexpl = (complist && strstr(complist, "expl")); + onlyexpl = (complist ? ((strstr(complist, "expl") ? 1 : 0) | + (strstr(complist, "messages") ? 2 : 0)) : 0); if (!compinsert) useline = 0; @@ -2449,7 +2450,7 @@ addexpl(void) for (n = firstnode(expls); n; incnode(n)) { e = (Cexpl) getdata(n); - if (!strcmp(curexpl->str, e->str)) { + if (e->count >= 0 && !strcmp(curexpl->str, e->str)) { e->count += curexpl->count; e->fcount += curexpl->fcount; @@ -2471,11 +2472,11 @@ addmesg(char *mesg) for (n = firstnode(expls); n; incnode(n)) { e = (Cexpl) getdata(n); - if (!strcmp(mesg, e->str)) + if (e->count < 0 && !strcmp(mesg, e->str)) return; } e = (Cexpl) zhalloc(sizeof(*e)); - e->count = e->fcount = 1; + e->count = e->fcount = -1; e->str = dupstring(mesg); addlinknode(expls, e); newmatches = 1; diff --git a/Src/Zle/complist.c b/Src/Zle/complist.c index bbf2b8d4a..2f7873d63 100644 --- a/Src/Zle/complist.c +++ b/Src/Zle/complist.c @@ -1026,7 +1026,9 @@ compprintlist(int showall) lastused = 1; } while (*e) { - if ((*e)->count) { + if ((*e)->count && + (!listdat.onlyexpl || + (listdat.onlyexpl & ((*e)->count > 0 ? 1 : 2)))) { if (pnl) { if (dolistnl(ml) && compprintnl(ml)) goto end; diff --git a/Src/Zle/compresult.c b/Src/Zle/compresult.c index 4ffd4d62a..1e807a93d 100644 --- a/Src/Zle/compresult.c +++ b/Src/Zle/compresult.c @@ -1170,7 +1170,8 @@ comp_list(char *v) zsfree(complist); complist = ztrdup(v); - onlyexpl = (v && strstr(v, "expl")); + onlyexpl = (v ? ((strstr(v, "expl") ? 1 : 0) | + (strstr(v, "messages") ? 2 : 0)) : 0); } /* This skips over matches that are not to be listed. */ @@ -1300,7 +1301,9 @@ calclist(int showall) } if ((e = g->expls)) { while (*e) { - if ((*e)->count) + if ((*e)->count && + (!onlyexpl || + (onlyexpl & ((*e)->count > 0 ? 1 : 2)))) nlines += 1 + printfmt((*e)->str, (*e)->count, 0, 1); e++; } @@ -1690,7 +1693,9 @@ printlist(int over, CLPrintFunc printm, int showall) int l; while (*e) { - if ((*e)->count) { + if ((*e)->count && + (!listdat.onlyexpl || + (listdat.onlyexpl & ((*e)->count > 0 ? 1 : 2)))) { if (pnl) { putc('\n', shout); pnl = 0; |