diff options
author | 2009-10-09 07:27:00 +0000 | |
---|---|---|
committer | 2009-10-09 07:27:00 +0000 | |
commit | 9274c26a45140bcc69d103f7211b5f19e036a179 (patch) | |
tree | 7ce632477d539885c8920bcaa3de2a190de04071 | |
parent | Be less aggressive about turning the cursor off, only explicitly turn it off (diff) | |
download | wireguard-openbsd-9274c26a45140bcc69d103f7211b5f19e036a179.tar.xz wireguard-openbsd-9274c26a45140bcc69d103f7211b5f19e036a179.zip |
Add a simple synchronize-panes window option: when set, all input to any pane
that is part of the window is also sent to all other panes in the same
window. Suggested by several, most recently Tomasz Pajor.
-rw-r--r-- | usr.bin/tmux/cmd-set-window-option.c | 3 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.1 | 9 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.c | 3 | ||||
-rw-r--r-- | usr.bin/tmux/window.c | 18 |
4 files changed, 26 insertions, 7 deletions
diff --git a/usr.bin/tmux/cmd-set-window-option.c b/usr.bin/tmux/cmd-set-window-option.c index 89f0c44f967..339c418d72b 100644 --- a/usr.bin/tmux/cmd-set-window-option.c +++ b/usr.bin/tmux/cmd-set-window-option.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-set-window-option.c,v 1.12 2009/09/22 12:38:10 nicm Exp $ */ +/* $OpenBSD: cmd-set-window-option.c,v 1.13 2009/10/09 07:27:00 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net> @@ -64,6 +64,7 @@ const struct set_option_entry set_window_option_table[] = { { "monitor-activity", SET_OPTION_FLAG, 0, 0, NULL }, { "monitor-content", SET_OPTION_STRING, 0, 0, NULL }, { "remain-on-exit", SET_OPTION_FLAG, 0, 0, NULL }, + { "synchronize-panes", SET_OPTION_FLAG, 0, 0, NULL }, { "utf8", SET_OPTION_FLAG, 0, 0, NULL }, { "window-status-attr", SET_OPTION_ATTRIBUTES, 0, 0, NULL }, { "window-status-bg", SET_OPTION_COLOUR, 0, 0, NULL }, diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1 index 976f7b6f0ce..8a5863774cf 100644 --- a/usr.bin/tmux/tmux.1 +++ b/usr.bin/tmux/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.98 2009/10/07 15:58:40 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.99 2009/10/09 07:27:00 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> .\" @@ -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: October 7 2009 $ +.Dd $Mdocdate: October 9 2009 $ .Dt TMUX 1 .Os .Sh NAME @@ -1662,6 +1662,11 @@ The window may be reactivated with the .Ic respawn-window command. .Pp +.It Xo Ic synchronize-panes +.Op Ic on | off +.Xc +Duplicate input to any pane to all other panes in the same window, except +for panes that are not in output mode. .It Xo Ic utf8 .Op Ic on | off .Xc diff --git a/usr.bin/tmux/tmux.c b/usr.bin/tmux/tmux.c index afbff6277ed..dcb62ec01d9 100644 --- a/usr.bin/tmux/tmux.c +++ b/usr.bin/tmux/tmux.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.c,v 1.46 2009/09/23 12:03:31 nicm Exp $ */ +/* $OpenBSD: tmux.c,v 1.47 2009/10/09 07:27:00 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -441,6 +441,7 @@ main(int argc, char **argv) options_set_number(wo, "window-status-fg", 8); options_set_number(wo, "xterm-keys", 0); options_set_number(wo, "remain-on-exit", 0); + options_set_number(wo, "synchronize-panes", 0); if (flags & IDENTIFY_UTF8) { options_set_number(so, "status-utf8", 1); diff --git a/usr.bin/tmux/window.c b/usr.bin/tmux/window.c index 07396c8d7c2..9521b230d87 100644 --- a/usr.bin/tmux/window.c +++ b/usr.bin/tmux/window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window.c,v 1.26 2009/09/20 14:58:12 nicm Exp $ */ +/* $OpenBSD: window.c,v 1.27 2009/10/09 07:27:00 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -610,14 +610,26 @@ window_pane_parse(struct window_pane *wp) void window_pane_key(struct window_pane *wp, struct client *c, int key) { + struct window_pane *wp2; + if (wp->fd == -1 || !window_pane_visible(wp)) return; if (wp->mode != NULL) { if (wp->mode->key != NULL) wp->mode->key(wp, c, key); - } else - input_key(wp, key); + return; + } + + input_key(wp, key); + if (options_get_number(&wp->window->options, "synchronize-panes")) { + TAILQ_FOREACH(wp2, &wp->window->panes, entry) { + if (wp2 == wp || wp2->mode != NULL) + continue; + if (wp2->fd != -1 && window_pane_visible(wp2)) + input_key(wp2, key); + } + } } void |