aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2018-03-16 16:02:28 +0000
committerThomas Adam <thomas@xteddy.org>2018-03-16 16:02:28 +0000
commit0ca78ee51faedc67f2192ff5be05aa11852cffd9 (patch)
treeaad9be62bb50054a7c54df50eb456eb5f3337cc9
parent9fd995275201893a604d15bb426e0f5a7f7971e6 (diff)
parentf87d80737ebeffa302f3e0f9ea2efab98d747825 (diff)
downloadrtmux-0ca78ee51faedc67f2192ff5be05aa11852cffd9.tar.gz
rtmux-0ca78ee51faedc67f2192ff5be05aa11852cffd9.tar.bz2
rtmux-0ca78ee51faedc67f2192ff5be05aa11852cffd9.zip
Merge branch 'obsd-master'
-rw-r--r--cmd-split-window.c8
-rw-r--r--tmux.h2
-rw-r--r--window.c14
3 files changed, 15 insertions, 9 deletions
diff --git a/cmd-split-window.c b/cmd-split-window.c
index c7889a2c..6a0a2e2a 100644
--- a/cmd-split-window.c
+++ b/cmd-split-window.c
@@ -63,7 +63,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item)
const char *cmd, *path, *shell, *template, *tmp;
char **argv, *cause, *new_cause, *cp, *cwd;
u_int hlimit;
- int argc, size, percentage;
+ int argc, size, percentage, before;
enum layout_type type;
struct layout_cell *lc;
struct environ_entry *envent;
@@ -95,6 +95,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item)
type = LAYOUT_TOPBOTTOM;
if (args_has(args, 'h'))
type = LAYOUT_LEFTRIGHT;
+ before = args_has(args, 'b');
size = -1;
if (args_has(args, 'l')) {
@@ -124,13 +125,12 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item)
if (*shell == '\0' || areshell(shell))
shell = _PATH_BSHELL;
- lc = layout_split_pane(wp, type, size, args_has(args, 'b'),
- args_has(args, 'f'));
+ lc = layout_split_pane(wp, type, size, before, args_has(args, 'f'));
if (lc == NULL) {
cause = xstrdup("pane too small");
goto error;
}
- new_wp = window_add_pane(w, wp, args_has(args, 'b'), hlimit);
+ new_wp = window_add_pane(w, wp, before, args_has(args, 'f'), hlimit);
layout_make_leaf(lc, new_wp);
path = NULL;
diff --git a/tmux.h b/tmux.h
index 29d30708..95758a00 100644
--- a/tmux.h
+++ b/tmux.h
@@ -2149,7 +2149,7 @@ int window_has_pane(struct window *, struct window_pane *);
int window_set_active_pane(struct window *, struct window_pane *);
void window_redraw_active_switch(struct window *,
struct window_pane *);
-struct window_pane *window_add_pane(struct window *, struct window_pane *,
+struct window_pane *window_add_pane(struct window *, struct window_pane *, int,
int, u_int);
void window_resize(struct window *, u_int, u_int);
int window_zoom(struct window_pane *);
diff --git a/window.c b/window.c
index cacacb0c..0eb48238 100644
--- a/window.c
+++ b/window.c
@@ -339,7 +339,7 @@ window_create_spawn(const char *name, int argc, char **argv, const char *path,
struct window_pane *wp;
w = window_create(sx, sy);
- wp = window_add_pane(w, NULL, 0, hlimit);
+ wp = window_add_pane(w, NULL, 0, 0, hlimit);
layout_init(w, wp);
if (window_pane_spawn(wp, argc, argv, path, shell, cwd,
@@ -608,7 +608,7 @@ window_unzoom(struct window *w)
struct window_pane *
window_add_pane(struct window *w, struct window_pane *other, int before,
- u_int hlimit)
+ int full_size, u_int hlimit)
{
struct window_pane *wp;
@@ -621,10 +621,16 @@ window_add_pane(struct window *w, struct window_pane *other, int before,
TAILQ_INSERT_HEAD(&w->panes, wp, entry);
} else if (before) {
log_debug("%s: @%u before %%%u", __func__, w->id, wp->id);
- TAILQ_INSERT_BEFORE(other, wp, entry);
+ if (full_size)
+ TAILQ_INSERT_HEAD(&w->panes, wp, entry);
+ else
+ TAILQ_INSERT_BEFORE(other, wp, entry);
} else {
log_debug("%s: @%u after %%%u", __func__, w->id, wp->id);
- TAILQ_INSERT_AFTER(&w->panes, other, wp, entry);
+ if (full_size)
+ TAILQ_INSERT_TAIL(&w->panes, wp, entry);
+ else
+ TAILQ_INSERT_AFTER(&w->panes, other, wp, entry);
}
return (wp);
}