Martin Steigerwald wrote on Fri, Nov 18, 2016 at 14:15:51 +0100: > So two fixes to consider: > > 1) Don´t confirm on space, as thats to easy to trigger accidentally. :)
The code confirms on both tabs (since commit 7f1ce570) and spaces (since before CVS). Does anyone know a reason for doing this? The patch also downscopes a couple of local variables, with no functional change. diff --git a/README b/README index 855e764..4834e00 100644 --- a/README +++ b/README @@ -116,6 +116,11 @@ are output as "export" commands unless the parameter is also local, and other parameters not local to the scope are output with the "-g" option. Previously, only "typeset" commands were output, never using "-g". +8) At spelling-correction prompt ($SPROMPT), where the choices offered are +[nyae], previously <Enter> would be accepted to mean [N] and <Space> and +<Tab> would be accepted to mean [Y]. Now <Space> and <Tab> are invalid +choices: typing either of them remains at the prompt. + Incompatibilities between 5.0.8 and 5.2 --------------------------------------- diff --git a/Src/utils.c b/Src/utils.c index 7bbd588..7f3ddad 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -2944,9 +2944,7 @@ mod_export void spckword(char **s, int hist, int cmd, int ask) { char *t, *correct_ignore; - int x; char ic = '\0'; - int ne; int preflen = 0; int autocd = cmd && isset(AUTOCD) && strcmp(*s, ".") && strcmp(*s, ".."); @@ -3015,6 +3013,7 @@ spckword(char **s, int hist, int cmd, int ask) } else { guess = *s; if (*guess == Tilde || *guess == String) { + int ne; ic = *guess; if (!*++t) return; @@ -3059,6 +3058,7 @@ spckword(char **s, int hist, int cmd, int ask) if (errflag) return; if (best && (int)strlen(best) > 1 && strcmp(best, guess)) { + int x; if (ic) { char *u; if (preflen) { @@ -3088,14 +3088,14 @@ spckword(char **s, int hist, int cmd, int ask) free(pptbuf); fflush(shout); zbeep(); - x = getquery("nyae \t", 0); + x = getquery("nyae", 0); if (cmd && x == 'n') pathchecked = path; } else x = 'n'; } else x = 'y'; - if (x == 'y' || x == ' ' || x == '\t') { + if (x == 'y') { *s = dupstring(best); if (hist) hwrep(best); On a tangent: what do "nyae" mean? I couldn't find the answer in the manual. > 2) Don´t autocorrect to dangerous commands like "rm". Could be a bit > challenging to make a list of commands which are dangerous and can easily > trigger unwanted actions. "rm" would IMO definately be one of this, while > with > "dd" it would be harder to trigger an unwanted action by accident due to > syntax requirements. > > Axel made me aware that I tell Z-Shell to ignore dangerous commands with > CORRECT_IGNORE=rm, but I think it would be good to reconsider the standard > behavior. Well, it _does_ prompt the user asking whether "rm" is correct. Isn't that sufficient? Cheers, Daniel