version 1.94, 2019/04/28 20:05:50 |
version 1.95, 2019/05/03 20:44:24 |
|
|
.name = "split-window", |
.name = "split-window", |
.alias = "splitw", |
.alias = "splitw", |
|
|
.args = { "bc:de:fF:l:hp:Pt:v", 0, -1 }, |
.args = { "bc:de:fF:hIl:p:Pt:v", 0, -1 }, |
.usage = "[-bdefhvP] [-c start-directory] [-e environment] [-F format] " |
.usage = "[-bdefhIPv] [-c start-directory] [-e environment] " |
"[-p percentage|-l size] " CMD_TARGET_PANE_USAGE " [command]", |
"[-F format] [-p percentage|-l size] " CMD_TARGET_PANE_USAGE |
|
" [command]", |
|
|
.target = { 't', CMD_FIND_PANE, 0 }, |
.target = { 't', CMD_FIND_PANE, 0 }, |
|
|
|
|
enum layout_type type; |
enum layout_type type; |
struct layout_cell *lc; |
struct layout_cell *lc; |
struct cmd_find_state fs; |
struct cmd_find_state fs; |
int size, percentage, flags; |
int size, percentage, flags, input; |
const char *template, *add; |
const char *template, *add; |
char *cause, *cp; |
char *cause, *cp; |
struct args_value *value; |
struct args_value *value; |
|
|
size = -1; |
size = -1; |
|
|
server_unzoom_window(wp->window); |
server_unzoom_window(wp->window); |
|
input = (args_has(args, 'I') && args->argc == 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')) |
|
flags |= SPAWN_EMPTY; |
|
|
lc = layout_split_pane(wp, type, size, flags); |
lc = layout_split_pane(wp, type, size, flags); |
if (lc == NULL) { |
if (lc == NULL) { |
|
|
sc.flags |= SPAWN_DETACHED; |
sc.flags |= SPAWN_DETACHED; |
|
|
if ((new_wp = spawn_pane(&sc, &cause)) == NULL) { |
if ((new_wp = spawn_pane(&sc, &cause)) == NULL) { |
|
layout_close_pane(new_wp); |
cmdq_error(item, "create pane failed: %s", cause); |
cmdq_error(item, "create pane failed: %s", cause); |
free(cause); |
free(cause); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
|
if (input && window_pane_start_input(new_wp, item, &cause) != 0) { |
|
layout_close_pane(new_wp); |
|
window_remove_pane(wp->window, new_wp); |
|
cmdq_error(item, "%s", cause); |
|
free(cause); |
|
return (CMD_RETURN_ERROR); |
|
} |
if (!args_has(args, 'd')) |
if (!args_has(args, 'd')) |
cmd_find_from_winlink_pane(current, wl, new_wp, 0); |
cmd_find_from_winlink_pane(current, wl, new_wp, 0); |
server_redraw_window(wp->window); |
server_redraw_window(wp->window); |
|
|
cmdq_insert_hook(s, item, &fs, "after-split-window"); |
cmdq_insert_hook(s, item, &fs, "after-split-window"); |
|
|
environ_free(sc.environ); |
environ_free(sc.environ); |
|
if (input) |
|
return (CMD_RETURN_WAIT); |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
} |
} |