diff --git a/cmd-command-prompt.c b/cmd-command-prompt.c index f729a66e..dac334b2 100644 --- a/cmd-command-prompt.c +++ b/cmd-command-prompt.c @@ -112,7 +112,7 @@ cmd_command_prompt_callback(void *data, const char *s) char *cause, *ptr, *buf, ch; size_t len, slen; - if (s == NULL) + if (s == NULL || *s == '\0') return (0); slen = strlen(s); diff --git a/cmd-confirm-before.c b/cmd-confirm-before.c index db799a4b..fd366b9b 100644 --- a/cmd-confirm-before.c +++ b/cmd-confirm-before.c @@ -107,7 +107,9 @@ cmd_confirm_before_callback(void *data, const char *s) struct cmd_ctx ctx; char *cause; - if (s == NULL || tolower((u_char) s[0]) != 'y' || s[1] != '\0') + if (s == NULL || *s == '\0') + return (0); + if (tolower((u_char) s[0]) != 'y' || s[1] != '\0') return (0); if (cmd_string_parse(cdata->cmd, &cmdlist, &cause) != 0) { diff --git a/cmd-select-prompt.c b/cmd-select-prompt.c index a7965e29..bead0619 100644 --- a/cmd-select-prompt.c +++ b/cmd-select-prompt.c @@ -66,7 +66,7 @@ cmd_select_prompt_callback(void *data, const char *s) char msg[128]; u_int idx; - if (s == NULL) + if (s == NULL || *s == '\0') return (0); idx = strtonum(s, 0, UINT_MAX, &errstr); diff --git a/mode-key.c b/mode-key.c index 6ceb01b6..d36504fd 100644 --- a/mode-key.c +++ b/mode-key.c @@ -181,6 +181,7 @@ struct mode_key_tree mode_key_tree_vi_copy; const struct mode_key_entry mode_key_emacs_edit[] = { { '\001' /* C-a */, 0, MODEKEYEDIT_STARTOFLINE }, { '\002' /* C-p */, 0, MODEKEYEDIT_CURSORLEFT }, + { '\003' /* C-c */, 0, MODEKEYEDIT_CANCEL }, { '\004' /* C-d */, 0, MODEKEYEDIT_DELETE }, { '\005' /* C-e */, 0, MODEKEYEDIT_ENDOFLINE }, { '\006' /* C-f */, 0, MODEKEYEDIT_CURSORRIGHT }, @@ -190,6 +191,7 @@ const struct mode_key_entry mode_key_emacs_edit[] = { { '\016' /* C-n */, 0, MODEKEYEDIT_HISTORYDOWN }, { '\020' /* C-p */, 0, MODEKEYEDIT_HISTORYUP }, { '\031' /* C-y */, 0, MODEKEYEDIT_PASTE }, + { '\033' /* Escape */, 0, MODEKEYEDIT_CANCEL }, { '\r', 0, MODEKEYEDIT_ENTER }, { 'm' | KEYC_ESCAPE, 0, MODEKEYEDIT_STARTOFLINE }, { KEYC_BSPACE, 0, MODEKEYEDIT_BACKSPACE }, diff --git a/status.c b/status.c index 47a5d8e4..c42dc896 100644 --- a/status.c +++ b/status.c @@ -920,14 +920,11 @@ status_prompt_key(struct client *c, int key) c->flags |= CLIENT_STATUS; break; case MODEKEYEDIT_ENTER: - if (*c->prompt_buffer != '\0') { + if (*c->prompt_buffer != '\0') status_prompt_add_history(c); - if (c->prompt_callbackfn( - c->prompt_data, c->prompt_buffer) == 0) - status_prompt_clear(c); - break; - } - /* FALLTHROUGH */ + if (c->prompt_callbackfn(c->prompt_data, c->prompt_buffer) == 0) + status_prompt_clear(c); + break; case MODEKEYEDIT_CANCEL: if (c->prompt_callbackfn(c->prompt_data, NULL) == 0) status_prompt_clear(c);