summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-07-28 06:48:44 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-07-28 06:48:44 +0000
commit2da48644837cd51cfe5a9628140866f06e049e50 (patch)
tree299073ccb81f85b53b47b60324cd1508f8e2621e
parent309b76fb3255529976ff7ade7e29df8624647312 (diff)
If select-layout is not given an argument, repply the last layout used in the
window, if any.
-rw-r--r--cmd-select-layout.c18
-rw-r--r--cmd-server-info.c4
-rw-r--r--layout-set.c35
-rw-r--r--tmux.15
-rw-r--r--tmux.h2
-rw-r--r--window.c2
6 files changed, 42 insertions, 24 deletions
diff --git a/cmd-select-layout.c b/cmd-select-layout.c
index a2b053ac..3613514e 100644
--- a/cmd-select-layout.c
+++ b/cmd-select-layout.c
@@ -29,8 +29,8 @@ int cmd_select_layout_exec(struct cmd *, struct cmd_ctx *);
const struct cmd_entry cmd_select_layout_entry = {
"select-layout", "selectl",
- CMD_TARGET_WINDOW_USAGE " layout-name",
- CMD_ARG1, 0,
+ CMD_TARGET_WINDOW_USAGE " [layout-name]",
+ CMD_ARG01, 0,
cmd_select_layout_init,
cmd_target_parse,
cmd_select_layout_exec,
@@ -72,11 +72,15 @@ cmd_select_layout_exec(struct cmd *self, struct cmd_ctx *ctx)
if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL)
return (-1);
- if ((layout = layout_set_lookup(data->arg)) == -1) {
- ctx->error(ctx, "unknown or ambiguous layout: %s", data->arg);
- return (-1);
- }
-
+ if (data->arg == NULL) {
+ layout = wl->window->lastlayout;
+ if (layout == -1)
+ return (0);
+ } else if ((layout = layout_set_lookup(data->arg)) == -1) {
+ ctx->error(ctx, "unknown layout or ambiguous: %s", data->arg);
+ return (-1);
+ }
+
layout = layout_set_select(wl->window, layout);
ctx->info(ctx, "arranging in: %s", layout_set_name(layout));
diff --git a/cmd-server-info.c b/cmd-server-info.c
index 24cd90b7..ce038e12 100644
--- a/cmd-server-info.c
+++ b/cmd-server-info.c
@@ -112,9 +112,9 @@ cmd_server_info_exec(unused struct cmd *self, struct cmd_ctx *ctx)
RB_FOREACH(wl, winlinks, &s->windows) {
w = wl->window;
ctx->print(ctx, "%4u: %s [%ux%u] [flags=0x%x, "
- "references=%u, layout=%u]", wl->idx, w->name,
+ "references=%u, last layout=%d]", wl->idx, w->name,
w->sx, w->sy, w->flags, w->references,
- w->layout);
+ w->lastlayout);
j = 0;
TAILQ_FOREACH(wp, &w->panes, entry) {
lines = ulines = size = usize = 0;
diff --git a/layout-set.c b/layout-set.c
index 4433d0cf..8c54a166 100644
--- a/layout-set.c
+++ b/layout-set.c
@@ -74,36 +74,47 @@ layout_set_select(struct window *w, u_int layout)
if (layout_sets[layout].arrange != NULL)
layout_sets[layout].arrange(w);
- w->layout = layout;
+ w->lastlayout = layout;
return (layout);
}
u_int
layout_set_next(struct window *w)
{
- u_int layout = w->layout;
+ u_int layout;
+
+ if (w->lastlayout == -1)
+ layout = 0;
+ else {
+ layout = w->lastlayout + 1;
+ if (layout > nitems(layout_sets) - 1)
+ layout = 0;
+ }
if (layout_sets[layout].arrange != NULL)
layout_sets[layout].arrange(w);
-
- w->layout++;
- if (w->layout > nitems(layout_sets) - 1)
- w->layout = 0;
+ w->lastlayout = layout;
return (layout);
}
u_int
layout_set_previous(struct window *w)
{
- u_int layout = w->layout;
+ u_int layout;
+
+ if (w->lastlayout == -1)
+ layout = nitems(layout_sets) - 1;
+ else {
+ layout = w->lastlayout;
+ if (layout == 0)
+ layout = nitems(layout_sets) - 1;
+ else
+ layout--;
+ }
if (layout_sets[layout].arrange != NULL)
layout_sets[layout].arrange(w);
-
- if (w->layout == 0)
- w->layout = nitems(layout_sets) - 1;
- else
- w->layout--;
+ w->lastlayout = layout;
return (layout);
}
diff --git a/tmux.1 b/tmux.1
index 0ba9eec9..d3e8979d 100644
--- a/tmux.1
+++ b/tmux.1
@@ -1064,10 +1064,13 @@ has the same meaning as in the
command.
.It Xo Ic select-layout
.Op Fl t Ar target-window
-.Ar layout-name
+.Op Ar layout-name
.Xc
.D1 (alias: selectl )
Choose a specific layout for a window.
+If
+.Ar layout-name
+is not given, the last layout used (if any) is reapplied.
.It Xo Ic select-pane
.Op Fl p Ar pane-index
.Op Fl t Ar target-window
diff --git a/tmux.h b/tmux.h
index 67623eee..af0fed59 100644
--- a/tmux.h
+++ b/tmux.h
@@ -663,7 +663,7 @@ struct window {
struct window_pane *active;
struct window_panes panes;
- u_int layout;
+ int lastlayout;
struct layout_cell *layout_root;
u_int sx;
diff --git a/window.c b/window.c
index bc6906a8..d1f92920 100644
--- a/window.c
+++ b/window.c
@@ -231,7 +231,7 @@ window_create1(u_int sx, u_int sy)
TAILQ_INIT(&w->panes);
w->active = NULL;
- w->layout = 0;
+ w->lastlayout = -1;
w->layout_root = NULL;
w->sx = sx;