summaryrefslogtreecommitdiffstats
path: root/tty-keys.c
diff options
context:
space:
mode:
authornicm <nicm>2022-03-08 12:01:19 +0000
committernicm <nicm>2022-03-08 12:01:19 +0000
commitad9b8059836d424f70a8579d28e28e0186cdbaa6 (patch)
tree80599fec37594749c9e5c2d94ccfb68e5e601ea3 /tty-keys.c
parent98cd8e4cad3afbc542de665e9d025d12b560bc6b (diff)
Add argument to refresh-client -l to forward clipboard to a pane. GitHub
issue 3068.
Diffstat (limited to 'tty-keys.c')
-rw-r--r--tty-keys.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/tty-keys.c b/tty-keys.c
index 30717af3..8538e74b 100644
--- a/tty-keys.c
+++ b/tty-keys.c
@@ -1154,12 +1154,14 @@ tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size,
* partial.
*/
static int
-tty_keys_clipboard(__unused struct tty *tty, const char *buf, size_t len,
- size_t *size)
+tty_keys_clipboard(struct tty *tty, const char *buf, size_t len, size_t *size)
{
- size_t end, terminator, needed;
- char *copy, *out;
- int outlen;
+ struct client *c = tty->client;
+ struct window_pane *wp;
+ size_t end, terminator, needed;
+ char *copy, *out;
+ int outlen;
+ u_int i;
*size = 0;
@@ -1221,6 +1223,7 @@ tty_keys_clipboard(__unused struct tty *tty, const char *buf, size_t len,
if (~tty->flags & TTY_OSC52QUERY)
return (0);
tty->flags &= ~TTY_OSC52QUERY;
+ evtimer_del(&tty->clipboard_timer);
/* It has to be a string so copy it. */
copy = xmalloc(end + 1);
@@ -1237,9 +1240,20 @@ tty_keys_clipboard(__unused struct tty *tty, const char *buf, size_t len,
}
free(copy);
- /* Create a new paste buffer. */
+ /* Create a new paste buffer and forward to panes. */
log_debug("%s: %.*s", __func__, outlen, out);
- paste_add(NULL, out, outlen);
+ if (c->flags & CLIENT_CLIPBOARDBUFFER) {
+ paste_add(NULL, out, outlen);
+ c->flags &= ~CLIENT_CLIPBOARDBUFFER;
+ }
+ for (i = 0; i < c->clipboard_npanes; i++) {
+ wp = window_pane_find_by_id(c->clipboard_panes[i]);
+ if (wp != NULL)
+ input_reply_clipboard(wp->event, out, outlen, "\033\\");
+ }
+ free(c->clipboard_panes);
+ c->clipboard_panes = NULL;
+ c->clipboard_npanes = 0;
return (0);
}