--- /dev/null
+diff -ruNp screen-4.8.0.orig/ansi.c screen-4.8.0/ansi.c
+--- screen-4.8.0.orig/ansi.c 2020-02-05 21:09:38.000000000 +0100
++++ screen-4.8.0/ansi.c 2020-11-01 19:13:54.023721138 +0100
+@@ -195,6 +195,8 @@ register struct win *p;
+ p->w_insert = 0;
+ p->w_revvid = 0;
+ p->w_mouse = 0;
++ p->w_bracketed = 0;
++ p->w_cursorstyle = 0;
+ p->w_curinv = 0;
+ p->w_curvvis = 0;
+ p->w_autolf = 0;
+@@ -1346,6 +1348,12 @@ int c, intermediate;
+ break;
+ }
+ break;
++ case ' ':
++ if (c == 'q') {
++ curr->w_cursorstyle = a1;
++ LCursorStyle(&curr->w_layer, curr->w_cursorstyle);
++ }
++ break;
+ case '?':
+ for (a2 = 0; a2 < curr->w_NumArgs; a2++)
+ {
+@@ -1477,6 +1485,10 @@ int c, intermediate;
+ LExtMouseMode(&curr->w_layer, curr->w_extmouse);
+ break;
+ /* case 1015: UXRVT mouse mode rejected */
++ case 2004: /* bracketed paste mode */
++ curr->w_bracketed = i ? 1 : 0;
++ LBracketedPasteMode(&curr->w_layer, curr->w_bracketed);
++ break;
+ }
+ }
+ break;
+diff -ruNp screen-4.8.0.orig/display.c screen-4.8.0/display.c
+--- screen-4.8.0.orig/display.c 2020-02-05 21:09:38.000000000 +0100
++++ screen-4.8.0/display.c 2020-11-01 19:20:51.953148789 +0100
+@@ -130,6 +130,8 @@ struct display TheDisplay;
+ int defobuflimit = OBUF_MAX;
+ int defnonblock = -1;
+ int defmousetrack = 0;
++int defbracketed = 0;
++int defcursorstyle = 0;
+ #ifdef AUTO_NUKE
+ int defautonuke = 0;
+ #endif
+@@ -192,6 +194,8 @@ DefRestore()
+ LCursorkeysMode(flayer, 0);
+ LCursorVisibility(flayer, 0);
+ LMouseMode(flayer, 0);
++ LBracketedPasteMode(flayer, 0);
++ LCursorStyle(flayer, 0);
+ LSetRendition(flayer, &mchar_null);
+ LSetFlow(flayer, nwin_default.flowflag & FLOW_NOW);
+ }
+@@ -323,6 +327,8 @@ struct mode *Mode;
+ D_user = *u;
+ D_processinput = ProcessInput;
+ D_mousetrack = defmousetrack;
++ D_bracketed = defbracketed;
++ D_cursorstyle = defcursorstyle;
+ return display;
+ }
+
+@@ -497,6 +503,8 @@ FinitTerm()
+ D_mousetrack = 0;
+ MouseMode(0);
+ ExtMouseMode(0);
++ BracketedPasteMode(0);
++ CursorStyle(0);
+ SetRendition(&mchar_null);
+ SetFlow(FLOW_NOW);
+ #ifdef MAPKEYS
+@@ -871,6 +879,42 @@ ExtMouseMode(mode)
+ }
+ }
+
++void BracketedPasteMode(int mode)
++{
++ if (!display)
++ return;
++
++ if (D_bracketed != mode) {
++ if (!D_CXT)
++ return;
++ if (D_bracketed) {
++ AddStr("\033[?2004l");
++ }
++ if (mode) {
++ AddStr("\033[?2004h");
++ }
++ D_bracketed = mode;
++ }
++}
++
++void CursorStyle(int mode)
++{
++ char buf[32];
++
++ if (!display)
++ return;
++
++ if (D_cursorstyle != mode) {
++ if (!D_CXT)
++ return;
++ if (mode < 0)
++ return;
++ sprintf(buf, "\033[%d q", mode);
++ AddStr(buf);
++ D_cursorstyle = mode;
++ }
++}
++
+ static int StrCost;
+
+ /* ARGSUSED */
+@@ -1297,6 +1341,8 @@ int cur_only;
+ CursorVisibility(0);
+ MouseMode(0);
+ ExtMouseMode(0);
++ BracketedPasteMode(0);
++ CursorStyle(0);
+ SetRendition(&mchar_null);
+ SetFlow(FLOW_NOW);
+
+@@ -3198,6 +3244,8 @@ NukePending()
+ int oldcurvis = D_curvis;
+ int oldmouse = D_mouse;
+ int oldextmouse = D_extmouse;
++ int oldbracketed = D_bracketed;
++ int oldcursorstyle = D_cursorstyle;
+
+ oldrend = D_rend;
+ len = D_obufp - D_obuf;
+@@ -3261,6 +3309,8 @@ NukePending()
+ CursorVisibility(oldcurvis);
+ MouseMode(oldmouse);
+ ExtMouseMode(oldextmouse);
++ BracketedPasteMode(oldbracketed);
++ CursorStyle(oldcursorstyle);
+ if (D_CWS)
+ {
+ debug("ResizeDisplay: using WS\n");
+diff -ruNp screen-4.8.0.orig/display.h screen-4.8.0/display.h
+--- screen-4.8.0.orig/display.h 2020-02-05 21:09:38.000000000 +0100
++++ screen-4.8.0/display.h 2020-11-01 19:21:49.009918688 +0100
+@@ -111,6 +111,8 @@ struct display
+ struct mouse_parse d_mouse_parse; /* state of mouse code parsing */
+ int d_mousetrack; /* set when user wants to use mouse even when the window
+ does not */
++ int d_bracketed; /* bracketed paste mode */
++ int d_cursorstyle; /* cursor style */
+ #ifdef RXVT_OSC
+ int d_xtermosc[4]; /* osc used */
+ #endif
+@@ -198,6 +200,8 @@ extern struct display TheDisplay;
+
+ #define D_user DISPLAY(d_user)
+ #define D_username (DISPLAY(d_user) ? DISPLAY(d_user)->u_name : 0)
++#define D_bracketed DISPLAY(d_bracketed)
++#define D_cursorstyle DISPLAY(d_cursorstyle)
+ #define D_canvas DISPLAY(d_canvas)
+ #define D_cvlist DISPLAY(d_cvlist)
+ #define D_layout DISPLAY(d_layout)
+diff -ruNp screen-4.8.0.orig/extern.h screen-4.8.0/extern.h
+--- screen-4.8.0.orig/extern.h 2020-02-05 21:09:38.000000000 +0100
++++ screen-4.8.0/extern.h 2020-11-01 19:22:46.794689164 +0100
+@@ -291,6 +291,8 @@ extern void ReverseVideo __P((int));
+ extern void CursorVisibility __P((int));
+ extern void MouseMode __P((int));
+ extern void ExtMouseMode __P((int));
++extern void BracketedPasteMode (int);
++extern void CursorStyle (int);
+ extern void SetFont __P((int));
+ extern void SetAttr __P((int));
+ extern void SetColor __P((int, int));
+@@ -452,6 +454,8 @@ extern void LKeypadMode __P((struct lay
+ extern void LCursorkeysMode __P((struct layer *, int));
+ extern void LMouseMode __P((struct layer *, int));
+ extern void LExtMouseMode __P((struct layer *, int));
++extern void LBracketedPasteMode (struct layer *, int);
++extern void LCursorStyle (struct layer *, int);
+ #if defined(USEVARARGS)
+ extern void LMsg __P((int, const char *, ...)) __attribute__((format(printf, 2, 3)));
+ #else
+diff -ruNp screen-4.8.0.orig/layer.c screen-4.8.0/layer.c
+--- screen-4.8.0.orig/layer.c 2020-02-05 21:09:38.000000000 +0100
++++ screen-4.8.0/layer.c 2020-11-01 19:23:49.096422746 +0100
+@@ -840,6 +840,32 @@ void LMouseMode(struct layer *l, int on)
+ }
+ }
+
++void LBracketedPasteMode(struct layer *l, int on)
++{
++ struct canvas *cv;
++ for (cv = l->l_cvlist; cv; cv = cv->c_lnext) {
++ display = cv->c_display;
++ if (D_blocked)
++ continue;
++ if (cv != D_forecv)
++ continue;
++ BracketedPasteMode(on);
++ }
++}
++
++void LCursorStyle(struct layer *l, int style)
++{
++ struct canvas *cv;
++ for (cv = l->l_cvlist; cv; cv = cv->c_lnext) {
++ display = cv->c_display;
++ if (D_blocked)
++ continue;
++ if (cv != D_forecv)
++ continue;
++ CursorStyle(style);
++ }
++}
++
+ void LClearAll(struct layer *l, int uself)
+ {
+ LClearArea(l, 0, 0, l->l_width - 1, l->l_height - 1, 0, uself);
+diff -ruNp screen-4.8.0.orig/window.c screen-4.8.0/window.c
+--- screen-4.8.0.orig/window.c 2020-02-05 21:09:38.000000000 +0100
++++ screen-4.8.0/window.c 2020-11-01 19:25:26.665004901 +0100
+@@ -509,6 +509,8 @@ WinRestore()
+ CursorVisibility(fore->w_curinv ? -1 : fore->w_curvvis);
+ MouseMode(fore->w_mouse);
+ ExtMouseMode(fore->w_extmouse);
++ BracketedPasteMode(fore->w_bracketed);
++ CursorStyle(fore->w_cursorstyle);
+ }
+ }
+
+diff -ruNp screen-4.8.0.orig/window.h screen-4.8.0/window.h
+--- screen-4.8.0.orig/window.h 2020-02-05 21:09:38.000000000 +0100
++++ screen-4.8.0/window.h 2020-11-01 19:26:23.990767940 +0100
+@@ -241,6 +241,8 @@ struct win
+ #endif
+ int w_mouse; /* mouse mode 0,9,1000 */
+ int w_extmouse; /* extended mouse mode 0,1006 */
++ int w_bracketed; /* bracketed paste mode */
++ int w_cursorstyle; /* cursor style */
+ #ifdef HAVE_BRAILLE
+ int w_bd_x, w_bd_y; /* Braille cursor position */
+ #endif