--- rxvt-unicode/src/rxvt.h 2010/01/18 10:04:05 1.379 +++ rxvt-unicode/src/rxvt.h 2010/05/23 00:02:52 1.406 @@ -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 */ @@ -253,7 +249,11 @@ # define COLORTERMENVFULL COLORTERMENV #endif #ifndef TERMENV -# define TERMENV "rxvt-unicode" +# if USE_256_COLORS +# define TERMENV "rxvt-unicode-256color" +# else +# define TERMENV "rxvt-unicode" +# endif #endif #if defined (NO_MOUSE_REPORT) && !defined (NO_MOUSE_REPORT_SCROLLBAR) @@ -310,44 +310,51 @@ SECONDARY, }; -#define RS_None 0 +// define various rendition bits and masks. the rendition word +// is 32 bits in size, and we should use it as efficiently as possible -#define RS_fgMask 0x0000007fUL // 128 colors -#define RS_bgMask 0x00003f80UL // 128 colors +#define RS_None 0 -// font styles -#define RS_Bold 0x00004000UL // value 1 -#define RS_Italic 0x00008000UL // value 2 +// GET_BGATTR depends on RS_fgShift > RS_bgShift +#define RS_colorMask ((1UL << Color_Bits) - 1UL) +#define RS_bgShift 0 +#define RS_fgShift (RS_bgShift + Color_Bits) +#define RS_bgMask (RS_colorMask << RS_bgShift) +#define RS_fgMask (RS_colorMask << RS_fgShift) + +// must have space for rxvt_fontset::fontCount * 2 + 2 values +#define RS_fontShift (RS_fgShift + Color_Bits) +#define RS_Careful (1UL << RS_fontShift) /* be careful when drawing these */ +#define RS_fontMask ((rxvt_fontset::fontCount << (RS_fontShift + 1)) | RS_Careful) // includes RS_Careful -// fake styles -#define RS_Blink 0x00010000UL // blink -#define RS_RVid 0x00020000UL // reverse video -#define RS_Uline 0x00040000UL // underline +// toggle this to force redraw, must be != RS_Careful and otherwise "pretty neutral" +#define RS_redraw (2UL << RS_fontShift) -// toggle this to force redraw, must be != RS_Careful -#define RS_redraw 0x01000000UL +#define RS_Sel (1UL << 22) // 5 custom bits for extensions -#define RS_customCount 32 -#define RS_customMask 0x00f80000UL -#define RS_customShift 19 +#define RS_customCount 16UL +#define RS_customShift 23 +#define RS_customMask ((RS_customCount - 1UL) << RS_customShift) -// other flags -#define RS_Careful 0x80000000UL /* be careful when drawing these */ +// font styles +#define RS_Bold (1UL << RS_styleShift) +#define RS_Italic (2UL << RS_styleShift) #define RS_styleCount 4 +#define RS_styleShift 27 #define RS_styleMask (RS_Bold | RS_Italic) -#define RS_styleShift 14 + +// fake styles +#define RS_Blink (1UL << 29) +#define RS_RVid (1UL << 30) // reverse video +#define RS_Uline (1UL << 31) // underline #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 128 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)) +#define DEFAULT_RSTYLE (RS_None | (Color_fg << RS_fgShift) | (Color_bg << RS_bgShift)) +#define OVERLAY_RSTYLE (RS_None | (Color_Black << RS_fgShift) | (Color_Yellow << RS_bgShift)) #define Sel_none 0 /* Not waiting */ #define Sel_normal 0x01 /* normal selection */ @@ -386,7 +393,8 @@ XTerm_Color_pointer_bg = 14, // change actual 'Pointer' bg color XTerm_Color05 = 15, // not implemented (tektronix fg) XTerm_Color06 = 16, // not implemented (tektronix bg) - XTerm_Color_RV = 17, // change actual 'Highlight' color + XTerm_Color_HC = 17, // change actual 'Highlight' bg color + XTerm_Color_HTC = 19, // change actual 'Highlight' fg color XTerm_logfile = 46, // not implemented XTerm_font = 50, @@ -398,8 +406,6 @@ */ // deprecated - Rxvt_Color_BD = 18, - Rxvt_Color_UL = 19, Rxvt_restoreFG = 39, Rxvt_restoreBG = 49, @@ -463,7 +469,11 @@ Color_White = maxCOLOR, #endif minTermCOLOR = Color_White + 1, +#if USE_256_COLORS + maxTermCOLOR = Color_White + 240, +#else maxTermCOLOR = Color_White + 72, +#endif #ifndef NO_CURSORCOLOR Color_cursor, Color_cursor2, @@ -482,6 +492,7 @@ #endif #ifdef OPTION_HC Color_HC, + Color_HTC, #endif Color_scroll, #ifdef RXVT_SCROLLBAR @@ -503,7 +514,11 @@ #endif }; -#define Color_Bits 7 // 0 .. maxTermCOLOR +#if USE_256_COLORS +# define Color_Bits 9 // 0 .. maxTermCOLOR +#else +# define Color_Bits 7 // 0 .. maxTermCOLOR +#endif /* * Resource list @@ -624,8 +639,8 @@ #define ROW(n) ROW_of (this, n) /* how to build & extract colors and attributes */ -#define GET_BASEFG(x) (((x) & RS_fgMask)) -#define GET_BASEBG(x) (((x) & RS_bgMask)>>Color_Bits) +#define GET_BASEFG(x) (((x) & RS_fgMask) >> RS_fgShift) +#define GET_BASEBG(x) (((x) & RS_bgMask) >> RS_bgShift) #define GET_FONT(x) (((x) & RS_fontMask) >> RS_fontShift) #define SET_FONT(x,fid) (((x) & ~RS_fontMask) | ((fid) << RS_fontShift)) @@ -634,12 +649,15 @@ #define SET_STYLE(x,style) (((x) & ~RS_styleMask) | ((style) << RS_styleShift)) #define GET_ATTR(x) (((x) & RS_attrMask)) -#define GET_BGATTR(x) \ - (((x) & RS_RVid) ? (((x) & (RS_attrMask & ~RS_RVid)) \ - | (((x) & RS_fgMask)< RS_bgShift +#define GET_BGATTR(x) \ + (expect_false ((x) & RS_RVid) \ + ? (((x) & (RS_attrMask & ~RS_RVid)) \ + | (((x) & RS_fgMask) >> (RS_fgShift - RS_bgShift))) \ + : ((x) & (RS_attrMask | RS_bgMask))) +#define SET_FGCOLOR(x,fg) (((x) & ~RS_fgMask) | ((fg) << RS_fgShift)) +#define SET_BGCOLOR(x,bg) (((x) & ~RS_bgMask) | ((bg) << RS_bgShift)) #define SET_ATTR(x,a) (((x) & ~RS_attrMask) | (a)) #define RS_SAME(a,b) (!(((a) ^ (b)) & ~RS_Careful)) @@ -914,6 +932,8 @@ 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 */ + wchar_t *clip_text; /* text copied to the clipboard */ + unsigned int clip_len; /* length of clipboard text */ }; /* ------------------------------------------------------------------------- */ @@ -945,7 +965,6 @@ XSizeHints szHint; rxvt_color *pix_colors; Cursor TermWin_cursor; /* cursor for vt window */ - int numlock_state; line_t *row_buf; // all lines, scrollback + terminal, circular, followed by temp_buf line_t *drawn_buf; // text on screen line_t *swap_buf; // lines for swap buffer @@ -990,9 +1009,9 @@ #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, @@ -1046,7 +1065,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; @@ -1453,9 +1473,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;