From 50ee41423f6f7b4c0bc83ecf9468a37fc8bf9e99 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 11 Jun 2020 09:55:47 +0000 Subject: [PATCH] Add a -A option to pause a pane manually. --- cmd-refresh-client.c | 2 ++ control.c | 14 ++++++++++++++ tmux.1 | 11 ++++++++--- tmux.h | 1 + 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c index bbe0c736..f7b6269b 100644 --- a/cmd-refresh-client.c +++ b/cmd-refresh-client.c @@ -68,6 +68,8 @@ cmd_refresh_client_update_offset(struct client *tc, const char *value) control_set_pane_off(tc, wp); else if (strcmp(colon, "continue") == 0) control_continue_pane(tc, wp); + else if (strcmp(colon, "pause") == 0) + control_pause_pane(tc, wp); out: free(copy); diff --git a/control.c b/control.c index 140849e1..8ff7736f 100644 --- a/control.c +++ b/control.c @@ -265,6 +265,20 @@ control_continue_pane(struct client *c, struct window_pane *wp) } } +/* Pause a pane. */ +void +control_pause_pane(struct client *c, struct window_pane *wp) +{ + struct control_pane *cp; + + cp = control_add_pane(c, wp); + if (~cp->flags & CONTROL_PANE_PAUSED) { + cp->flags |= CONTROL_PANE_PAUSED; + control_discard_pane(c, cp); + control_write(c, "%%pause %%%u", wp->id); + } +} + /* Write a line. */ static void control_vwrite(struct client *c, const char *fmt, va_list ap) diff --git a/tmux.1 b/tmux.1 index 1a3cde5d..44806c34 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1304,9 +1304,10 @@ The argument is a pane ID (with leading .Ql % ) , a colon, then one of .Ql on , -.Ql off +.Ql off , +.Ql continue or -.Ql continue . +.Ql pause . If .Ql off , .Nm @@ -1315,9 +1316,13 @@ the pane off, will stop reading from the pane. If .Ql continue , .Nm -will return to sending output to a paused pane (see the +will return to sending output to the pane if it was paused (manually or with the .Ar pause-after flag). +If +.Ql pause , +.Nm +will pause the pane. .Fl A may be given multiple times for different panes. .Pp diff --git a/tmux.h b/tmux.h index ee59b4b3..c6c84e86 100644 --- a/tmux.h +++ b/tmux.h @@ -2846,6 +2846,7 @@ void control_stop(struct client *); void control_set_pane_on(struct client *, struct window_pane *); void control_set_pane_off(struct client *, struct window_pane *); void control_continue_pane(struct client *, struct window_pane *); +void control_pause_pane(struct client *, struct window_pane *); struct window_pane_offset *control_pane_offset(struct client *, struct window_pane *, int *); void control_reset_offsets(struct client *);