--- rxvt-unicode/src/rxvt.h 2008/11/04 14:25:10 1.370 +++ rxvt-unicode/src/rxvt.h 2010/03/31 22:46:40 1.385 @@ -114,10 +114,6 @@ # define STDERR_FILENO 2 #endif -#if !defined (EACCESS) && defined(EAGAIN) -# define EACCESS EAGAIN -#endif - #ifndef EXIT_SUCCESS /* missing from */ # define EXIT_SUCCESS 0 /* exit function success */ # define EXIT_FAILURE 1 /* exit function failure */ @@ -153,7 +149,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 +202,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 */ @@ -323,8 +320,8 @@ #define RS_RVid 0x00020000UL // reverse video #define RS_Uline 0x00040000UL // underline -// toggle this to force redraw, must be != RS_Careful -#define RS_redraw 0x01000000UL +// toggle this to force redraw, must be != RS_Careful and otherwise "pretty neutral" +#define RS_redraw 0x02000000UL // 5 custom bits for extensions #define RS_customCount 32 @@ -332,7 +329,11 @@ #define RS_customShift 19 // other flags -#define RS_Careful 0x80000000UL /* be careful when drawing these */ +#define RS_Careful 0x10000000UL /* be careful when drawing these */ + +#define RS_fontCount rxvt_fontset::fontCount +#define RS_fontMask 0xf0000000UL // plenty(?) of fonts, includes RS_Careful +#define RS_fontShift 28 #define RS_styleCount 4 #define RS_styleMask (RS_Bold | RS_Italic) @@ -341,10 +342,6 @@ #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_fontMask 0xff000000UL // plenty(?) of fonts, includes RS_Careful -#define RS_fontShift 24 - #define DEFAULT_RSTYLE (RS_None | Color_fg | (Color_bg << Color_Bits)) #define OVERLAY_RSTYLE (RS_None | Color_Black | (Color_Yellow << Color_Bits)) @@ -412,6 +409,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, @@ -557,7 +555,8 @@ #if ENABLE_FRILLS # include -typedef struct _mwmhints { +typedef struct _mwmhints +{ CARD32 flags; CARD32 functions; CARD32 decorations; @@ -614,8 +613,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)) @@ -642,11 +644,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; @@ -658,7 +662,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 @@ -702,7 +707,8 @@ /****************************************************************************/ // primitive wrapper around mbstate_t to ensure initialisation -struct mbstate { +struct mbstate +{ mbstate_t mbs; operator mbstate_t *() { return &mbs; } @@ -733,14 +739,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); @@ -769,7 +777,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; @@ -810,7 +831,8 @@ * END······················= total_rows */ -struct TermWin_t { +struct TermWin_t +{ int width; /* window width [pixels] */ int height; /* window height [pixels] */ int fwidth; /* font width [pixels] */ @@ -823,6 +845,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 */ @@ -854,7 +877,8 @@ * * 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 */ @@ -864,9 +888,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 */ @@ -874,7 +899,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 */ @@ -884,7 +910,9 @@ 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; + wchar_t *clip_text; /* text copied to the clipboard */ + unsigned int clip_len; /* length of clipboard text */ +}; /* ------------------------------------------------------------------------- */ @@ -908,7 +936,8 @@ /* ------------------------------------------------------------------------- */ -struct rxvt_vars : TermWin_t { +struct rxvt_vars : TermWin_t +{ scrollBar_t scrollBar; uint8_t options[(Opt_count + 7) >> 3]; XSizeHints szHint; @@ -928,7 +957,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 @@ -946,21 +976,21 @@ current_screen:1, /* primary or secondary */ num_scr_allow:1, bypass_keystate:1, -#ifdef ENABLE_FRILLS +#if ENABLE_FRILLS urgency_hint:1, #endif -#ifdef CURSOR_BLINK +#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 */ - seen_input:1, /* wether we have seen some program output yet */ - seen_resize:1, /* wether we had a resize event */ + enc_utf8:1, /* whether locale uses utf-8 */ + seen_input:1, /* whether we have seen some program output yet */ + seen_resize:1, /* whether we had a resize event */ parsed_geometry:1; unsigned char refresh_type, @@ -974,7 +1004,7 @@ #ifndef NO_BELL bool rvideo_bell; #endif - int num_scr; /* screen: number lines scrolled */ + int num_scr; /* screen: number of lines scrolled */ int prev_ncol, /* screen: previous number of columns */ prev_nrow; /* screen: previous number of rows */ /* ---------- */ @@ -1014,7 +1044,8 @@ Atom *xa; /* ---------- */ Time selection_time, - selection_request_time; + selection_request_time, + clipboard_time; pid_t cmd_pid; /* process id of child */ char * incr_buf; size_t incr_buf_size, incr_buf_fill; @@ -1038,9 +1069,7 @@ #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; @@ -1207,7 +1236,11 @@ 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 (); @@ -1223,7 +1256,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); @@ -1377,6 +1410,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; @@ -1418,9 +1452,10 @@ void selection_property (Window win, Atom prop) NOTHROW; void selection_request (Time tm, int selnum = Sel_Primary) NOTHROW; int selection_request_other (Atom target, int selnum) NOTHROW; - void selection_clear () NOTHROW; + void selection_clear (bool clipboard = false) NOTHROW; + void clipboard_copy (Time tm); void selection_make (Time tm); - bool selection_grab (Time tm) NOTHROW; + bool selection_grab (Time tm, bool clipboard = false) NOTHROW; void selection_start_colrow (int col, int row) NOTHROW; void selection_delimit_word (enum page_dirn dirn, const row_col_t *mark, row_col_t *ret) NOTHROW; void selection_extend_colrow (int32_t col, int32_t row, int button3, int buttonpress, int clickchange) NOTHROW;