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, 8 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

# Content
1 #ifndef RXVT_H_ /* include once only */
2 #define RXVT_H_
3
4 #include "rxvtlib.h"
5
6 #include "feature.h"
7
8 #if defined (ISO_14755) || defined (ENABLE_PERL)
9 # define ENABLE_OVERLAY 1
10 #endif
11
12 #if ENABLE_PERL
13 # define ENABLE_FRILLS 1
14 # define ENABLE_COMBINING 1
15 #endif
16
17 #if ENABLE_FRILLS
18 # define ENABLE_XEMBED 1
19 # define ENABLE_EWMH 1
20 # define ENABLE_XIM_ONTHESPOT 1
21 # define CURSOR_BLINK 1
22 # define OPTION_HC 1
23 #else
24 # define ENABLE_MINIMAL 1
25 #endif
26
27 #include <limits.h>
28
29 #include <X11/cursorfont.h>
30 #include <X11/keysym.h>
31 #include <X11/keysymdef.h>
32 #include <X11/Xatom.h>
33 #if ENABLE_FRILLS
34 # include <X11/Xmd.h>
35 #endif
36
37 #include "encoding.h"
38 #include "rxvtutil.h"
39 #include "rxvtfont.h"
40 #include "rxvttoolkit.h"
41 #include "ev_cpp.h"
42 #include "salloc.h"
43 #include "libptytty.h"
44
45 #include "rxvtperl.h"
46
47 // 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 /*
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 # define __svr4__ 1
66 #endif
67 #if defined (sun) && !defined (__sun__)
68 # define __sun__ 1
69 #endif
70
71 #ifndef HAVE_XPOINTER
72 typedef char *XPointer;
73 #endif
74
75 #include <termios.h>
76 typedef struct termios ttymode_t;
77
78 #include "background.h"
79
80 #ifndef STDIN_FILENO
81 # define STDIN_FILENO 0
82 # define STDOUT_FILENO 1
83 # define STDERR_FILENO 2
84 #endif
85
86 /****************************************************************************/
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 /*
95 *****************************************************************************
96 * PROTOTYPES
97 *****************************************************************************
98 */
99 // main.C
100 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
104 // misc.C
105 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
110 char * rxvt_basename (const char *str) NOTHROW;
111 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 char * rxvt_strtrim (char *str) NOTHROW;
118 char ** rxvt_splitcommastring (const char *cs) NOTHROW;
119 void rxvt_freecommastring (char **cs) NOTHROW;
120
121 /////////////////////////////////////////////////////////////////////////////
122
123 // temporarily replace the process environment
124 extern char **environ;
125 extern char **rxvt_environ; // the original environ pointer
126
127 static inline void set_environ (stringvec *envv)
128 {
129 #if ENABLE_PERL
130 assert (envv);
131 #else
132 if (envv)
133 #endif
134 environ = (char **)envv->begin ();
135 }
136
137 static inline void set_environ (char **envv)
138 {
139 #if ENABLE_PERL
140 assert (envv);
141 #else
142 if (envv)
143 #endif
144 environ = envv;
145 }
146
147 /*
148 *****************************************************************************
149 * STRUCTURES AND TYPEDEFS
150 *****************************************************************************
151 */
152 struct grwin_t;
153
154 /* If we're using either the rxvt scrollbar, keep the
155 * scrollColor resource.
156 */
157 #if defined(RXVT_SCROLLBAR) || defined(NEXT_SCROLLBAR) || defined(PLAIN_SCROLLBAR)
158 # 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 int clicks;
169 Time time; /* milliseconds */
170 unsigned int state; /* key or button mask */
171 unsigned int button; /* detail */
172 };
173
174 #if ENABLE_FRILLS
175 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 #if ENABLE_XEMBED
185 // XEMBED messages
186 # 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 # define XEMBED_FOCUS_PREV 7
194
195 # define XEMBED_MODALITY_ON 10
196 # define XEMBED_MODALITY_OFF 11
197 # define XEMBED_REGISTER_ACCELERATOR 12
198 # define XEMBED_UNREGISTER_ACCELERATOR 13
199 # define XEMBED_ACTIVATE_ACCELERATOR 14
200
201 // XEMBED detail code
202 # define XEMBED_FOCUS_CURRENT 0
203 # define XEMBED_FOCUS_FIRST 1
204 # define XEMBED_FOCUS_LAST 2
205
206 # define XEMBED_MAPPED (1 << 0)
207 #endif
208
209 /*
210 *****************************************************************************
211 * NORMAL DEFINES
212 *****************************************************************************
213 */
214
215 /* COLORTERM, TERM environment variables */
216 #define COLORTERMENV "rxvt"
217 #ifdef BG_IMAGE_FROM_FILE
218 # define COLORTERMENVFULL COLORTERMENV "-xpm"
219 #else
220 # define COLORTERMENVFULL COLORTERMENV
221 #endif
222 #ifndef TERMENV
223 # define TERMENV "rxvt-unicode"
224 #endif
225
226 #if defined (NO_MOUSE_REPORT) && !defined (NO_MOUSE_REPORT_SCROLLBAR)
227 # define NO_MOUSE_REPORT_SCROLLBAR 1
228 #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 #ifndef EXIT_SUCCESS /* missing from <stdlib.h> */
237 # define EXIT_SUCCESS 0 /* exit function success */
238 # define EXIT_FAILURE 1 /* exit function failure */
239 #endif
240
241 #define scrollBar_esc 30
242
243 #if defined(RXVT_SCROLLBAR) || defined(NEXT_SCROLLBAR) || defined(XTERM_SCROLLBAR) || defined(PLAIN_SCROLLBAR)
244 # define HAVE_SCROLLBARS 1
245 #endif
246
247 #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 #define R_SB_PLAIN 4
254 #define R_SB_RXVT 8
255
256 #define SB_WIDTH_NEXT 19
257 #define SB_WIDTH_XTERM 15
258 #define SB_WIDTH_PLAIN 7
259 #ifndef SB_WIDTH_RXVT
260 # define SB_WIDTH_RXVT 10
261 #endif
262
263 /*
264 * NeXT scrollbar defines
265 */
266 #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 /*
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 * | | .. ()..%%| |
296 * | | ......%%| |
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 enum {
327 NO_REFRESH = 0, /* Window not visible at all! */
328 FAST_REFRESH = 1, /* Fully exposed window */
329 SLOW_REFRESH = 2, /* Partially exposed window */
330 };
331
332 #ifdef NO_SECONDARY_SCREEN
333 # define NSCREENS 0
334 #else
335 # define NSCREENS 1
336 #endif
337
338 /* special (internal) prefix for font commands */
339 #define FONT_CMD '#'
340 #define FONT_DN "#-"
341 #define FONT_UP "#+"
342
343 /* flags for rxvt_scr_gotorc () */
344 enum {
345 C_RELATIVE = 1, /* col movement is relative */
346 R_RELATIVE = 2, /* row movement is relative */
347 RELATIVE = C_RELATIVE | R_RELATIVE,
348 };
349
350 /* modes for rxvt_scr_insdel_chars (), rxvt_scr_insdel_lines () */
351 enum {
352 INSERT = -1, /* don't change these values */
353 DELETE = +1,
354 ERASE = +2,
355 };
356
357 /* modes for rxvt_scr_page () - scroll page. used by scrollbar window */
358 enum page_dirn {
359 UP,
360 DN,
361 NO_DIR,
362 };
363
364 /* arguments for rxvt_scr_change_screen () */
365 enum {
366 PRIMARY = 0,
367 SECONDARY,
368 };
369
370 #define RS_None 0
371
372 #define RS_fgMask 0x0000007fUL // 128 colors
373 #define RS_bgMask 0x00003f80UL // 128 colors
374
375 // font styles
376 #define RS_Bold 0x00004000UL // value 1
377 #define RS_Italic 0x00008000UL // value 2
378
379 // fake styles
380 #define RS_Blink 0x00010000UL // blink
381 #define RS_RVid 0x00020000UL // reverse video
382 #define RS_Uline 0x00040000UL // underline
383
384 // toggle this to force redraw, must be != RS_Careful
385 #define RS_redraw 0x01000000UL
386
387 // 5 custom bits for extensions
388 #define RS_customCount 32
389 #define RS_customMask 0x00f80000UL
390 #define RS_customShift 19
391
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
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 #define Sel_CompoundText 0x10 /* last request was COMPOUND_TEXT */
418 #define Sel_UTF8String 0x20 /* last request was UTF8_STRING */
419
420 enum {
421 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 C0_CAN, C0_EM , C0_SUB, C0_ESC, C0_IS4, C0_IS3, C0_IS2, C0_IS1,
426 };
427 #define CHAR_ST 0x9c /* 0234 */
428
429 /*
430 * XTerm Operating System Commands: ESC ] Ps;Pt (ST|BEL)
431 * colour extensions by Christian W. Zuckschwerdt <zany@triq.net>
432 */
433 enum {
434 XTerm_name = 0,
435 XTerm_iconName = 1,
436 XTerm_title = 2,
437 XTerm_property = 3, // change X property
438 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 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 XTerm_Color_RV = 17, // change actual 'Highlight' color
447 XTerm_logfile = 46, // not implemented
448 XTerm_font = 50,
449
450 XTerm_konsole30 = 30, // reserved for konsole
451 XTerm_konsole31 = 31, // reserved for konsole
452 XTerm_emacs51 = 51, // reserved for emacs shell
453 /*
454 * rxvt extensions of XTerm OSCs: ESC ] Ps;Pt (ST|BEL)
455 * at least Rxvt_Color_BD and Rxvt_Color_UL clash with xterm
456 */
457 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
464 URxvt_locale = 701, // change locale
465 URxvt_version = 702, // request version
466
467 URxvt_Color_IT = 704, // change actual 'Italic' colour
468 URxvt_Color_tint = 705, // change actual tint colour
469 URxvt_Color_BD = 706,
470 URxvt_Color_UL = 707,
471
472 URxvt_font = 710,
473 URxvt_boldFont = 711,
474 URxvt_italicFont = 712,
475 URxvt_boldItalicFont = 713,
476
477 URxvt_view_up = 720,
478 URxvt_view_down = 721,
479
480 URxvt_perl = 777,
481 };
482
483 /* Words starting with `Color_' are colours. Others are counts */
484 /*
485 * The PixColor and rendition colour usage should probably be decoupled
486 * 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 Color_none = -2,
492 Color_transparent = -1,
493 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 #ifndef NO_BRIGHTCOLOR
505 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 #else
517 Color_White = maxCOLOR,
518 #endif
519 minTermCOLOR = Color_White + 1,
520 maxTermCOLOR = Color_White + 72,
521 #ifndef NO_CURSORCOLOR
522 Color_cursor,
523 Color_cursor2,
524 #endif
525 Color_pointer_fg,
526 Color_pointer_bg,
527 Color_border,
528 #ifndef NO_BOLD_UNDERLINE_REVERSE
529 Color_BD,
530 Color_IT,
531 Color_UL,
532 Color_RV,
533 #endif
534 #if ENABLE_FRILLS
535 Color_underline,
536 #endif
537 #ifdef OPTION_HC
538 Color_HC,
539 #endif
540 #ifdef KEEP_SCROLLCOLOR
541 Color_scroll,
542 Color_trough,
543 #endif
544 #if ENABLE_TRANSPARENCY
545 Color_tint,
546 #endif
547 #if OFF_FOCUS_FADING
548 Color_fade,
549 #endif
550 NRS_COLORS, /* */
551 #ifdef KEEP_SCROLLCOLOR
552 Color_topShadow = NRS_COLORS,
553 Color_bottomShadow,
554 TOTAL_COLORS
555 #else
556 TOTAL_COLORS = NRS_COLORS
557 #endif
558 };
559
560 #define Color_Bits 7 // 0 .. maxTermCOLOR
561
562 /*
563 * Resource list
564 */
565 enum {
566 # 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 NUM_RESOURCES
572 };
573
574 /* DEC private modes */
575 #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 #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 #define PrivMode_MouseBtnEvent (1UL<<20)
596 #define PrivMode_MouseAnyEvent (1UL<<21)
597 /* too annoying to implement X11 highlight tracking */
598 /* #define PrivMode_MouseX11Track (1LU<<20) */
599
600 #define PrivMode_mouse_report (PrivMode_MouseX10|PrivMode_MouseX11|PrivMode_MouseBtnEvent|PrivMode_MouseAnyEvent)
601
602 #ifdef ALLOW_132_MODE
603 # define PrivMode_Default (PrivMode_Autowrap|PrivMode_ShiftKeys|PrivMode_VisibleCursor|PrivMode_132OK)
604 #else
605 # define PrivMode_Default (PrivMode_Autowrap|PrivMode_ShiftKeys|PrivMode_VisibleCursor)
606 #endif
607
608 // do not change these constants lightly, there are many interdependencies
609 #define IMBUFSIZ 128 // input modifier buffer sizes
610 #define KBUFSZ 512 // size of keyboard mapping buffer
611 #define CBUFSIZ 2048 // size of command buffer
612 #define UBUFSIZ 2048 // character buffer
613
614 #ifndef PATH_MAX
615 # define PATH_MAX 16384
616 #endif
617
618 /* 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 /*
646 *****************************************************************************
647 * MACRO DEFINES
648 *****************************************************************************
649 */
650 #define dLocal(type,name) type const name = this->name
651
652 // 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
656 /* convert pixel dimensions to row/column values. Everything as int32_t */
657 #define Pixel2Col(x) Pixel2Width((int32_t)(x))
658 #define Pixel2Row(y) Pixel2Height((int32_t)(y))
659 #define Pixel2Width(x) ((int32_t)(x) / (int32_t)fwidth)
660 #define Pixel2Height(y) ((int32_t)(y) / (int32_t)fheight)
661 #define Col2Pixel(col) ((int32_t)Width2Pixel(col))
662 #define Row2Pixel(row) ((int32_t)Height2Pixel(row))
663 #define Width2Pixel(n) ((int32_t)(n) * (int32_t)fwidth)
664 #define Height2Pixel(n) ((int32_t)(n) * (int32_t)fheight)
665
666 // 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
672 /* how to build & extract colors and attributes */
673 #define GET_BASEFG(x) (((x) & RS_fgMask))
674 #define GET_BASEBG(x) (((x) & RS_bgMask)>>Color_Bits)
675
676 #define GET_FONT(x) (((x) & RS_fontMask) >> RS_fontShift)
677 #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
682 #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 #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
693 #define PIXCOLOR_NAME(idx) rs[Rs_color + (idx)]
694 #define ISSET_PIXCOLOR(idx) (!!rs[Rs_color + (idx)])
695
696 #if ENABLE_STYLES
697 # define FONTSET(style) fontset[GET_STYLE (style)]
698 #else
699 # define FONTSET(style) fontset[0]
700 #endif
701
702 #ifdef HAVE_SCROLLBARS
703 # define scrollbar_TotalWidth() (scrollBar.width + sb_shadow * 2)
704 #else
705 # define scrollbar_TotalWidth() (0)
706 #endif
707 #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
713 #define scrollbarnext_dnval() (scrollBar.end + (scrollBar.width + 1))
714 #define scrollbarnext_upButton(y) ((y) > scrollBar.end \
715 && (y) <= scrollbarnext_dnval ())
716 #define scrollbarnext_dnButton(y) ((y) > scrollbarnext_dnval())
717 #define SCROLLNEXT_MINHEIGHT SB_THUMB_MIN_HEIGHT
718 #define scrollbarrxvt_upButton(y) ((y) < scrollBar.beg)
719 #define scrollbarrxvt_dnButton(y) ((y) > scrollBar.end)
720 #define SCROLLRXVT_MINHEIGHT 10
721 #define SCROLLXTERM_MINHEIGHT 10
722
723 #define scrollbar_minheight() (scrollBar.style == R_SB_NEXT \
724 ? SCROLLNEXT_MINHEIGHT \
725 : SCROLLRXVT_MINHEIGHT)
726 #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 - scrollbar_minheight ())
731
732 typedef callback<void (const char *)> log_callback;
733 typedef callback<int (int)> getfd_callback;
734
735 #define SET_LOCALE(locale) rxvt_set_locale (locale)
736 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
740 /****************************************************************************/
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 #define LINE_FILTER 0x0008 // line needs to be filtered before display (NYI)
746 #define LINE_BIDI 0x0010 // line needs bidi (NYI)
747
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 // primitive wrapper around mbstate_t to ensure initialisation
792 struct mbstate {
793 mbstate_t mbs;
794
795 operator mbstate_t *() { return &mbs; }
796 void reset () { memset (&mbs, 0, sizeof (mbs)); }
797 mbstate () { reset (); }
798 };
799
800 /****************************************************************************/
801
802 #define UNICODE_MASK 0x1fffffUL
803
804 #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 # if ENABLE_PERL
810 # define COMPOSE_LO 0xe000UL // our _own_ functions don't like (illegal) surrogates
811 # 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 #endif
818
819 #if ENABLE_COMBINING
820 // 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 unicode_t c1, c2; // any chars != NOCHAR are valid
825 compose_char (unicode_t c1, unicode_t c2)
826 : c1(c1), c2(c2)
827 { }
828 };
829
830 class rxvt_composite_vec {
831 vector<compose_char> v;
832 public:
833 text_t compose (unicode_t c1, unicode_t c2 = NOCHAR);
834 int expand (unicode_t c, wchar_t *r);
835 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 /****************************************************************************/
847
848 #ifdef KEYSYM_RESOURCE
849 class keyboard_manager;
850 #endif
851
852 struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen {
853
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
859 log_callback *log_hook; // log error messages through this hook, if != 0
860 getfd_callback *getfd_hook; // convert remote to local fd, if != 0
861 #if ENABLE_PERL
862 rxvt_perl_term perl;
863 #endif
864 struct mbstate mbstate; // current input multibyte state
865
866 unsigned char want_refresh:1,
867 current_screen:1, /* primary or secondary */
868 num_scr_allow:1,
869 bypass_keystate:1,
870 #ifdef CURSOR_BLINK
871 hidden_cursor:1,
872 #endif
873 #ifdef TEXT_BLINK
874 hidden_text:1,
875 #endif
876 #ifdef POINTER_BLANK
877 hidden_pointer:1,
878 #endif
879 enc_utf8:1, /* wether locale uses utf-8 */
880 seen_input:1, /* wether we have seen some program output yet */
881 seen_resize:1, /* wether we had a resize event */
882 parsed_geometry:1;
883
884 unsigned char refresh_type,
885 #ifdef META8_OPTION
886 meta_char, /* Alt-key prefix */
887 #endif
888 scrollbar_align,
889 selection_wait,
890 selection_type;
891 /* ---------- */
892 bool rvideo_state, rvideo_mode;
893 #ifndef NO_BELL
894 bool rvideo_bell;
895 #endif
896 int num_scr; /* screen: number lines scrolled */
897 int prev_ncol, /* screen: previous number of columns */
898 prev_nrow; /* screen: previous number of rows */
899 /* ---------- */
900 rend_t rstyle;
901 /* ---------- */
902 #ifdef SELECTION_SCROLLING
903 int scroll_selection_lines;
904 enum page_dirn scroll_selection_dir;
905 int selection_save_x,
906 selection_save_y,
907 selection_save_state;
908 #endif
909 /* ---------- */
910 int csrO, /* Hops - csr offset in thumb/slider to */
911 /* give proper Scroll behaviour */
912 #if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)
913 mouse_slip_wheel_speed,
914 #endif
915 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 mouse_row,
924 mouse_col,
925 # ifdef POINTER_BLANK
926 pointerBlankDelay,
927 # endif
928 allowedxerror;
929 /* ---------- */
930 unsigned int ModLevel3Mask,
931 ModMetaMask,
932 ModNumLockMask;
933 int old_width, /* last used width in screen resize */
934 old_height; /* last used height in screen resize */
935 unsigned long priv_modes,
936 SavedModes;
937 /* ---------- */
938 Atom *xa;
939 /* ---------- */
940 #ifdef RXVT_SCROLLBAR
941 GC scrollbarGC,
942 topShadowGC,
943 botShadowGC;
944 #endif
945 #ifdef XTERM_SCROLLBAR
946 GC xscrollbarGC,
947 ShadowGC;
948 #endif
949 #ifdef PLAIN_SCROLLBAR
950 GC pscrollbarGC;
951 #endif
952 #ifdef NEXT_SCROLLBAR
953 GC blackGC,
954 whiteGC,
955 grayGC,
956 darkGC,
957 stippleGC;
958 Pixmap dimple,
959 upArrow,
960 downArrow,
961 upArrowHi,
962 downArrowHi;
963 #endif
964 /* ---------- */
965 Time selection_time,
966 selection_request_time;
967 pid_t cmd_pid; /* process id of child */
968 char * incr_buf;
969 size_t incr_buf_size, incr_buf_fill;
970 /* ---------- */
971 Cursor leftptr_cursor;
972 /* ---------- */
973 struct mouse_event MEvent;
974 XComposeStatus compose;
975 ttymode_t tio;
976 row_col_t oldcursor;
977 #ifdef HAVE_BG_PIXMAP
978 bgPixmap_t bgPixmap;
979 #endif
980 #ifdef HAVE_AFTERIMAGE
981 ASVisual *asv;
982 ASImageManager *asimman;
983 #endif
984
985 #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 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 void scr_overlay_set (int x, int y,
994 text_t text,
995 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 #endif
999
1000 vector<void *> allocated; // free these memory blocks with free()
1001
1002 char env_windowid[21]; /* environmental variable WINDOWID */
1003 char env_colorfgbg[sizeof ("COLORFGBG=default;default;bg") + 1];
1004 char *env_display; /* environmental variable DISPLAY */
1005 char *env_term; /* environmental variable TERM */
1006
1007 char *locale;
1008 char charsets[4];
1009 char *v_buffer; /* pointer to physical buffer */
1010 unsigned int v_buflen; /* size of area to write */
1011 stringvec *argv, *envv; /* if != 0, will be freed at destroy time */
1012
1013 #ifdef KEYSYM_RESOURCE
1014 keyboard_manager *keyboard;
1015 #endif
1016 #ifndef NO_RESOURCES
1017 XrmDatabase option_db;
1018 #endif
1019
1020 const char *rs[NUM_RESOURCES];
1021 /* command input buffering */
1022 char *cmdbuf_ptr, *cmdbuf_endp;
1023 char cmdbuf_base[CBUFSIZ];
1024
1025 ptytty *pty;
1026
1027 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
1032 #if ENABLE_FRILLS || ISO_14755
1033 // ISO 14755 entry support
1034 unicode_t iso14755buf;
1035 void commit_iso14755 ();
1036 int hex_keyval (XKeyEvent &ev);
1037 # if ISO_14755
1038 void iso14755_51 (unicode_t ch, rend_t r = DEFAULT_RSTYLE, int x = 0, int y = -1);
1039 void iso14755_54 (int x, int y);
1040 # endif
1041 #endif
1042
1043 long vt_emask, vt_emask_perl, vt_emask_xim, vt_emask_mouse;
1044
1045 void vt_select_input () const NOTHROW
1046 {
1047 XSelectInput (dpy, vt, vt_emask | vt_emask_perl | vt_emask_xim | vt_emask_mouse);
1048 }
1049
1050 #if ENABLE_TRANSPARENCY || ENABLE_PERL
1051 void rootwin_cb (XEvent &xev);
1052 xevent_watcher rootwin_ev;
1053 #endif
1054 #ifdef HAVE_BG_PIXMAP
1055 int update_background ();
1056 #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 void update_background_cb (ev::timer &w, int revents);
1061 ev::timer update_background_ev;
1062 #endif
1063
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 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 void destroy_cb (ev::idle &w, int revents); ev::idle destroy_ev;
1074 void flush ();
1075 void flush_cb (ev::timer &w, int revents); ev::timer flush_ev;
1076 bool pty_fill ();
1077 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
1080 #ifdef CURSOR_BLINK
1081 void cursor_blink_cb (ev::timer &w, int revents); ev::timer cursor_blink_ev;
1082 #endif
1083 #ifdef TEXT_BLINK
1084 void text_blink_cb (ev::timer &w, int revents); ev::timer text_blink_ev;
1085 #endif
1086 #ifndef NO_BELL
1087 void bell_cb (ev::timer &w, int revents); ev::timer bell_ev;
1088 #endif
1089
1090 #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
1091 void cont_scroll_cb (ev::timer &w, int revents); ev::timer cont_scroll_ev;
1092 #endif
1093 #ifdef SELECTION_SCROLLING
1094 void sel_scroll_cb (ev::timer &w, int revents); ev::timer sel_scroll_ev;
1095 #endif
1096 #if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)
1097 void slip_wheel_cb (ev::timer &w, int revents); ev::timer slip_wheel_ev;
1098 #endif
1099
1100 #ifdef POINTER_BLANK
1101 void pointer_cb (ev::timer &w, int revents); ev::timer pointer_ev;
1102 void pointer_blank ();
1103 #endif
1104 void pointer_unblank ();
1105
1106 void tt_printf (const char *fmt,...);
1107 void tt_write (const char *data, unsigned int len);
1108 void pty_write ();
1109
1110 bool init (stringvec *argv, stringvec *envv)
1111 {
1112 this->argv = argv;
1113 return init (argv->size (), argv->begin (), envv);
1114 }
1115
1116 void make_current () const // make this the "currently active" urxvt instance
1117 {
1118 SET_R (this);
1119 set_environ (envv);
1120 rxvt_set_locale (locale);
1121 }
1122
1123 #if USE_XIM
1124 rxvt_xim *input_method;
1125 XIC Input_Context;
1126 XIMStyle input_style;
1127 XPoint spot; // most recently sent spot position
1128
1129 void im_destroy ();
1130 void im_cb (); im_watcher im_ev;
1131 void im_set_size (XRectangle &size);
1132 void im_set_position (XPoint &pos) NOTHROW;
1133 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
1136 bool IMisRunning ();
1137 void IMSendSpot ();
1138 bool IM_get_IC (const char *modifiers);
1139 void IMSetPosition ();
1140 #endif
1141
1142 // command.C
1143 void key_press (XKeyEvent &ev);
1144 void key_release (XKeyEvent &ev);
1145 unsigned int cmd_write (const char *str, unsigned int count);
1146
1147 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
1152 bool cmd_parse ();
1153 void mouse_report (XButtonEvent &ev);
1154 void button_press (XButtonEvent &ev);
1155 void button_release (XButtonEvent &ev);
1156 void focus_in ();
1157 void focus_out ();
1158 void update_fade_color (unsigned int idx);
1159 #ifdef PRINTPIPE
1160 FILE *popen_printer ();
1161 int pclose_printer (FILE *stream);
1162 #endif
1163 void process_print_pipe ();
1164 void process_nonprinting (unicode_t ch);
1165 void process_escape_vt52 (unicode_t ch);
1166 void process_escape_seq ();
1167 void process_csi_seq ();
1168 void process_window_ops (const int *args, unsigned int nargs);
1169 char *get_to_st (unicode_t &ends_how);
1170 void process_dcs_seq ();
1171 void process_osc_seq ();
1172 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 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 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 void Get_Colours ();
1191 void get_ourmods ();
1192 // main.C
1193 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 bool set_fonts ();
1203 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 void set_title (const char *str);
1206 void set_icon_name (const char *str);
1207 void set_window_color (int idx, const char *color);
1208 void set_colorfgbg ();
1209 bool set_color (rxvt_color &color, const char *name);
1210 void alias_color (int dst, int src);
1211 void set_widthheight (unsigned int newwidth, unsigned int newheight);
1212 void get_window_origin (int &x, int &y);
1213 Pixmap get_pixmap_property (int prop_id);
1214
1215 // screen.C
1216
1217 void lalloc (line_t &l) const
1218 {
1219 l.t = (text_t *)talloc->alloc ();
1220 l.r = (rend_t *)ralloc->alloc ();
1221 }
1222
1223 #if 0
1224 void lfree (line_t &l)
1225 {
1226 talloc->free (l.t);
1227 ralloc->free (l.r);
1228 }
1229 #endif
1230
1231 void lresize (line_t &l) const
1232 {
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 l.l = min (l.l, ncol);
1240
1241 if (ncol > prev_ncol)
1242 scr_blank_line (l, prev_ncol, ncol - prev_ncol, DEFAULT_RSTYLE);
1243 }
1244
1245 int fgcolor_of (rend_t r) const NOTHROW
1246 {
1247 int base = GET_BASEFG (r);
1248 #ifndef NO_BRIGHTCOLOR
1249 if (r & RS_Bold
1250 # if ENABLE_STYLES
1251 && option (Opt_intensityStyles)
1252 # endif
1253 && IN_RANGE_INC (base, minCOLOR, minBrightCOLOR))
1254 base += minBrightCOLOR - minCOLOR;
1255 #endif
1256 return base;
1257 }
1258
1259 int bgcolor_of (rend_t r) const NOTHROW
1260 {
1261 int base = GET_BASEBG (r);
1262 #ifndef NO_BRIGHTCOLOR
1263 if (r & RS_Blink
1264 # if ENABLE_STYLES
1265 && option (Opt_intensityStyles)
1266 # endif
1267 && IN_RANGE_INC (base, minCOLOR, minBrightCOLOR))
1268 base += minBrightCOLOR - minCOLOR;
1269 #endif
1270 return base;
1271 }
1272
1273 bool option (uint8_t opt) const NOTHROW
1274 {
1275 return options[opt >> 3] & (1 << (opt & 7));
1276 }
1277
1278 void set_option (uint8_t opt, bool set = true) NOTHROW
1279 {
1280 if (set)
1281 options[opt >> 3] |= (1 << (opt & 7));
1282 else
1283 options[opt >> 3] &= ~(1 << (opt & 7));
1284 }
1285
1286 void PrivMode (int set, unsigned bit) NOTHROW
1287 {
1288 if (set)
1289 priv_modes |= bit;
1290 else
1291 priv_modes &= ~bit;
1292 }
1293
1294 // modifies first argument(!)
1295 void paste (char *data, unsigned int len) NOTHROW;
1296 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 void scr_reset ();
1300 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 #if ENABLE_FRILLS
1306 void scr_erase_savelines () NOTHROW;
1307 void scr_backindex () NOTHROW;
1308 void scr_forwardindex () NOTHROW;
1309 #endif
1310 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
1316 enum cursor_mode { SAVE, RESTORE };
1317
1318 void scr_poweron ();
1319 void scr_cursor (cursor_mode mode) NOTHROW;
1320 void scr_do_wrap () NOTHROW;
1321 void scr_swap_screen () NOTHROW;
1322 void scr_change_screen (int scrn);
1323 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 void scr_rvideo_mode (bool on) NOTHROW;
1341 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 void selection_request (Time tm, int selnum = Sel_Primary) NOTHROW;
1359 int selection_request_other (Atom target, int selnum) NOTHROW;
1360 void selection_clear () NOTHROW;
1361 void selection_make (Time tm);
1362 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 #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 #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 // scrollbar.C
1396 void resize_scrollbar ();
1397 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 const char *x_resource (const char *name);
1405 void extract_resources ();
1406 };
1407
1408 #endif /* _RXVT_H_ */
1409