From 4dca3db4a95f889346a0756d6a5188d8ead82897 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 11 Aug 2014 22:14:30 +0000 Subject: [PATCH] Add flags to selectp to enable and disable input to a pane, from Anish Athalye. --- usr.bin/tmux/cmd-select-pane.c | 36 ++++++++++++++++++++++------------ usr.bin/tmux/tmux.1 | 21 +++++++++++++++----- usr.bin/tmux/tmux.h | 3 ++- usr.bin/tmux/window.c | 9 +++++---- 4 files changed, 47 insertions(+), 22 deletions(-) diff --git a/usr.bin/tmux/cmd-select-pane.c b/usr.bin/tmux/cmd-select-pane.c index e543a9a4fd6..3d1b2d54616 100644 --- a/usr.bin/tmux/cmd-select-pane.c +++ b/usr.bin/tmux/cmd-select-pane.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-select-pane.c,v 1.17 2013/10/10 12:00:22 nicm Exp $ */ +/* $OpenBSD: cmd-select-pane.c,v 1.18 2014/08/11 22:14:30 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -29,8 +29,8 @@ enum cmd_retval cmd_select_pane_exec(struct cmd *, struct cmd_q *); const struct cmd_entry cmd_select_pane_entry = { "select-pane", "selectp", - "lDLRt:U", 0, 0, - "[-lDLRU] " CMD_TARGET_PANE_USAGE, + "DdeLlRt:U", 0, 0, + "[-DdeLlRU] " CMD_TARGET_PANE_USAGE, 0, cmd_select_pane_key_binding, cmd_select_pane_exec @@ -38,8 +38,8 @@ const struct cmd_entry cmd_select_pane_entry = { const struct cmd_entry cmd_last_pane_entry = { "last-pane", "lastp", - "t:", 0, 0, - CMD_TARGET_WINDOW_USAGE, + "det:", 0, 0, + "[-de] " CMD_TARGET_WINDOW_USAGE, 0, NULL, cmd_select_pane_exec @@ -78,10 +78,16 @@ cmd_select_pane_exec(struct cmd *self, struct cmd_q *cmdq) return (CMD_RETURN_ERROR); } - server_unzoom_window(wl->window); - window_set_active_pane(wl->window, wl->window->last); - server_status_window(wl->window); - server_redraw_window_borders(wl->window); + if (args_has(self->args, 'e')) + wl->window->last->flags &= ~PANE_INPUTOFF; + else if (args_has(self->args, 'd')) + wl->window->last->flags |= PANE_INPUTOFF; + else { + server_unzoom_window(wl->window); + window_set_active_pane(wl->window, wl->window->last); + server_status_window(wl->window); + server_redraw_window_borders(wl->window); + } return (CMD_RETURN_NORMAL); } @@ -108,9 +114,15 @@ cmd_select_pane_exec(struct cmd *self, struct cmd_q *cmdq) return (CMD_RETURN_ERROR); } - window_set_active_pane(wl->window, wp); - server_status_window(wl->window); - server_redraw_window_borders(wl->window); + if (args_has(self->args, 'e')) + wp->flags &= ~PANE_INPUTOFF; + else if (args_has(self->args, 'd')) + wp->flags |= PANE_INPUTOFF; + else { + window_set_active_pane(wl->window, wp); + server_status_window(wl->window); + server_redraw_window_borders(wl->window); + } return (CMD_RETURN_NORMAL); } diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1 index 67086d44343..0c9f1271b6b 100644 --- a/usr.bin/tmux/tmux.1 +++ b/usr.bin/tmux/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.397 2014/06/20 10:46:59 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.398 2014/08/11 22:14:30 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott .\" @@ -14,7 +14,7 @@ .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: June 20 2014 $ +.Dd $Mdocdate: August 11 2014 $ .Dt TMUX 1 .Os .Sh NAME @@ -1292,7 +1292,7 @@ flag, see the section. This command works only if at least one client is attached. .It Ic display-panes Op Fl t Ar target-client -.D1 (alias: Ic displayp) +.D1 (alias: Ic displayp ) Display a visible indicator of each pane shown by .Ar target-client . See the @@ -1382,9 +1382,16 @@ The .Fl a option kills all but the window given with .Fl t . -.It Ic last-pane Op Fl t Ar target-window +.It Xo Ic last-pane +.Op Fl de +.Op Fl t Ar target-window +.Xc .D1 (alias: Ic lastp ) Select the last (previously selected) pane. +.Fl e +enables or +.Fl d +disables input to the pane. .It Ic last-window Op Fl t Ar target-session .D1 (alias: Ic last ) Select the last (previously selected) window. @@ -1701,7 +1708,7 @@ and .Ic previous-layout commands. .It Xo Ic select-pane -.Op Fl lDLRU +.Op Fl DdeLlRU .Op Fl t Ar target-pane .Xc .D1 (alias: Ic selectp ) @@ -1721,6 +1728,10 @@ target pane is used. is the same as using the .Ic last-pane command. +.Fl e +enables or +.Fl d +disables input to the pane. .It Xo Ic select-window .Op Fl lnpT .Op Fl t Ar target-window diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h index c9d7c686552..949e082927b 100644 --- a/usr.bin/tmux/tmux.h +++ b/usr.bin/tmux/tmux.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.h,v 1.467 2014/08/09 07:33:37 nicm Exp $ */ +/* $OpenBSD: tmux.h,v 1.468 2014/08/11 22:14:30 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -956,6 +956,7 @@ struct window_pane { #define PANE_FOCUSED 0x4 #define PANE_RESIZE 0x8 #define PANE_FOCUSPUSH 0x10 +#define PANE_INPUTOFF 0x20 int argc; char **argv; diff --git a/usr.bin/tmux/window.c b/usr.bin/tmux/window.c index 19035058e1c..bf018bddb9b 100644 --- a/usr.bin/tmux/window.c +++ b/usr.bin/tmux/window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window.c,v 1.112 2014/06/23 10:27:05 nicm Exp $ */ +/* $OpenBSD: window.c,v 1.113 2014/08/11 22:14:30 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -1057,8 +1057,9 @@ window_pane_key(struct window_pane *wp, struct session *sess, int key) return; } - if (wp->fd == -1) + if (wp->fd == -1 || wp->flags & PANE_INPUTOFF) return; + input_key(wp, key); if (options_get_number(&wp->window->options, "synchronize-panes")) { TAILQ_FOREACH(wp2, &wp->window->panes, entry) { @@ -1071,8 +1072,8 @@ window_pane_key(struct window_pane *wp, struct session *sess, int key) } void -window_pane_mouse( - struct window_pane *wp, struct session *sess, struct mouse_event *m) +window_pane_mouse(struct window_pane *wp, struct session *sess, + struct mouse_event *m) { if (!window_pane_visible(wp)) return; -- 2.20.1