diff --git a/tmux.1 b/tmux.1
index ad70857b..3e985d0a 100644
--- a/tmux.1
+++ b/tmux.1
@@ -6292,6 +6292,11 @@ to change the cursor colour from inside
 .Bd -literal -offset indent
 $ printf '\e033]12;red\e033\e\e'
 .Ed
+.Pp
+The colour is an
+.Xr X 7
+colour, see
+.Xr XParseColor 3 .
 .It Em \&Cmg, \&Clmg, \&Dsmg , \&Enmg
 Set, clear, disable or enable DECSLRM margins.
 These are set automatically if the terminal reports it is
diff --git a/tmux.h b/tmux.h
index 9209226a..9cf60ecb 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1312,7 +1312,7 @@ struct tty {
 #define TTY_NOCURSOR 0x1
 #define TTY_FREEZE 0x2
 #define TTY_TIMER 0x4
-/* 0x8 unused */
+#define TTY_NOBLOCK 0x8
 #define TTY_STARTED 0x10
 #define TTY_OPENED 0x20
 /* 0x40 unused */
diff --git a/tty.c b/tty.c
index a9678eaf..3aefe784 100644
--- a/tty.c
+++ b/tty.c
@@ -206,6 +206,11 @@ tty_block_maybe(struct tty *tty)
 	size_t		 size = EVBUFFER_LENGTH(tty->out);
 	struct timeval	 tv = { .tv_usec = TTY_BLOCK_INTERVAL };
 
+	if (size == 0)
+		tty->flags &= ~TTY_NOBLOCK;
+	else if (tty->flags & TTY_NOBLOCK)
+		return (0);
+
 	if (size < TTY_BLOCK_START(tty))
 		return (0);
 
@@ -2088,8 +2093,8 @@ tty_set_selection(struct tty *tty, const char *buf, size_t len)
 	encoded = xmalloc(size);
 
 	b64_ntop(buf, len, encoded, size);
+	tty->flags |= TTY_NOBLOCK;
 	tty_putcode_ptr2(tty, TTYC_MS, "", encoded);
-	tty->client->redraw = EVBUFFER_LENGTH(tty->out);
 
 	free(encoded);
 }
@@ -2097,6 +2102,7 @@ tty_set_selection(struct tty *tty, const char *buf, size_t len)
 void
 tty_cmd_rawstring(struct tty *tty, const struct tty_ctx *ctx)
 {
+	tty->flags |= TTY_NOBLOCK;
 	tty_add(tty, ctx->ptr, ctx->num);
 	tty_invalidate(tty);
 }