diff options
author | nicm <nicm> | 2019-07-10 11:20:10 +0000 |
---|---|---|
committer | nicm <nicm> | 2019-07-10 11:20:10 +0000 |
commit | f4d858e7a0888cfd1d09c421f71729e833322851 (patch) | |
tree | 94ef4b0750b14587a72dc294ae9fadd2d614a7c2 /cmd-refresh-client.c | |
parent | fc2016dbb665f01e795a89632a1bb74294bfc4e1 (diff) | |
download | rtmux-f4d858e7a0888cfd1d09c421f71729e833322851.tar.gz rtmux-f4d858e7a0888cfd1d09c421f71729e833322851.tar.bz2 rtmux-f4d858e7a0888cfd1d09c421f71729e833322851.zip |
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.
Diffstat (limited to 'cmd-refresh-client.c')
-rw-r--r-- | cmd-refresh-client.c | 62 |
1 files changed, 40 insertions, 22 deletions
diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c index e5ae099f..49921a74 100644 --- a/cmd-refresh-client.c +++ b/cmd-refresh-client.c @@ -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); } |