diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2019-07-10 11:20:11 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2019-07-10 11:20:11 +0000 |
commit | 07a62a54d8ba32a5f4ff9c25b8c1fb783c17f25e (patch) | |
tree | e9a188377fbee8ca6f8b515094099b27da88841c | |
parent | 1bbc6b6552dfb281a056b8fe46871283070b9738 (diff) |
Add -F to refresh-client to specify flags for control clients - one flag
at the moment, no-output which turns off forwarding pane output. From
Thomas Adam. GitHub issue 1834.
-rw-r--r-- | usr.bin/tmux/cmd-refresh-client.c | 64 | ||||
-rw-r--r-- | usr.bin/tmux/control-notify.c | 5 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.1 | 15 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.h | 3 |
4 files changed, 58 insertions, 29 deletions
diff --git a/usr.bin/tmux/cmd-refresh-client.c b/usr.bin/tmux/cmd-refresh-client.c index 76a08480479..4de9e62c72c 100644 --- a/usr.bin/tmux/cmd-refresh-client.c +++ b/usr.bin/tmux/cmd-refresh-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-refresh-client.c,v 1.28 2018/10/18 08:38:01 nicm Exp $ */ +/* $OpenBSD: cmd-refresh-client.c,v 1.29 2019/07/10 11:20:10 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -19,6 +19,7 @@ #include <sys/types.h> #include <stdlib.h> +#include <string.h> #include "tmux.h" @@ -33,8 +34,9 @@ const struct cmd_entry cmd_refresh_client_entry = { .name = "refresh-client", .alias = "refresh", - .args = { "cC:DlLRSt:U", 0, 1 }, - .usage = "[-cDlLRSU] [-C size] " CMD_TARGET_CLIENT_USAGE " [adjustment]", + .args = { "cC:DF:lLRSt:U", 0, 1 }, + .usage = "[-cDlLRSU] [-C XxY] [-F flags] " CMD_TARGET_CLIENT_USAGE + " [adjustment]", .flags = CMD_AFTERHOOK, .exec = cmd_refresh_client_exec @@ -48,6 +50,7 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) struct tty *tty; struct window *w; const char *size, *errstr; + char *copy, *next, *s; u_int x, y, adjust; if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) @@ -107,28 +110,43 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) if (args_has(args, 'l')) { if (c->session != NULL) tty_putcode_ptr2(&c->tty, TTYC_MS, "", "?"); - } else if (args_has(args, 'C')) { - if ((size = args_get(args, 'C')) == NULL) { - cmdq_error(item, "missing size"); - return (CMD_RETURN_ERROR); - } - if (sscanf(size, "%u,%u", &x, &y) != 2 && - sscanf(size, "%ux%u", &x, &y)) { - cmdq_error(item, "bad size argument"); - return (CMD_RETURN_ERROR); - } - if (x < WINDOW_MINIMUM || x > WINDOW_MAXIMUM || - y < WINDOW_MINIMUM || y > WINDOW_MAXIMUM) { - cmdq_error(item, "size too small or too big"); - return (CMD_RETURN_ERROR); + return (CMD_RETURN_NORMAL); + } + + if (args_has(args, 'C') || args_has(args, 'F')) { + if (args_has(args, 'C')) { + if (!(c->flags & CLIENT_CONTROL)) { + cmdq_error(item, "not a control client"); + return (CMD_RETURN_ERROR); + } + size = args_get(args, 'C'); + if (sscanf(size, "%u,%u", &x, &y) != 2 && + sscanf(size, "%ux%u", &x, &y) != 2) { + cmdq_error(item, "bad size argument"); + return (CMD_RETURN_ERROR); + } + if (x < WINDOW_MINIMUM || x > WINDOW_MAXIMUM || + y < WINDOW_MINIMUM || y > WINDOW_MAXIMUM) { + cmdq_error(item, "size too small or too big"); + return (CMD_RETURN_ERROR); + } + tty_set_size(&c->tty, x, y); + c->flags |= CLIENT_SIZECHANGED; + recalculate_sizes(); } - if (!(c->flags & CLIENT_CONTROL)) { - cmdq_error(item, "not a control client"); - return (CMD_RETURN_ERROR); + if (args_has(args, 'F')) { + if (!(c->flags & CLIENT_CONTROL)) { + cmdq_error(item, "not a control client"); + return (CMD_RETURN_ERROR); + } + s = copy = xstrdup(args_get(args, 'F')); + while ((next = strsep(&s, ",")) != NULL) { + /* Unknown flags are ignored. */ + if (strcmp(next, "no-output") == 0) + c->flags |= CLIENT_CONTROL_NOOUTPUT; + } + free(copy); } - tty_set_size(&c->tty, x, y); - c->flags |= CLIENT_SIZECHANGED; - recalculate_sizes(); return (CMD_RETURN_NORMAL); } diff --git a/usr.bin/tmux/control-notify.c b/usr.bin/tmux/control-notify.c index 650e42e9528..8fb17783212 100644 --- a/usr.bin/tmux/control-notify.c +++ b/usr.bin/tmux/control-notify.c @@ -1,4 +1,4 @@ -/* $OpenBSD: control-notify.c,v 1.23 2019/05/07 10:25:15 nicm Exp $ */ +/* $OpenBSD: control-notify.c,v 1.24 2019/07/10 11:20:10 nicm Exp $ */ /* * Copyright (c) 2012 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -36,6 +36,9 @@ control_notify_input(struct client *c, struct window_pane *wp, if (c->session == NULL) return; + if (c->flags & CLIENT_CONTROL_NOOUTPUT) + return; + /* * Only write input if the window pane is linked to a window belonging * to the client's session. diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1 index b4661ab9b2a..74c994cfb40 100644 --- a/usr.bin/tmux/tmux.1 +++ b/usr.bin/tmux/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.676 2019/07/09 14:03:12 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.677 2019/07/10 11:20:10 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> .\" @@ -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: July 9 2019 $ +.Dd $Mdocdate: July 10 2019 $ .Dt TMUX 1 .Os .Sh NAME @@ -1162,7 +1162,8 @@ is used, the option will not be applied. .It Xo Ic refresh-client .Op Fl cDlLRSU -.Op Fl C Ar width,height +.Op Fl C Ar XxY +.Op Fl F Ar flags .Op Fl t Ar target-client .Op Ar adjustment .Xc @@ -1205,7 +1206,13 @@ window, changing the current window in the attached session will reset it. .Pp .Fl C -sets the width and height of a control client. +sets the width and height of a control client and +.Fl F +sets a comma-separated list of flags. +Currently the only flag available is +.Ql no-output +to disable receiving pane output. +.Pp .Fl l requests the clipboard from the client using the .Xr xterm 1 diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h index f43e48b1be4..168068abec0 100644 --- a/usr.bin/tmux/tmux.h +++ b/usr.bin/tmux/tmux.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.h,v 1.920 2019/07/09 14:03:12 nicm Exp $ */ +/* $OpenBSD: tmux.h,v 1.921 2019/07/10 11:20:10 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -1516,6 +1516,7 @@ struct client { #define CLIENT_STATUSOFF 0x800000 #define CLIENT_REDRAWSTATUSALWAYS 0x1000000 #define CLIENT_REDRAWOVERLAY 0x2000000 +#define CLIENT_CONTROL_NOOUTPUT 0x4000000 #define CLIENT_ALLREDRAWFLAGS \ (CLIENT_REDRAWWINDOW| \ CLIENT_REDRAWSTATUS| \ |