1 diff -ruNp screen-4.8.0.orig/ansi.c screen-4.8.0/ansi.c
2 --- screen-4.8.0.orig/ansi.c 2020-02-05 21:09:38.000000000 +0100
3 +++ screen-4.8.0/ansi.c 2020-11-01 19:13:54.023721138 +0100
4 @@ -195,6 +195,8 @@ register struct win *p;
9 + p->w_cursorstyle = 0;
13 @@ -1346,6 +1348,12 @@ int c, intermediate;
19 + curr->w_cursorstyle = a1;
20 + LCursorStyle(&curr->w_layer, curr->w_cursorstyle);
24 for (a2 = 0; a2 < curr->w_NumArgs; a2++)
26 @@ -1477,6 +1485,10 @@ int c, intermediate;
27 LExtMouseMode(&curr->w_layer, curr->w_extmouse);
29 /* case 1015: UXRVT mouse mode rejected */
30 + case 2004: /* bracketed paste mode */
31 + curr->w_bracketed = i ? 1 : 0;
32 + LBracketedPasteMode(&curr->w_layer, curr->w_bracketed);
37 diff -ruNp screen-4.8.0.orig/display.c screen-4.8.0/display.c
38 --- screen-4.8.0.orig/display.c 2020-02-05 21:09:38.000000000 +0100
39 +++ screen-4.8.0/display.c 2020-11-01 19:20:51.953148789 +0100
40 @@ -130,6 +130,8 @@ struct display TheDisplay;
41 int defobuflimit = OBUF_MAX;
43 int defmousetrack = 0;
44 +int defbracketed = 0;
45 +int defcursorstyle = 0;
49 @@ -192,6 +194,8 @@ DefRestore()
50 LCursorkeysMode(flayer, 0);
51 LCursorVisibility(flayer, 0);
52 LMouseMode(flayer, 0);
53 + LBracketedPasteMode(flayer, 0);
54 + LCursorStyle(flayer, 0);
55 LSetRendition(flayer, &mchar_null);
56 LSetFlow(flayer, nwin_default.flowflag & FLOW_NOW);
58 @@ -323,6 +327,8 @@ struct mode *Mode;
60 D_processinput = ProcessInput;
61 D_mousetrack = defmousetrack;
62 + D_bracketed = defbracketed;
63 + D_cursorstyle = defcursorstyle;
67 @@ -497,6 +503,8 @@ FinitTerm()
71 + BracketedPasteMode(0);
73 SetRendition(&mchar_null);
76 @@ -871,6 +879,42 @@ ExtMouseMode(mode)
80 +void BracketedPasteMode(int mode)
85 + if (D_bracketed != mode) {
89 + AddStr("\033[?2004l");
92 + AddStr("\033[?2004h");
98 +void CursorStyle(int mode)
105 + if (D_cursorstyle != mode) {
110 + sprintf(buf, "\033[%d q", mode);
112 + D_cursorstyle = mode;
119 @@ -1297,6 +1341,8 @@ int cur_only;
123 + BracketedPasteMode(0);
125 SetRendition(&mchar_null);
128 @@ -3198,6 +3244,8 @@ NukePending()
129 int oldcurvis = D_curvis;
130 int oldmouse = D_mouse;
131 int oldextmouse = D_extmouse;
132 + int oldbracketed = D_bracketed;
133 + int oldcursorstyle = D_cursorstyle;
136 len = D_obufp - D_obuf;
137 @@ -3261,6 +3309,8 @@ NukePending()
138 CursorVisibility(oldcurvis);
140 ExtMouseMode(oldextmouse);
141 + BracketedPasteMode(oldbracketed);
142 + CursorStyle(oldcursorstyle);
145 debug("ResizeDisplay: using WS\n");
146 diff -ruNp screen-4.8.0.orig/display.h screen-4.8.0/display.h
147 --- screen-4.8.0.orig/display.h 2020-02-05 21:09:38.000000000 +0100
148 +++ screen-4.8.0/display.h 2020-11-01 19:21:49.009918688 +0100
149 @@ -111,6 +111,8 @@ struct display
150 struct mouse_parse d_mouse_parse; /* state of mouse code parsing */
151 int d_mousetrack; /* set when user wants to use mouse even when the window
153 + int d_bracketed; /* bracketed paste mode */
154 + int d_cursorstyle; /* cursor style */
156 int d_xtermosc[4]; /* osc used */
158 @@ -198,6 +200,8 @@ extern struct display TheDisplay;
160 #define D_user DISPLAY(d_user)
161 #define D_username (DISPLAY(d_user) ? DISPLAY(d_user)->u_name : 0)
162 +#define D_bracketed DISPLAY(d_bracketed)
163 +#define D_cursorstyle DISPLAY(d_cursorstyle)
164 #define D_canvas DISPLAY(d_canvas)
165 #define D_cvlist DISPLAY(d_cvlist)
166 #define D_layout DISPLAY(d_layout)
167 diff -ruNp screen-4.8.0.orig/extern.h screen-4.8.0/extern.h
168 --- screen-4.8.0.orig/extern.h 2020-02-05 21:09:38.000000000 +0100
169 +++ screen-4.8.0/extern.h 2020-11-01 19:22:46.794689164 +0100
170 @@ -291,6 +291,8 @@ extern void ReverseVideo __P((int));
171 extern void CursorVisibility __P((int));
172 extern void MouseMode __P((int));
173 extern void ExtMouseMode __P((int));
174 +extern void BracketedPasteMode (int);
175 +extern void CursorStyle (int);
176 extern void SetFont __P((int));
177 extern void SetAttr __P((int));
178 extern void SetColor __P((int, int));
179 @@ -452,6 +454,8 @@ extern void LKeypadMode __P((struct lay
180 extern void LCursorkeysMode __P((struct layer *, int));
181 extern void LMouseMode __P((struct layer *, int));
182 extern void LExtMouseMode __P((struct layer *, int));
183 +extern void LBracketedPasteMode (struct layer *, int);
184 +extern void LCursorStyle (struct layer *, int);
185 #if defined(USEVARARGS)
186 extern void LMsg __P((int, const char *, ...)) __attribute__((format(printf, 2, 3)));
188 diff -ruNp screen-4.8.0.orig/layer.c screen-4.8.0/layer.c
189 --- screen-4.8.0.orig/layer.c 2020-02-05 21:09:38.000000000 +0100
190 +++ screen-4.8.0/layer.c 2020-11-01 19:23:49.096422746 +0100
191 @@ -840,6 +840,32 @@ void LMouseMode(struct layer *l, int on)
195 +void LBracketedPasteMode(struct layer *l, int on)
198 + for (cv = l->l_cvlist; cv; cv = cv->c_lnext) {
199 + display = cv->c_display;
202 + if (cv != D_forecv)
204 + BracketedPasteMode(on);
208 +void LCursorStyle(struct layer *l, int style)
211 + for (cv = l->l_cvlist; cv; cv = cv->c_lnext) {
212 + display = cv->c_display;
215 + if (cv != D_forecv)
217 + CursorStyle(style);
221 void LClearAll(struct layer *l, int uself)
223 LClearArea(l, 0, 0, l->l_width - 1, l->l_height - 1, 0, uself);
224 diff -ruNp screen-4.8.0.orig/window.c screen-4.8.0/window.c
225 --- screen-4.8.0.orig/window.c 2020-02-05 21:09:38.000000000 +0100
226 +++ screen-4.8.0/window.c 2020-11-01 19:25:26.665004901 +0100
227 @@ -509,6 +509,8 @@ WinRestore()
228 CursorVisibility(fore->w_curinv ? -1 : fore->w_curvvis);
229 MouseMode(fore->w_mouse);
230 ExtMouseMode(fore->w_extmouse);
231 + BracketedPasteMode(fore->w_bracketed);
232 + CursorStyle(fore->w_cursorstyle);
236 diff -ruNp screen-4.8.0.orig/window.h screen-4.8.0/window.h
237 --- screen-4.8.0.orig/window.h 2020-02-05 21:09:38.000000000 +0100
238 +++ screen-4.8.0/window.h 2020-11-01 19:26:23.990767940 +0100
239 @@ -241,6 +241,8 @@ struct win
241 int w_mouse; /* mouse mode 0,9,1000 */
242 int w_extmouse; /* extended mouse mode 0,1006 */
243 + int w_bracketed; /* bracketed paste mode */
244 + int w_cursorstyle; /* cursor style */
246 int w_bd_x, w_bd_y; /* Braille cursor position */