ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvt.h
Revision: 1.270
Committed: Fri Jun 8 20:04:12 2007 UTC (16 years, 11 months ago) by sasha
Content type: text/plain
Branch: MAIN
Changes since 1.269: +14 -1 lines
Log Message:
added preliminary support to use libAfterImage for background pixmap loading and rendering of transparency effects including blending of pixmap over background using several methods, and gaussian blurr of the transparency background

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