version 1.27, 2021/08/13 17:03:29 |
version 1.28, 2021/08/20 19:50:16 |
|
|
struct client *tc = cmdq_get_target_client(item); |
struct client *tc = cmdq_get_target_client(item); |
struct menu *menu = NULL; |
struct menu *menu = NULL; |
struct menu_item menu_item; |
struct menu_item menu_item; |
const char *key; |
const char *key, *name; |
char *title, *name; |
char *title; |
int flags = 0, i; |
int flags = 0; |
u_int px, py; |
u_int px, py, i, count = args_count(args); |
|
|
if (tc->overlay_draw != NULL) |
if (tc->overlay_draw != NULL) |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
|
|
title = xstrdup(""); |
title = xstrdup(""); |
menu = menu_create(title); |
menu = menu_create(title); |
|
|
for (i = 0; i != args->argc; /* nothing */) { |
for (i = 0; i != count; /* nothing */) { |
name = args->argv[i++]; |
name = args_string(args, i++); |
if (*name == '\0') { |
if (*name == '\0') { |
menu_add_item(menu, NULL, item, tc, target); |
menu_add_item(menu, NULL, item, tc, target); |
continue; |
continue; |
} |
} |
|
|
if (args->argc - i < 2) { |
if (count - i < 2) { |
cmdq_error(item, "not enough arguments"); |
cmdq_error(item, "not enough arguments"); |
free(title); |
free(title); |
menu_free(menu); |
menu_free(menu); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
key = args->argv[i++]; |
key = args_string(args, i++); |
|
|
menu_item.name = name; |
menu_item.name = name; |
menu_item.key = key_string_lookup_string(key); |
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); |
menu_add_item(menu, &menu_item, item, tc, target); |
} |
} |
|
|
struct session *s = target->s; |
struct session *s = target->s; |
struct client *tc = cmdq_get_target_client(item); |
struct client *tc = cmdq_get_target_client(item); |
struct tty *tty = &tc->tty; |
struct tty *tty = &tc->tty; |
const char *value, *shell[] = { NULL, NULL }; |
const char *value, *shell, *shellcmd = NULL; |
const char *shellcmd = NULL; |
char *cwd, *cause, **argv = NULL; |
char *cwd, *cause, **argv = args->argv; |
int flags = 0, argc = 0; |
int flags = 0, argc = args->argc; |
u_int px, py, w, h, count = args_count(args); |
u_int px, py, w, h; |
|
|
|
if (args_has(args, 'C')) { |
if (args_has(args, 'C')) { |
server_client_clear_overlay(tc); |
server_client_clear_overlay(tc); |
|
|
cwd = format_single_from_target(item, value); |
cwd = format_single_from_target(item, value); |
else |
else |
cwd = xstrdup(server_client_get_cwd(tc, s)); |
cwd = xstrdup(server_client_get_cwd(tc, s)); |
if (argc == 0) |
if (count == 0) |
shellcmd = options_get_string(s->options, "default-command"); |
shellcmd = options_get_string(s->options, "default-command"); |
else if (argc == 1) |
else if (count == 1) |
shellcmd = argv[0]; |
shellcmd = args_string(args, 0); |
if (argc <= 1 && (shellcmd == NULL || *shellcmd == '\0')) { |
if (count <= 1 && (shellcmd == NULL || *shellcmd == '\0')) { |
shellcmd = NULL; |
shellcmd = NULL; |
shell[0] = options_get_string(s->options, "default-shell"); |
shell = options_get_string(s->options, "default-shell"); |
if (!checkshell(shell[0])) |
if (!checkshell(shell)) |
shell[0] = _PATH_BSHELL; |
shell = _PATH_BSHELL; |
argc = 1; |
cmd_append_argv(&argc, &argv, shell); |
argv = (char**)shell; |
} else |
} |
args_vector(args, &argc, &argv); |
|
|
if (args_has(args, 'E') > 1) |
if (args_has(args, 'E') > 1) |
flags |= POPUP_CLOSEEXITZERO; |
flags |= POPUP_CLOSEEXITZERO; |
|
|
if (args_has(args, 'B')) |
if (args_has(args, 'B')) |
flags |= POPUP_NOBORDER; |
flags |= POPUP_NOBORDER; |
if (popup_display(flags, item, px, py, w, h, shellcmd, argc, argv, cwd, |
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); |
return (CMD_RETURN_NORMAL); |
|
} |
|
cmd_free_argv(argc, argv); |
return (CMD_RETURN_WAIT); |
return (CMD_RETURN_WAIT); |
} |
} |