ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvt.h
Revision: 1.322
Committed: Thu Nov 22 15:07:10 2007 UTC (16 years, 6 months ago) by ayin
Content type: text/plain
Branch: MAIN
CVS Tags: rel-8_6
Changes since 1.321: +3 -0 lines
Log Message:
The removal of rxvt own parsing caused an inconsistency for keysym
directives between resources and command line options, because the
former are subjected to xlib parsing while the latter are not. Fix it
by generating resources from the command line options and merging them
later in the resource database.

File Contents

# User Rev Content
1 pcg 1.21 #ifndef RXVT_H_ /* include once only */
2     #define RXVT_H_
3 pcg 1.1
4     #include "rxvtlib.h"
5    
6     #include "feature.h"
7    
8 root 1.203 #if defined (ISO_14755) || defined (ENABLE_PERL)
9     # define ENABLE_OVERLAY 1
10     #endif
11    
12     #if ENABLE_PERL
13 root 1.259 # define ENABLE_FRILLS 1
14 root 1.203 # define ENABLE_COMBINING 1
15     #endif
16    
17     #if ENABLE_FRILLS
18 root 1.259 # define ENABLE_XEMBED 1
19     # define ENABLE_EWMH 1
20 root 1.241 # define ENABLE_XIM_ONTHESPOT 1
21 root 1.259 # define CURSOR_BLINK 1
22     # define OPTION_HC 1
23 root 1.207 #else
24     # define ENABLE_MINIMAL 1
25 root 1.203 #endif
26    
27 pcg 1.69 #include <limits.h>
28    
29 pcg 1.1 #include <X11/cursorfont.h>
30     #include <X11/keysym.h>
31     #include <X11/keysymdef.h>
32     #include <X11/Xatom.h>
33 root 1.102 #if ENABLE_FRILLS
34 root 1.140 # include <X11/Xmd.h>
35 root 1.87 #endif
36 pcg 1.1
37 pcg 1.54 #include "encoding.h"
38 root 1.248 #include "rxvtutil.h"
39 root 1.102 #include "rxvtfont.h"
40     #include "rxvttoolkit.h"
41 root 1.318 #include "ev_cpp.h"
42 pcg 1.12 #include "salloc.h"
43 root 1.234 #include "libptytty.h"
44 pcg 1.1
45 root 1.190 #include "rxvtperl.h"
46    
47 root 1.207 // try to avoid some macros to decrease code size, on some systems
48     #if ENABLE_MINIMAL
49     # define strcmp(a,b) (strcmp)(a,b)
50     # define strlen(a) (strlen)(a)
51     # define strcpy(a,b) (strcpy)(a,b)
52     # define memset(a,c,l) (memset)(a,c,l)
53     # define memcpy(a,b,l) (memcpy)(a,b,l)
54     #endif
55    
56 pcg 1.1 /*
57     *****************************************************************************
58     * SYSTEM HACKS
59     *****************************************************************************
60     */
61     /* Consistent defines - please report on the necessity
62     * @ Unixware: defines (__svr4__)
63     */
64     #if defined (SVR4) && !defined (__svr4__)
65 root 1.102 # define __svr4__ 1
66 pcg 1.1 #endif
67     #if defined (sun) && !defined (__sun__)
68 root 1.102 # define __sun__ 1
69 pcg 1.1 #endif
70    
71     #ifndef HAVE_XPOINTER
72 root 1.202 typedef char *XPointer;
73 pcg 1.1 #endif
74    
75 root 1.266 #include <termios.h>
76 pcg 1.1 typedef struct termios ttymode_t;
77    
78 sasha 1.305 #include "background.h"
79    
80 pcg 1.1 #ifndef STDIN_FILENO
81 pcg 1.3 # define STDIN_FILENO 0
82     # define STDOUT_FILENO 1
83     # define STDERR_FILENO 2
84 pcg 1.1 #endif
85    
86 root 1.227 /****************************************************************************/
87    
88     // exception thrown on fatal (per-instance) errors
89     class rxvt_failure_exception { };
90    
91     // exception thrown when the command parser runs out of input data
92     class out_of_input { };
93    
94 pcg 1.1 /*
95     *****************************************************************************
96 ayin 1.316 * PROTOTYPES
97 root 1.102 *****************************************************************************
98     */
99 root 1.147 // main.C
100 root 1.102 void * rxvt_malloc (size_t size);
101     void * rxvt_calloc (size_t number, size_t size);
102     void * rxvt_realloc (void *ptr, size_t size);
103 root 1.147
104 root 1.227 // misc.C
105 root 1.128 char * rxvt_wcstombs (const wchar_t *str, int len = -1);
106     wchar_t * rxvt_mbstowcs (const char *str, int len = -1);
107     char * rxvt_wcstoutf8 (const wchar_t *str, int len = -1);
108     wchar_t * rxvt_utf8towcs (const char *str, int len = -1);
109 root 1.147
110 ayin 1.302 char * rxvt_basename (const char *str) NOTHROW;
111 root 1.227 void rxvt_vlog (const char *fmt, va_list arg_ptr) NOTHROW;
112     void rxvt_log (const char *fmt,...) NOTHROW;
113     void rxvt_warn (const char *fmt,...) NOTHROW;
114     void rxvt_fatal (const char *fmt, ...) THROW ((class rxvt_failure_exception)) NORETURN;
115     void rxvt_exit_failure () THROW ((class rxvt_failure_exception)) NORETURN;
116    
117 ayin 1.302 char * rxvt_strtrim (char *str) NOTHROW;
118 root 1.227 char ** rxvt_splitcommastring (const char *cs) NOTHROW;
119     void rxvt_freecommastring (char **cs) NOTHROW;
120 root 1.102
121 root 1.198 /////////////////////////////////////////////////////////////////////////////
122    
123     // temporarily replace the process environment
124     extern char **environ;
125     extern char **rxvt_environ; // the original environ pointer
126    
127 ayin 1.298 static inline void set_environ (stringvec *envv)
128 root 1.198 {
129 root 1.235 #if ENABLE_PERL
130     assert (envv);
131     #else
132 root 1.199 if (envv)
133 root 1.235 #endif
134 root 1.199 environ = (char **)envv->begin ();
135     }
136 root 1.198
137 ayin 1.298 static inline void set_environ (char **envv)
138 root 1.199 {
139 root 1.235 #if ENABLE_PERL
140     assert (envv);
141     #else
142 root 1.199 if (envv)
143 root 1.235 #endif
144 root 1.199 environ = envv;
145     }
146 root 1.198
147 root 1.102 /*
148     *****************************************************************************
149 pcg 1.1 * STRUCTURES AND TYPEDEFS
150     *****************************************************************************
151     */
152     struct grwin_t;
153    
154 root 1.209 /* If we're using either the rxvt scrollbar, keep the
155 pcg 1.1 * scrollColor resource.
156     */
157 root 1.208 #if defined(RXVT_SCROLLBAR) || defined(NEXT_SCROLLBAR) || defined(PLAIN_SCROLLBAR)
158 pcg 1.1 # define KEEP_SCROLLCOLOR 1
159     #else
160     # undef KEEP_SCROLLCOLOR
161     #endif
162    
163     /*
164     * the 'essential' information for reporting Mouse Events
165     * pared down from XButtonEvent
166     */
167     struct mouse_event {
168 root 1.128 int clicks;
169     Time time; /* milliseconds */
170     unsigned int state; /* key or button mask */
171     unsigned int button; /* detail */
172 pcg 1.1 };
173    
174 root 1.102 #if ENABLE_FRILLS
175 root 1.87 typedef struct _mwmhints {
176     CARD32 flags;
177     CARD32 functions;
178     CARD32 decorations;
179     INT32 input_mode;
180     CARD32 status;
181     } MWMHints;
182     #endif
183    
184 root 1.150 #if ENABLE_XEMBED
185     // XEMBED messages
186 ayin 1.316 # define XEMBED_EMBEDDED_NOTIFY 0
187     # define XEMBED_WINDOW_ACTIVATE 1
188     # define XEMBED_WINDOW_DEACTIVATE 2
189     # define XEMBED_REQUEST_FOCUS 3
190     # define XEMBED_FOCUS_IN 4
191     # define XEMBED_FOCUS_OUT 5
192     # define XEMBED_FOCUS_NEXT 6
193 root 1.150 # define XEMBED_FOCUS_PREV 7
194    
195 ayin 1.316 # define XEMBED_MODALITY_ON 10
196     # define XEMBED_MODALITY_OFF 11
197     # define XEMBED_REGISTER_ACCELERATOR 12
198     # define XEMBED_UNREGISTER_ACCELERATOR 13
199 root 1.150 # define XEMBED_ACTIVATE_ACCELERATOR 14
200    
201     // XEMBED detail code
202 ayin 1.316 # define XEMBED_FOCUS_CURRENT 0
203     # define XEMBED_FOCUS_FIRST 1
204 root 1.150 # define XEMBED_FOCUS_LAST 2
205 root 1.151
206     # define XEMBED_MAPPED (1 << 0)
207 root 1.150 #endif
208    
209 pcg 1.1 /*
210     *****************************************************************************
211     * NORMAL DEFINES
212     *****************************************************************************
213     */
214    
215     /* COLORTERM, TERM environment variables */
216 pcg 1.3 #define COLORTERMENV "rxvt"
217 sasha 1.306 #ifdef BG_IMAGE_FROM_FILE
218 pcg 1.1 # define COLORTERMENVFULL COLORTERMENV "-xpm"
219     #else
220     # define COLORTERMENVFULL COLORTERMENV
221     #endif
222     #ifndef TERMENV
223 root 1.121 # define TERMENV "rxvt-unicode"
224 pcg 1.1 #endif
225    
226     #if defined (NO_MOUSE_REPORT) && !defined (NO_MOUSE_REPORT_SCROLLBAR)
227 root 1.102 # define NO_MOUSE_REPORT_SCROLLBAR 1
228 pcg 1.1 #endif
229    
230     /* now look for other badly set stuff */
231    
232     #if !defined (EACCESS) && defined(EAGAIN)
233     # define EACCESS EAGAIN
234     #endif
235    
236 pcg 1.3 #ifndef EXIT_SUCCESS /* missing from <stdlib.h> */
237     # define EXIT_SUCCESS 0 /* exit function success */
238     # define EXIT_FAILURE 1 /* exit function failure */
239 pcg 1.1 #endif
240    
241 pcg 1.3 #define scrollBar_esc 30
242 pcg 1.1
243 pcg 1.29 #if defined(RXVT_SCROLLBAR) || defined(NEXT_SCROLLBAR) || defined(XTERM_SCROLLBAR) || defined(PLAIN_SCROLLBAR)
244 root 1.91 # define HAVE_SCROLLBARS 1
245 pcg 1.1 #endif
246    
247 pcg 1.3 #define R_SB_ALIGN_CENTRE 0
248     #define R_SB_ALIGN_TOP 1
249     #define R_SB_ALIGN_BOTTOM 2
250    
251     #define R_SB_NEXT 1
252     #define R_SB_XTERM 2
253 pcg 1.29 #define R_SB_PLAIN 4
254 root 1.157 #define R_SB_RXVT 8
255 pcg 1.1
256 pcg 1.3 #define SB_WIDTH_NEXT 19
257 pcg 1.29 #define SB_WIDTH_XTERM 15
258     #define SB_WIDTH_PLAIN 7
259 pcg 1.1 #ifndef SB_WIDTH_RXVT
260 pcg 1.3 # define SB_WIDTH_RXVT 10
261 pcg 1.1 #endif
262    
263     /*
264     * NeXT scrollbar defines
265     */
266 pcg 1.3 #define SB_PADDING 1
267     #define SB_BORDER_WIDTH 1
268     #define SB_BEVEL_WIDTH_UPPER_LEFT 1
269     #define SB_BEVEL_WIDTH_LOWER_RIGHT 2
270     #define SB_LEFT_PADDING (SB_PADDING + SB_BORDER_WIDTH)
271     #define SB_MARGIN_SPACE (SB_PADDING * 2)
272     #define SB_BUTTON_WIDTH (SB_WIDTH_NEXT - SB_MARGIN_SPACE - SB_BORDER_WIDTH)
273     #define SB_BUTTON_HEIGHT (SB_BUTTON_WIDTH)
274     #define SB_BUTTON_SINGLE_HEIGHT (SB_BUTTON_HEIGHT + SB_PADDING)
275     #define SB_BUTTON_BOTH_HEIGHT (SB_BUTTON_SINGLE_HEIGHT * 2)
276     #define SB_BUTTON_TOTAL_HEIGHT (SB_BUTTON_BOTH_HEIGHT + SB_PADDING)
277     #define SB_BUTTON_BEVEL_X (SB_LEFT_PADDING)
278     #define SB_BUTTON_FACE_X (SB_BUTTON_BEVEL_X + SB_BEVEL_WIDTH_UPPER_LEFT)
279     #define SB_THUMB_MIN_HEIGHT (SB_BUTTON_WIDTH - (SB_PADDING * 2))
280 pcg 1.1 /*
281     * +-------------+
282     * | | <---< SB_PADDING
283     * | ::::::::::: |
284     * | ::::::::::: |
285     * '''''''''''''''''
286     * ,,,,,,,,,,,,,,,,,
287     * | ::::::::::: |
288     * | ::::::::::: |
289     * | +---------------< SB_BEVEL_WIDTH_UPPER_LEFT
290     * | | :::::::: |
291     * | V :::: vv-------< SB_BEVEL_WIDTH_LOWER_RIGHT
292     * | +---------+ |
293     * | | ......%%| |
294     * | | ......%%| |
295 pcg 1.34 * | | .. ()..%%| |
296 pcg 1.1 * | | ......%%| |
297     * | | %%%%%%%%| |
298     * | +---------+ | <.........................
299     * | | <---< SB_PADDING :
300     * | +---------+ | <-+.......... :---< SB_BUTTON_TOTAL_HEIGHT
301     * | | ......%%| | | : :
302     * | | ../\..%%| | |---< SB_BUTTON_HEIGHT :
303     * | | %%%%%%%%| | | : :
304     * | +---------+ | <-+ : :
305     * | | : :
306     * | +---------+ | <-+ :---< SB_BUTTON_BOTH_HEIGHT
307     * | | ......%%| | | : :
308     * | | ..\/..%%| | | : :
309     * | | %%%%%%%%| | |---< SB_BUTTON_SINGLE_HEIGHT
310     * | +---------+ | | : :
311     * | | | : :
312     * +-------------+ <-+.........:............:
313     * ^^|_________| :
314     * || | :
315     * || +---< SB_BUTTON_WIDTH
316     * || :
317     * |+------< SB_PADDING
318     * |: :
319     * +----< SB_BORDER_WIDTH
320     * : :
321     * :............:
322     * |
323     * +---< SB_WIDTH_NEXT
324     */
325    
326 pcg 1.39 enum {
327 root 1.212 NO_REFRESH = 0, /* Window not visible at all! */
328     FAST_REFRESH = 1, /* Fully exposed window */
329     SLOW_REFRESH = 2, /* Partially exposed window */
330 pcg 1.39 };
331 pcg 1.1
332     #ifdef NO_SECONDARY_SCREEN
333 pcg 1.3 # define NSCREENS 0
334 pcg 1.1 #else
335 pcg 1.3 # define NSCREENS 1
336 pcg 1.1 #endif
337    
338     /* special (internal) prefix for font commands */
339 pcg 1.3 #define FONT_CMD '#'
340     #define FONT_DN "#-"
341     #define FONT_UP "#+"
342 pcg 1.1
343 pcg 1.34 /* flags for rxvt_scr_gotorc () */
344 pcg 1.39 enum {
345 root 1.167 C_RELATIVE = 1, /* col movement is relative */
346     R_RELATIVE = 2, /* row movement is relative */
347     RELATIVE = C_RELATIVE | R_RELATIVE,
348 pcg 1.39 };
349 pcg 1.1
350 pcg 1.34 /* modes for rxvt_scr_insdel_chars (), rxvt_scr_insdel_lines () */
351 pcg 1.39 enum {
352     INSERT = -1, /* don't change these values */
353     DELETE = +1,
354 pcg 1.41 ERASE = +2,
355 pcg 1.39 };
356 pcg 1.1
357 pcg 1.34 /* modes for rxvt_scr_page () - scroll page. used by scrollbar window */
358 pcg 1.1 enum page_dirn {
359 pcg 1.3 UP,
360     DN,
361 pcg 1.41 NO_DIR,
362 pcg 1.1 };
363    
364 pcg 1.34 /* arguments for rxvt_scr_change_screen () */
365 pcg 1.1 enum {
366 pcg 1.3 PRIMARY = 0,
367 pcg 1.41 SECONDARY,
368 pcg 1.1 };
369    
370 root 1.176 #define RS_None 0
371 pcg 1.1
372 root 1.176 #define RS_fgMask 0x0000007fUL // 128 colors
373     #define RS_bgMask 0x00003f80UL // 128 colors
374 pcg 1.3
375 root 1.121 // font styles
376     #define RS_Bold 0x00004000UL // value 1
377     #define RS_Italic 0x00008000UL // value 2
378    
379     // fake styles
380 root 1.176 #define RS_Blink 0x00010000UL // blink
381     #define RS_RVid 0x00020000UL // reverse video
382     #define RS_Uline 0x00040000UL // underline
383    
384 root 1.247 // toggle this to force redraw, must be != RS_Careful
385     #define RS_redraw 0x01000000UL
386    
387 root 1.176 // 5 custom bits for extensions
388     #define RS_customCount 32
389     #define RS_customMask 0x00f80000UL
390     #define RS_customShift 19
391 root 1.121
392     // other flags
393     #define RS_Careful 0x80000000UL /* be careful when drawing these */
394    
395     #define RS_styleCount 4
396     #define RS_styleMask (RS_Bold | RS_Italic)
397     #define RS_styleShift 14
398    
399     #define RS_baseattrMask (RS_Italic | RS_Bold | RS_Blink | RS_RVid | RS_Uline)
400     #define RS_attrMask (RS_baseattrMask | RS_fontMask)
401    
402     #define RS_fontCount 127 // not 127 or 256, see rxvtfont.h
403     #define RS_fontMask 0xff000000UL // plenty(?) of fonts, includes RS_Careful
404     #define RS_fontShift 24
405    
406     #define DEFAULT_RSTYLE (RS_None | Color_fg | (Color_bg << Color_Bits))
407     #define OVERLAY_RSTYLE (RS_None | Color_Black | (Color_Yellow << Color_Bits))
408 pcg 1.3
409     #define Sel_none 0 /* Not waiting */
410     #define Sel_normal 0x01 /* normal selection */
411     #define Sel_incr 0x02 /* incremental selection */
412     #define Sel_direct 0x00
413     #define Sel_Primary 0x01
414     #define Sel_Secondary 0x02
415     #define Sel_Clipboard 0x03
416     #define Sel_whereMask 0x0f
417 pcg 1.23 #define Sel_CompoundText 0x10 /* last request was COMPOUND_TEXT */
418     #define Sel_UTF8String 0x20 /* last request was UTF8_STRING */
419 pcg 1.1
420     enum {
421 pcg 1.3 C0_NUL = 0x00,
422     C0_SOH, C0_STX, C0_ETX, C0_EOT, C0_ENQ, C0_ACK, C0_BEL,
423     C0_BS , C0_HT , C0_LF , C0_VT , C0_FF , C0_CR , C0_SO , C0_SI ,
424     C0_DLE, C0_DC1, C0_DC2, D0_DC3, C0_DC4, C0_NAK, C0_SYN, C0_ETB,
425 pcg 1.41 C0_CAN, C0_EM , C0_SUB, C0_ESC, C0_IS4, C0_IS3, C0_IS2, C0_IS1,
426 ayin 1.316 };
427 pcg 1.3 #define CHAR_ST 0x9c /* 0234 */
428 pcg 1.1
429     /*
430     * XTerm Operating System Commands: ESC ] Ps;Pt (ST|BEL)
431     * colour extensions by Christian W. Zuckschwerdt <zany@triq.net>
432     */
433 pcg 1.41 enum {
434     XTerm_name = 0,
435     XTerm_iconName = 1,
436     XTerm_title = 2,
437 pcg 1.69 XTerm_property = 3, // change X property
438 pcg 1.51 XTerm_Color = 4, // change colors
439     XTerm_Color00 = 10, // not implemented, CLASH!
440     XTerm_Color01 = 11, // not implemented
441     XTerm_Color_cursor = 12, // change actual 'Cursor' color
442 root 1.197 XTerm_Color_pointer_fg = 13, // change actual 'Pointer' fg color
443     XTerm_Color_pointer_bg = 14, // change actual 'Pointer' bg color
444     XTerm_Color05 = 15, // not implemented (tektronix fg)
445     XTerm_Color06 = 16, // not implemented (tektronix bg)
446 pcg 1.51 XTerm_Color_RV = 17, // change actual 'Highlight' color
447     XTerm_logfile = 46, // not implemented
448 pcg 1.41 XTerm_font = 50,
449    
450 pcg 1.51 XTerm_konsole30 = 30, // reserved for konsole
451     XTerm_konsole31 = 31, // reserved for konsole
452     XTerm_emacs51 = 51, // reserved for emacs shell
453 pcg 1.41 /*
454     * rxvt extensions of XTerm OSCs: ESC ] Ps;Pt (ST|BEL)
455 root 1.197 * at least Rxvt_Color_BD and Rxvt_Color_UL clash with xterm
456 pcg 1.41 */
457 root 1.197 Rxvt_Color_BD = 18, // change actual 'Bold' color
458     Rxvt_Color_UL = 19, // change actual 'Underline' color
459     Rxvt_Pixmap = 20, // new bg pixmap
460     Rxvt_restoreFG = 39, // change default fg color
461     Rxvt_restoreBG = 49, // change default bg color
462     Rxvt_dumpscreen = 55, // dump scrollback and all of screen
463 root 1.153
464     URxvt_locale = 701, // change locale
465 root 1.246 URxvt_version = 702, // request version
466 root 1.209
467 root 1.153 URxvt_Color_IT = 704, // change actual 'Italic' colour
468     URxvt_Color_tint = 705, // change actual tint colour
469 root 1.197 URxvt_Color_BD = 706,
470     URxvt_Color_UL = 707,
471 root 1.121
472     URxvt_font = 710,
473     URxvt_boldFont = 711,
474     URxvt_italicFont = 712,
475     URxvt_boldItalicFont = 713,
476 root 1.153
477     URxvt_view_up = 720,
478     URxvt_view_down = 721,
479 root 1.184
480     URxvt_perl = 777,
481 pcg 1.41 };
482 pcg 1.1
483     /* Words starting with `Color_' are colours. Others are counts */
484     /*
485 root 1.160 * The PixColor and rendition colour usage should probably be decoupled
486 pcg 1.1 * on the unnecessary items, e.g. Color_pointer, but won't bother
487     * until we need to. Also, be aware of usage in pixcolor_set
488     */
489    
490     enum colour_list {
491 root 1.263 Color_none = -2,
492     Color_transparent = -1,
493 pcg 1.3 Color_fg = 0,
494     Color_bg,
495     minCOLOR, /* 2 */
496     Color_Black = minCOLOR,
497     Color_Red3,
498     Color_Green3,
499     Color_Yellow3,
500     Color_Blue3,
501     Color_Magenta3,
502     Color_Cyan3,
503     maxCOLOR, /* minCOLOR + 7 */
504 pcg 1.1 #ifndef NO_BRIGHTCOLOR
505 pcg 1.3 Color_AntiqueWhite = maxCOLOR,
506     minBrightCOLOR, /* maxCOLOR + 1 */
507     Color_Grey25 = minBrightCOLOR,
508     Color_Red,
509     Color_Green,
510     Color_Yellow,
511     Color_Blue,
512     Color_Magenta,
513     Color_Cyan,
514     maxBrightCOLOR, /* minBrightCOLOR + 7 */
515     Color_White = maxBrightCOLOR,
516 pcg 1.1 #else
517 pcg 1.3 Color_White = maxCOLOR,
518 pcg 1.1 #endif
519 root 1.121 minTermCOLOR = Color_White + 1,
520     maxTermCOLOR = Color_White + 72,
521 pcg 1.1 #ifndef NO_CURSORCOLOR
522 pcg 1.3 Color_cursor,
523     Color_cursor2,
524 pcg 1.1 #endif
525 pcg 1.69 Color_pointer_fg,
526     Color_pointer_bg,
527 pcg 1.3 Color_border,
528 pcg 1.1 #ifndef NO_BOLD_UNDERLINE_REVERSE
529 pcg 1.3 Color_BD,
530 root 1.121 Color_IT,
531 pcg 1.3 Color_UL,
532     Color_RV,
533 pcg 1.1 #endif
534 root 1.133 #if ENABLE_FRILLS
535     Color_underline,
536     #endif
537 pcg 1.1 #ifdef OPTION_HC
538 pcg 1.3 Color_HC,
539 pcg 1.1 #endif
540     #ifdef KEEP_SCROLLCOLOR
541 pcg 1.3 Color_scroll,
542     Color_trough,
543 pcg 1.1 #endif
544 ayin 1.284 #if ENABLE_TRANSPARENCY
545 pcg 1.69 Color_tint,
546     #endif
547 root 1.160 #if OFF_FOCUS_FADING
548     Color_fade,
549     #endif
550 pcg 1.3 NRS_COLORS, /* */
551 pcg 1.1 #ifdef KEEP_SCROLLCOLOR
552 pcg 1.3 Color_topShadow = NRS_COLORS,
553     Color_bottomShadow,
554 root 1.121 TOTAL_COLORS
555 pcg 1.1 #else
556 root 1.121 TOTAL_COLORS = NRS_COLORS
557 pcg 1.1 #endif
558     };
559    
560 root 1.121 #define Color_Bits 7 // 0 .. maxTermCOLOR
561    
562 pcg 1.1 /*
563     * Resource list
564     */
565     enum {
566 root 1.185 # define def(name) Rs_ ## name,
567     # define reserve(name,count) Rs_ ## name ## _ = Rs_ ## name + (count) - 1,
568     # include "rsinc.h"
569     # undef def
570     # undef reserve
571 pcg 1.3 NUM_RESOURCES
572     };
573 pcg 1.1
574     /* DEC private modes */
575 root 1.102 #define PrivMode_132 (1UL<<0)
576     #define PrivMode_132OK (1UL<<1)
577     #define PrivMode_rVideo (1UL<<2)
578     #define PrivMode_relOrigin (1UL<<3)
579     #define PrivMode_Screen (1UL<<4)
580     #define PrivMode_Autowrap (1UL<<5)
581     #define PrivMode_aplCUR (1UL<<6)
582     #define PrivMode_aplKP (1UL<<7)
583     #define PrivMode_HaveBackSpace (1UL<<8)
584     #define PrivMode_BackSpace (1UL<<9)
585     #define PrivMode_ShiftKeys (1UL<<10)
586     #define PrivMode_VisibleCursor (1UL<<11)
587     #define PrivMode_MouseX10 (1UL<<12)
588     #define PrivMode_MouseX11 (1UL<<13)
589     #define PrivMode_scrollBar (1UL<<14)
590 root 1.208 #define PrivMode_TtyOutputInh (1UL<<15)
591     #define PrivMode_Keypress (1UL<<16)
592     #define PrivMode_smoothScroll (1UL<<17)
593     #define PrivMode_vt52 (1UL<<18)
594     #define PrivMode_LFNL (1UL<<19)
595 ayin 1.313 #define PrivMode_MouseBtnEvent (1UL<<20)
596     #define PrivMode_MouseAnyEvent (1UL<<21)
597 pcg 1.1 /* too annoying to implement X11 highlight tracking */
598 root 1.208 /* #define PrivMode_MouseX11Track (1LU<<20) */
599 pcg 1.1
600 ayin 1.313 #define PrivMode_mouse_report (PrivMode_MouseX10|PrivMode_MouseX11|PrivMode_MouseBtnEvent|PrivMode_MouseAnyEvent)
601 pcg 1.1
602     #ifdef ALLOW_132_MODE
603 root 1.148 # define PrivMode_Default (PrivMode_Autowrap|PrivMode_ShiftKeys|PrivMode_VisibleCursor|PrivMode_132OK)
604 pcg 1.1 #else
605 root 1.148 # define PrivMode_Default (PrivMode_Autowrap|PrivMode_ShiftKeys|PrivMode_VisibleCursor)
606 pcg 1.1 #endif
607    
608 root 1.87 // do not change these constants lightly, there are many interdependencies
609 pcg 1.60 #define IMBUFSIZ 128 // input modifier buffer sizes
610     #define KBUFSZ 512 // size of keyboard mapping buffer
611 root 1.177 #define CBUFSIZ 2048 // size of command buffer
612     #define UBUFSIZ 2048 // character buffer
613 pcg 1.1
614 pcg 1.69 #ifndef PATH_MAX
615     # define PATH_MAX 16384
616     #endif
617    
618 root 1.87 /* Motif window hints */
619     #define MWM_HINTS_FUNCTIONS (1L << 0)
620     #define MWM_HINTS_DECORATIONS (1L << 1)
621     #define MWM_HINTS_INPUT_MODE (1L << 2)
622     #define MWM_HINTS_STATUS (1L << 3)
623     /* bit definitions for MwmHints.functions */
624     #define MWM_FUNC_ALL (1L << 0)
625     #define MWM_FUNC_RESIZE (1L << 1)
626     #define MWM_FUNC_MOVE (1L << 2)
627     #define MWM_FUNC_MINIMIZE (1L << 3)
628     #define MWM_FUNC_MAXIMIZE (1L << 4)
629     #define MWM_FUNC_CLOSE (1L << 5)
630     /* bit definitions for MwmHints.decorations */
631     #define MWM_DECOR_ALL (1L << 0)
632     #define MWM_DECOR_BORDER (1L << 1)
633     #define MWM_DECOR_RESIZEH (1L << 2)
634     #define MWM_DECOR_TITLE (1L << 3)
635     #define MWM_DECOR_MENU (1L << 4)
636     #define MWM_DECOR_MINIMIZE (1L << 5)
637     #define MWM_DECOR_MAXIMIZE (1L << 6)
638     /* bit definitions for MwmHints.inputMode */
639     #define MWM_INPUT_MODELESS 0
640     #define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1
641     #define MWM_INPUT_SYSTEM_MODAL 2
642     #define MWM_INPUT_FULL_APPLICATION_MODAL 3
643     #define PROP_MWM_HINTS_ELEMENTS 5
644    
645 pcg 1.1 /*
646     *****************************************************************************
647     * MACRO DEFINES
648     *****************************************************************************
649     */
650 root 1.212 #define dLocal(type,name) type const name = this->name
651 root 1.145
652 root 1.265 // for speed reasons, we assume that all codepoints 32 to 126 are
653     // single-width.
654     #define WCWIDTH(c) (IN_RANGE_INC (c, 0x20, 0x7e) ? 1 : wcwidth (c))
655 root 1.241
656 pcg 1.1 /* convert pixel dimensions to row/column values. Everything as int32_t */
657 root 1.78 #define Pixel2Col(x) Pixel2Width((int32_t)(x))
658     #define Pixel2Row(y) Pixel2Height((int32_t)(y))
659 root 1.162 #define Pixel2Width(x) ((int32_t)(x) / (int32_t)fwidth)
660     #define Pixel2Height(y) ((int32_t)(y) / (int32_t)fheight)
661 root 1.78 #define Col2Pixel(col) ((int32_t)Width2Pixel(col))
662     #define Row2Pixel(row) ((int32_t)Height2Pixel(row))
663 root 1.162 #define Width2Pixel(n) ((int32_t)(n) * (int32_t)fwidth)
664     #define Height2Pixel(n) ((int32_t)(n) * (int32_t)fheight)
665 pcg 1.1
666 root 1.167 // for m >= -n, ensure remainder lies between 0..n-1
667     #define MOD(m,n) (((m) + (n)) % (n))
668    
669     #define LINENO(n) MOD (term_start + int(n), total_rows)
670     #define ROW(n) row_buf [LINENO (n)]
671 pcg 1.1
672     /* how to build & extract colors and attributes */
673 pcg 1.3 #define GET_BASEFG(x) (((x) & RS_fgMask))
674     #define GET_BASEBG(x) (((x) & RS_bgMask)>>Color_Bits)
675 pcg 1.1
676 pcg 1.3 #define GET_FONT(x) (((x) & RS_fontMask) >> RS_fontShift)
677 root 1.121 #define SET_FONT(x,fid) (((x) & ~RS_fontMask) | ((fid) << RS_fontShift))
678    
679     #define GET_STYLE(x) (((x) & RS_styleMask) >> RS_styleShift)
680     #define SET_STYLE(x,style) (((x) & ~RS_styleMask) | ((style) << RS_styleShift))
681 pcg 1.1
682 pcg 1.3 #define GET_ATTR(x) (((x) & RS_attrMask))
683     #define GET_BGATTR(x) \
684     (((x) & RS_RVid) ? (((x) & (RS_attrMask & ~RS_RVid)) \
685     | (((x) & RS_fgMask)<<Color_Bits)) \
686     : ((x) & (RS_attrMask | RS_bgMask)))
687 root 1.121 #define SET_FGCOLOR(x,fg) (((x) & ~RS_fgMask) | (fg))
688     #define SET_BGCOLOR(x,bg) (((x) & ~RS_bgMask) | ((bg)<<Color_Bits))
689     #define SET_ATTR(x,a) (((x) & ~RS_attrMask) | (a))
690    
691     #define RS_SAME(a,b) (!(((a) ^ (b)) & ~RS_Careful))
692 pcg 1.1
693 root 1.251 #define PIXCOLOR_NAME(idx) rs[Rs_color + (idx)]
694     #define ISSET_PIXCOLOR(idx) (!!rs[Rs_color + (idx)])
695 pcg 1.1
696 root 1.121 #if ENABLE_STYLES
697 root 1.162 # define FONTSET(style) fontset[GET_STYLE (style)]
698 root 1.121 #else
699 root 1.162 # define FONTSET(style) fontset[0]
700 root 1.121 #endif
701    
702 pcg 1.1 #ifdef HAVE_SCROLLBARS
703 pcg 1.18 # define scrollbar_TotalWidth() (scrollBar.width + sb_shadow * 2)
704 pcg 1.1 #else
705 pcg 1.3 # define scrollbar_TotalWidth() (0)
706 pcg 1.1 #endif
707 pcg 1.27 #define scrollbar_isMotion() (scrollBar.state == 'm')
708     #define scrollbar_isUp() (scrollBar.state == 'U')
709     #define scrollbar_isDn() (scrollBar.state == 'D')
710     #define scrollbar_isUpDn() isupper (scrollBar.state)
711     #define isScrollbarWindow(w) (scrollBar.state && (w) == scrollBar.win)
712 pcg 1.3
713 pcg 1.27 #define scrollbarnext_dnval() (scrollBar.end + (scrollBar.width + 1))
714     #define scrollbarnext_upButton(y) ((y) > scrollBar.end \
715 pcg 1.34 && (y) <= scrollbarnext_dnval ())
716 pcg 1.3 #define scrollbarnext_dnButton(y) ((y) > scrollbarnext_dnval())
717     #define SCROLLNEXT_MINHEIGHT SB_THUMB_MIN_HEIGHT
718 pcg 1.27 #define scrollbarrxvt_upButton(y) ((y) < scrollBar.beg)
719     #define scrollbarrxvt_dnButton(y) ((y) > scrollBar.end)
720 pcg 1.3 #define SCROLLRXVT_MINHEIGHT 10
721     #define SCROLLXTERM_MINHEIGHT 10
722    
723 pcg 1.27 #define scrollbar_minheight() (scrollBar.style == R_SB_NEXT \
724 pcg 1.3 ? SCROLLNEXT_MINHEIGHT \
725     : SCROLLRXVT_MINHEIGHT)
726 pcg 1.27 #define scrollbar_above_slider(y) ((y) < scrollBar.top)
727     #define scrollbar_below_slider(y) ((y) > scrollBar.bot)
728     #define scrollbar_position(y) ((y) - scrollBar.beg)
729     #define scrollbar_size() (scrollBar.end - scrollBar.beg \
730 pcg 1.34 - scrollbar_minheight ())
731 pcg 1.1
732 root 1.257 typedef callback<void (const char *)> log_callback;
733     typedef callback<int (int)> getfd_callback;
734 pcg 1.60
735     #define SET_LOCALE(locale) rxvt_set_locale (locale)
736 root 1.227 extern bool rxvt_set_locale (const char *locale) NOTHROW;
737     extern void rxvt_push_locale (const char *locale) NOTHROW;
738     extern void rxvt_pop_locale () NOTHROW;
739 pcg 1.27
740 root 1.187 /****************************************************************************/
741    
742     #define LINE_LONGER 0x0001 // line is continued on the next row
743     #define LINE_FILTERED 0x0002 // line has been filtered
744     #define LINE_COMPRESSED 0x0004 // line has been compressed (NYI)
745 root 1.262 #define LINE_FILTER 0x0008 // line needs to be filtered before display (NYI)
746     #define LINE_BIDI 0x0010 // line needs bidi (NYI)
747 root 1.187
748     struct line_t {
749     text_t *t; // terminal the text
750     rend_t *r; // rendition, uses RS_ flags
751     tlen_t_ l; // length of each text line, LINE_CONT == continued on next line
752     uint32_t f; // flags
753    
754     bool is_longer ()
755     {
756     return f & LINE_LONGER;
757     }
758    
759     void is_longer (int set)
760     {
761     if (set)
762     f |= LINE_LONGER;
763     else
764     f &= ~LINE_LONGER;
765     }
766    
767     void clear ()
768     {
769     t = 0;
770     r = 0;
771     l = 0;
772     f = 0;
773     }
774    
775     void touch () // call whenever a line is changed/touched/updated
776     {
777     #if ENABLE_PERL
778     f &= ~LINE_FILTERED;
779     #endif
780     }
781    
782     void touch (int col)
783     {
784     max_it (l, col);
785     touch ();
786     }
787     };
788    
789     /****************************************************************************/
790    
791 ayin 1.317 // primitive wrapper around mbstate_t to ensure initialisation
792 pcg 1.1 struct mbstate {
793 pcg 1.17 mbstate_t mbs;
794 pcg 1.1
795 pcg 1.36 operator mbstate_t *() { return &mbs; }
796 root 1.102 void reset () { memset (&mbs, 0, sizeof (mbs)); }
797 pcg 1.36 mbstate () { reset (); }
798 pcg 1.1 };
799    
800 root 1.187 /****************************************************************************/
801    
802 root 1.135 #define UNICODE_MASK 0x1fffffUL
803    
804 pcg 1.51 #if UNICODE3
805     # define COMPOSE_LO 0x40000000UL
806     # define COMPOSE_HI 0x400fffffUL
807     # define IS_COMPOSE(n) ((int32_t)(n) >= COMPOSE_LO)
808     #else
809 root 1.189 # if ENABLE_PERL
810 root 1.250 # define COMPOSE_LO 0xe000UL // our _own_ functions don't like (illegal) surrogates
811 root 1.189 # define COMPOSE_HI 0xf8ffUL // in utf-8, so use private use area only
812     # else
813     # define COMPOSE_LO 0xd800UL
814     # define COMPOSE_HI 0xf8ffUL
815     # endif
816     # define IS_COMPOSE(n) IN_RANGE_INC ((n), COMPOSE_LO, COMPOSE_HI)
817 pcg 1.51 #endif
818    
819 pcg 1.52 #if ENABLE_COMBINING
820 pcg 1.51 // compose chars are used to represent composite characters
821     // that are not representable in unicode, as well as characters
822     // not fitting in the BMP.
823     struct compose_char {
824 pcg 1.54 unicode_t c1, c2; // any chars != NOCHAR are valid
825     compose_char (unicode_t c1, unicode_t c2)
826 pcg 1.51 : c1(c1), c2(c2)
827     { }
828     };
829    
830     class rxvt_composite_vec {
831     vector<compose_char> v;
832     public:
833 pcg 1.54 text_t compose (unicode_t c1, unicode_t c2 = NOCHAR);
834     int expand (unicode_t c, wchar_t *r);
835 pcg 1.51 compose_char *operator [](text_t c)
836     {
837     return c >= COMPOSE_LO && c < COMPOSE_LO + v.size ()
838     ? &v[c - COMPOSE_LO]
839     : 0;
840     }
841     };
842    
843     extern class rxvt_composite_vec rxvt_composite;
844     #endif
845    
846 root 1.187 /****************************************************************************/
847 pcg 1.51
848 root 1.140 #ifdef KEYSYM_RESOURCE
849 root 1.252 class keyboard_manager;
850 root 1.140 #endif
851    
852 root 1.245 struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen {
853 root 1.252
854     // special markers with magic addresses
855     static const char resval_undef []; // options specifically unset
856     static const char resval_on []; // boolean options switched on
857     static const char resval_off []; // or off
858 ayin 1.316
859 root 1.252 log_callback *log_hook; // log error messages through this hook, if != 0
860 root 1.170 getfd_callback *getfd_hook; // convert remote to local fd, if != 0
861 root 1.180 #if ENABLE_PERL
862 root 1.190 rxvt_perl_term perl;
863 root 1.180 #endif
864 pcg 1.69 struct mbstate mbstate; // current input multibyte state
865 pcg 1.10
866 pcg 1.3 unsigned char want_refresh:1,
867 pcg 1.10 current_screen:1, /* primary or secondary */
868 pcg 1.3 num_scr_allow:1,
869 pcg 1.10 bypass_keystate:1,
870     #ifdef CURSOR_BLINK
871 pcg 1.3 hidden_cursor:1,
872 pcg 1.10 #endif
873 pcg 1.24 #ifdef TEXT_BLINK
874     hidden_text:1,
875     #endif
876 pcg 1.10 #ifdef POINTER_BLANK
877 pcg 1.3 hidden_pointer:1,
878 pcg 1.10 #endif
879 root 1.140 enc_utf8:1, /* wether locale uses utf-8 */
880 root 1.102 seen_input:1, /* wether we have seen some program output yet */
881 root 1.121 seen_resize:1, /* wether we had a resize event */
882 pcg 1.70 parsed_geometry:1;
883 pcg 1.1
884 pcg 1.3 unsigned char refresh_type,
885 pcg 1.1 #ifdef META8_OPTION
886 pcg 1.69 meta_char, /* Alt-key prefix */
887 pcg 1.1 #endif
888 pcg 1.3 scrollbar_align,
889     selection_wait,
890     selection_type;
891 pcg 1.1 /* ---------- */
892 root 1.231 bool rvideo_state, rvideo_mode;
893     #ifndef NO_BELL
894     bool rvideo_bell;
895     #endif
896 root 1.124 int num_scr; /* screen: number lines scrolled */
897     int prev_ncol, /* screen: previous number of columns */
898 pcg 1.69 prev_nrow; /* screen: previous number of rows */
899 pcg 1.1 /* ---------- */
900 pcg 1.3 rend_t rstyle;
901 pcg 1.1 /* ---------- */
902     #ifdef SELECTION_SCROLLING
903 root 1.78 int scroll_selection_lines;
904 pcg 1.3 enum page_dirn scroll_selection_dir;
905     int selection_save_x,
906     selection_save_y,
907 root 1.78 selection_save_state;
908 pcg 1.1 #endif
909     /* ---------- */
910 pcg 1.3 int csrO, /* Hops - csr offset in thumb/slider to */
911     /* give proper Scroll behaviour */
912 pcg 1.1 #if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)
913 pcg 1.3 mouse_slip_wheel_speed,
914 pcg 1.1 #endif
915 pcg 1.3 refresh_count,
916     last_bot, /* scrollbar last bottom position */
917     last_top, /* scrollbar last top position */
918     last_state, /* scrollbar last state */
919     scrollbar_len,
920     window_vt_x,
921     window_vt_y,
922     window_sb_x,
923 ayin 1.313 mouse_row,
924     mouse_col,
925 pcg 1.1 # ifdef POINTER_BLANK
926 pcg 1.3 pointerBlankDelay,
927 pcg 1.1 # endif
928 pcg 1.3 allowedxerror;
929 pcg 1.1 /* ---------- */
930 root 1.140 unsigned int ModLevel3Mask,
931     ModMetaMask,
932 root 1.124 ModNumLockMask;
933     int old_width, /* last used width in screen resize */
934 root 1.102 old_height; /* last used height in screen resize */
935     unsigned long priv_modes,
936 pcg 1.3 SavedModes;
937 pcg 1.1 /* ---------- */
938 root 1.242 Atom *xa;
939 pcg 1.1 /* ---------- */
940 root 1.208 #ifdef RXVT_SCROLLBAR
941 pcg 1.3 GC scrollbarGC,
942     topShadowGC,
943     botShadowGC;
944 pcg 1.1 #endif
945     #ifdef XTERM_SCROLLBAR
946 pcg 1.3 GC xscrollbarGC,
947     ShadowGC;
948 pcg 1.1 #endif
949 pcg 1.29 #ifdef PLAIN_SCROLLBAR
950 pcg 1.30 GC pscrollbarGC;
951 pcg 1.29 #endif
952 pcg 1.1 #ifdef NEXT_SCROLLBAR
953 pcg 1.3 GC blackGC,
954     whiteGC,
955     grayGC,
956     darkGC,
957     stippleGC;
958     Pixmap dimple,
959     upArrow,
960     downArrow,
961     upArrowHi,
962     downArrowHi;
963 pcg 1.1 #endif
964     /* ---------- */
965 pcg 1.3 Time selection_time,
966     selection_request_time;
967     pid_t cmd_pid; /* process id of child */
968 root 1.129 char * incr_buf;
969     size_t incr_buf_size, incr_buf_fill;
970 pcg 1.1 /* ---------- */
971 pcg 1.6 Cursor leftptr_cursor;
972 pcg 1.1 /* ---------- */
973 pcg 1.3 struct mouse_event MEvent;
974     XComposeStatus compose;
975     ttymode_t tio;
976     row_col_t oldcursor;
977 sasha 1.283 #ifdef HAVE_BG_PIXMAP
978 sasha 1.282 bgPixmap_t bgPixmap;
979 sasha 1.283 #endif
980     #ifdef HAVE_AFTERIMAGE
981     ASVisual *asv;
982 sasha 1.270 ASImageManager *asimman;
983 pcg 1.1 #endif
984    
985 root 1.102 #if ENABLE_OVERLAY
986     int ov_x, ov_y, ov_w, ov_h; // overlay dimensions
987     text_t **ov_text;
988     rend_t **ov_rend;
989    
990 root 1.227 void scr_swap_overlay () NOTHROW;
991     void scr_overlay_new (int x, int y, int w, int h) NOTHROW;
992     void scr_overlay_off () NOTHROW;
993 root 1.102 void scr_overlay_set (int x, int y,
994     text_t text,
995 root 1.227 rend_t rend = OVERLAY_RSTYLE) NOTHROW;
996     void scr_overlay_set (int x, int y, const char *s) NOTHROW;
997     void scr_overlay_set (int x, int y, const wchar_t *s) NOTHROW;
998 root 1.102 #endif
999    
1000 pcg 1.69 vector<void *> allocated; // free these memory blocks with free()
1001 pcg 1.60
1002 root 1.243 char env_windowid[21]; /* environmental variable WINDOWID */
1003     char env_colorfgbg[sizeof ("COLORFGBG=default;default;bg") + 1];
1004 pcg 1.3 char *env_display; /* environmental variable DISPLAY */
1005     char *env_term; /* environmental variable TERM */
1006 root 1.243
1007 pcg 1.3 char *locale;
1008     char charsets[4];
1009 root 1.186 char *v_buffer; /* pointer to physical buffer */
1010 pcg 1.69 unsigned int v_buflen; /* size of area to write */
1011 root 1.243 stringvec *argv, *envv; /* if != 0, will be freed at destroy time */
1012 root 1.140
1013 pcg 1.1 #ifdef KEYSYM_RESOURCE
1014 root 1.140 keyboard_manager *keyboard;
1015 pcg 1.1 #endif
1016 ayin 1.322 #ifndef NO_RESOURCES
1017     XrmDatabase option_db;
1018     #endif
1019 root 1.140
1020 pcg 1.3 const char *rs[NUM_RESOURCES];
1021 pcg 1.60 /* command input buffering */
1022 root 1.186 char *cmdbuf_ptr, *cmdbuf_endp;
1023     char cmdbuf_base[CBUFSIZ];
1024 pcg 1.3
1025 root 1.234 ptytty *pty;
1026 root 1.213
1027 pcg 1.69 rxvt_salloc *talloc; // text line allocator
1028     rxvt_salloc *ralloc; // rend line allocator
1029    
1030     static vector<rxvt_term *> termlist; // a vector of all running rxvt_term's
1031 pcg 1.12
1032 root 1.102 #if ENABLE_FRILLS || ISO_14755
1033 root 1.91 // ISO 14755 entry support
1034     unicode_t iso14755buf;
1035     void commit_iso14755 ();
1036     int hex_keyval (XKeyEvent &ev);
1037 root 1.102 # if ISO_14755
1038 root 1.172 void iso14755_51 (unicode_t ch, rend_t r = DEFAULT_RSTYLE, int x = 0, int y = -1);
1039 root 1.102 void iso14755_54 (int x, int y);
1040     # endif
1041 root 1.91 #endif
1042    
1043 ayin 1.313 long vt_emask, vt_emask_perl, vt_emask_xim, vt_emask_mouse;
1044 root 1.201
1045 root 1.227 void vt_select_input () const NOTHROW
1046 root 1.201 {
1047 ayin 1.313 XSelectInput (dpy, vt, vt_emask | vt_emask_perl | vt_emask_xim | vt_emask_mouse);
1048 root 1.201 }
1049 pcg 1.10
1050 root 1.275 #if ENABLE_TRANSPARENCY || ENABLE_PERL
1051 pcg 1.31 void rootwin_cb (XEvent &xev);
1052     xevent_watcher rootwin_ev;
1053 ayin 1.272 #endif
1054 sasha 1.293 #ifdef HAVE_BG_PIXMAP
1055     int update_background ();
1056 sasha 1.320 #if TRACE_PIXMAPS
1057     int trace_update_background (const char* file, int line);
1058     # define update_background() trace_update_background (__FILE__, __LINE__)
1059     #endif
1060 root 1.318 void update_background_cb (ev::timer &w, int revents);
1061     ev::timer update_background_ev;
1062 root 1.91 #endif
1063 pcg 1.31
1064     void x_cb (XEvent &xev);
1065     xevent_watcher termwin_ev;
1066     xevent_watcher vt_ev;
1067     #ifdef HAVE_SCROLLBARS
1068     xevent_watcher scrollbar_ev;
1069     #endif
1070    
1071 root 1.318 void child_cb (ev::child &w, int revents); ev::child child_ev;
1072     void prepare_cb (ev::prepare &w, int revents); ev::prepare prepare_ev;
1073 root 1.321 void destroy_cb (ev::idle &w, int revents); ev::idle destroy_ev;
1074 ayin 1.311 void flush ();
1075 root 1.318 void flush_cb (ev::timer &w, int revents); ev::timer flush_ev;
1076 ayin 1.311 bool pty_fill ();
1077 root 1.318 void pty_cb (ev::io &w, int revents); ev::io pty_ev;
1078     void incr_cb (ev::timer &w, int revents) NOTHROW; ev::timer incr_ev;
1079 pcg 1.3
1080 pcg 1.5 #ifdef CURSOR_BLINK
1081 root 1.318 void cursor_blink_cb (ev::timer &w, int revents); ev::timer cursor_blink_ev;
1082 pcg 1.25 #endif
1083     #ifdef TEXT_BLINK
1084 root 1.318 void text_blink_cb (ev::timer &w, int revents); ev::timer text_blink_ev;
1085 pcg 1.6 #endif
1086 ayin 1.316 #ifndef NO_BELL
1087 root 1.318 void bell_cb (ev::timer &w, int revents); ev::timer bell_ev;
1088 root 1.231 #endif
1089 pcg 1.6
1090 root 1.78 #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
1091 root 1.318 void cont_scroll_cb (ev::timer &w, int revents); ev::timer cont_scroll_ev;
1092 root 1.78 #endif
1093     #ifdef SELECTION_SCROLLING
1094 root 1.318 void sel_scroll_cb (ev::timer &w, int revents); ev::timer sel_scroll_ev;
1095 root 1.78 #endif
1096     #if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)
1097 root 1.318 void slip_wheel_cb (ev::timer &w, int revents); ev::timer slip_wheel_ev;
1098 root 1.78 #endif
1099    
1100 pcg 1.6 #ifdef POINTER_BLANK
1101 root 1.318 void pointer_cb (ev::timer &w, int revents); ev::timer pointer_ev;
1102 pcg 1.6 void pointer_blank ();
1103 root 1.83 #endif
1104 pcg 1.6 void pointer_unblank ();
1105 pcg 1.9
1106     void tt_printf (const char *fmt,...);
1107 root 1.186 void tt_write (const char *data, unsigned int len);
1108 root 1.130 void pty_write ();
1109 pcg 1.5
1110 root 1.233 bool init (stringvec *argv, stringvec *envv)
1111     {
1112     this->argv = argv;
1113     return init (argv->size (), argv->begin (), envv);
1114     }
1115 pcg 1.3
1116 root 1.206 void make_current () const // make this the "currently active" urxvt instance
1117     {
1118     SET_R (this);
1119 root 1.261 set_environ (envv);
1120 root 1.206 rxvt_set_locale (locale);
1121     }
1122 root 1.205
1123 pcg 1.18 #if USE_XIM
1124 root 1.236 rxvt_xim *input_method;
1125     XIC Input_Context;
1126     XIMStyle input_style;
1127     XPoint spot; // most recently sent spot position
1128 root 1.124
1129 pcg 1.33 void im_destroy ();
1130     void im_cb (); im_watcher im_ev;
1131 root 1.102 void im_set_size (XRectangle &size);
1132 root 1.227 void im_set_position (XPoint &pos) NOTHROW;
1133 root 1.102 void im_set_color (unsigned long &fg, unsigned long &bg);
1134     void im_set_preedit_area (XRectangle &preedit_rect, XRectangle &status_rect, const XRectangle &needed_rect);
1135 pcg 1.33
1136     bool IMisRunning ();
1137     void IMSendSpot ();
1138     bool IM_get_IC (const char *modifiers);
1139 root 1.256 void IMSetPosition ();
1140 pcg 1.18 #endif
1141    
1142 pcg 1.27 // command.C
1143 root 1.255 void key_press (XKeyEvent &ev);
1144     void key_release (XKeyEvent &ev);
1145 root 1.186 unsigned int cmd_write (const char *str, unsigned int count);
1146 root 1.78
1147 root 1.227 wchar_t next_char () NOTHROW;
1148     wchar_t cmd_getc () THROW ((class out_of_input));
1149     uint32_t next_octet () NOTHROW;
1150     uint32_t cmd_get8 () THROW ((class out_of_input));
1151 root 1.78
1152 pcg 1.42 bool cmd_parse ();
1153 pcg 1.40 void mouse_report (XButtonEvent &ev);
1154     void button_press (XButtonEvent &ev);
1155     void button_release (XButtonEvent &ev);
1156 root 1.150 void focus_in ();
1157     void focus_out ();
1158 root 1.258 void update_fade_color (unsigned int idx);
1159 pcg 1.27 #ifdef PRINTPIPE
1160 pcg 1.39 FILE *popen_printer ();
1161 pcg 1.27 int pclose_printer (FILE *stream);
1162     #endif
1163     void process_print_pipe ();
1164 pcg 1.60 void process_nonprinting (unicode_t ch);
1165     void process_escape_vt52 (unicode_t ch);
1166 pcg 1.27 void process_escape_seq ();
1167     void process_csi_seq ();
1168     void process_window_ops (const int *args, unsigned int nargs);
1169 root 1.186 char *get_to_st (unicode_t &ends_how);
1170 pcg 1.27 void process_dcs_seq ();
1171     void process_osc_seq ();
1172 root 1.186 void process_color_seq (int report, int color, const char *str, char resp);
1173     void process_xterm_seq (int op, const char *str, char resp);
1174 pcg 1.27 int privcases (int mode, unsigned long bit);
1175     void process_terminal_mode (int mode, int priv, unsigned int nargs, const int *arg);
1176     void process_sgr_mode (unsigned int nargs, const int *arg);
1177     void process_graphics ();
1178     // init.C
1179 ayin 1.311 bool init_vars ();
1180     void init_secondary ();
1181     const char **init_resources (int argc, const char *const *argv);
1182     void init_env ();
1183     void set_locale (const char *locale);
1184     void init_xlocale ();
1185     void init_command (const char *const *argv);
1186     void run_command (const char *const *argv);
1187     int run_child (const char *const *argv);
1188     void color_aliases (int idx);
1189     void create_windows (int argc, const char *const *argv);
1190 pcg 1.27 void Get_Colours ();
1191     void get_ourmods ();
1192 root 1.102 // main.C
1193 ayin 1.311 void tt_winch ();
1194     rxvt_term ();
1195     ~rxvt_term ();
1196     void destroy ();
1197     void emergency_cleanup ();
1198     bool init (int argc, const char *const *argv, stringvec *envv);
1199     void recolour_cursor ();
1200     void resize_all_windows (unsigned int newwidth, unsigned int newheight, int ignoreparent);
1201     void window_calc (unsigned int newwidth, unsigned int newheight);
1202 root 1.121 bool set_fonts ();
1203 root 1.128 void set_string_property (Atom prop, const char *str, int len = -1);
1204     void set_utf8_property (Atom prop, const char *str, int len = -1);
1205 pcg 1.27 void set_title (const char *str);
1206 pcg 1.60 void set_icon_name (const char *str);
1207 pcg 1.27 void set_window_color (int idx, const char *color);
1208     void set_colorfgbg ();
1209 root 1.249 bool set_color (rxvt_color &color, const char *name);
1210 root 1.253 void alias_color (int dst, int src);
1211 root 1.162 void set_widthheight (unsigned int newwidth, unsigned int newheight);
1212 sasha 1.305 void get_window_origin (int &x, int &y);
1213     Pixmap get_pixmap_property (int prop_id);
1214 pcg 1.27
1215     // screen.C
1216 root 1.162
1217 root 1.237 void lalloc (line_t &l) const
1218 root 1.162 {
1219     l.t = (text_t *)talloc->alloc ();
1220     l.r = (rend_t *)ralloc->alloc ();
1221     }
1222    
1223 root 1.169 #if 0
1224 root 1.162 void lfree (line_t &l)
1225     {
1226     talloc->free (l.t);
1227     ralloc->free (l.r);
1228     }
1229 root 1.169 #endif
1230 root 1.162
1231 root 1.237 void lresize (line_t &l) const
1232 root 1.162 {
1233     if (!l.t)
1234     return;
1235    
1236     l.t = (text_t *)talloc->alloc (l.t, prev_ncol * sizeof (text_t));
1237     l.r = (rend_t *)ralloc->alloc (l.r, prev_ncol * sizeof (rend_t));
1238    
1239 root 1.166 l.l = min (l.l, ncol);
1240 root 1.162
1241     if (ncol > prev_ncol)
1242     scr_blank_line (l, prev_ncol, ncol - prev_ncol, DEFAULT_RSTYLE);
1243     }
1244    
1245 root 1.227 int fgcolor_of (rend_t r) const NOTHROW
1246 root 1.173 {
1247     int base = GET_BASEFG (r);
1248     #ifndef NO_BRIGHTCOLOR
1249     if (r & RS_Bold
1250 root 1.175 # if ENABLE_STYLES
1251 root 1.269 && option (Opt_intensityStyles)
1252 root 1.175 # endif
1253 root 1.173 && IN_RANGE_INC (base, minCOLOR, minBrightCOLOR))
1254     base += minBrightCOLOR - minCOLOR;
1255     #endif
1256     return base;
1257     }
1258    
1259 root 1.227 int bgcolor_of (rend_t r) const NOTHROW
1260 root 1.173 {
1261     int base = GET_BASEBG (r);
1262     #ifndef NO_BRIGHTCOLOR
1263     if (r & RS_Blink
1264 root 1.175 # if ENABLE_STYLES
1265 root 1.269 && option (Opt_intensityStyles)
1266 root 1.175 # endif
1267 root 1.173 && IN_RANGE_INC (base, minCOLOR, minBrightCOLOR))
1268     base += minBrightCOLOR - minCOLOR;
1269     #endif
1270     return base;
1271     }
1272    
1273 ayin 1.268 bool option (uint8_t opt) const NOTHROW
1274 root 1.191 {
1275 ayin 1.268 return options[opt >> 3] & (1 << (opt & 7));
1276 root 1.191 }
1277    
1278 root 1.269 void set_option (uint8_t opt, bool set = true) NOTHROW
1279 root 1.191 {
1280     if (set)
1281 ayin 1.268 options[opt >> 3] |= (1 << (opt & 7));
1282 root 1.191 else
1283 ayin 1.268 options[opt >> 3] &= ~(1 << (opt & 7));
1284 root 1.191 }
1285    
1286 ayin 1.297 void PrivMode (int set, unsigned bit) NOTHROW
1287     {
1288     if (set)
1289     priv_modes |= bit;
1290     else
1291     priv_modes &= ~bit;
1292     }
1293    
1294 ayin 1.311 // modifies first argument(!)
1295     void paste (char *data, unsigned int len) NOTHROW;
1296 root 1.227 void scr_blank_line (line_t &l, unsigned int col, unsigned int width, rend_t efs) const NOTHROW;
1297     void scr_blank_screen_mem (line_t &l, rend_t efs) const NOTHROW;
1298     int scr_scroll_text (int row1, int row2, int count) NOTHROW;
1299 root 1.102 void scr_reset ();
1300 root 1.227 void scr_release () NOTHROW;
1301     void scr_clear (bool really = false) NOTHROW;
1302     void scr_refresh () NOTHROW;
1303     bool scr_refresh_rend (rend_t mask, rend_t value) NOTHROW;
1304     void scr_erase_screen (int mode) NOTHROW;
1305 root 1.154 #if ENABLE_FRILLS
1306 root 1.227 void scr_erase_savelines () NOTHROW;
1307     void scr_backindex () NOTHROW;
1308     void scr_forwardindex () NOTHROW;
1309 root 1.154 #endif
1310 root 1.227 void scr_touch (bool refresh) NOTHROW;
1311     void scr_expose (int x, int y, int width, int height, bool refresh) NOTHROW;
1312     void scr_recolour () NOTHROW;
1313     void scr_remap_chars () NOTHROW;
1314     void scr_remap_chars (line_t &l) NOTHROW;
1315 root 1.102
1316 root 1.224 enum cursor_mode { SAVE, RESTORE };
1317    
1318 root 1.237 void scr_poweron ();
1319 root 1.227 void scr_cursor (cursor_mode mode) NOTHROW;
1320     void scr_do_wrap () NOTHROW;
1321 root 1.237 void scr_swap_screen () NOTHROW;
1322     void scr_change_screen (int scrn);
1323 root 1.227 void scr_color (unsigned int color, int fgbg) NOTHROW;
1324     void scr_rendition (int set, int style) NOTHROW;
1325     void scr_add_lines (const wchar_t *str, int len, int minlines = 0) NOTHROW;
1326     void scr_backspace () NOTHROW;
1327     void scr_tab (int count, bool ht = false) NOTHROW;
1328     void scr_gotorc (int row, int col, int relative) NOTHROW;
1329     void scr_index (enum page_dirn direction) NOTHROW;
1330     void scr_erase_line (int mode) NOTHROW;
1331     void scr_E () NOTHROW;
1332     void scr_insdel_lines (int count, int insdel) NOTHROW;
1333     void scr_insdel_chars (int count, int insdel) NOTHROW;
1334     void scr_scroll_region (int top, int bot) NOTHROW;
1335     void scr_cursor_visible (int mode) NOTHROW;
1336     void scr_autowrap (int mode) NOTHROW;
1337     void scr_relative_origin (int mode) NOTHROW;
1338     void scr_insert_mode (int mode) NOTHROW;
1339     void scr_set_tab (int mode) NOTHROW;
1340 root 1.231 void scr_rvideo_mode (bool on) NOTHROW;
1341 root 1.227 void scr_report_position () NOTHROW;
1342     void set_font_style () NOTHROW;
1343     void scr_charset_choose (int set) NOTHROW;
1344     void scr_charset_set (int set, unsigned int ch) NOTHROW;
1345     void scr_move_to (int y, int len) NOTHROW;
1346     bool scr_page (enum page_dirn direction, int nlines) NOTHROW;
1347     bool scr_changeview (int new_view_start) NOTHROW;
1348     void scr_bell () NOTHROW;
1349     void scr_printscreen (int fullhist) NOTHROW;
1350     void scr_xor_rect (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle1, rend_t rstyle2) NOTHROW;
1351     void scr_xor_span (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle) NOTHROW;
1352     void scr_reverse_selection () NOTHROW;
1353     void scr_dump (int fd) NOTHROW;
1354    
1355     void selection_check (int check_more) NOTHROW;
1356     void selection_paste (Window win, Atom prop, bool delete_prop) NOTHROW;
1357     void selection_property (Window win, Atom prop) NOTHROW;
1358 root 1.228 void selection_request (Time tm, int selnum = Sel_Primary) NOTHROW;
1359 root 1.227 int selection_request_other (Atom target, int selnum) NOTHROW;
1360     void selection_clear () NOTHROW;
1361 pcg 1.27 void selection_make (Time tm);
1362 root 1.227 bool selection_grab (Time tm) NOTHROW;
1363     void selection_start_colrow (int col, int row) NOTHROW;
1364     void selection_delimit_word (enum page_dirn dirn, const row_col_t *mark, row_col_t *ret) NOTHROW;
1365     void selection_extend_colrow (int32_t col, int32_t row, int button3, int buttonpress, int clickchange) NOTHROW;
1366     void selection_remove_trailing_spaces () NOTHROW;
1367     void selection_send (const XSelectionRequestEvent &rq) NOTHROW;
1368     void selection_click (int clicks, int x, int y) NOTHROW;
1369     void selection_extend (int x, int y, int flag) NOTHROW;
1370     void selection_rotate (int x, int y) NOTHROW;
1371    
1372 pcg 1.27 #if defined(NEXT_SCROLLBAR)
1373     // scrollbar-next.C
1374     Pixmap renderPixmap (const char *const *data, int width, int height);
1375     void init_scrollbar_stuff ();
1376     void drawBevel (Drawable d, int x1, int y1, int w, int h);
1377     int scrollbar_show_next (int update, int last_top, int last_bot, int scrollbar_len);
1378     #endif
1379    
1380     #if defined(RXVT_SCROLLBAR)
1381     // scrollbar-rxvt.C
1382     int scrollbar_show_rxvt (int update, int last_top, int last_bot, int scrollbar_len);
1383     #endif
1384    
1385     #if defined(XTERM_SCROLLBAR)
1386     // scrollbar-xterm.C
1387     int scrollbar_show_xterm (int update, int last_top, int last_bot, int scrollbar_len);
1388     #endif
1389    
1390 pcg 1.29 #if defined(PLAIN_SCROLLBAR)
1391     // scrollbar-plain.C
1392     int scrollbar_show_plain (int update, int last_top, int last_bot, int scrollbar_len);
1393     #endif
1394    
1395 pcg 1.27 // scrollbar.C
1396 ayin 1.311 void resize_scrollbar ();
1397 pcg 1.27 int scrollbar_mapping (int map);
1398     int scrollbar_show (int update);
1399     void setup_scrollbar (const char *scrollalign, const char *scrollstyle, const char *thickness);
1400    
1401     // xdefaults.C
1402     void get_options (int argc, const char *const *argv);
1403     int parse_keysym (const char *str, const char *arg);
1404 ayin 1.311 const char *x_resource (const char *name);
1405 root 1.145 void extract_resources ();
1406 pcg 1.1 };
1407 pcg 1.16
1408 ayin 1.319 #endif /* _RXVT_H_ */
1409 pcg 1.5