aboutsummaryrefslogtreecommitdiff
path: root/cmd-command-prompt.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2021-08-27 20:01:11 +0100
committerThomas Adam <thomas@xteddy.org>2021-08-27 20:01:11 +0100
commit609baea95e30201919a173ea1de1f750a15a9f8c (patch)
tree68225d4bd3ba7e258cddb8e6b40f0764408a6e32 /cmd-command-prompt.c
parentc6375a0d4003d1008bb64e96e9c0c4433e4a5d13 (diff)
parentdaec63e5e6eb3390d53f4bf7f8a327df77e46c95 (diff)
downloadrtmux-609baea95e30201919a173ea1de1f750a15a9f8c.tar.gz
rtmux-609baea95e30201919a173ea1de1f750a15a9f8c.tar.bz2
rtmux-609baea95e30201919a173ea1de1f750a15a9f8c.zip
Merge branch 'obsd-master' into master
Diffstat (limited to 'cmd-command-prompt.c')
-rw-r--r--cmd-command-prompt.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/cmd-command-prompt.c b/cmd-command-prompt.c
index 737c44c7..820053ec 100644
--- a/cmd-command-prompt.c
+++ b/cmd-command-prompt.c
@@ -169,11 +169,13 @@ static int
cmd_command_prompt_callback(struct client *c, void *data, const char *s,
int done)
{
- struct cmd_command_prompt_cdata *cdata = data;
- char *error;
- struct cmdq_item *item = cdata->item, *new_item;
- struct cmd_list *cmdlist;
- struct cmd_command_prompt_prompt *prompt;
+ struct cmd_command_prompt_cdata *cdata = data;
+ char *error;
+ struct cmdq_item *item = cdata->item, *new_item;
+ struct cmd_list *cmdlist;
+ struct cmd_command_prompt_prompt *prompt;
+ int argc = 0;
+ char **argv = NULL;
if (s == NULL)
goto out;
@@ -181,7 +183,6 @@ cmd_command_prompt_callback(struct client *c, void *data, const char *s,
if (cdata->flags & PROMPT_INCREMENTAL)
goto out;
- cmd_append_argv(&cdata->argc, &cdata->argv, s);
if (++cdata->current != cdata->count) {
prompt = &cdata->prompts[cdata->current];
status_prompt_update(c, prompt->prompt, prompt->input);
@@ -189,8 +190,15 @@ cmd_command_prompt_callback(struct client *c, void *data, const char *s,
}
}
- cmdlist = args_make_commands(cdata->state, cdata->argc, cdata->argv,
- &error);
+ argc = cdata->argc;
+ argv = cmd_copy_argv(cdata->argc, cdata->argv);
+ cmd_append_argv(&argc, &argv, s);
+ if (done) {
+ cdata->argc = argc;
+ cdata->argv = cmd_copy_argv(argc, argv);
+ }
+
+ cmdlist = args_make_commands(cdata->state, argc, argv, &error);
if (cmdlist == NULL) {
cmdq_append(c, cmdq_get_error(error));
free(error);
@@ -201,6 +209,7 @@ cmd_command_prompt_callback(struct client *c, void *data, const char *s,
new_item = cmdq_get_command(cmdlist, cmdq_get_state(item));
cmdq_insert_after(item, new_item);
}
+ cmd_free_argv(argc, argv);
if (c->prompt_inputcb != cmd_command_prompt_callback)
return (1);