=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/server-client.c,v retrieving revision 1.397 retrieving revision 1.398 diff -u -r1.397 -r1.398 --- src/usr.bin/tmux/server-client.c 2022/07/19 07:10:13 1.397 +++ src/usr.bin/tmux/server-client.c 2023/01/12 18:49:11 1.398 @@ -1,4 +1,4 @@ -/* $OpenBSD: server-client.c,v 1.397 2022/07/19 07:10:13 nicm Exp $ */ +/* $OpenBSD: server-client.c,v 1.398 2023/01/12 18:49:11 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -45,6 +45,7 @@ static void server_client_set_title(struct client *); static void server_client_set_path(struct client *); static void server_client_reset_state(struct client *); +static int server_client_is_bracket_pasting(struct client *, key_code); static int server_client_assume_paste(struct session *); static void server_client_update_latest(struct client *); @@ -1757,6 +1758,25 @@ return (key); } +/* Is this a bracket paste key? */ +static int +server_client_is_bracket_pasting(struct client *c, key_code key) +{ + if (key == KEYC_PASTE_START) { + c->flags |= CLIENT_BRACKETPASTING; + log_debug("%s: bracket paste on", c->name); + return (1); + } + + if (key == KEYC_PASTE_END) { + c->flags &= ~CLIENT_BRACKETPASTING; + log_debug("%s: bracket paste off", c->name); + return (1); + } + + return !!(c->flags & CLIENT_BRACKETPASTING); +} + /* Is this fast enough to probably be a paste? */ static int server_client_assume_paste(struct session *s) @@ -1863,6 +1883,10 @@ /* Forward mouse keys if disabled. */ if (KEYC_IS_MOUSE(key) && !options_get_number(s->options, "mouse")) + goto forward_key; + + /* Forward if bracket pasting. */ + if (server_client_is_bracket_pasting(c, key)) goto forward_key; /* Treat everything as a regular key when pasting is detected. */