]>
Commit | Line | Data |
---|---|---|
8cce8322 AO |
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; | |
5 | p->w_insert = 0; | |
6 | p->w_revvid = 0; | |
7 | p->w_mouse = 0; | |
8 | + p->w_bracketed = 0; | |
9 | + p->w_cursorstyle = 0; | |
10 | p->w_curinv = 0; | |
11 | p->w_curvvis = 0; | |
12 | p->w_autolf = 0; | |
13 | @@ -1346,6 +1348,12 @@ int c, intermediate; | |
14 | break; | |
15 | } | |
16 | break; | |
17 | + case ' ': | |
18 | + if (c == 'q') { | |
19 | + curr->w_cursorstyle = a1; | |
20 | + LCursorStyle(&curr->w_layer, curr->w_cursorstyle); | |
21 | + } | |
22 | + break; | |
23 | case '?': | |
24 | for (a2 = 0; a2 < curr->w_NumArgs; a2++) | |
25 | { | |
26 | @@ -1477,6 +1485,10 @@ int c, intermediate; | |
27 | LExtMouseMode(&curr->w_layer, curr->w_extmouse); | |
28 | break; | |
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); | |
33 | + break; | |
34 | } | |
35 | } | |
36 | break; | |
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; | |
42 | int defnonblock = -1; | |
43 | int defmousetrack = 0; | |
44 | +int defbracketed = 0; | |
45 | +int defcursorstyle = 0; | |
46 | #ifdef AUTO_NUKE | |
47 | int defautonuke = 0; | |
48 | #endif | |
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); | |
57 | } | |
58 | @@ -323,6 +327,8 @@ struct mode *Mode; | |
59 | D_user = *u; | |
60 | D_processinput = ProcessInput; | |
61 | D_mousetrack = defmousetrack; | |
62 | + D_bracketed = defbracketed; | |
63 | + D_cursorstyle = defcursorstyle; | |
64 | return display; | |
65 | } | |
66 | ||
67 | @@ -497,6 +503,8 @@ FinitTerm() | |
68 | D_mousetrack = 0; | |
69 | MouseMode(0); | |
70 | ExtMouseMode(0); | |
71 | + BracketedPasteMode(0); | |
72 | + CursorStyle(0); | |
73 | SetRendition(&mchar_null); | |
74 | SetFlow(FLOW_NOW); | |
75 | #ifdef MAPKEYS | |
76 | @@ -871,6 +879,42 @@ ExtMouseMode(mode) | |
77 | } | |
78 | } | |
79 | ||
80 | +void BracketedPasteMode(int mode) | |
81 | +{ | |
82 | + if (!display) | |
83 | + return; | |
84 | + | |
85 | + if (D_bracketed != mode) { | |
86 | + if (!D_CXT) | |
87 | + return; | |
88 | + if (D_bracketed) { | |
89 | + AddStr("\033[?2004l"); | |
90 | + } | |
91 | + if (mode) { | |
92 | + AddStr("\033[?2004h"); | |
93 | + } | |
94 | + D_bracketed = mode; | |
95 | + } | |
96 | +} | |
97 | + | |
98 | +void CursorStyle(int mode) | |
99 | +{ | |
100 | + char buf[32]; | |
101 | + | |
102 | + if (!display) | |
103 | + return; | |
104 | + | |
105 | + if (D_cursorstyle != mode) { | |
106 | + if (!D_CXT) | |
107 | + return; | |
108 | + if (mode < 0) | |
109 | + return; | |
110 | + sprintf(buf, "\033[%d q", mode); | |
111 | + AddStr(buf); | |
112 | + D_cursorstyle = mode; | |
113 | + } | |
114 | +} | |
115 | + | |
116 | static int StrCost; | |
117 | ||
118 | /* ARGSUSED */ | |
119 | @@ -1297,6 +1341,8 @@ int cur_only; | |
120 | CursorVisibility(0); | |
121 | MouseMode(0); | |
122 | ExtMouseMode(0); | |
123 | + BracketedPasteMode(0); | |
124 | + CursorStyle(0); | |
125 | SetRendition(&mchar_null); | |
126 | SetFlow(FLOW_NOW); | |
127 | ||
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; | |
134 | ||
135 | oldrend = D_rend; | |
136 | len = D_obufp - D_obuf; | |
137 | @@ -3261,6 +3309,8 @@ NukePending() | |
138 | CursorVisibility(oldcurvis); | |
139 | MouseMode(oldmouse); | |
140 | ExtMouseMode(oldextmouse); | |
141 | + BracketedPasteMode(oldbracketed); | |
142 | + CursorStyle(oldcursorstyle); | |
143 | if (D_CWS) | |
144 | { | |
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 | |
152 | does not */ | |
153 | + int d_bracketed; /* bracketed paste mode */ | |
154 | + int d_cursorstyle; /* cursor style */ | |
155 | #ifdef RXVT_OSC | |
a565711b | 156 | int d_xtermosc[5]; /* osc used */ |
8cce8322 AO |
157 | #endif |
158 | @@ -198,6 +200,8 @@ extern struct display TheDisplay; | |
159 | ||
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))); | |
187 | #else | |
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) | |
192 | } | |
193 | } | |
194 | ||
195 | +void LBracketedPasteMode(struct layer *l, int on) | |
196 | +{ | |
197 | + struct canvas *cv; | |
198 | + for (cv = l->l_cvlist; cv; cv = cv->c_lnext) { | |
199 | + display = cv->c_display; | |
200 | + if (D_blocked) | |
201 | + continue; | |
202 | + if (cv != D_forecv) | |
203 | + continue; | |
204 | + BracketedPasteMode(on); | |
205 | + } | |
206 | +} | |
207 | + | |
208 | +void LCursorStyle(struct layer *l, int style) | |
209 | +{ | |
210 | + struct canvas *cv; | |
211 | + for (cv = l->l_cvlist; cv; cv = cv->c_lnext) { | |
212 | + display = cv->c_display; | |
213 | + if (D_blocked) | |
214 | + continue; | |
215 | + if (cv != D_forecv) | |
216 | + continue; | |
217 | + CursorStyle(style); | |
218 | + } | |
219 | +} | |
220 | + | |
221 | void LClearAll(struct layer *l, int uself) | |
222 | { | |
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); | |
233 | } | |
234 | } | |
235 | ||
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 | |
240 | #endif | |
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 */ | |
245 | #ifdef HAVE_BRAILLE | |
246 | int w_bd_x, w_bd_y; /* Braille cursor position */ | |
247 | #endif |