ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/rxvt-unicode/src/rxvt.h
Revision: 1.549
Committed: Thu Jun 30 11:33:43 2016 UTC (8 years ago) by sf-exg
Content type: text/plain
Branch: MAIN
Changes since 1.548: +7 -1 lines
Log Message:
24-bit color cube collision avoidance (patch by Fengguang Wu)

When the color cube slot is found to be already occupied by a similar
24-bit color, search through the -1, 0, +1 R/G/B indices trying to find
an empty slot, or the oldest used one (which hopefully is no longer in
active use).

This effectively reduces random collisions, hence make it pretty hard to
hit a vim GUI color scheme that cannot be correctly showed in urxvt.

File Contents

# User Rev Content
1 pcg 1.21 #ifndef RXVT_H_ /* include once only */
2     #define RXVT_H_
3 pcg 1.1
4 sf-exg 1.466 #include <stdio.h>
5     #include <ctype.h>
6     #include <errno.h>
7     #include <stdarg.h>
8     #include <stdlib.h>
9 ayin 1.340 #ifdef HAVE_STDINT_H
10     #include <stdint.h>
11     #endif
12     #include <sys/types.h>
13     #include <unistd.h>
14 sf-exg 1.466 #include <string.h>
15 ayin 1.340 #include <assert.h>
16     #ifdef HAVE_SYS_IOCTL_H
17     #include <sys/ioctl.h>
18     #endif
19     #ifdef HAVE_SYS_STRREDIR_H
20     #include <sys/strredir.h>
21     #endif
22    
23 sf-exg 1.466 #if HAVE_WCHAR_H
24 ayin 1.340 # include <wchar.h>
25     #else
26     // stdlib.h might provide it
27     #endif
28    
29 sf-exg 1.426 // we assume that Xlib.h defines XPointer, and it does since at least 1994...
30    
31 ayin 1.340 extern "C" {
32     #include <X11/Xlib.h>
33     #include <X11/Xutil.h>
34     #include <X11/Xresource.h>
35     }
36    
37     #if UNICODE_3
38     typedef uint32_t text_t;
39     #else
40     typedef uint16_t text_t; // saves lots of memory
41     #endif
42     typedef uint32_t rend_t;
43     typedef int32_t tlen_t; // was int16_t, but this results in smaller code and memory use
44     typedef int32_t tlen_t_; // specifically for use in the line_t structure
45 pcg 1.1
46     #include "feature.h"
47    
48 root 1.203 #if defined (ISO_14755) || defined (ENABLE_PERL)
49     # define ENABLE_OVERLAY 1
50     #endif
51    
52     #if ENABLE_PERL
53 root 1.259 # define ENABLE_FRILLS 1
54 root 1.203 # define ENABLE_COMBINING 1
55     #endif
56    
57     #if ENABLE_FRILLS
58 root 1.259 # define ENABLE_XEMBED 1
59     # define ENABLE_EWMH 1
60 root 1.241 # define ENABLE_XIM_ONTHESPOT 1
61 root 1.259 # define CURSOR_BLINK 1
62     # define OPTION_HC 1
63 ayin 1.323 # define BUILTIN_GLYPHS 1
64 root 1.207 #else
65     # define ENABLE_MINIMAL 1
66 root 1.203 #endif
67    
68 pcg 1.69 #include <limits.h>
69    
70 pcg 1.1 #include <X11/cursorfont.h>
71     #include <X11/keysym.h>
72     #include <X11/keysymdef.h>
73     #include <X11/Xatom.h>
74    
75 root 1.498 #if HAVE_PIXBUF
76 sf-exg 1.429 # include <gdk-pixbuf/gdk-pixbuf.h>
77     #endif
78    
79 sf-exg 1.511 #if XRENDER && (HAVE_PIXBUF || ENABLE_TRANSPARENCY)
80 sf-exg 1.429 # define HAVE_BG_PIXMAP 1
81 sf-exg 1.525 # define HAVE_IMG 1
82 sf-exg 1.429 #endif
83    
84 sf-exg 1.511 #if HAVE_BG_PIXMAP
85     # if HAVE_PIXBUF
86     # define BG_IMAGE_FROM_FILE 1
87     # endif
88     # if ENABLE_TRANSPARENCY
89     # define BG_IMAGE_FROM_ROOT 1
90     # endif
91     #endif
92    
93 root 1.479 #include <ecb.h>
94 pcg 1.54 #include "encoding.h"
95 root 1.248 #include "rxvtutil.h"
96 root 1.102 #include "rxvtfont.h"
97     #include "rxvttoolkit.h"
98 root 1.495 #include "rxvtimg.h"
99 ayin 1.342 #include "scrollbar.h"
100 root 1.318 #include "ev_cpp.h"
101 root 1.234 #include "libptytty.h"
102 pcg 1.1
103 root 1.190 #include "rxvtperl.h"
104    
105 root 1.207 // try to avoid some macros to decrease code size, on some systems
106     #if ENABLE_MINIMAL
107     # define strcmp(a,b) (strcmp)(a,b)
108     # define strlen(a) (strlen)(a)
109     # define strcpy(a,b) (strcpy)(a,b)
110     # define memset(a,c,l) (memset)(a,c,l)
111     # define memcpy(a,b,l) (memcpy)(a,b,l)
112     #endif
113    
114 pcg 1.1 /*
115     *****************************************************************************
116     * SYSTEM HACKS
117     *****************************************************************************
118     */
119    
120 root 1.266 #include <termios.h>
121 pcg 1.1
122     #ifndef STDIN_FILENO
123 pcg 1.3 # define STDIN_FILENO 0
124     # define STDOUT_FILENO 1
125     # define STDERR_FILENO 2
126 pcg 1.1 #endif
127    
128 ayin 1.332 #ifndef EXIT_SUCCESS /* missing from <stdlib.h> */
129     # define EXIT_SUCCESS 0 /* exit function success */
130     # define EXIT_FAILURE 1 /* exit function failure */
131     #endif
132    
133 root 1.227 /****************************************************************************/
134    
135     // exception thrown on fatal (per-instance) errors
136     class rxvt_failure_exception { };
137    
138     // exception thrown when the command parser runs out of input data
139     class out_of_input { };
140    
141 pcg 1.1 /*
142     *****************************************************************************
143 ayin 1.316 * PROTOTYPES
144 root 1.102 *****************************************************************************
145     */
146 root 1.147 // main.C
147 ayin 1.337 #define SET_LOCALE(locale) rxvt_set_locale (locale)
148     extern bool rxvt_set_locale (const char *locale) NOTHROW;
149     extern void rxvt_push_locale (const char *locale) NOTHROW;
150     extern void rxvt_pop_locale () NOTHROW;
151 ayin 1.340 void rxvt_init ();
152 root 1.147
153 root 1.227 // misc.C
154 root 1.128 char * rxvt_wcstombs (const wchar_t *str, int len = -1);
155     wchar_t * rxvt_mbstowcs (const char *str, int len = -1);
156     char * rxvt_wcstoutf8 (const wchar_t *str, int len = -1);
157     wchar_t * rxvt_utf8towcs (const char *str, int len = -1);
158 root 1.147
159 root 1.376 const char * rxvt_basename (const char *str) NOTHROW;
160 root 1.227 void rxvt_vlog (const char *fmt, va_list arg_ptr) NOTHROW;
161     void rxvt_log (const char *fmt,...) NOTHROW;
162     void rxvt_warn (const char *fmt,...) NOTHROW;
163 root 1.543 ecb_noreturn ecb_cold
164     void rxvt_fatal (const char *fmt, ...) THROW ((class rxvt_failure_exception));
165     ecb_noreturn ecb_cold
166     void rxvt_exit_failure () THROW ((class rxvt_failure_exception));
167    
168     void * rxvt_malloc (size_t size);
169     void * rxvt_calloc (size_t number, size_t size);
170     void * rxvt_realloc (void *ptr, size_t size);
171 root 1.227
172 root 1.543 char * rxvt_strtrim (char *str) NOTHROW;
173     char ** rxvt_strsplit (char delim, const char *str) NOTHROW;
174 sf-exg 1.427
175     static inline void
176     rxvt_free_strsplit (char **ptr) NOTHROW
177     {
178     free (ptr[0]);
179     free (ptr);
180     }
181 root 1.102
182 sf-exg 1.537 KeySym rxvt_XKeycodeToKeysym (Display *dpy, KeyCode keycode, int index);
183    
184 root 1.198 /////////////////////////////////////////////////////////////////////////////
185    
186     // temporarily replace the process environment
187     extern char **environ;
188     extern char **rxvt_environ; // the original environ pointer
189    
190 ayin 1.336 static inline void
191     set_environ (char **envv)
192 root 1.199 {
193 root 1.235 #if ENABLE_PERL
194     assert (envv);
195     #else
196 root 1.199 if (envv)
197 root 1.235 #endif
198 root 1.199 environ = envv;
199     }
200 root 1.198
201 root 1.422 struct localise_env
202     {
203     char **orig_env;
204    
205     localise_env (char **new_env)
206     {
207     orig_env = environ;
208     environ = new_env;
209     }
210    
211     ~localise_env ()
212     {
213     environ = orig_env;
214     }
215     };
216    
217 sf-exg 1.475 #ifdef HAVE_BG_PIXMAP
218 sf-exg 1.491 struct image_effects
219     {
220     bool tint_set;
221     rxvt_color tint;
222     int shade;
223     int h_blurRadius, v_blurRadius;
224    
225     image_effects ()
226     {
227     tint_set =
228     h_blurRadius =
229     v_blurRadius = 0;
230     shade = 100;
231     }
232    
233     bool need_tint ()
234     {
235     return shade != 100 || tint_set;
236     }
237    
238     bool need_blur ()
239     {
240     return h_blurRadius && v_blurRadius;
241     }
242    
243     bool set_tint (const rxvt_color &new_tint);
244     bool set_shade (const char *shade_str);
245     bool set_blur (const char *geom);
246     };
247    
248 root 1.498 # if BG_IMAGE_FROM_FILE
249 sf-exg 1.475 enum {
250     IM_IS_SIZE_SENSITIVE = 1 << 1,
251     IM_KEEP_ASPECT = 1 << 2,
252     IM_ROOT_ALIGN = 1 << 3,
253     IM_TILE = 1 << 4,
254     IM_GEOMETRY_FLAGS = IM_KEEP_ASPECT | IM_ROOT_ALIGN | IM_TILE,
255     };
256    
257     enum {
258     noScale = 0,
259     windowScale = 100,
260     defaultScale = windowScale,
261     centerAlign = 50,
262     defaultAlign = centerAlign,
263     };
264    
265 sf-exg 1.491 struct rxvt_image : image_effects
266 sf-exg 1.475 {
267 sf-exg 1.484 unsigned short alpha;
268 sf-exg 1.475 uint8_t flags;
269     unsigned int h_scale, v_scale; /* percents of the window size */
270     int h_align, v_align; /* percents of the window size:
271     0 - left align, 50 - center, 100 - right */
272    
273 sf-exg 1.490 bool is_size_sensitive ()
274     {
275     return (!(flags & IM_TILE)
276     || h_scale || v_scale
277     || (!(flags & IM_ROOT_ALIGN) && (h_align || v_align)));
278     }
279    
280 sf-exg 1.505 rxvt_img *img;
281 sf-exg 1.485
282     void destroy ()
283     {
284 sf-exg 1.505 delete img;
285 sf-exg 1.508 img = 0;
286 sf-exg 1.485 }
287 sf-exg 1.475
288 sf-exg 1.484 rxvt_image ();
289 sf-exg 1.507 void set_file_geometry (rxvt_screen *s, const char *file);
290     void set_file (rxvt_screen *s, const char *file);
291 sf-exg 1.475 bool set_geometry (const char *geom, bool update = false);
292     };
293     # endif
294     #endif
295    
296 root 1.102 /*
297     *****************************************************************************
298 pcg 1.1 * STRUCTURES AND TYPEDEFS
299     *****************************************************************************
300     */
301    
302     /*
303     * the 'essential' information for reporting Mouse Events
304     * pared down from XButtonEvent
305     */
306 root 1.372 struct mouse_event
307     {
308 root 1.128 int clicks;
309     Time time; /* milliseconds */
310     unsigned int state; /* key or button mask */
311     unsigned int button; /* detail */
312 pcg 1.1 };
313    
314 root 1.150 #if ENABLE_XEMBED
315     // XEMBED messages
316 ayin 1.316 # define XEMBED_EMBEDDED_NOTIFY 0
317     # define XEMBED_WINDOW_ACTIVATE 1
318     # define XEMBED_WINDOW_DEACTIVATE 2
319     # define XEMBED_REQUEST_FOCUS 3
320     # define XEMBED_FOCUS_IN 4
321     # define XEMBED_FOCUS_OUT 5
322     # define XEMBED_FOCUS_NEXT 6
323 root 1.150 # define XEMBED_FOCUS_PREV 7
324    
325 ayin 1.316 # define XEMBED_MODALITY_ON 10
326     # define XEMBED_MODALITY_OFF 11
327     # define XEMBED_REGISTER_ACCELERATOR 12
328     # define XEMBED_UNREGISTER_ACCELERATOR 13
329 root 1.150 # define XEMBED_ACTIVATE_ACCELERATOR 14
330    
331     // XEMBED detail code
332 ayin 1.316 # define XEMBED_FOCUS_CURRENT 0
333     # define XEMBED_FOCUS_FIRST 1
334 root 1.150 # define XEMBED_FOCUS_LAST 2
335 root 1.151
336     # define XEMBED_MAPPED (1 << 0)
337 root 1.150 #endif
338    
339 pcg 1.1 /*
340     *****************************************************************************
341     * NORMAL DEFINES
342     *****************************************************************************
343     */
344    
345     /* COLORTERM, TERM environment variables */
346 pcg 1.3 #define COLORTERMENV "rxvt"
347 root 1.498 #if BG_IMAGE_FROM_FILE
348 pcg 1.1 # define COLORTERMENVFULL COLORTERMENV "-xpm"
349     #else
350     # define COLORTERMENVFULL COLORTERMENV
351     #endif
352     #ifndef TERMENV
353 root 1.406 # if USE_256_COLORS
354 sf-exg 1.399 # define TERMENV "rxvt-unicode-256color"
355     # else
356     # define TERMENV "rxvt-unicode"
357 sf-exg 1.400 # endif
358 pcg 1.1 #endif
359    
360 root 1.548 // Hidden color cube for indexed 24-bit colors. There are fewer blue levels
361 sf-exg 1.547 // because normal human eye is less sensitive to the blue component than to
362     // the red or green. (https://en.m.wikipedia.org/wiki/Color_depth#8-bit_color)
363     #if USE_256_COLORS
364     // 7x7x5=245 < 254 unused color indices
365     # define Red_levels 7
366     # define Green_levels 7
367     # define Blue_levels 5
368     #else
369     // 6x6x4=144 < 166 unused color indices
370     # define Red_levels 6
371     # define Green_levels 6
372     # define Blue_levels 4
373     #endif
374    
375 sf-exg 1.549 #define RGB24_CUBE_SIZE (Red_levels * Green_levels * Blue_levels)
376    
377 pcg 1.1 #if defined (NO_MOUSE_REPORT) && !defined (NO_MOUSE_REPORT_SCROLLBAR)
378 root 1.102 # define NO_MOUSE_REPORT_SCROLLBAR 1
379 pcg 1.1 #endif
380    
381 pcg 1.3 #define scrollBar_esc 30
382 pcg 1.1
383 ayin 1.353 #if !defined (RXVT_SCROLLBAR) && !defined (NEXT_SCROLLBAR)
384     # define NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING 1
385     #endif
386    
387 pcg 1.39 enum {
388 root 1.212 NO_REFRESH = 0, /* Window not visible at all! */
389     FAST_REFRESH = 1, /* Fully exposed window */
390     SLOW_REFRESH = 2, /* Partially exposed window */
391 pcg 1.39 };
392 pcg 1.1
393     #ifdef NO_SECONDARY_SCREEN
394 pcg 1.3 # define NSCREENS 0
395 pcg 1.1 #else
396 pcg 1.3 # define NSCREENS 1
397 pcg 1.1 #endif
398    
399 sf-exg 1.440 /* flags for rxvt_term::scr_gotorc () */
400 pcg 1.39 enum {
401 root 1.167 C_RELATIVE = 1, /* col movement is relative */
402     R_RELATIVE = 2, /* row movement is relative */
403     RELATIVE = C_RELATIVE | R_RELATIVE,
404 pcg 1.39 };
405 pcg 1.1
406 sf-exg 1.440 /* modes for rxvt_term::scr_insdel_chars (), rxvt_term::scr_insdel_lines () */
407 pcg 1.39 enum {
408     INSERT = -1, /* don't change these values */
409     DELETE = +1,
410 pcg 1.41 ERASE = +2,
411 pcg 1.39 };
412 pcg 1.1
413 sf-exg 1.440 /* modes for rxvt_term::scr_page () - scroll page. used by scrollbar window */
414 pcg 1.1 enum page_dirn {
415 root 1.523 DN = -1,
416     NO_DIR = 0,
417     UP = 1,
418 pcg 1.1 };
419    
420 sf-exg 1.440 /* arguments for rxvt_term::scr_change_screen () */
421 pcg 1.1 enum {
422 pcg 1.3 PRIMARY = 0,
423 pcg 1.41 SECONDARY,
424 pcg 1.1 };
425    
426 root 1.398 // define various rendition bits and masks. the rendition word
427     // is 32 bits in size, and we should use it as efficiently as possible
428    
429 root 1.176 #define RS_None 0
430 pcg 1.1
431 root 1.396 // GET_BGATTR depends on RS_fgShift > RS_bgShift
432 root 1.392 #define RS_colorMask ((1UL << Color_Bits) - 1UL)
433 root 1.393 #define RS_bgShift 0
434 root 1.395 #define RS_fgShift (RS_bgShift + Color_Bits)
435     #define RS_bgMask (RS_colorMask << RS_bgShift)
436 root 1.387 #define RS_fgMask (RS_colorMask << RS_fgShift)
437 pcg 1.3
438 root 1.397 // must have space for rxvt_fontset::fontCount * 2 + 2 values
439     #define RS_fontShift (RS_fgShift + Color_Bits)
440     #define RS_Careful (1UL << RS_fontShift) /* be careful when drawing these */
441 root 1.407 #define RS_fontCount rxvt_fontset::fontCount
442     #define RS_fontMask ((RS_fontCount << (RS_fontShift + 1)) | RS_Careful) // includes RS_Careful
443 root 1.121
444 root 1.397 // toggle this to force redraw, must be != RS_Careful and otherwise "pretty neutral"
445     #define RS_redraw (2UL << RS_fontShift)
446 root 1.176
447 sf-exg 1.403 #define RS_Sel (1UL << 22)
448    
449 root 1.408 // 4 custom bits for extensions
450 root 1.395 #define RS_customCount 16UL
451 root 1.388 #define RS_customShift 23
452 root 1.395 #define RS_customMask ((RS_customCount - 1UL) << RS_customShift)
453 root 1.121
454 root 1.397 // font styles
455     #define RS_Bold (1UL << RS_styleShift)
456     #define RS_Italic (2UL << RS_styleShift)
457    
458     #define RS_styleCount 4
459     #define RS_styleShift 27
460     #define RS_styleMask (RS_Bold | RS_Italic)
461 root 1.121
462 root 1.397 // fake styles
463     #define RS_Blink (1UL << 29)
464     #define RS_RVid (1UL << 30) // reverse video
465     #define RS_Uline (1UL << 31) // underline
466 root 1.387
467 root 1.121 #define RS_baseattrMask (RS_Italic | RS_Bold | RS_Blink | RS_RVid | RS_Uline)
468     #define RS_attrMask (RS_baseattrMask | RS_fontMask)
469    
470 root 1.387 #define DEFAULT_RSTYLE (RS_None | (Color_fg << RS_fgShift) | (Color_bg << RS_bgShift))
471     #define OVERLAY_RSTYLE (RS_None | (Color_Black << RS_fgShift) | (Color_Yellow << RS_bgShift))
472 pcg 1.3
473 pcg 1.1 enum {
474 pcg 1.3 C0_NUL = 0x00,
475     C0_SOH, C0_STX, C0_ETX, C0_EOT, C0_ENQ, C0_ACK, C0_BEL,
476     C0_BS , C0_HT , C0_LF , C0_VT , C0_FF , C0_CR , C0_SO , C0_SI ,
477     C0_DLE, C0_DC1, C0_DC2, D0_DC3, C0_DC4, C0_NAK, C0_SYN, C0_ETB,
478 pcg 1.41 C0_CAN, C0_EM , C0_SUB, C0_ESC, C0_IS4, C0_IS3, C0_IS2, C0_IS1,
479 ayin 1.316 };
480 pcg 1.3 #define CHAR_ST 0x9c /* 0234 */
481 pcg 1.1
482     /*
483     * XTerm Operating System Commands: ESC ] Ps;Pt (ST|BEL)
484     * colour extensions by Christian W. Zuckschwerdt <zany@triq.net>
485     */
486 pcg 1.41 enum {
487     XTerm_name = 0,
488     XTerm_iconName = 1,
489     XTerm_title = 2,
490 pcg 1.69 XTerm_property = 3, // change X property
491 pcg 1.51 XTerm_Color = 4, // change colors
492 ayin 1.351 XTerm_Color00 = 10, // change fg color
493     XTerm_Color01 = 11, // change bg color
494 pcg 1.51 XTerm_Color_cursor = 12, // change actual 'Cursor' color
495 root 1.197 XTerm_Color_pointer_fg = 13, // change actual 'Pointer' fg color
496     XTerm_Color_pointer_bg = 14, // change actual 'Pointer' bg color
497     XTerm_Color05 = 15, // not implemented (tektronix fg)
498     XTerm_Color06 = 16, // not implemented (tektronix bg)
499 sf-exg 1.405 XTerm_Color_HC = 17, // change actual 'Highlight' bg color
500     XTerm_Color_HTC = 19, // change actual 'Highlight' fg color
501 pcg 1.51 XTerm_logfile = 46, // not implemented
502 pcg 1.41 XTerm_font = 50,
503    
504 pcg 1.51 XTerm_konsole30 = 30, // reserved for konsole
505     XTerm_konsole31 = 31, // reserved for konsole
506     XTerm_emacs51 = 51, // reserved for emacs shell
507 pcg 1.41 /*
508     * rxvt extensions of XTerm OSCs: ESC ] Ps;Pt (ST|BEL)
509     */
510 ayin 1.351
511     // deprecated
512     Rxvt_restoreFG = 39,
513     Rxvt_restoreBG = 49,
514    
515 root 1.197 Rxvt_Pixmap = 20, // new bg pixmap
516     Rxvt_dumpscreen = 55, // dump scrollback and all of screen
517 root 1.153
518     URxvt_locale = 701, // change locale
519 root 1.246 URxvt_version = 702, // request version
520 root 1.209
521 root 1.153 URxvt_Color_IT = 704, // change actual 'Italic' colour
522     URxvt_Color_tint = 705, // change actual tint colour
523 ayin 1.351 URxvt_Color_BD = 706, // change actual 'Bold' color
524     URxvt_Color_UL = 707, // change actual 'Underline' color
525 root 1.373 URxvt_Color_border = 708,
526 root 1.121
527     URxvt_font = 710,
528     URxvt_boldFont = 711,
529     URxvt_italicFont = 712,
530     URxvt_boldItalicFont = 713,
531 root 1.153
532     URxvt_view_up = 720,
533     URxvt_view_down = 721,
534 root 1.184
535 root 1.366 URxvt_perl = 777, // for use by perl extensions, starts with "extension-name;"
536 pcg 1.41 };
537 pcg 1.1
538     /* Words starting with `Color_' are colours. Others are counts */
539     /*
540 root 1.160 * The PixColor and rendition colour usage should probably be decoupled
541 pcg 1.1 * on the unnecessary items, e.g. Color_pointer, but won't bother
542     * until we need to. Also, be aware of usage in pixcolor_set
543     */
544    
545     enum colour_list {
546 root 1.263 Color_none = -2,
547     Color_transparent = -1,
548 pcg 1.3 Color_fg = 0,
549     Color_bg,
550     minCOLOR, /* 2 */
551     Color_Black = minCOLOR,
552     Color_Red3,
553     Color_Green3,
554     Color_Yellow3,
555     Color_Blue3,
556     Color_Magenta3,
557     Color_Cyan3,
558     maxCOLOR, /* minCOLOR + 7 */
559 pcg 1.1 #ifndef NO_BRIGHTCOLOR
560 pcg 1.3 Color_AntiqueWhite = maxCOLOR,
561     minBrightCOLOR, /* maxCOLOR + 1 */
562     Color_Grey25 = minBrightCOLOR,
563     Color_Red,
564     Color_Green,
565     Color_Yellow,
566     Color_Blue,
567     Color_Magenta,
568     Color_Cyan,
569     maxBrightCOLOR, /* minBrightCOLOR + 7 */
570     Color_White = maxBrightCOLOR,
571 pcg 1.1 #else
572 pcg 1.3 Color_White = maxCOLOR,
573 pcg 1.1 #endif
574 root 1.121 minTermCOLOR = Color_White + 1,
575 root 1.406 #if USE_256_COLORS
576     maxTermCOLOR = Color_White + 240,
577     #else
578 root 1.121 maxTermCOLOR = Color_White + 72,
579 root 1.388 #endif
580 sf-exg 1.547 minTermCOLOR24,
581     maxTermCOLOR24 = minTermCOLOR24 +
582 sf-exg 1.549 RGB24_CUBE_SIZE - 1,
583 pcg 1.1 #ifndef NO_CURSORCOLOR
584 pcg 1.3 Color_cursor,
585     Color_cursor2,
586 pcg 1.1 #endif
587 pcg 1.69 Color_pointer_fg,
588     Color_pointer_bg,
589 pcg 1.3 Color_border,
590 pcg 1.1 #ifndef NO_BOLD_UNDERLINE_REVERSE
591 pcg 1.3 Color_BD,
592 root 1.121 Color_IT,
593 pcg 1.3 Color_UL,
594     Color_RV,
595 pcg 1.1 #endif
596 root 1.133 #if ENABLE_FRILLS
597     Color_underline,
598     #endif
599 pcg 1.1 #ifdef OPTION_HC
600 pcg 1.3 Color_HC,
601 sf-exg 1.402 Color_HTC,
602 pcg 1.1 #endif
603 pcg 1.3 Color_scroll,
604 ayin 1.354 #ifdef RXVT_SCROLLBAR
605 pcg 1.3 Color_trough,
606 pcg 1.1 #endif
607 sf-exg 1.511 #if BG_IMAGE_FROM_ROOT
608 pcg 1.69 Color_tint,
609     #endif
610 root 1.160 #if OFF_FOCUS_FADING
611     Color_fade,
612     #endif
613 pcg 1.3 NRS_COLORS, /* */
614 ayin 1.354 #ifdef RXVT_SCROLLBAR
615 pcg 1.3 Color_topShadow = NRS_COLORS,
616     Color_bottomShadow,
617 root 1.121 TOTAL_COLORS
618 pcg 1.1 #else
619 root 1.121 TOTAL_COLORS = NRS_COLORS
620 pcg 1.1 #endif
621     };
622    
623 root 1.406 #if USE_256_COLORS
624 sf-exg 1.547 # define Color_Bits 9 // 0 .. maxTermCOLOR24
625 root 1.388 #else
626 sf-exg 1.547 # define Color_Bits 8 // 0 .. maxTermCOLOR24
627     #endif
628    
629     #if maxTermCOLOR24 >= (1 << Color_Bits)
630     # error color index overflow
631 root 1.388 #endif
632 root 1.121
633 pcg 1.1 /*
634     * Resource list
635     */
636     enum {
637 root 1.185 # define def(name) Rs_ ## name,
638     # define reserve(name,count) Rs_ ## name ## _ = Rs_ ## name + (count) - 1,
639     # include "rsinc.h"
640     # undef def
641     # undef reserve
642 pcg 1.3 NUM_RESOURCES
643     };
644 pcg 1.1
645     /* DEC private modes */
646 root 1.102 #define PrivMode_132 (1UL<<0)
647     #define PrivMode_132OK (1UL<<1)
648     #define PrivMode_rVideo (1UL<<2)
649     #define PrivMode_relOrigin (1UL<<3)
650     #define PrivMode_Screen (1UL<<4)
651     #define PrivMode_Autowrap (1UL<<5)
652     #define PrivMode_aplCUR (1UL<<6)
653     #define PrivMode_aplKP (1UL<<7)
654     #define PrivMode_HaveBackSpace (1UL<<8)
655     #define PrivMode_BackSpace (1UL<<9)
656     #define PrivMode_ShiftKeys (1UL<<10)
657     #define PrivMode_VisibleCursor (1UL<<11)
658     #define PrivMode_MouseX10 (1UL<<12)
659     #define PrivMode_MouseX11 (1UL<<13)
660     #define PrivMode_scrollBar (1UL<<14)
661 root 1.208 #define PrivMode_TtyOutputInh (1UL<<15)
662     #define PrivMode_Keypress (1UL<<16)
663     #define PrivMode_smoothScroll (1UL<<17)
664     #define PrivMode_vt52 (1UL<<18)
665     #define PrivMode_LFNL (1UL<<19)
666 ayin 1.313 #define PrivMode_MouseBtnEvent (1UL<<20)
667     #define PrivMode_MouseAnyEvent (1UL<<21)
668 ayin 1.352 #define PrivMode_BracketPaste (1UL<<22)
669 root 1.417 #define PrivMode_ExtModeMouse (1UL<<23) // xterm pseudo-utf-8 hack
670     #define PrivMode_ExtMouseRight (1UL<<24) // xterm pseudo-utf-8, but works in non-utf-8-locales
671 sf-exg 1.540 #define PrivMode_BlinkingCursor (1UL<<25)
672 sf-exg 1.546 #define PrivMode_FocusEvent (1UL<<26)
673 pcg 1.1
674 ayin 1.313 #define PrivMode_mouse_report (PrivMode_MouseX10|PrivMode_MouseX11|PrivMode_MouseBtnEvent|PrivMode_MouseAnyEvent)
675 pcg 1.1
676     #ifdef ALLOW_132_MODE
677 root 1.148 # define PrivMode_Default (PrivMode_Autowrap|PrivMode_ShiftKeys|PrivMode_VisibleCursor|PrivMode_132OK)
678 pcg 1.1 #else
679 root 1.148 # define PrivMode_Default (PrivMode_Autowrap|PrivMode_ShiftKeys|PrivMode_VisibleCursor)
680 pcg 1.1 #endif
681    
682 root 1.87 // do not change these constants lightly, there are many interdependencies
683 pcg 1.60 #define IMBUFSIZ 128 // input modifier buffer sizes
684     #define KBUFSZ 512 // size of keyboard mapping buffer
685 root 1.528 #define CBUFSIZ 32768 // size of command buffer (longest command sequence possible)
686 root 1.368 #define CBUFCNT 8 // never call pty_fill/cmd_parse more than this often in a row
687 root 1.177 #define UBUFSIZ 2048 // character buffer
688 pcg 1.1
689 ayin 1.327 #if ENABLE_FRILLS
690     # include <X11/Xmd.h>
691 root 1.372 typedef struct _mwmhints
692     {
693 ayin 1.327 CARD32 flags;
694     CARD32 functions;
695     CARD32 decorations;
696     INT32 input_mode;
697     CARD32 status;
698     } MWMHints;
699     #endif
700    
701 root 1.87 /* Motif window hints */
702     #define MWM_HINTS_FUNCTIONS (1L << 0)
703     #define MWM_HINTS_DECORATIONS (1L << 1)
704     #define MWM_HINTS_INPUT_MODE (1L << 2)
705     #define MWM_HINTS_STATUS (1L << 3)
706     /* bit definitions for MwmHints.functions */
707     #define MWM_FUNC_ALL (1L << 0)
708     #define MWM_FUNC_RESIZE (1L << 1)
709     #define MWM_FUNC_MOVE (1L << 2)
710     #define MWM_FUNC_MINIMIZE (1L << 3)
711     #define MWM_FUNC_MAXIMIZE (1L << 4)
712     #define MWM_FUNC_CLOSE (1L << 5)
713     /* bit definitions for MwmHints.decorations */
714     #define MWM_DECOR_ALL (1L << 0)
715     #define MWM_DECOR_BORDER (1L << 1)
716     #define MWM_DECOR_RESIZEH (1L << 2)
717     #define MWM_DECOR_TITLE (1L << 3)
718     #define MWM_DECOR_MENU (1L << 4)
719     #define MWM_DECOR_MINIMIZE (1L << 5)
720     #define MWM_DECOR_MAXIMIZE (1L << 6)
721     /* bit definitions for MwmHints.inputMode */
722     #define MWM_INPUT_MODELESS 0
723     #define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1
724     #define MWM_INPUT_SYSTEM_MODAL 2
725     #define MWM_INPUT_FULL_APPLICATION_MODAL 3
726     #define PROP_MWM_HINTS_ELEMENTS 5
727    
728 pcg 1.1 /*
729     *****************************************************************************
730     * MACRO DEFINES
731     *****************************************************************************
732     */
733 root 1.409
734     // speed hack, copy some member variable into a local variable of the same name
735 root 1.212 #define dLocal(type,name) type const name = this->name
736 root 1.145
737 root 1.265 // for speed reasons, we assume that all codepoints 32 to 126 are
738     // single-width.
739     #define WCWIDTH(c) (IN_RANGE_INC (c, 0x20, 0x7e) ? 1 : wcwidth (c))
740 root 1.241
741 pcg 1.1 /* convert pixel dimensions to row/column values. Everything as int32_t */
742 root 1.78 #define Pixel2Col(x) Pixel2Width((int32_t)(x))
743     #define Pixel2Row(y) Pixel2Height((int32_t)(y))
744 root 1.162 #define Pixel2Width(x) ((int32_t)(x) / (int32_t)fwidth)
745     #define Pixel2Height(y) ((int32_t)(y) / (int32_t)fheight)
746 root 1.78 #define Col2Pixel(col) ((int32_t)Width2Pixel(col))
747     #define Row2Pixel(row) ((int32_t)Height2Pixel(row))
748 root 1.162 #define Width2Pixel(n) ((int32_t)(n) * (int32_t)fwidth)
749     #define Height2Pixel(n) ((int32_t)(n) * (int32_t)fheight)
750 pcg 1.1
751 root 1.372 #define LINENO_of(t,n) MOD ((t)->term_start + int(n), (t)->total_rows)
752     #define ROW_of(t,n) (t)->row_buf [LINENO_of ((t), n)]
753    
754     #define LINENO(n) LINENO_of (this, n)
755     #define ROW(n) ROW_of (this, n)
756 pcg 1.1
757     /* how to build & extract colors and attributes */
758 root 1.387 #define GET_BASEFG(x) (((x) & RS_fgMask) >> RS_fgShift)
759     #define GET_BASEBG(x) (((x) & RS_bgMask) >> RS_bgShift)
760 pcg 1.1
761 pcg 1.3 #define GET_FONT(x) (((x) & RS_fontMask) >> RS_fontShift)
762 root 1.121 #define SET_FONT(x,fid) (((x) & ~RS_fontMask) | ((fid) << RS_fontShift))
763    
764     #define GET_STYLE(x) (((x) & RS_styleMask) >> RS_styleShift)
765     #define SET_STYLE(x,style) (((x) & ~RS_styleMask) | ((style) << RS_styleShift))
766 pcg 1.1
767 pcg 1.3 #define GET_ATTR(x) (((x) & RS_attrMask))
768 root 1.387 #define SET_FGCOLOR(x,fg) (((x) & ~RS_fgMask) | ((fg) << RS_fgShift))
769     #define SET_BGCOLOR(x,bg) (((x) & ~RS_bgMask) | ((bg) << RS_bgShift))
770 root 1.121 #define SET_ATTR(x,a) (((x) & ~RS_attrMask) | (a))
771    
772     #define RS_SAME(a,b) (!(((a) ^ (b)) & ~RS_Careful))
773 pcg 1.1
774 root 1.251 #define PIXCOLOR_NAME(idx) rs[Rs_color + (idx)]
775     #define ISSET_PIXCOLOR(idx) (!!rs[Rs_color + (idx)])
776 pcg 1.1
777 root 1.121 #if ENABLE_STYLES
778 root 1.372 # define FONTSET_of(t,style) (t)->fontset[GET_STYLE (style)]
779 root 1.121 #else
780 root 1.372 # define FONTSET_of(t,style) (t)->fontset[0]
781 root 1.121 #endif
782    
783 root 1.372 #define FONTSET(style) FONTSET_of (this, style)
784    
785 root 1.257 typedef callback<void (const char *)> log_callback;
786     typedef callback<int (int)> getfd_callback;
787 pcg 1.60
788 root 1.187 /****************************************************************************/
789    
790     #define LINE_LONGER 0x0001 // line is continued on the next row
791     #define LINE_FILTERED 0x0002 // line has been filtered
792     #define LINE_COMPRESSED 0x0004 // line has been compressed (NYI)
793 root 1.262 #define LINE_FILTER 0x0008 // line needs to be filtered before display (NYI)
794     #define LINE_BIDI 0x0010 // line needs bidi (NYI)
795 root 1.187
796 root 1.372 struct line_t
797     {
798 root 1.187 text_t *t; // terminal the text
799     rend_t *r; // rendition, uses RS_ flags
800 ayin 1.339 tlen_t_ l; // length of each text line
801 root 1.187 uint32_t f; // flags
802    
803 root 1.487 bool valid ()
804     {
805     return l >= 0;
806     }
807    
808     void alloc ()
809     {
810     l = 0;
811     }
812    
813 root 1.187 bool is_longer ()
814     {
815     return f & LINE_LONGER;
816     }
817    
818     void is_longer (int set)
819     {
820     if (set)
821     f |= LINE_LONGER;
822     else
823     f &= ~LINE_LONGER;
824     }
825    
826     void clear ()
827     {
828     t = 0;
829     r = 0;
830     l = 0;
831     f = 0;
832     }
833    
834     void touch () // call whenever a line is changed/touched/updated
835     {
836     #if ENABLE_PERL
837     f &= ~LINE_FILTERED;
838     #endif
839     }
840    
841     void touch (int col)
842     {
843     max_it (l, col);
844     touch ();
845     }
846     };
847    
848     /****************************************************************************/
849    
850 ayin 1.317 // primitive wrapper around mbstate_t to ensure initialisation
851 root 1.372 struct mbstate
852     {
853 pcg 1.17 mbstate_t mbs;
854 pcg 1.1
855 pcg 1.36 operator mbstate_t *() { return &mbs; }
856 root 1.102 void reset () { memset (&mbs, 0, sizeof (mbs)); }
857 pcg 1.36 mbstate () { reset (); }
858 pcg 1.1 };
859    
860 root 1.187 /****************************************************************************/
861    
862 root 1.135 #define UNICODE_MASK 0x1fffffUL
863    
864 ayin 1.338 #if UNICODE_3
865 pcg 1.51 # define COMPOSE_LO 0x40000000UL
866     # define COMPOSE_HI 0x400fffffUL
867     # define IS_COMPOSE(n) ((int32_t)(n) >= COMPOSE_LO)
868     #else
869 root 1.189 # if ENABLE_PERL
870 root 1.250 # define COMPOSE_LO 0xe000UL // our _own_ functions don't like (illegal) surrogates
871 root 1.189 # define COMPOSE_HI 0xf8ffUL // in utf-8, so use private use area only
872     # else
873     # define COMPOSE_LO 0xd800UL
874     # define COMPOSE_HI 0xf8ffUL
875     # endif
876     # define IS_COMPOSE(n) IN_RANGE_INC ((n), COMPOSE_LO, COMPOSE_HI)
877 pcg 1.51 #endif
878    
879 pcg 1.52 #if ENABLE_COMBINING
880 pcg 1.51 // compose chars are used to represent composite characters
881     // that are not representable in unicode, as well as characters
882     // not fitting in the BMP.
883 root 1.372 struct compose_char
884     {
885 pcg 1.54 unicode_t c1, c2; // any chars != NOCHAR are valid
886 root 1.542
887 pcg 1.54 compose_char (unicode_t c1, unicode_t c2)
888 pcg 1.51 : c1(c1), c2(c2)
889     { }
890     };
891    
892 root 1.372 class rxvt_composite_vec
893     {
894 pcg 1.51 vector<compose_char> v;
895     public:
896 pcg 1.54 text_t compose (unicode_t c1, unicode_t c2 = NOCHAR);
897     int expand (unicode_t c, wchar_t *r);
898 pcg 1.51 compose_char *operator [](text_t c)
899     {
900     return c >= COMPOSE_LO && c < COMPOSE_LO + v.size ()
901     ? &v[c - COMPOSE_LO]
902     : 0;
903     }
904     };
905    
906     extern class rxvt_composite_vec rxvt_composite;
907     #endif
908    
909 root 1.187 /****************************************************************************/
910 pcg 1.51
911 root 1.140 #ifdef KEYSYM_RESOURCE
912 root 1.252 class keyboard_manager;
913 root 1.140 #endif
914    
915 ayin 1.340 typedef struct rxvt_term *rxvt_t;
916    
917     extern rxvt_t rxvt_current_term;
918    
919     #define SET_R(r) rxvt_current_term = const_cast<rxvt_term *>(r)
920     #define GET_R rxvt_current_term
921    
922 root 1.372 /* ------------------------------------------------------------------------- */
923     struct overlay_base
924     {
925     int x, y, w, h; // overlay dimensions
926     text_t **text;
927     rend_t **rend;
928    
929 sf-exg 1.413 // while tempting to add swap() etc. here, it effectively only increases code size
930 root 1.372 };
931    
932     /* ------------------------------------------------------------------------- */
933    
934     typedef struct
935     {
936 ayin 1.340 int row;
937     int col;
938     } row_col_t;
939    
940     /*
941     * terminal limits:
942     *
943     * width : 1 <= width
944     * height : 1 <= height
945     * ncol : 1 <= ncol <= MAX(tlen_t)
946     * nrow : 1 <= nrow <= MAX(int)
947     * saveLines : 0 <= saveLines <= MAX(int)
948     * term_start : 0 <= term_start < saveLines
949     * total_rows : nrow + saveLines
950     *
951     * top_row : -saveLines <= top_row <= 0
952     * view_start : top_row <= view_start <= 0
953     *
954     * | most coordinates are stored relative to term_start,
955     * ROW_BUF | which is the first line of the terminal screen
956     * |························= row_buf[0]
957     * |························= row_buf[1]
958     * |························= row_buf[2] etc.
959     * |
960     * +------------+···········= term_start + top_row
961     * | scrollback |
962     * | scrollback +---------+·= term_start + view_start
963     * | scrollback | display |
964     * | scrollback | display |
965     * +------------+·display·+·= term_start
966     * | terminal | display |
967     * | terminal +---------+
968     * | terminal |
969     * | terminal |
970 ayin 1.364 * +------------+···········= term_start + nrow - 1
971 ayin 1.340 * |
972     * |
973     * END······················= total_rows
974     */
975    
976 root 1.372 struct TermWin_t
977     {
978 sf-exg 1.464 int vt_width; /* actual window width [pixels] */
979     int vt_height; /* actual window height [pixels] */
980 ayin 1.340 int width; /* window width [pixels] */
981     int height; /* window height [pixels] */
982     int fwidth; /* font width [pixels] */
983     int fheight; /* font height [pixels] */
984     int fbase; /* font ascent (baseline) [pixels] */
985     int ncol; /* window columns [characters] */
986     int nrow; /* window rows [characters] */
987 sf-exg 1.449 int focus; /* window has focus */
988     int mapped; /* window state mapped? */
989 ayin 1.340 int int_bwidth; /* internal border width */
990     int ext_bwidth; /* external border width */
991     int lineSpace; /* number of extra pixels between rows */
992 root 1.377 int letterSpace; /* number of extra pixels between columns */
993 ayin 1.340 int saveLines; /* number of lines that fit in scrollback */
994     int total_rows; /* total number of rows in this terminal */
995     int term_start; /* term lines start here */
996     int view_start; /* scrollback view starts here */
997     int top_row; /* topmost row index of scrollback */
998 sf-exg 1.439 Window parent; /* parent identifier */
999 ayin 1.340 Window vt; /* vt100 window */
1000     GC gc; /* GC for drawing */
1001     rxvt_drawable *drawable;
1002     rxvt_fontset *fontset[4];
1003     };
1004    
1005     /*
1006     * screen accounting:
1007     * screen_t elements
1008     * row: Cursor row position : 0 <= row < nrow
1009     * col: Cursor column position : 0 <= col < ncol
1010     * tscroll: Scrolling region top row inclusive : 0 <= row < nrow
1011     * bscroll: Scrolling region bottom row inclusive : 0 <= row < nrow
1012     *
1013     * selection_t elements
1014     * clicks: 1, 2 or 3 clicks - 4 indicates a special condition of 1 where
1015     * nothing is selected
1016     * beg: row/column of beginning of selection : never past mark
1017     * mark: row/column of initial click : never past end
1018     * end: row/column of one character past end of selection
1019 ayin 1.365 * * Note: top_row <= beg.row <= mark.row <= end.row < nrow
1020 ayin 1.340 * * Note: col == -1 ==> we're left of screen
1021     *
1022     */
1023 root 1.372 struct screen_t
1024     {
1025 ayin 1.340 row_col_t cur; /* cursor position on the screen */
1026     int tscroll; /* top of settable scroll region */
1027     int bscroll; /* bottom of settable scroll region */
1028     unsigned int charset; /* character set number [0..3] */
1029     unsigned int flags; /* see below */
1030     row_col_t s_cur; /* saved cursor position */
1031     unsigned int s_charset; /* saved character set number [0..3] */
1032     char s_charset_char;
1033     rend_t s_rstyle; /* saved rendition style */
1034 root 1.372 };
1035 ayin 1.340
1036 root 1.372 enum selection_op_t
1037     {
1038 ayin 1.340 SELECTION_CLEAR = 0, /* nothing selected */
1039     SELECTION_INIT, /* marked a point */
1040     SELECTION_BEGIN, /* started a selection */
1041     SELECTION_CONT, /* continued selection */
1042     SELECTION_DONE /* selection put in CUT_BUFFER0 */
1043     };
1044    
1045 root 1.372 struct selection_t
1046     {
1047 ayin 1.340 wchar_t *text; /* selected text */
1048     unsigned int len; /* length of selected text */
1049     unsigned int screen; /* screen being used */
1050     unsigned int clicks; /* number of clicks */
1051     selection_op_t op; /* current operation */
1052     bool rect; /* rectangular selection? */
1053     row_col_t beg; /* beginning of selection <= mark */
1054     row_col_t mark; /* point of initial click <= end */
1055     row_col_t end; /* one character past end point */
1056 sf-exg 1.380 wchar_t *clip_text; /* text copied to the clipboard */
1057     unsigned int clip_len; /* length of clipboard text */
1058 root 1.372 };
1059 ayin 1.340
1060     /* ------------------------------------------------------------------------- */
1061    
1062     /* screen_t flags */
1063     #define Screen_Relative (1<<0) /* relative origin mode flag */
1064     #define Screen_VisibleCursor (1<<1) /* cursor visible? */
1065     #define Screen_Autowrap (1<<2) /* auto-wrap flag */
1066     #define Screen_Insert (1<<3) /* insert mode (vs. overstrike) */
1067     #define Screen_WrapNext (1<<4) /* need to wrap for next char? */
1068     #define Screen_DefaultFlags (Screen_VisibleCursor | Screen_Autowrap)
1069    
1070     /* rxvt_vars.options */
1071     enum {
1072 root 1.419 # define def(name) Opt_ ## name,
1073     # define nodef(name) Opt_prev_ ## name, Opt_ ## name = 0, Opt_next_ ## name = Opt_prev_ ## name - 1,
1074     Opt_0,
1075 ayin 1.340 # include "optinc.h"
1076     # undef nodef
1077     # undef def
1078 root 1.419 Opt_count
1079 ayin 1.340 };
1080    
1081     /* ------------------------------------------------------------------------- */
1082    
1083 root 1.372 struct rxvt_vars : TermWin_t
1084     {
1085 ayin 1.340 scrollBar_t scrollBar;
1086     uint8_t options[(Opt_count + 7) >> 3];
1087     XSizeHints szHint;
1088     rxvt_color *pix_colors;
1089     Cursor TermWin_cursor; /* cursor for vt window */
1090 root 1.487
1091 sf-exg 1.444 line_t *row_buf; // all lines, scrollback + terminal, circular
1092 ayin 1.340 line_t *drawn_buf; // text on screen
1093     line_t *swap_buf; // lines for swap buffer
1094     char *tabs; /* per location: 1 == tab-stop */
1095     screen_t screen;
1096     screen_t swap;
1097     selection_t selection;
1098 ayin 1.341 rxvt_color pix_colors_focused[TOTAL_COLORS];
1099     #ifdef OFF_FOCUS_FADING
1100     rxvt_color pix_colors_unfocused[TOTAL_COLORS];
1101     #endif
1102 ayin 1.340 };
1103    
1104 root 1.372 struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen
1105     {
1106 root 1.252
1107     // special markers with magic addresses
1108     static const char resval_undef []; // options specifically unset
1109     static const char resval_on []; // boolean options switched on
1110     static const char resval_off []; // or off
1111 ayin 1.316
1112 root 1.252 log_callback *log_hook; // log error messages through this hook, if != 0
1113 root 1.170 getfd_callback *getfd_hook; // convert remote to local fd, if != 0
1114 root 1.180 #if ENABLE_PERL
1115 root 1.190 rxvt_perl_term perl;
1116 root 1.180 #endif
1117 pcg 1.69 struct mbstate mbstate; // current input multibyte state
1118 pcg 1.10
1119 pcg 1.3 unsigned char want_refresh:1,
1120 pcg 1.10 current_screen:1, /* primary or secondary */
1121 pcg 1.3 num_scr_allow:1,
1122 pcg 1.10 bypass_keystate:1,
1123 root 1.374 #if ENABLE_FRILLS
1124 root 1.367 urgency_hint:1,
1125     #endif
1126 root 1.374 #if CURSOR_BLINK
1127 pcg 1.3 hidden_cursor:1,
1128 pcg 1.10 #endif
1129 root 1.374 #if TEXT_BLINK
1130 pcg 1.24 hidden_text:1,
1131     #endif
1132 root 1.374 #if POINTER_BLANK
1133 pcg 1.3 hidden_pointer:1,
1134 pcg 1.10 #endif
1135 sf-exg 1.383 enc_utf8:1, /* whether locale uses utf-8 */
1136     seen_input:1, /* whether we have seen some program output yet */
1137     seen_resize:1, /* whether we had a resize event */
1138 sf-exg 1.461 init_done:1,
1139 pcg 1.70 parsed_geometry:1;
1140 pcg 1.1
1141 pcg 1.3 unsigned char refresh_type,
1142 pcg 1.1 #ifdef META8_OPTION
1143 sf-exg 1.435 meta_char; /* Alt-key prefix */
1144 pcg 1.1 #endif
1145     /* ---------- */
1146 root 1.231 bool rvideo_state, rvideo_mode;
1147     #ifndef NO_BELL
1148     bool rvideo_bell;
1149     #endif
1150 sf-exg 1.379 int num_scr; /* screen: number of lines scrolled */
1151 root 1.124 int prev_ncol, /* screen: previous number of columns */
1152 pcg 1.69 prev_nrow; /* screen: previous number of rows */
1153 pcg 1.1 /* ---------- */
1154 pcg 1.3 rend_t rstyle;
1155 pcg 1.1 /* ---------- */
1156     #ifdef SELECTION_SCROLLING
1157 root 1.78 int scroll_selection_lines;
1158 pcg 1.3 int selection_save_x,
1159     selection_save_y,
1160 root 1.78 selection_save_state;
1161 pcg 1.1 #endif
1162     /* ---------- */
1163 pcg 1.3 int csrO, /* Hops - csr offset in thumb/slider to */
1164     /* give proper Scroll behaviour */
1165 pcg 1.1 #if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)
1166 pcg 1.3 mouse_slip_wheel_speed,
1167 pcg 1.1 #endif
1168 pcg 1.3 refresh_count,
1169     window_vt_x,
1170     window_vt_y,
1171 ayin 1.313 mouse_row,
1172     mouse_col,
1173 pcg 1.1 # ifdef POINTER_BLANK
1174 pcg 1.3 pointerBlankDelay,
1175 pcg 1.1 # endif
1176 sf-exg 1.534 multiClickTime,
1177 sf-exg 1.535 cursor_type,
1178 pcg 1.3 allowedxerror;
1179 pcg 1.1 /* ---------- */
1180 root 1.140 unsigned int ModLevel3Mask,
1181     ModMetaMask,
1182 root 1.124 ModNumLockMask;
1183 root 1.102 unsigned long priv_modes,
1184 pcg 1.3 SavedModes;
1185 pcg 1.1 /* ---------- */
1186 root 1.242 Atom *xa;
1187 pcg 1.1 /* ---------- */
1188 pcg 1.3 Time selection_time,
1189 sf-exg 1.380 clipboard_time;
1190 sf-exg 1.436 rxvt_selection *selection_req;
1191 pcg 1.3 pid_t cmd_pid; /* process id of child */
1192 pcg 1.1 /* ---------- */
1193 pcg 1.3 struct mouse_event MEvent;
1194     XComposeStatus compose;
1195 sf-exg 1.414 static struct termios def_tio;
1196 pcg 1.3 row_col_t oldcursor;
1197 sf-exg 1.512
1198 sasha 1.283 #ifdef HAVE_BG_PIXMAP
1199 sf-exg 1.429 void bg_init ();
1200     void bg_destroy ();
1201    
1202 root 1.498 # if BG_IMAGE_FROM_FILE
1203 sf-exg 1.502 rxvt_image fimage;
1204 sf-exg 1.517 void render_image (rxvt_image &image);
1205 sf-exg 1.429 # endif
1206    
1207 sf-exg 1.511 # if BG_IMAGE_FROM_ROOT
1208 sf-exg 1.505 rxvt_img *root_img;
1209 sf-exg 1.491 image_effects root_effects;
1210 sf-exg 1.429
1211 sf-exg 1.517 void render_root_image ();
1212 sf-exg 1.429 # endif
1213    
1214 sf-exg 1.433 ev_tstamp bg_valid_since;
1215 sf-exg 1.429
1216     bool bg_window_size_sensitive ();
1217     bool bg_window_position_sensitive ();
1218    
1219 sf-exg 1.503 void bg_render ();
1220 sasha 1.283 #endif
1221 pcg 1.1
1222 sf-exg 1.512 #ifdef HAVE_IMG
1223     enum {
1224     BG_IS_TRANSPARENT = 1 << 1,
1225     BG_NEEDS_REFRESH = 1 << 2,
1226     BG_INHIBIT_RENDER = 1 << 3,
1227     };
1228    
1229     uint8_t bg_flags;
1230    
1231     rxvt_img *bg_img;
1232     #endif
1233    
1234 root 1.102 #if ENABLE_OVERLAY
1235 root 1.372 overlay_base ov;
1236 root 1.102
1237 root 1.227 void scr_swap_overlay () NOTHROW;
1238     void scr_overlay_new (int x, int y, int w, int h) NOTHROW;
1239     void scr_overlay_off () NOTHROW;
1240 root 1.102 void scr_overlay_set (int x, int y,
1241     text_t text,
1242 root 1.227 rend_t rend = OVERLAY_RSTYLE) NOTHROW;
1243     void scr_overlay_set (int x, int y, const char *s) NOTHROW;
1244     void scr_overlay_set (int x, int y, const wchar_t *s) NOTHROW;
1245 root 1.102 #endif
1246    
1247 pcg 1.69 vector<void *> allocated; // free these memory blocks with free()
1248 pcg 1.60
1249 root 1.499 int parent_x, parent_y; // parent window position relative to root, only updated on demand
1250    
1251 pcg 1.3 char *locale;
1252     char charsets[4];
1253 root 1.186 char *v_buffer; /* pointer to physical buffer */
1254 pcg 1.69 unsigned int v_buflen; /* size of area to write */
1255 root 1.243 stringvec *argv, *envv; /* if != 0, will be freed at destroy time */
1256 sf-exg 1.538 char **env;
1257 root 1.140
1258 pcg 1.1 #ifdef KEYSYM_RESOURCE
1259 root 1.140 keyboard_manager *keyboard;
1260 pcg 1.1 #endif
1261 ayin 1.322 #ifndef NO_RESOURCES
1262     XrmDatabase option_db;
1263     #endif
1264 root 1.140
1265 pcg 1.3 const char *rs[NUM_RESOURCES];
1266 pcg 1.60 /* command input buffering */
1267 root 1.186 char *cmdbuf_ptr, *cmdbuf_endp;
1268     char cmdbuf_base[CBUFSIZ];
1269 pcg 1.3
1270 root 1.234 ptytty *pty;
1271 root 1.213
1272 root 1.487 // chunk contains all line_t's as well as rend_t and text_t buffers
1273     // for drawn_buf, swap_buf and row_buf, in this order
1274     void *chunk;
1275     size_t chunk_size;
1276 pcg 1.69
1277 sf-exg 1.549 uint32_t rgb24_color[RGB24_CUBE_SIZE]; // the 24-bit color value
1278     uint16_t rgb24_seqno[RGB24_CUBE_SIZE]; // which one is older?
1279     uint16_t rgb24_sequence;
1280    
1281 pcg 1.69 static vector<rxvt_term *> termlist; // a vector of all running rxvt_term's
1282 pcg 1.12
1283 root 1.102 #if ENABLE_FRILLS || ISO_14755
1284 root 1.91 // ISO 14755 entry support
1285     unicode_t iso14755buf;
1286     void commit_iso14755 ();
1287 root 1.102 # if ISO_14755
1288 root 1.501 void iso14755_51 (unicode_t ch, rend_t r = DEFAULT_RSTYLE, int x = 0, int y = -1, int y2 = -1);
1289 root 1.102 void iso14755_54 (int x, int y);
1290     # endif
1291 root 1.91 #endif
1292    
1293 ayin 1.313 long vt_emask, vt_emask_perl, vt_emask_xim, vt_emask_mouse;
1294 root 1.201
1295 root 1.227 void vt_select_input () const NOTHROW
1296 root 1.201 {
1297 ayin 1.313 XSelectInput (dpy, vt, vt_emask | vt_emask_perl | vt_emask_xim | vt_emask_mouse);
1298 root 1.201 }
1299 pcg 1.10
1300 sf-exg 1.511 #if BG_IMAGE_FROM_ROOT || ENABLE_PERL
1301 pcg 1.31 void rootwin_cb (XEvent &xev);
1302     xevent_watcher rootwin_ev;
1303 ayin 1.272 #endif
1304 sasha 1.293 #ifdef HAVE_BG_PIXMAP
1305 root 1.335 void update_background ();
1306 root 1.318 void update_background_cb (ev::timer &w, int revents);
1307     ev::timer update_background_ev;
1308 root 1.91 #endif
1309 pcg 1.31
1310     void x_cb (XEvent &xev);
1311     xevent_watcher termwin_ev;
1312     xevent_watcher vt_ev;
1313     xevent_watcher scrollbar_ev;
1314    
1315 root 1.318 void child_cb (ev::child &w, int revents); ev::child child_ev;
1316 root 1.321 void destroy_cb (ev::idle &w, int revents); ev::idle destroy_ev;
1317 root 1.333 void refresh_check ();
1318 ayin 1.311 void flush ();
1319 root 1.318 void flush_cb (ev::timer &w, int revents); ev::timer flush_ev;
1320 root 1.438 void cmdbuf_reify ();
1321     void cmdbuf_append (const char *str, size_t count);
1322 ayin 1.311 bool pty_fill ();
1323 root 1.318 void pty_cb (ev::io &w, int revents); ev::io pty_ev;
1324 pcg 1.3
1325 pcg 1.5 #ifdef CURSOR_BLINK
1326 sf-exg 1.471 void cursor_blink_reset ();
1327 root 1.318 void cursor_blink_cb (ev::timer &w, int revents); ev::timer cursor_blink_ev;
1328 pcg 1.25 #endif
1329     #ifdef TEXT_BLINK
1330 root 1.318 void text_blink_cb (ev::timer &w, int revents); ev::timer text_blink_ev;
1331 pcg 1.6 #endif
1332 ayin 1.316 #ifndef NO_BELL
1333 root 1.318 void bell_cb (ev::timer &w, int revents); ev::timer bell_ev;
1334 root 1.231 #endif
1335 pcg 1.6
1336 root 1.78 #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
1337 root 1.318 void cont_scroll_cb (ev::timer &w, int revents); ev::timer cont_scroll_ev;
1338 root 1.78 #endif
1339     #ifdef SELECTION_SCROLLING
1340 root 1.318 void sel_scroll_cb (ev::timer &w, int revents); ev::timer sel_scroll_ev;
1341 root 1.78 #endif
1342     #if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)
1343 root 1.318 void slip_wheel_cb (ev::timer &w, int revents); ev::timer slip_wheel_ev;
1344 root 1.78 #endif
1345    
1346 pcg 1.6 #ifdef POINTER_BLANK
1347 root 1.318 void pointer_cb (ev::timer &w, int revents); ev::timer pointer_ev;
1348 pcg 1.6 void pointer_blank ();
1349 root 1.83 #endif
1350 pcg 1.6 void pointer_unblank ();
1351 pcg 1.9
1352     void tt_printf (const char *fmt,...);
1353 root 1.532 void tt_write_ (const char *data, unsigned int len);
1354     void tt_write (const char *data, unsigned int len);
1355 sf-exg 1.529 void tt_write_user_input (const char *data, unsigned int len);
1356 root 1.130 void pty_write ();
1357 pcg 1.5
1358 root 1.206 void make_current () const // make this the "currently active" urxvt instance
1359     {
1360     SET_R (this);
1361 sf-exg 1.538 set_environ (env);
1362 root 1.206 rxvt_set_locale (locale);
1363     }
1364 root 1.205
1365 pcg 1.18 #if USE_XIM
1366 root 1.236 rxvt_xim *input_method;
1367     XIC Input_Context;
1368     XIMStyle input_style;
1369     XPoint spot; // most recently sent spot position
1370 root 1.124
1371 pcg 1.33 void im_destroy ();
1372     void im_cb (); im_watcher im_ev;
1373 root 1.102 void im_set_size (XRectangle &size);
1374 root 1.227 void im_set_position (XPoint &pos) NOTHROW;
1375 root 1.102 void im_set_color (unsigned long &fg, unsigned long &bg);
1376     void im_set_preedit_area (XRectangle &preedit_rect, XRectangle &status_rect, const XRectangle &needed_rect);
1377 pcg 1.33
1378 sf-exg 1.445 bool im_is_running ();
1379     void im_send_spot ();
1380     bool im_get_ic (const char *modifiers);
1381     void im_set_position ();
1382 pcg 1.18 #endif
1383    
1384 pcg 1.27 // command.C
1385 root 1.255 void key_press (XKeyEvent &ev);
1386     void key_release (XKeyEvent &ev);
1387 root 1.78
1388 root 1.227 wchar_t next_char () NOTHROW;
1389     wchar_t cmd_getc () THROW ((class out_of_input));
1390     uint32_t next_octet () NOTHROW;
1391     uint32_t cmd_get8 () THROW ((class out_of_input));
1392 root 1.78
1393 root 1.368 void cmd_parse ();
1394 pcg 1.40 void mouse_report (XButtonEvent &ev);
1395     void button_press (XButtonEvent &ev);
1396     void button_release (XButtonEvent &ev);
1397 root 1.150 void focus_in ();
1398     void focus_out ();
1399 root 1.374 #if ENABLE_FRILLS
1400 root 1.367 void set_urgency (bool enable);
1401 root 1.374 #else
1402     void set_urgency (bool enable) { }
1403     #endif
1404 root 1.541 void update_fade_color (unsigned int idx, bool first_time = false);
1405 pcg 1.27 #ifdef PRINTPIPE
1406 pcg 1.39 FILE *popen_printer ();
1407 pcg 1.27 int pclose_printer (FILE *stream);
1408     #endif
1409     void process_print_pipe ();
1410 pcg 1.60 void process_nonprinting (unicode_t ch);
1411     void process_escape_vt52 (unicode_t ch);
1412 pcg 1.27 void process_escape_seq ();
1413     void process_csi_seq ();
1414     void process_window_ops (const int *args, unsigned int nargs);
1415 root 1.186 char *get_to_st (unicode_t &ends_how);
1416 pcg 1.27 void process_dcs_seq ();
1417     void process_osc_seq ();
1418 root 1.186 void process_color_seq (int report, int color, const char *str, char resp);
1419 sf-exg 1.425 void process_xterm_seq (int op, char *str, char resp);
1420 sf-exg 1.547 unsigned int map_rgb24_color (unsigned int r, unsigned int g, unsigned int b);
1421 pcg 1.27 int privcases (int mode, unsigned long bit);
1422     void process_terminal_mode (int mode, int priv, unsigned int nargs, const int *arg);
1423     void process_sgr_mode (unsigned int nargs, const int *arg);
1424 sf-exg 1.522 void set_cursor_style (int style);
1425 pcg 1.27 // init.C
1426 root 1.454 void init (stringvec *argv, stringvec *envv);
1427     void init (int argc, const char *const *argv, const char *const *envv);
1428     void init2 (int argc, const char *const *argv);
1429 ayin 1.329 void init_vars ();
1430 ayin 1.311 const char **init_resources (int argc, const char *const *argv);
1431     void init_env ();
1432     void set_locale (const char *locale);
1433     void init_xlocale ();
1434     void init_command (const char *const *argv);
1435     void run_command (const char *const *argv);
1436     int run_child (const char *const *argv);
1437     void color_aliases (int idx);
1438     void create_windows (int argc, const char *const *argv);
1439 root 1.541 void get_colors ();
1440 pcg 1.27 void get_ourmods ();
1441 sf-exg 1.415 void set_icon (const char *file);
1442 root 1.102 // main.C
1443 ayin 1.311 void tt_winch ();
1444     rxvt_term ();
1445     ~rxvt_term ();
1446     void destroy ();
1447     void emergency_cleanup ();
1448 root 1.541 void recolor_cursor ();
1449 ayin 1.311 void resize_all_windows (unsigned int newwidth, unsigned int newheight, int ignoreparent);
1450     void window_calc (unsigned int newwidth, unsigned int newheight);
1451 root 1.121 bool set_fonts ();
1452 root 1.128 void set_string_property (Atom prop, const char *str, int len = -1);
1453 sf-exg 1.410 void set_mbstring_property (Atom prop, const char *str, int len = -1);
1454 root 1.128 void set_utf8_property (Atom prop, const char *str, int len = -1);
1455 pcg 1.27 void set_title (const char *str);
1456 pcg 1.60 void set_icon_name (const char *str);
1457 pcg 1.27 void set_window_color (int idx, const char *color);
1458 sf-exg 1.462 char *get_colorfgbg ();
1459 root 1.249 bool set_color (rxvt_color &color, const char *name);
1460 root 1.253 void alias_color (int dst, int src);
1461 root 1.162 void set_widthheight (unsigned int newwidth, unsigned int newheight);
1462 sasha 1.305 void get_window_origin (int &x, int &y);
1463 pcg 1.27
1464     // screen.C
1465 root 1.162
1466 root 1.510 bool option (uint8_t opt) const NOTHROW
1467     {
1468     return options[opt >> 3] & (1 << (opt & 7));
1469     }
1470    
1471     void set_option (uint8_t opt, bool set = true) NOTHROW;
1472    
1473 root 1.227 int fgcolor_of (rend_t r) const NOTHROW
1474 root 1.173 {
1475     int base = GET_BASEFG (r);
1476     #ifndef NO_BRIGHTCOLOR
1477     if (r & RS_Bold
1478 root 1.175 # if ENABLE_STYLES
1479 root 1.269 && option (Opt_intensityStyles)
1480 root 1.175 # endif
1481 sf-exg 1.450 && IN_RANGE_EXC (base, minCOLOR, minBrightCOLOR))
1482 root 1.173 base += minBrightCOLOR - minCOLOR;
1483     #endif
1484     return base;
1485     }
1486    
1487 root 1.227 int bgcolor_of (rend_t r) const NOTHROW
1488 root 1.173 {
1489     int base = GET_BASEBG (r);
1490     #ifndef NO_BRIGHTCOLOR
1491     if (r & RS_Blink
1492 root 1.175 # if ENABLE_STYLES
1493 root 1.269 && option (Opt_intensityStyles)
1494 root 1.175 # endif
1495 sf-exg 1.450 && IN_RANGE_EXC (base, minCOLOR, minBrightCOLOR))
1496 root 1.173 base += minBrightCOLOR - minCOLOR;
1497     #endif
1498     return base;
1499     }
1500    
1501 ayin 1.311 // modifies first argument(!)
1502 sf-exg 1.412 void tt_paste (char *data, unsigned int len) NOTHROW;
1503 ayin 1.311 void paste (char *data, unsigned int len) NOTHROW;
1504 root 1.487 void scr_alloc () NOTHROW;
1505 root 1.227 void scr_blank_line (line_t &l, unsigned int col, unsigned int width, rend_t efs) const NOTHROW;
1506     void scr_blank_screen_mem (line_t &l, rend_t efs) const NOTHROW;
1507 root 1.370 void scr_kill_char (line_t &l, int col) const NOTHROW;
1508 sf-exg 1.520 void scr_set_char_rend (line_t &l, int col, rend_t rend);
1509 root 1.227 int scr_scroll_text (int row1, int row2, int count) NOTHROW;
1510 sf-exg 1.518 void copy_line (line_t &dst, line_t &src);
1511 root 1.102 void scr_reset ();
1512 root 1.227 void scr_release () NOTHROW;
1513     void scr_clear (bool really = false) NOTHROW;
1514     void scr_refresh () NOTHROW;
1515     bool scr_refresh_rend (rend_t mask, rend_t value) NOTHROW;
1516     void scr_erase_screen (int mode) NOTHROW;
1517 root 1.154 #if ENABLE_FRILLS
1518 root 1.227 void scr_erase_savelines () NOTHROW;
1519     void scr_backindex () NOTHROW;
1520     void scr_forwardindex () NOTHROW;
1521 root 1.154 #endif
1522 root 1.227 void scr_touch (bool refresh) NOTHROW;
1523     void scr_expose (int x, int y, int width, int height, bool refresh) NOTHROW;
1524 root 1.541 void scr_recolor (bool refresh = true) NOTHROW;
1525 root 1.227 void scr_remap_chars () NOTHROW;
1526     void scr_remap_chars (line_t &l) NOTHROW;
1527 root 1.102
1528 root 1.224 enum cursor_mode { SAVE, RESTORE };
1529    
1530 root 1.237 void scr_poweron ();
1531 root 1.371 void scr_soft_reset () NOTHROW;
1532 root 1.227 void scr_cursor (cursor_mode mode) NOTHROW;
1533     void scr_do_wrap () NOTHROW;
1534 root 1.237 void scr_swap_screen () NOTHROW;
1535     void scr_change_screen (int scrn);
1536 root 1.227 void scr_color (unsigned int color, int fgbg) NOTHROW;
1537     void scr_rendition (int set, int style) NOTHROW;
1538     void scr_add_lines (const wchar_t *str, int len, int minlines = 0) NOTHROW;
1539     void scr_backspace () NOTHROW;
1540     void scr_tab (int count, bool ht = false) NOTHROW;
1541     void scr_gotorc (int row, int col, int relative) NOTHROW;
1542     void scr_index (enum page_dirn direction) NOTHROW;
1543     void scr_erase_line (int mode) NOTHROW;
1544     void scr_E () NOTHROW;
1545     void scr_insdel_lines (int count, int insdel) NOTHROW;
1546     void scr_insdel_chars (int count, int insdel) NOTHROW;
1547     void scr_scroll_region (int top, int bot) NOTHROW;
1548     void scr_cursor_visible (int mode) NOTHROW;
1549     void scr_autowrap (int mode) NOTHROW;
1550     void scr_relative_origin (int mode) NOTHROW;
1551     void scr_insert_mode (int mode) NOTHROW;
1552     void scr_set_tab (int mode) NOTHROW;
1553 root 1.231 void scr_rvideo_mode (bool on) NOTHROW;
1554 root 1.227 void scr_report_position () NOTHROW;
1555     void set_font_style () NOTHROW;
1556     void scr_charset_choose (int set) NOTHROW;
1557     void scr_charset_set (int set, unsigned int ch) NOTHROW;
1558     void scr_move_to (int y, int len) NOTHROW;
1559 root 1.523 bool scr_page (int nlines) NOTHROW;
1560     bool scr_page (enum page_dirn direction, int nlines) NOTHROW
1561     {
1562 sf-exg 1.526 return scr_page (direction * nlines);
1563 root 1.523 }
1564 root 1.227 bool scr_changeview (int new_view_start) NOTHROW;
1565     void scr_bell () NOTHROW;
1566     void scr_printscreen (int fullhist) NOTHROW;
1567     void scr_xor_rect (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle1, rend_t rstyle2) NOTHROW;
1568     void scr_xor_span (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle) NOTHROW;
1569     void scr_reverse_selection () NOTHROW;
1570     void scr_dump (int fd) NOTHROW;
1571    
1572     void selection_check (int check_more) NOTHROW;
1573 root 1.521 void selection_changed () NOTHROW; /* sets want_refresh, corrects coordinates */
1574 root 1.228 void selection_request (Time tm, int selnum = Sel_Primary) NOTHROW;
1575 sf-exg 1.380 void selection_clear (bool clipboard = false) NOTHROW;
1576 pcg 1.27 void selection_make (Time tm);
1577 sf-exg 1.380 bool selection_grab (Time tm, bool clipboard = false) NOTHROW;
1578 root 1.227 void selection_start_colrow (int col, int row) NOTHROW;
1579     void selection_delimit_word (enum page_dirn dirn, const row_col_t *mark, row_col_t *ret) NOTHROW;
1580     void selection_extend_colrow (int32_t col, int32_t row, int button3, int buttonpress, int clickchange) NOTHROW;
1581     void selection_remove_trailing_spaces () NOTHROW;
1582     void selection_send (const XSelectionRequestEvent &rq) NOTHROW;
1583     void selection_click (int clicks, int x, int y) NOTHROW;
1584     void selection_extend (int x, int y, int flag) NOTHROW;
1585     void selection_rotate (int x, int y) NOTHROW;
1586    
1587 pcg 1.27 // xdefaults.C
1588 root 1.500 void rxvt_usage (int type);
1589 sf-exg 1.455 const char **get_options (int argc, const char *const *argv);
1590 sf-exg 1.536 int parse_keysym (const char *str, unsigned int &state);
1591 sf-exg 1.530 int bind_action (const char *str, const char *arg);
1592 ayin 1.311 const char *x_resource (const char *name);
1593 root 1.145 void extract_resources ();
1594 root 1.533 void enumerate_keysym_resources (void (*cb)(rxvt_term *, const char *, const char *));
1595 sf-exg 1.451 void extract_keysym_resources ();
1596 pcg 1.1 };
1597 pcg 1.16
1598 ayin 1.319 #endif /* _RXVT_H_ */
1599 pcg 1.5