--- rxvt-unicode/src/rxvt.h 2008/02/19 13:01:33 1.362 +++ rxvt-unicode/src/rxvt.h 2010/01/10 21:57:50 1.378 @@ -153,7 +153,7 @@ char * rxvt_wcstoutf8 (const wchar_t *str, int len = -1); wchar_t * rxvt_utf8towcs (const char *str, int len = -1); -char * rxvt_basename (const char *str) NOTHROW; +const char * rxvt_basename (const char *str) NOTHROW; void rxvt_vlog (const char *fmt, va_list arg_ptr) NOTHROW; void rxvt_log (const char *fmt,...) NOTHROW; void rxvt_warn (const char *fmt,...) NOTHROW; @@ -206,7 +206,8 @@ * the 'essential' information for reporting Mouse Events * pared down from XButtonEvent */ -struct mouse_event { +struct mouse_event +{ int clicks; Time time; /* milliseconds */ unsigned int state; /* key or button mask */ @@ -341,7 +342,7 @@ #define RS_baseattrMask (RS_Italic | RS_Bold | RS_Blink | RS_RVid | RS_Uline) #define RS_attrMask (RS_baseattrMask | RS_fontMask) -#define RS_fontCount 127 // not 127 or 256, see rxvtfont.h +#define RS_fontCount 127 // not 128 or 256, see rxvtfont.h #define RS_fontMask 0xff000000UL // plenty(?) of fonts, includes RS_Careful #define RS_fontShift 24 @@ -412,6 +413,7 @@ URxvt_Color_tint = 705, // change actual tint colour URxvt_Color_BD = 706, // change actual 'Bold' color URxvt_Color_UL = 707, // change actual 'Underline' color + URxvt_Color_border = 708, URxvt_font = 710, URxvt_boldFont = 711, @@ -421,7 +423,7 @@ URxvt_view_up = 720, URxvt_view_down = 721, - URxvt_perl = 777, + URxvt_perl = 777, // for use by perl extensions, starts with "extension-name;" }; /* Words starting with `Color_' are colours. Others are counts */ @@ -552,11 +554,13 @@ #define IMBUFSIZ 128 // input modifier buffer sizes #define KBUFSZ 512 // size of keyboard mapping buffer #define CBUFSIZ 2048 // size of command buffer +#define CBUFCNT 8 // never call pty_fill/cmd_parse more than this often in a row #define UBUFSIZ 2048 // character buffer #if ENABLE_FRILLS # include -typedef struct _mwmhints { +typedef struct _mwmhints +{ CARD32 flags; CARD32 functions; CARD32 decorations; @@ -613,8 +617,11 @@ #define Width2Pixel(n) ((int32_t)(n) * (int32_t)fwidth) #define Height2Pixel(n) ((int32_t)(n) * (int32_t)fheight) -#define LINENO(n) MOD (term_start + int(n), total_rows) -#define ROW(n) row_buf [LINENO (n)] +#define LINENO_of(t,n) MOD ((t)->term_start + int(n), (t)->total_rows) +#define ROW_of(t,n) (t)->row_buf [LINENO_of ((t), n)] + +#define LINENO(n) LINENO_of (this, n) +#define ROW(n) ROW_of (this, n) /* how to build & extract colors and attributes */ #define GET_BASEFG(x) (((x) & RS_fgMask)) @@ -641,11 +648,13 @@ #define ISSET_PIXCOLOR(idx) (!!rs[Rs_color + (idx)]) #if ENABLE_STYLES -# define FONTSET(style) fontset[GET_STYLE (style)] +# define FONTSET_of(t,style) (t)->fontset[GET_STYLE (style)] #else -# define FONTSET(style) fontset[0] +# define FONTSET_of(t,style) (t)->fontset[0] #endif +#define FONTSET(style) FONTSET_of (this, style) + typedef callback log_callback; typedef callback getfd_callback; @@ -657,7 +666,8 @@ #define LINE_FILTER 0x0008 // line needs to be filtered before display (NYI) #define LINE_BIDI 0x0010 // line needs bidi (NYI) -struct line_t { +struct line_t +{ text_t *t; // terminal the text rend_t *r; // rendition, uses RS_ flags tlen_t_ l; // length of each text line @@ -701,7 +711,8 @@ /****************************************************************************/ // primitive wrapper around mbstate_t to ensure initialisation -struct mbstate { +struct mbstate +{ mbstate_t mbs; operator mbstate_t *() { return &mbs; } @@ -732,14 +743,16 @@ // compose chars are used to represent composite characters // that are not representable in unicode, as well as characters // not fitting in the BMP. -struct compose_char { +struct compose_char +{ unicode_t c1, c2; // any chars != NOCHAR are valid compose_char (unicode_t c1, unicode_t c2) : c1(c1), c2(c2) { } }; -class rxvt_composite_vec { +class rxvt_composite_vec +{ vector v; public: text_t compose (unicode_t c1, unicode_t c2 = NOCHAR); @@ -768,7 +781,20 @@ #define SET_R(r) rxvt_current_term = const_cast(r) #define GET_R rxvt_current_term -typedef struct { +/* ------------------------------------------------------------------------- */ +struct overlay_base +{ + int x, y, w, h; // overlay dimensions + text_t **text; + rend_t **rend; + + // while tempting to add swap() etc. here, it effetcively only increases code size +}; + +/* ------------------------------------------------------------------------- */ + +typedef struct +{ int row; int col; } row_col_t; @@ -803,13 +829,14 @@ * | terminal +---------+ * | terminal | * | terminal | - * +------------+···········= term_stat + nrow - 1 + * +------------+···········= term_start + nrow - 1 * | * | * END······················= total_rows */ -struct TermWin_t { +struct TermWin_t +{ int width; /* window width [pixels] */ int height; /* window height [pixels] */ int fwidth; /* font width [pixels] */ @@ -822,6 +849,7 @@ int int_bwidth; /* internal border width */ int ext_bwidth; /* external border width */ int lineSpace; /* number of extra pixels between rows */ + int letterSpace; /* number of extra pixels between columns */ int saveLines; /* number of lines that fit in scrollback */ int total_rows; /* total number of rows in this terminal */ int term_start; /* term lines start here */ @@ -849,11 +877,12 @@ * beg: row/column of beginning of selection : never past mark * mark: row/column of initial click : never past end * end: row/column of one character past end of selection - * * Note: -nsaved <= beg.row <= mark.row <= end.row < nrow + * * Note: top_row <= beg.row <= mark.row <= end.row < nrow * * Note: col == -1 ==> we're left of screen * */ -typedef struct { +struct screen_t +{ row_col_t cur; /* cursor position on the screen */ int tscroll; /* top of settable scroll region */ int bscroll; /* bottom of settable scroll region */ @@ -863,9 +892,10 @@ unsigned int s_charset; /* saved character set number [0..3] */ char s_charset_char; rend_t s_rstyle; /* saved rendition style */ -} screen_t; +}; -enum selection_op_t { +enum selection_op_t +{ SELECTION_CLEAR = 0, /* nothing selected */ SELECTION_INIT, /* marked a point */ SELECTION_BEGIN, /* started a selection */ @@ -873,7 +903,8 @@ SELECTION_DONE /* selection put in CUT_BUFFER0 */ }; -typedef struct { +struct selection_t +{ wchar_t *text; /* selected text */ unsigned int len; /* length of selected text */ unsigned int screen; /* screen being used */ @@ -883,7 +914,7 @@ row_col_t beg; /* beginning of selection <= mark */ row_col_t mark; /* point of initial click <= end */ row_col_t end; /* one character past end point */ -} selection_t; +}; /* ------------------------------------------------------------------------- */ @@ -907,7 +938,8 @@ /* ------------------------------------------------------------------------- */ -struct rxvt_vars : TermWin_t { +struct rxvt_vars : TermWin_t +{ scrollBar_t scrollBar; uint8_t options[(Opt_count + 7) >> 3]; XSizeHints szHint; @@ -927,7 +959,8 @@ #endif }; -struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen { +struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen +{ // special markers with magic addresses static const char resval_undef []; // options specifically unset @@ -945,13 +978,16 @@ current_screen:1, /* primary or secondary */ num_scr_allow:1, bypass_keystate:1, -#ifdef CURSOR_BLINK +#if ENABLE_FRILLS + urgency_hint:1, +#endif +#if CURSOR_BLINK hidden_cursor:1, #endif -#ifdef TEXT_BLINK +#if TEXT_BLINK hidden_text:1, #endif -#ifdef POINTER_BLANK +#if POINTER_BLANK hidden_pointer:1, #endif enc_utf8:1, /* wether locale uses utf-8 */ @@ -1025,12 +1061,16 @@ #ifdef HAVE_AFTERIMAGE ASVisual *asv; ASImageManager *asimman; + + void init_asv () + { + if (!asv) + asv = create_asvisual_for_id (dpy, display->screen, depth, XVisualIDFromVisual (visual), cmap, NULL); + } #endif #if ENABLE_OVERLAY - int ov_x, ov_y, ov_w, ov_h; // overlay dimensions - text_t **ov_text; - rend_t **ov_rend; + overlay_base ov; void scr_swap_overlay () NOTHROW; void scr_overlay_new (int x, int y, int w, int h) NOTHROW; @@ -1191,12 +1231,17 @@ uint32_t next_octet () NOTHROW; uint32_t cmd_get8 () THROW ((class out_of_input)); - bool cmd_parse (); + void cmd_parse (); void mouse_report (XButtonEvent &ev); void button_press (XButtonEvent &ev); void button_release (XButtonEvent &ev); void focus_in (); void focus_out (); +#if ENABLE_FRILLS + void set_urgency (bool enable); +#else + void set_urgency (bool enable) { } +#endif void update_fade_color (unsigned int idx); #ifdef PRINTPIPE FILE *popen_printer (); @@ -1212,7 +1257,7 @@ void process_dcs_seq (); void process_osc_seq (); void process_color_seq (int report, int color, const char *str, char resp); - void process_xterm_seq (int op, const char *str, char resp); + void process_xterm_seq (int op, char *str, char resp); int privcases (int mode, unsigned long bit); void process_terminal_mode (int mode, int priv, unsigned int nargs, const int *arg); void process_sgr_mode (unsigned int nargs, const int *arg); @@ -1229,7 +1274,7 @@ int run_child (const char *const *argv); void color_aliases (int idx); void create_windows (int argc, const char *const *argv); - void Get_Colours (); + void get_colours (); void get_ourmods (); // main.C void tt_winch (); @@ -1344,6 +1389,7 @@ void paste (char *data, unsigned int len) NOTHROW; void scr_blank_line (line_t &l, unsigned int col, unsigned int width, rend_t efs) const NOTHROW; void scr_blank_screen_mem (line_t &l, rend_t efs) const NOTHROW; + void scr_kill_char (line_t &l, int col) const NOTHROW; int scr_scroll_text (int row1, int row2, int count) NOTHROW; void scr_reset (); void scr_release () NOTHROW; @@ -1365,6 +1411,7 @@ enum cursor_mode { SAVE, RESTORE }; void scr_poweron (); + void scr_soft_reset () NOTHROW; void scr_cursor (cursor_mode mode) NOTHROW; void scr_do_wrap () NOTHROW; void scr_swap_screen () NOTHROW;