--- rxvt-unicode/src/rxvt.h 2006/01/23 10:26:22 1.238 +++ rxvt-unicode/src/rxvt.h 2006/02/02 18:04:46 1.254 @@ -17,6 +17,7 @@ #if ENABLE_FRILLS # define ENABLE_XEMBED 1 # define ENABLE_EWMH 1 +# define ENABLE_XIM_ONTHESPOT 1 # define CURSOR_BLINK 1 #else # define ENABLE_MINIMAL 1 @@ -33,6 +34,7 @@ #endif #include "encoding.h" +#include "rxvtutil.h" #include "rxvtfont.h" #include "rxvttoolkit.h" #include "iom.h" @@ -99,27 +101,6 @@ /****************************************************************************/ -#ifndef __attribute__ -# if __GNUC__ -# if (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || (__GNUC__ < 2) -# define __attribute__(x) -# endif -# endif -# define __attribute__(x) -#endif - -#define NORETURN __attribute__ ((noreturn)) -#define UNUSED __attribute__ ((unused)) - -// increases code size unless -fno-enforce-eh-specs -#if __GNUC__ -# define NOTHROW -# define THROW(x) -#else -# define NOTHROW throw() -# define THROW(x) throw x -#endif - // exception thrown on fatal (per-instance) errors class rxvt_failure_exception { }; @@ -433,6 +414,9 @@ #define RS_RVid 0x00020000UL // reverse video #define RS_Uline 0x00040000UL // underline +// toggle this to force redraw, must be != RS_Careful +#define RS_redraw 0x01000000UL + // 5 custom bits for extensions #define RS_customCount 32 #define RS_customMask 0x00f80000UL @@ -511,6 +495,7 @@ Rxvt_dumpscreen = 55, // dump scrollback and all of screen URxvt_locale = 701, // change locale + URxvt_version = 702, // request version URxvt_Color_IT = 704, // change actual 'Italic' colour URxvt_Color_tint = 705, // change actual tint colour @@ -605,9 +590,6 @@ #define Color_Bits 7 // 0 .. maxTermCOLOR -#define NPIXCLR_SETS ((TOTAL_COLORS + 31) / 32) -#define NPIXCLR_BITS 32 - /* * Resource list */ @@ -620,42 +602,6 @@ NUM_RESOURCES }; -// see init.C:xa_names, which must be kept in sync -enum { - XA_TEXT = 0, - XA_COMPOUND_TEXT, - XA_UTF8_STRING, - XA_MULTIPLE, - XA_TARGETS, - XA_TIMESTAMP, - XA_VT_SELECTION, - XA_INCR, - XA_WM_PROTOCOLS, - XA_WM_DELETE_WINDOW, - XA_CLIPBOARD, -#if ENABLE_FRILLS - XA_MOTIF_WM_HINTS, -#endif -#if ENABLE_EWMH - XA_NET_WM_PID, - XA_NET_WM_NAME, - XA_NET_WM_ICON_NAME, - XA_NET_WM_PING, -#endif -#if USE_XIM - XA_WM_LOCALE_NAME, -#endif -#if TRANSPARENT - XA_XROOTPMAP_ID, - XA_ESETROOT_PMAP_ID, -#endif -#if ENABLE_XEMBED - XA_XEMBED, - XA_XEMBED_INFO, -#endif - NUM_XA -}; - /* DEC private modes */ #define PrivMode_132 (1UL<<0) #define PrivMode_132OK (1UL<<1) @@ -736,7 +682,11 @@ ***************************************************************************** */ #define dLocal(type,name) type const name = this->name -#define dDisp Display *disp = this->display->display + +// for speed reasons, we assume that all latin1 characters +// are single-width (the first unicode combining character +// is actually 0x300, but ascii is what matters most). +#define WCWIDTH(c) ((c) & ~0xff ? wcwidth (c) : 1) /* convert pixel dimensions to row/column values. Everything as int32_t */ #define Pixel2Col(x) Pixel2Width((int32_t)(x)) @@ -780,8 +730,8 @@ #define RS_SAME(a,b) (!(((a) ^ (b)) & ~RS_Careful)) -#define SET_PIXCOLOR(x) (pixcolor_set[(x) / NPIXCLR_BITS] |= (1 << ((x) % NPIXCLR_BITS))) -#define ISSET_PIXCOLOR(x) (pixcolor_set[(x) / NPIXCLR_BITS] & (1 << ((x) % NPIXCLR_BITS))) +#define PIXCOLOR_NAME(idx) rs[Rs_color + (idx)] +#define ISSET_PIXCOLOR(idx) (!!rs[Rs_color + (idx)]) #if ENABLE_STYLES # define FONTSET(style) fontset[GET_STYLE (style)] @@ -825,27 +775,6 @@ # define XPMClearArea(a, b, c, d, e, f, g) #endif -#ifdef DEBUG_CMD -# define D_CMD(x) fprintf x ; fputc('\n', stderr) -#else -# define D_CMD(x) -#endif -#ifdef DEBUG_INIT -# define D_INIT(x) fprintf x ; fputc('\n', stderr) -#else -# define D_INIT(x) -#endif -#ifdef DEBUG_MAIN -# define D_MAIN(x) fprintf x ; fputc('\n', stderr) -#else -# define D_MAIN(x) -#endif -#ifdef DEBUG_SIZE -# define D_SIZE(x) fprintf x ; fputc('\n', stderr) -#else -# define D_SIZE(x) -#endif - typedef callback1 log_callback; typedef callback1 getfd_callback; @@ -922,7 +851,7 @@ # define IS_COMPOSE(n) ((int32_t)(n) >= COMPOSE_LO) #else # if ENABLE_PERL -# define COMPOSE_LO 0xe000UL // our _own_ routiens don't like (illegal) surrogates +# define COMPOSE_LO 0xe000UL // our _own_ functions don't like (illegal) surrogates # define COMPOSE_HI 0xf8ffUL // in utf-8, so use private use area only # else # define COMPOSE_LO 0xd800UL @@ -961,11 +890,17 @@ /****************************************************************************/ #ifdef KEYSYM_RESOURCE - class keyboard_manager; +class keyboard_manager; #endif -struct rxvt_term : zero_initialized, rxvt_vars { - log_callback *log_hook; // log error messages through this hook, if != 0 +struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen { + + // special markers with magic addresses + static const char resval_undef []; // options specifically unset + static const char resval_on []; // boolean options switched on + static const char resval_off []; // or off + + log_callback *log_hook; // log error messages through this hook, if != 0 getfd_callback *getfd_hook; // convert remote to local fd, if != 0 #if ENABLE_PERL rxvt_perl_term perl; @@ -1015,8 +950,6 @@ /* ---------- */ rend_t rstyle; /* ---------- */ - uint32_t pixcolor_set[NPIXCLR_SETS]; -/* ---------- */ #ifdef SELECTION_SCROLLING int scroll_selection_lines; enum page_dirn scroll_selection_dir; @@ -1052,7 +985,7 @@ unsigned long priv_modes, SavedModes; /* ---------- */ - Atom xa[NUM_XA]; + Atom *xa; /* ---------- */ #ifdef RXVT_SCROLLBAR GC scrollbarGC, @@ -1119,15 +1052,16 @@ vector allocated; // free these memory blocks with free() - char *env_windowid; /* environmental variable WINDOWID */ + char env_windowid[21]; /* environmental variable WINDOWID */ + char env_colorfgbg[sizeof ("COLORFGBG=default;default;bg") + 1]; char *env_display; /* environmental variable DISPLAY */ char *env_term; /* environmental variable TERM */ - char *env_colorfgbg; + char *locale; char charsets[4]; char *v_buffer; /* pointer to physical buffer */ unsigned int v_buflen; /* size of area to write */ - stringvec *argv, *envv; /* if != 0, will be freed on destroy time */ + stringvec *argv, *envv; /* if != 0, will be freed at destroy time */ #ifdef KEYSYM_RESOURCE keyboard_manager *keyboard; @@ -1159,11 +1093,11 @@ // modifies first argument(!) void paste (char *data, unsigned int len) NOTHROW; - long vt_emask, vt_emask_perl; + long vt_emask, vt_emask_perl, vt_emask_xim; void vt_select_input () const NOTHROW { - XSelectInput (display->display, vt, vt_emask | vt_emask_perl); + XSelectInput (dpy, vt, vt_emask | vt_emask_perl | vt_emask_xim); } #if TRANSPARENT @@ -1325,7 +1259,8 @@ void set_icon_name (const char *str); void set_window_color (int idx, const char *color); void set_colorfgbg (); - int rXParseAllocColor (rxvt_color * screen_in_out, const char *colour); + bool set_color (rxvt_color &color, const char *name); + void alias_color (int dst, int src); void set_widthheight (unsigned int newwidth, unsigned int newheight); // screen.C