diff options
author | Thomas Adam <thomas@xteddy.org> | 2021-08-20 22:01:46 +0100 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2021-08-20 22:01:46 +0100 |
commit | b0da0cee4d54aa64db0f49eee509a76fd89d6f68 (patch) | |
tree | 1e54ddb0b113708c46e80d342d10be74cdf7b176 /cmd-display-menu.c | |
parent | 944fde7c57c4f3caebb04cfc3943a81ee9729de8 (diff) | |
parent | d589be6c65c7295880bb84cd875baab2f77d5067 (diff) | |
download | rtmux-b0da0cee4d54aa64db0f49eee509a76fd89d6f68.tar.gz rtmux-b0da0cee4d54aa64db0f49eee509a76fd89d6f68.tar.bz2 rtmux-b0da0cee4d54aa64db0f49eee509a76fd89d6f68.zip |
Merge branch 'obsd-master' into master
Diffstat (limited to 'cmd-display-menu.c')
-rw-r--r-- | cmd-display-menu.c | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/cmd-display-menu.c b/cmd-display-menu.c index 9e7bc3a2..49ddf13d 100644 --- a/cmd-display-menu.c +++ b/cmd-display-menu.c @@ -260,10 +260,10 @@ cmd_display_menu_exec(struct cmd *self, struct cmdq_item *item) struct client *tc = cmdq_get_target_client(item); struct menu *menu = NULL; struct menu_item menu_item; - const char *key; - char *title, *name; - int flags = 0, i; - u_int px, py; + const char *key, *name; + char *title; + int flags = 0; + u_int px, py, i, count = args_count(args); if (tc->overlay_draw != NULL) return (CMD_RETURN_NORMAL); @@ -274,24 +274,24 @@ cmd_display_menu_exec(struct cmd *self, struct cmdq_item *item) title = xstrdup(""); menu = menu_create(title); - for (i = 0; i != args->argc; /* nothing */) { - name = args->argv[i++]; + for (i = 0; i != count; /* nothing */) { + name = args_string(args, i++); if (*name == '\0') { menu_add_item(menu, NULL, item, tc, target); continue; } - if (args->argc - i < 2) { + if (count - i < 2) { cmdq_error(item, "not enough arguments"); free(title); menu_free(menu); return (CMD_RETURN_ERROR); } - key = args->argv[i++]; + key = args_string(args, i++); menu_item.name = name; menu_item.key = key_string_lookup_string(key); - menu_item.command = args->argv[i++]; + menu_item.command = args_string(args, i++); menu_add_item(menu, &menu_item, item, tc, target); } @@ -328,11 +328,10 @@ cmd_display_popup_exec(struct cmd *self, struct cmdq_item *item) struct session *s = target->s; struct client *tc = cmdq_get_target_client(item); struct tty *tty = &tc->tty; - const char *value, *shell[] = { NULL, NULL }; - const char *shellcmd = NULL; - char *cwd, *cause, **argv = args->argv; - int flags = 0, argc = args->argc; - u_int px, py, w, h; + const char *value, *shell, *shellcmd = NULL; + char *cwd, *cause, **argv = NULL; + int flags = 0, argc = 0; + u_int px, py, w, h, count = args_count(args); if (args_has(args, 'C')) { server_client_clear_overlay(tc); @@ -373,18 +372,18 @@ cmd_display_popup_exec(struct cmd *self, struct cmdq_item *item) cwd = format_single_from_target(item, value); else cwd = xstrdup(server_client_get_cwd(tc, s)); - if (argc == 0) + if (count == 0) shellcmd = options_get_string(s->options, "default-command"); - else if (argc == 1) - shellcmd = argv[0]; - if (argc <= 1 && (shellcmd == NULL || *shellcmd == '\0')) { + else if (count == 1) + shellcmd = args_string(args, 0); + if (count <= 1 && (shellcmd == NULL || *shellcmd == '\0')) { shellcmd = NULL; - shell[0] = options_get_string(s->options, "default-shell"); - if (!checkshell(shell[0])) - shell[0] = _PATH_BSHELL; - argc = 1; - argv = (char**)shell; - } + shell = options_get_string(s->options, "default-shell"); + if (!checkshell(shell)) + shell = _PATH_BSHELL; + cmd_append_argv(&argc, &argv, shell); + } else + args_vector(args, &argc, &argv); if (args_has(args, 'E') > 1) flags |= POPUP_CLOSEEXITZERO; @@ -393,7 +392,10 @@ cmd_display_popup_exec(struct cmd *self, struct cmdq_item *item) if (args_has(args, 'B')) flags |= POPUP_NOBORDER; if (popup_display(flags, item, px, py, w, h, shellcmd, argc, argv, cwd, - tc, s, NULL, NULL) != 0) + tc, s, NULL, NULL) != 0) { + cmd_free_argv(argc, argv); return (CMD_RETURN_NORMAL); + } + cmd_free_argv(argc, argv); return (CMD_RETURN_WAIT); } |