summaryrefslogtreecommitdiff
path: root/Src/Zle/complist.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Zle/complist.c')
-rw-r--r--Src/Zle/complist.c16
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;