version 1.106, 2021/08/20 18:59:53 |
version 1.107, 2021/08/20 19:50:17 |
|
|
struct args *args = cmd_get_args(self); |
struct args *args = cmd_get_args(self); |
struct cmd_find_state *current = cmdq_get_current(item); |
struct cmd_find_state *current = cmdq_get_current(item); |
struct cmd_find_state *target = cmdq_get_target(item); |
struct cmd_find_state *target = cmdq_get_target(item); |
struct spawn_context sc; |
struct spawn_context sc = { 0 }; |
struct client *tc = cmdq_get_target_client(item); |
struct client *tc = cmdq_get_target_client(item); |
struct session *s = target->s; |
struct session *s = target->s; |
struct winlink *wl = target->wl; |
struct winlink *wl = target->wl; |
|
|
char *cause, *cp, *copy; |
char *cause, *cp, *copy; |
size_t plen; |
size_t plen; |
struct args_value *av; |
struct args_value *av; |
|
u_int count = args_count(args); |
|
|
if (args_has(args, 'h')) |
if (args_has(args, 'h')) |
type = LAYOUT_LEFTRIGHT; |
type = LAYOUT_LEFTRIGHT; |
|
|
size = -1; |
size = -1; |
|
|
window_push_zoom(wp->window, 1, args_has(args, 'Z')); |
window_push_zoom(wp->window, 1, args_has(args, 'Z')); |
input = (args_has(args, 'I') && args->argc == 0); |
input = (args_has(args, 'I') && count == 0); |
|
|
flags = 0; |
flags = 0; |
if (args_has(args, 'b')) |
if (args_has(args, 'b')) |
flags |= SPAWN_BEFORE; |
flags |= SPAWN_BEFORE; |
if (args_has(args, 'f')) |
if (args_has(args, 'f')) |
flags |= SPAWN_FULLSIZE; |
flags |= SPAWN_FULLSIZE; |
if (input || (args->argc == 1 && *args->argv[0] == '\0')) |
if (input || (count == 1 && *args_string(args, 0) == '\0')) |
flags |= SPAWN_EMPTY; |
flags |= SPAWN_EMPTY; |
|
|
lc = layout_split_pane(wp, type, size, flags); |
lc = layout_split_pane(wp, type, size, flags); |
|
|
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
|
|
memset(&sc, 0, sizeof sc); |
|
sc.item = item; |
sc.item = item; |
sc.s = s; |
sc.s = s; |
sc.wl = wl; |
sc.wl = wl; |
|
|
sc.lc = lc; |
sc.lc = lc; |
|
|
sc.name = NULL; |
sc.name = NULL; |
sc.argc = args->argc; |
args_vector(args, &sc.argc, &sc.argv); |
sc.argv = args->argv; |
|
sc.environ = environ_create(); |
sc.environ = environ_create(); |
|
|
av = args_first_value(args, 'e'); |
av = args_first_value(args, 'e'); |
|
|
if ((new_wp = spawn_pane(&sc, &cause)) == NULL) { |
if ((new_wp = spawn_pane(&sc, &cause)) == NULL) { |
cmdq_error(item, "create pane failed: %s", cause); |
cmdq_error(item, "create pane failed: %s", cause); |
free(cause); |
free(cause); |
|
if (sc.argv != NULL) |
|
cmd_free_argv(sc.argc, sc.argv); |
environ_free(sc.environ); |
environ_free(sc.environ); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
|
|
window_remove_pane(wp->window, new_wp); |
window_remove_pane(wp->window, new_wp); |
cmdq_error(item, "%s", cause); |
cmdq_error(item, "%s", cause); |
free(cause); |
free(cause); |
|
if (sc.argv != NULL) |
|
cmd_free_argv(sc.argc, sc.argv); |
environ_free(sc.environ); |
environ_free(sc.environ); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
|
|
cmd_find_from_winlink_pane(&fs, wl, new_wp, 0); |
cmd_find_from_winlink_pane(&fs, wl, new_wp, 0); |
cmdq_insert_hook(s, item, &fs, "after-split-window"); |
cmdq_insert_hook(s, item, &fs, "after-split-window"); |
|
|
|
if (sc.argv != NULL) |
|
cmd_free_argv(sc.argc, sc.argv); |
environ_free(sc.environ); |
environ_free(sc.environ); |
if (input) |
if (input) |
return (CMD_RETURN_WAIT); |
return (CMD_RETURN_WAIT); |