=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-display-menu.c,v retrieving revision 1.33 retrieving revision 1.34 diff -c -r1.33 -r1.34 *** src/usr.bin/tmux/cmd-display-menu.c 2021/08/27 17:25:55 1.33 --- src/usr.bin/tmux/cmd-display-menu.c 2021/10/11 10:55:30 1.34 *************** *** 1,4 **** ! /* $OpenBSD: cmd-display-menu.c,v 1.33 2021/08/27 17:25:55 nicm Exp $ */ /* * Copyright (c) 2019 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd-display-menu.c,v 1.34 2021/10/11 10:55:30 nicm Exp $ */ /* * Copyright (c) 2019 Nicholas Marriott *************** *** 53,62 **** .name = "display-popup", .alias = "popup", ! .args = { "BCc:d:Eh:t:w:x:y:", 0, -1, NULL }, ! .usage = "[-BCE] [-c target-client] [-d start-directory] [-h height] " ! CMD_TARGET_PANE_USAGE " [-w width] " ! "[-x position] [-y position] [shell-command]", .target = { 't', CMD_FIND_PANE, 0 }, --- 53,62 ---- .name = "display-popup", .alias = "popup", ! .args = { "BCc:d:e:Eh:t:w:x:y:", 0, -1, NULL }, ! .usage = "[-BCE] [-c target-client] [-d start-directory] " ! "[-e environment] [-h height] " CMD_TARGET_PANE_USAGE " " ! "[-w width] [-x position] [-y position] [shell-command]", .target = { 't', CMD_FIND_PANE, 0 }, *************** *** 357,362 **** --- 357,364 ---- char *cwd, *cause, **argv = NULL; int flags = 0, argc = 0; u_int px, py, w, h, count = args_count(args); + struct args_value *av; + struct environ *env = NULL; if (args_has(args, 'C')) { server_client_clear_overlay(tc); *************** *** 410,426 **** } else args_to_vector(args, &argc, &argv); if (args_has(args, 'E') > 1) flags |= POPUP_CLOSEEXITZERO; else if (args_has(args, 'E')) flags |= POPUP_CLOSEEXIT; 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) { cmd_free_argv(argc, argv); return (CMD_RETURN_NORMAL); } cmd_free_argv(argc, argv); return (CMD_RETURN_WAIT); } --- 412,441 ---- } else args_to_vector(args, &argc, &argv); + if (args_has(args, 'e') >= 1) { + env = environ_create(); + av = args_first_value(args, 'e'); + while (av != NULL) { + environ_put(env, av->string, 0); + av = args_next_value(av); + } + } + if (args_has(args, 'E') > 1) flags |= POPUP_CLOSEEXITZERO; else if (args_has(args, 'E')) flags |= POPUP_CLOSEEXIT; if (args_has(args, 'B')) flags |= POPUP_NOBORDER; ! if (popup_display(flags, item, px, py, w, h, env, shellcmd, argc, argv, ! cwd, tc, s, NULL, NULL) != 0) { cmd_free_argv(argc, argv); + if (env != NULL) + environ_free(env); return (CMD_RETURN_NORMAL); } + if (env != NULL) + environ_free(env); cmd_free_argv(argc, argv); return (CMD_RETURN_WAIT); }