Hi, Unless I've missed something, isn't this what 'synchronize-panes' does already?
Thomas On Mon, 10 Jul 2017 at 22:12 Rytis Karpuska <[email protected]> wrote: > Hey, > > I often need to do some work in a cluster of linux servers, therefore > it would be very convenient if tmux could duplicate input to all panes > of current window. This patch adds this functionality togglable with > command. Hopefully it will be helpful for other people also :). > > Rytis. > > --- > Makefile.am | 1 + > cmd-toggle-duplicate-stdin.c | 50 > ++++++++++++++++++++++++++++++++++++++++++++ > cmd.c | 3 +++ > server-client.c | 10 ++++++++- > tmux.1 | 2 ++ > tmux.h | 1 + > 6 files changed, 66 insertions(+), 1 deletion(-) > create mode 100644 cmd-toggle-duplicate-stdin.c > > diff --git a/Makefile.am b/Makefile.am > index bdc752c..bf5e02a 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -124,6 +124,7 @@ dist_tmux_SOURCES = \ > cmd-switch-client.c \ > cmd-unbind-key.c \ > cmd-wait-for.c \ > + cmd-toggle-duplicate-stdin.c \ > cmd.c \ > colour.c \ > compat.h \ > diff --git a/cmd-toggle-duplicate-stdin.c b/cmd-toggle-duplicate-stdin.c > new file mode 100644 > index 0000000..e5fd402 > --- /dev/null > +++ b/cmd-toggle-duplicate-stdin.c > @@ -0,0 +1,50 @@ > +/* $OpenBSD$ */ > + > +/* > + * Copyright (c) 2017 Rytis Karpuska <[email protected]> > + * > + * Permission to use, copy, modify, and distribute this software for any > + * purpose with or without fee is hereby granted, provided that the above > + * copyright notice and this permission notice appear in all copies. > + * > + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL > WARRANTIES > + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF > + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR > + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES > + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER > + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING > + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. > + */ > + > +#include <sys/types.h> > + > +#include "tmux.h" > + > +/* > + * Toggle stdin duplication to all panes of current window. > + */ > + > +static enum cmd_retval cmd_toggle_duplicate_stdin_exec(struct cmd *, > struct cmdq_item *); > + > +const struct cmd_entry cmd_toggle_duplicate_stdin_entry = { > + .name = "toggle-duplicate-stdin", > + .alias = NULL, > + > + .args = { "", 0, 0}, > + .usage = "", > + > + .target = { 't', CMD_FIND_WINDOW, 0 }, > + > + .flags = 0, > + .exec = cmd_toggle_duplicate_stdin_exec > +}; > + > +static enum cmd_retval > +cmd_toggle_duplicate_stdin_exec(struct cmd *self __unused, struct > cmdq_item *item) > +{ > + struct window *w = item->target.w; > + w->flags = w->flags ^ WINDOW_DUPLICATE_STDIN; > + > + return (CMD_RETURN_NORMAL); > +} > + > diff --git a/cmd.c b/cmd.c > index 45f83c2..26a0636 100644 > --- a/cmd.c > +++ b/cmd.c > @@ -112,6 +112,8 @@ extern const struct cmd_entry cmd_unbind_key_entry; > extern const struct cmd_entry cmd_unlink_window_entry; > extern const struct cmd_entry cmd_up_pane_entry; > extern const struct cmd_entry cmd_wait_for_entry; > +extern const struct cmd_entry cmd_toggle_duplicate_stdin_entry; > + > > const struct cmd_entry *cmd_table[] = { > &cmd_attach_session_entry, > @@ -197,6 +199,7 @@ const struct cmd_entry *cmd_table[] = { > &cmd_unbind_key_entry, > &cmd_unlink_window_entry, > &cmd_wait_for_entry, > + &cmd_toggle_duplicate_stdin_entry, > NULL > }; > > diff --git a/server-client.c b/server-client.c > index 1fd6eb6..4fa9c34 100644 > --- a/server-client.c > +++ b/server-client.c > @@ -1000,8 +1000,16 @@ retry: > forward: > if (c->flags & CLIENT_READONLY) > return; > - if (wp != NULL) > + if (w->flags & WINDOW_DUPLICATE_STDIN) > + { > + TAILQ_FOREACH(wp, &w->panes, entry) { > + window_pane_key(wp, c, s, key, m); > + } > + } > + else if (wp != NULL) > + { > window_pane_key(wp, c, s, key, m); > + } > } > > /* Client functions that need to happen every loop. */ > diff --git a/tmux.1 b/tmux.1 > index da97dd7..c6c782c 100644 > --- a/tmux.1 > +++ b/tmux.1 > @@ -2076,6 +2076,8 @@ if > .Fl k > is specified and the window is linked to only one session, it is unlinked > and > destroyed. > +.It Ic toggle-duplicate-stdin > +Toggle duplication of input to all panes of current window. Useful for > interactively executing identical commands in several terminal sessions. > .El > .Sh KEY BINDINGS > .Nm > diff --git a/tmux.h b/tmux.h > index 7b79544..e5437bc 100644 > --- a/tmux.h > +++ b/tmux.h > @@ -857,6 +857,7 @@ struct window { > #define WINDOW_FORCEHEIGHT 0x4000 > #define WINDOW_STYLECHANGED 0x8000 > #define WINDOW_ALERTFLAGS (WINDOW_BELL|WINDOW_ACTIVITY|WINDOW_SILENCE) > +#define WINDOW_DUPLICATE_STDIN 0x10000 > > int alerts_queued; > TAILQ_ENTRY(window) alerts_entry; > -- > 2.7.4 > > -- > You received this message because you are subscribed to the Google Groups > "tmux-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send an email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "tmux-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
