summaryrefslogtreecommitdiff
path: root/Src/Zle/zle_keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Zle/zle_keymap.c')
-rw-r--r--Src/Zle/zle_keymap.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/Src/Zle/zle_keymap.c b/Src/Zle/zle_keymap.c
index 7cd3b2365..7b1f9e1ad 100644
--- a/Src/Zle/zle_keymap.c
+++ b/Src/Zle/zle_keymap.c
@@ -400,8 +400,24 @@ selectkeymap(char *name, int fb)
km = openkeymap(name = ".safe");
}
if(name != curkeymapname) {
- zsfree(curkeymapname);
+ char *oname = curkeymapname;
+ Thingy chgthingy;
+
curkeymapname = ztrdup(name);
+
+ if (oname && zleactive && strcmp(oname, curkeymapname) &&
+ (chgthingy = rthingy_nocreate("zle-keymap-select"))) {
+ char *args[2];
+ int saverrflag = errflag, savretflag = retflag;
+ args[0] = oname;
+ args[1] = NULL;
+ errflag = retflag = 0;
+ execzlefunc(chgthingy, args);
+ unrefthingy(chgthingy);
+ errflag = saverrflag;
+ retflag = savretflag;
+ }
+ zsfree(oname);
}
curkeymap = km;
return 0;