summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-08-13 23:44:18 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-08-13 23:44:18 +0000
commit09cbd0c695cdd953834a46d161f6d3b0bf385c1c (patch)
tree547649ceb2c777efe0cb20b2f2cae7ae0d7e1108
parent7a359c00aca2e35dc26c2239f4261f0fa53f0caf (diff)
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.
-rw-r--r--cmd-command-prompt.c2
-rw-r--r--cmd-confirm-before.c4
-rw-r--r--cmd-select-prompt.c2
-rw-r--r--mode-key.c2
-rw-r--r--status.c11
5 files changed, 11 insertions, 10 deletions
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);