From 1dbb0b4247592c0bd4d135693e86c3a20b823037 Mon Sep 17 00:00:00 2001 From: Tanaka Akira Date: Mon, 13 Mar 2000 17:00:37 +0000 Subject: zsh-workers/10117 --- Src/Zle/zle_thingy.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'Src/Zle/zle_thingy.c') diff --git a/Src/Zle/zle_thingy.c b/Src/Zle/zle_thingy.c index 25a78c9b9..fd9fa3e7f 100644 --- a/Src/Zle/zle_thingy.c +++ b/Src/Zle/zle_thingy.c @@ -434,7 +434,13 @@ bin_zle_refresh(char *name, char **args, char *ops, char func) static int bin_zle_mesg(char *name, char **args, char *ops, char func) { + if (!zleactive) { + zerrnam(name, "can only be called from widget function", NULL, 0); + return 1; + } showmsg(*args); + if (sfcontext != SFC_WIDGET) + zrefresh(); return 0; } @@ -442,14 +448,14 @@ bin_zle_mesg(char *name, char **args, char *ops, char func) static int bin_zle_unget(char *name, char **args, char *ops, char func) { - char *p = *args; + char *b = *args, *p = b + strlen(b); if (!zleactive) { zerrnam(name, "can only be called from widget function", NULL, 0); return 1; } - while (*p) - ungetkey((int) *p++); + while (p > b) + ungetkey((int) *--p); return 0; } @@ -589,18 +595,18 @@ bin_zle_call(char *name, char **args, char *ops, char func) int ret, saveflag = 0; char *wname = *args++; - if(!zleactive || incompctlfunc || incompfunc) { - zerrnam(name, "widgets can only be called when ZLE is active", - NULL, 0); - return 1; - } - if (!wname) { - zwarnnam(name, "wrong number of arguments", NULL, 0); if (saveflag) zmod = modsave; + return (!zleactive || incompctlfunc || incompfunc || + sfcontext != SFC_WIDGET); + } + if(!zleactive || incompctlfunc || incompfunc || sfcontext != SFC_WIDGET) { + zerrnam(name, "widgets can only be called when ZLE is active", + NULL, 0); return 1; } + while (*args && **args == '-') { char *num; if (!args[0][1] || args[0][1] == '-') { -- cgit 1.4.1