From: Kevin McCarthy Date: Sun, 28 Jul 2019 17:13:22 +0000 (-0700) Subject: Add a comment to the OPTIGNOREMACROEVENTS km_dokey() change. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6f1e5196364e028ab4033c0ebc85b0793d06cc7f;p=mutt Add a comment to the OPTIGNOREMACROEVENTS km_dokey() change. The option was added in commit 53900afa, and its actual purpose was to separate out an "unget" event buffer from the "macro" buffer, to solve a problem with certificate prompts. The safest approach in a low-level function like km_dokey() was to return an error if new macros were generated when the option is set. However, this results in an unbuffered username/password prompt being aborted. Currently the only users of unbuffered input are the SSL certificate prompts, which use menu->dialog mode (and thus mutt_getch() directly) and username/password prompts. So the only affected cases are editor-menu prompts, and returning the pressed keys is likely less surprising than aborting the prompt. If other unbuffered menus are created in the future, we may want to add a check for which menu mode is being used. --- diff --git a/keymap.c b/keymap.c index 1fa00de7..eabd48ad 100644 --- a/keymap.c +++ b/keymap.c @@ -542,6 +542,17 @@ int km_dokey (int menu) if (map->op != OP_MACRO) return map->op; + /* OPTIGNOREMACROEVENTS turns off processing the MacroEvents buffer + * in mutt_getch(). Generating new macro events during that time would + * result in undesired behavior once the option is turned off. + * + * Originally this returned -1, however that results in an unbuffered + * username or password prompt being aborted. Returning OP_NULL allows + * _mutt_enter_string() to display the keybinding pressed instead. + * + * It may be unexpected for a macro's keybinding to be returned, + * but less so than aborting the prompt. + */ if (option (OPTIGNOREMACROEVENTS)) { return OP_NULL;