=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-split-window.c,v retrieving revision 1.106 retrieving revision 1.107 diff -c -r1.106 -r1.107 *** src/usr.bin/tmux/cmd-split-window.c 2021/08/20 18:59:53 1.106 --- src/usr.bin/tmux/cmd-split-window.c 2021/08/20 19:50:17 1.107 *************** *** 1,4 **** ! /* $OpenBSD: cmd-split-window.c,v 1.106 2021/08/20 18:59:53 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd-split-window.c,v 1.107 2021/08/20 19:50:17 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott *************** *** 56,62 **** struct args *args = cmd_get_args(self); struct cmd_find_state *current = cmdq_get_current(item); struct cmd_find_state *target = cmdq_get_target(item); ! struct spawn_context sc; struct client *tc = cmdq_get_target_client(item); struct session *s = target->s; struct winlink *wl = target->wl; --- 56,62 ---- struct args *args = cmd_get_args(self); struct cmd_find_state *current = cmdq_get_current(item); struct cmd_find_state *target = cmdq_get_target(item); ! struct spawn_context sc = { 0 }; struct client *tc = cmdq_get_target_client(item); struct session *s = target->s; struct winlink *wl = target->wl; *************** *** 69,74 **** --- 69,75 ---- char *cause, *cp, *copy; size_t plen; struct args_value *av; + u_int count = args_count(args); if (args_has(args, 'h')) type = LAYOUT_LEFTRIGHT; *************** *** 112,125 **** size = -1; window_push_zoom(wp->window, 1, args_has(args, 'Z')); ! input = (args_has(args, 'I') && args->argc == 0); flags = 0; if (args_has(args, 'b')) flags |= SPAWN_BEFORE; if (args_has(args, 'f')) flags |= SPAWN_FULLSIZE; ! if (input || (args->argc == 1 && *args->argv[0] == '\0')) flags |= SPAWN_EMPTY; lc = layout_split_pane(wp, type, size, flags); --- 113,126 ---- size = -1; window_push_zoom(wp->window, 1, args_has(args, 'Z')); ! input = (args_has(args, 'I') && count == 0); flags = 0; if (args_has(args, 'b')) flags |= SPAWN_BEFORE; if (args_has(args, 'f')) flags |= SPAWN_FULLSIZE; ! if (input || (count == 1 && *args_string(args, 0) == '\0')) flags |= SPAWN_EMPTY; lc = layout_split_pane(wp, type, size, flags); *************** *** 128,134 **** return (CMD_RETURN_ERROR); } - memset(&sc, 0, sizeof sc); sc.item = item; sc.s = s; sc.wl = wl; --- 129,134 ---- *************** *** 137,144 **** sc.lc = lc; sc.name = NULL; ! sc.argc = args->argc; ! sc.argv = args->argv; sc.environ = environ_create(); av = args_first_value(args, 'e'); --- 137,143 ---- sc.lc = lc; sc.name = NULL; ! args_vector(args, &sc.argc, &sc.argv); sc.environ = environ_create(); av = args_first_value(args, 'e'); *************** *** 159,164 **** --- 158,165 ---- if ((new_wp = spawn_pane(&sc, &cause)) == NULL) { cmdq_error(item, "create pane failed: %s", cause); free(cause); + if (sc.argv != NULL) + cmd_free_argv(sc.argc, sc.argv); environ_free(sc.environ); return (CMD_RETURN_ERROR); } *************** *** 168,173 **** --- 169,176 ---- window_remove_pane(wp->window, new_wp); cmdq_error(item, "%s", cause); free(cause); + if (sc.argv != NULL) + cmd_free_argv(sc.argc, sc.argv); environ_free(sc.environ); return (CMD_RETURN_ERROR); } *************** *** 188,193 **** --- 191,198 ---- cmd_find_from_winlink_pane(&fs, wl, new_wp, 0); cmdq_insert_hook(s, item, &fs, "after-split-window"); + if (sc.argv != NULL) + cmd_free_argv(sc.argc, sc.argv); environ_free(sc.environ); if (input) return (CMD_RETURN_WAIT);