Switch the prompt code to return an empty string when the user enters no

response and reserve NULL for an explicit cancel. Change all callbacks to treat
them the same so no functional change.

Also add cancel key bindings to emacs mode which were missing.
pull/1/head
Nicholas Marriott 2009-08-13 23:44:18 +00:00
parent 7a359c00ac
commit 09cbd0c695
5 changed files with 11 additions and 10 deletions

View File

@ -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);

View File

@ -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) {

View File

@ -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);

View File

@ -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 },

View File

@ -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);