version 1.24, 2014/10/20 22:34:31 |
version 1.25, 2015/04/28 10:43:13 |
|
|
|
|
#include <sys/types.h> |
#include <sys/types.h> |
|
|
|
#include <stdlib.h> |
|
|
#include "tmux.h" |
#include "tmux.h" |
|
|
/* |
/* |
|
|
|
|
const struct cmd_entry cmd_select_layout_entry = { |
const struct cmd_entry cmd_select_layout_entry = { |
"select-layout", "selectl", |
"select-layout", "selectl", |
"npt:", 0, 1, |
"nopt:", 0, 1, |
"[-np] " CMD_TARGET_WINDOW_USAGE " [layout-name]", |
"[-nop] " CMD_TARGET_WINDOW_USAGE " [layout-name]", |
0, |
0, |
cmd_select_layout_exec |
cmd_select_layout_exec |
}; |
}; |
|
|
{ |
{ |
struct args *args = self->args; |
struct args *args = self->args; |
struct winlink *wl; |
struct winlink *wl; |
|
struct window *w; |
const char *layoutname; |
const char *layoutname; |
|
char *oldlayout; |
int next, previous, layout; |
int next, previous, layout; |
|
|
if ((wl = cmd_find_window(cmdq, args_get(args, 't'), NULL)) == NULL) |
if ((wl = cmd_find_window(cmdq, args_get(args, 't'), NULL)) == NULL) |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
server_unzoom_window(wl->window); |
w = wl->window; |
|
|
|
server_unzoom_window(w); |
|
|
next = self->entry == &cmd_next_layout_entry; |
next = self->entry == &cmd_next_layout_entry; |
if (args_has(self->args, 'n')) |
if (args_has(args, 'n')) |
next = 1; |
next = 1; |
previous = self->entry == &cmd_previous_layout_entry; |
previous = self->entry == &cmd_previous_layout_entry; |
if (args_has(self->args, 'p')) |
if (args_has(args, 'p')) |
previous = 1; |
previous = 1; |
|
|
|
oldlayout = w->old_layout; |
|
w->old_layout = layout_dump(w->layout_root); |
|
|
if (next || previous) { |
if (next || previous) { |
if (next) |
if (next) |
layout = layout_set_next(wl->window); |
layout_set_next(w); |
else |
else |
layout = layout_set_previous(wl->window); |
layout_set_previous(w); |
server_redraw_window(wl->window); |
goto changed; |
return (CMD_RETURN_NORMAL); |
|
} |
} |
|
|
if (args->argc == 0) |
if (!args_has(args, 'o')) { |
layout = wl->window->lastlayout; |
if (args->argc == 0) |
else |
layout = w->lastlayout; |
layout = layout_set_lookup(args->argv[0]); |
else |
if (layout != -1) { |
layout = layout_set_lookup(args->argv[0]); |
layout = layout_set_select(wl->window, layout); |
if (layout != -1) { |
server_redraw_window(wl->window); |
layout_set_select(w, layout); |
return (CMD_RETURN_NORMAL); |
goto changed; |
|
} |
} |
} |
|
|
if (args->argc != 0) { |
if (args->argc != 0) |
layoutname = args->argv[0]; |
layoutname = args->argv[0]; |
if (layout_parse(wl->window, layoutname) == -1) { |
else if (args_has(args, 'o')) |
|
layoutname = oldlayout; |
|
else |
|
layoutname = NULL; |
|
|
|
if (layoutname != NULL) { |
|
if (layout_parse(w, layoutname) == -1) { |
cmdq_error(cmdq, "can't set layout: %s", layoutname); |
cmdq_error(cmdq, "can't set layout: %s", layoutname); |
return (CMD_RETURN_ERROR); |
goto error; |
} |
} |
server_redraw_window(wl->window); |
goto changed; |
} |
} |
|
|
|
free(oldlayout); |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
|
|
|
changed: |
|
free(oldlayout); |
|
server_redraw_window(w); |
|
return (CMD_RETURN_NORMAL); |
|
|
|
error: |
|
free(w->old_layout); |
|
w->old_layout = oldlayout; |
|
return (CMD_RETURN_ERROR); |
} |
} |