diff options
author | 2018-03-16 15:15:39 +0000 | |
---|---|---|
committer | 2018-03-16 15:15:39 +0000 | |
commit | e7b8083a15303413f4e257b6a19e5040981d1a67 (patch) | |
tree | a68ef4ead709c4d8f2ebcd033207f3d8fd4ea97e | |
parent | Style message about bad input encoding of em-dashes as -- instead of \(em. (diff) | |
download | wireguard-openbsd-e7b8083a15303413f4e257b6a19e5040981d1a67.tar.xz wireguard-openbsd-e7b8083a15303413f4e257b6a19e5040981d1a67.zip |
Insert full size panes at the right position, from KOIE Hidetaka in
GitHub issue 1284.
-rw-r--r-- | usr.bin/tmux/cmd-split-window.c | 10 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.h | 4 | ||||
-rw-r--r-- | usr.bin/tmux/window.c | 16 |
3 files changed, 18 insertions, 12 deletions
diff --git a/usr.bin/tmux/cmd-split-window.c b/usr.bin/tmux/cmd-split-window.c index 426a8db4b49..6aa6cea2f0c 100644 --- a/usr.bin/tmux/cmd-split-window.c +++ b/usr.bin/tmux/cmd-split-window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-split-window.c,v 1.88 2018/03/01 12:53:08 nicm Exp $ */ +/* $OpenBSD: cmd-split-window.c,v 1.89 2018/03/16 15:15:39 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -64,7 +64,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; @@ -96,6 +96,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')) { @@ -125,13 +126,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/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h index 4647d869612..fb86209cf54 100644 --- a/usr.bin/tmux/tmux.h +++ b/usr.bin/tmux/tmux.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.h,v 1.821 2018/03/08 08:09:10 nicm Exp $ */ +/* $OpenBSD: tmux.h,v 1.822 2018/03/16 15:15:39 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -2145,7 +2145,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/usr.bin/tmux/window.c b/usr.bin/tmux/window.c index 46c63285e88..8a99a9f9039 100644 --- a/usr.bin/tmux/window.c +++ b/usr.bin/tmux/window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window.c,v 1.207 2017/11/09 23:02:13 nicm Exp $ */ +/* $OpenBSD: window.c,v 1.208 2018/03/16 15:15:39 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -341,7 +341,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, @@ -610,7 +610,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; @@ -623,10 +623,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); } |