=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-command-prompt.c,v retrieving revision 1.57 retrieving revision 1.58 diff -c -r1.57 -r1.58 *** src/usr.bin/tmux/cmd-command-prompt.c 2021/08/17 19:26:42 1.57 --- src/usr.bin/tmux/cmd-command-prompt.c 2021/08/20 19:50:16 1.58 *************** *** 1,4 **** ! /* $OpenBSD: cmd-command-prompt.c,v 1.57 2021/08/17 19:26:42 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd-command-prompt.c,v 1.58 2021/08/20 19:50:16 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott *************** *** 71,79 **** struct args *args = cmd_get_args(self); struct client *tc = cmdq_get_target_client(item); struct cmd_find_state *target = cmdq_get_target(item); ! const char *inputs, *prompts, *type; struct cmd_command_prompt_cdata *cdata; ! char *prompt, *ptr, *input = NULL; size_t n; int wait = !args_has(args, 'b'); --- 71,80 ---- struct args *args = cmd_get_args(self); struct client *tc = cmdq_get_target_client(item); struct cmd_find_state *target = cmdq_get_target(item); ! const char *inputs, *prompts, *type, *s; struct cmd_command_prompt_cdata *cdata; ! char *prompt, *comma, *input = NULL; ! u_int count = args_count(args); size_t n; int wait = !args_has(args, 'b'); *************** *** 94,121 **** if (wait) cdata->item = item; ! if (args->argc != 0 && args_has(args, 'F')) ! cdata->template = format_single_from_target(item, args->argv[0]); ! else if (args->argc != 0) ! cdata->template = xstrdup(args->argv[0]); ! else cdata->template = xstrdup("%1"); if ((prompts = args_get(args, 'p')) != NULL) cdata->prompts = xstrdup(prompts); ! else if (args->argc != 0) { n = strcspn(cdata->template, " ,"); ! xasprintf(&cdata->prompts, "(%.*s) ", (int) n, cdata->template); } else cdata->prompts = xstrdup(":"); /* Get first prompt. */ cdata->next_prompt = cdata->prompts; ! ptr = strsep(&cdata->next_prompt, ","); if (prompts == NULL) ! prompt = xstrdup(ptr); else ! xasprintf(&prompt, "%s ", ptr); /* Get initial prompt input. */ if ((inputs = args_get(args, 'I')) != NULL) { --- 95,124 ---- if (wait) cdata->item = item; ! if (count != 0) { ! s = args_string(args, 0); ! if (args_has(args, 'F')) ! cdata->template = format_single_from_target(item, s); ! else ! cdata->template = xstrdup(s); ! } else cdata->template = xstrdup("%1"); if ((prompts = args_get(args, 'p')) != NULL) cdata->prompts = xstrdup(prompts); ! else if (count != 0) { n = strcspn(cdata->template, " ,"); ! xasprintf(&cdata->prompts, "(%.*s) ", (int)n, cdata->template); } else cdata->prompts = xstrdup(":"); /* Get first prompt. */ cdata->next_prompt = cdata->prompts; ! comma = strsep(&cdata->next_prompt, ","); if (prompts == NULL) ! prompt = xstrdup(comma); else ! xasprintf(&prompt, "%s ", comma); /* Get initial prompt input. */ if ((inputs = args_get(args, 'I')) != NULL) { *************** *** 157,163 **** int done) { struct cmd_command_prompt_cdata *cdata = data; ! char *new_template, *prompt, *ptr, *error; char *input = NULL; struct cmdq_item *item = cdata->item; enum cmd_parse_status status; --- 160,166 ---- int done) { struct cmd_command_prompt_cdata *cdata = data; ! char *new_template, *prompt, *comma, *error; char *input = NULL; struct cmdq_item *item = cdata->item; enum cmd_parse_status status; *************** *** 177,184 **** * Check if there are more prompts; if so, get its respective input * and update the prompt data. */ ! if (done && (ptr = strsep(&cdata->next_prompt, ",")) != NULL) { ! xasprintf(&prompt, "%s ", ptr); input = strsep(&cdata->next_input, ","); status_prompt_update(c, prompt, input); --- 180,187 ---- * Check if there are more prompts; if so, get its respective input * and update the prompt data. */ ! if (done && (comma = strsep(&cdata->next_prompt, ",")) != NULL) { ! xasprintf(&prompt, "%s ", comma); input = strsep(&cdata->next_input, ","); status_prompt_update(c, prompt, input);