diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/Zle/complist.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/Src/Zle/complist.c b/Src/Zle/complist.c index 5190511bf..ee68a6726 100644 --- a/Src/Zle/complist.c +++ b/Src/Zle/complist.c @@ -395,6 +395,7 @@ static int mnew, mlastcols, mlastlines, mhasstat, mfirstl, mlastm; static int mlprinted, molbeg = -2, mocol = 0, moline = 0, mstatprinted; static char *mstatus, *mlistp; static Cmatch **mtab, **mmtabp; +static int mtab_been_reallocated; static Cmgroup *mgtab, *mgtabp; static struct listcols mcolors; @@ -1657,6 +1658,8 @@ complistmatches(Hookdef dummy, Chdata dat) if (mnew) { int i; + mtab_been_reallocated = 1; + i = columns * listdat.nlines; free(mtab); mtab = (Cmatch **) zalloc(i * sizeof(Cmatch **)); @@ -1934,6 +1937,7 @@ domenuselect(Hookdef dummy, Chdata dat) Cmatch **p; Cmgroup *pg; Thingy cmd; + int do_last_key = 0; Menustack u = NULL; int i = 0, acc = 0, wishcol = 0, setwish = 0, oe = onlyexpl, wasnext = 0; int space, lbeg = 0, step = 1, wrap, pl = nlnct, broken = 0, first = 1; @@ -1999,6 +2003,7 @@ domenuselect(Hookdef dummy, Chdata dat) mlbeg = 0; molbeg = -42; for (;;) { + mtab_been_reallocated = 0; if (mline < 0) { int x, y; Cmatch **p = mtab; @@ -2115,7 +2120,16 @@ domenuselect(Hookdef dummy, Chdata dat) getk: - if (!(cmd = getkeycmd()) || cmd == Th(z_sendbreak)) { + if (!do_last_key) { + cmd = getkeycmd(); + if (mtab_been_reallocated) { + do_last_key = 1; + continue; + } + } + do_last_key = 0; + + if (!cmd || cmd == Th(z_sendbreak)) { zbeep(); molbeg = -1; break; |