diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/Zle/complist.c | 5 | ||||
-rw-r--r-- | Src/Zle/compresult.c | 13 |
2 files changed, 15 insertions, 3 deletions
diff --git a/Src/Zle/complist.c b/Src/Zle/complist.c index af8dea6f0..3e746b914 100644 --- a/Src/Zle/complist.c +++ b/Src/Zle/complist.c @@ -986,7 +986,7 @@ compnicezputs(char *s, int ml) static int compprintlist(int showall) { - static int lasttype = 0, lastbeg = 0, lastml = 0; + static int lasttype = 0, lastbeg = 0, lastml = 0, lastinvcount = -1; static int lastn = 0, lastnl = 0, lastnlnct = -1; static Cmgroup lastg = NULL; static Cmatch *lastp = NULL; @@ -999,7 +999,7 @@ compprintlist(int showall) int lastused = 0; mfirstl = -1; - if (mnew || lastbeg != mlbeg || mlbeg < 0) { + if (mnew || lastinvcount != invcount || lastbeg != mlbeg || mlbeg < 0) { lasttype = 0; lastg = NULL; lastexpl = NULL; @@ -1010,6 +1010,7 @@ compprintlist(int showall) lines - nlnct - mhasstat : listdat.nlines) - (lastnlnct > nlnct); lastnlnct = nlnct; mrestlines = lines - 1; + lastinvcount = invcount; if (cl < 2) { cl = -1; diff --git a/Src/Zle/compresult.c b/Src/Zle/compresult.c index 13ae8c3b3..7b2707681 100644 --- a/Src/Zle/compresult.c +++ b/Src/Zle/compresult.c @@ -30,6 +30,12 @@ #include "complete.mdh" #include "compresult.pro" +/* This counts how often the list of completions was invalidated. + * Can be used to detect if we have a new list. */ + +/**/ +mod_export int invcount; + #define inststr(X) inststrlen((X),1,-1) /* This cuts the cline list before the stuff that isn't worth @@ -1264,6 +1270,8 @@ skipnolist(Cmatch *p, int showall) mod_export int calclist(int showall) { + static int lastinvcount = -1; + Cmgroup g; Cmatch *p, m; Cexpl *e; @@ -1271,10 +1279,12 @@ calclist(int showall) int max = 0, i; VARARR(int, mlens, nmatches + 1); - if (listdat.valid && onlyexpl == listdat.onlyexpl && + if (lastinvcount == invcount && + listdat.valid && onlyexpl == listdat.onlyexpl && menuacc == listdat.menuacc && showall == listdat.showall && lines == listdat.lines && columns == listdat.columns) return 0; + lastinvcount = invcount; for (g = amatches; g; g = g->next) { char **pp = g->ylist; @@ -2089,6 +2099,7 @@ list_matches(Hookdef dummy, void *dummy2) mod_export int invalidate_list(void) { + invcount++; if (validlist) { if (showinglist == -2) zrefresh(); |