summaryrefslogtreecommitdiff
path: root/Src/Zle/zle_misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Zle/zle_misc.c')
-rw-r--r--Src/Zle/zle_misc.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/Src/Zle/zle_misc.c b/Src/Zle/zle_misc.c
index 738e7b8c4..961776f43 100644
--- a/Src/Zle/zle_misc.c
+++ b/Src/Zle/zle_misc.c
@@ -966,11 +966,19 @@ scancompcmd(HashNode hn, UNUSED(int flags))
#define NAMLEN 60
+/*
+ * Local keymap used when reading a command name for the
+ * execute-named-command and where-is widgets.
+ */
+
+/**/
+Keymap command_keymap;
+
/**/
Thingy
executenamedcommand(char *prmt)
{
- Thingy cmd;
+ Thingy cmd, retval = NULL;
int l, len, feep = 0, listed = 0, curlist = 0;
int ols = (listshown && validlist), olll = lastlistlen;
char *cmdbuf, *ptr;
@@ -988,6 +996,7 @@ executenamedcommand(char *prmt)
strcpy(cmdbuf, prmt);
zsfree(prmt);
statusline = cmdbuf;
+ selectlocalmap(command_keymap);
selectkeymap("main", 1);
ptr = cmdbuf += l;
len = 0;
@@ -1005,7 +1014,8 @@ executenamedcommand(char *prmt)
} else if (listed)
clearlist = listshown = 1;
- return NULL;
+ retval = NULL;
+ goto done;
}
if(cmd == Th(z_clearscreen)) {
clearscreen(zlenoargs);
@@ -1090,7 +1100,9 @@ executenamedcommand(char *prmt)
lastlistlen = olll;
} else if (listed)
clearlist = listshown = 1;
- return r;
+
+ retval = r;
+ goto done;
}
unrefthingy(r);
}
@@ -1180,6 +1192,10 @@ executenamedcommand(char *prmt)
handlefeep(zlenoargs);
feep = 0;
}
+
+ done:
+ selectlocalmap(NULL);
+ return retval;
}
/*****************/