--- rxvt-unicode/src/rxvt.h 2006/01/02 18:20:23 1.182 +++ rxvt-unicode/src/rxvt.h 2006/01/11 00:59:58 1.195 @@ -21,6 +21,8 @@ #include "iom.h" #include "salloc.h" +#include "rxvtperl.h" + #if ENABLE_FRILLS # define ENABLE_XEMBED 1 # define ENABLE_EWMH 1 @@ -211,10 +213,6 @@ # define NO_MOUSE_REPORT_SCROLLBAR 1 #endif -#ifdef NO_RESOURCES -# undef USE_XGETDEFAULT -#endif - #if defined (ISO_14755) || defined (ENABLE_PERL) # define ENABLE_OVERLAY 1 #endif @@ -240,9 +238,9 @@ /* width of scrollBar, menuBar shadow, must be 1 or 2 */ #ifdef HALFSHADOW -# define SHADOW 1 +# define MENU_SHADOW 1 #else -# define SHADOW 2 +# define MENU_SHADOW 2 #endif #define R_SB_ALIGN_CENTRE 0 @@ -471,6 +469,8 @@ URxvt_view_up = 720, URxvt_view_down = 721, + + URxvt_perl = 777, }; /* Words starting with `Color_' are colours. Others are counts */ @@ -557,11 +557,11 @@ * Resource list */ enum { -#define Rs_def(name) Rs_ ## name, -#define Rs_reserve(name,count) Rs_ ## name ## _ = Rs_ ## name + (count) - 1, -#include "rsinc.h" -#undef Rs_def -#undef Rs_reserve +# define def(name) Rs_ ## name, +# define reserve(name,count) Rs_ ## name ## _ = Rs_ ## name + (count) - 1, +# include "rsinc.h" +# undef def +# undef reserve NUM_RESOURCES }; @@ -685,22 +685,6 @@ * MACRO DEFINES ***************************************************************************** */ -#define memset(x, y, z) memset((x), (y), (size_t)(z)) -#define memcpy(x, y, z) memcpy((void *)(x), (const void *)(y), (z)) -#define memmove(x, y, z) memmove((void *)(x), (const void *)(y), (z)) -#define strcasecmp(x, y) strcasecmp((x), (y)) -#define strncasecmp(x, y, z) strncasecmp((x), (y), (z)) -#define strcpy(x, y) strcpy((char *)(x), (const char *)(y)) -#define strncpy(x, y, z) strncpy((char *)(x), (const char *)(y), (z)) -#define strcmp(x, y) strcmp((const char *)(x), (const char *)(y)) -#define strncmp(x, y, z) strncmp((const char *)(x), (const char *)(y), (z)) -#define strcat(x, y) strcat((char *)(x), (const char *)(y)) -#define strncat(x, y, z) strncat((char *)(x), (const char *)(y), (z)) -#define strdup(x) strdup((const char *)(x)) -#define strlen(x) strlen((const char *)(x)) -#define strchr(x, y) strchr((const char *)(x), (int)(y)) -#define strrchr(x, y) strrchr((const char *)(x), (int)(y)) - #define dDisp Display *disp = display->display /* convert pixel dimensions to row/column values. Everything as int32_t */ @@ -713,8 +697,12 @@ #define Width2Pixel(n) ((int32_t)(n) * (int32_t)fwidth) #define Height2Pixel(n) ((int32_t)(n) * (int32_t)fheight) -#define TermWin_TotalWidth() ((int32_t)this->width) -#define TermWin_TotalHeight() ((int32_t)this->height) +#define TEMP_ENV temp_environ temp_environ (envv) + +#define OPTION(opt) (options & (opt)) +#define DEFAULT_OPTIONS (Opt_scrollBar | Opt_scrollTtyOutput \ + | Opt_jumpScroll | Opt_secondaryScreen \ + | Opt_pastableTabs | Opt_intensityStyles) // for m >= -n, ensure remainder lies between 0..n-1 #define MOD(m,n) (((m) + (n)) % (n)) @@ -784,8 +772,8 @@ #if (MENUBAR_MAX > 1) /* rendition style flags */ -# define menuBar_height() (fheight + SHADOW) -# define menuBar_TotalHeight() (menuBar_height() + SHADOW + menuBar_margin) +# define menuBar_height() (fheight + MENU_SHADOW) +# define menuBar_TotalHeight() (menuBar_height() + MENU_SHADOW + menuBar_margin) # define isMenuBarWindow(w) ((w) == menuBar.win) #else # define menuBar_height() (0) @@ -851,14 +839,11 @@ #define SET_LOCALE(locale) rxvt_set_locale (locale) extern bool rxvt_set_locale (const char *locale); -extern bool rxvt_push_locale (const char *locale); +extern void rxvt_push_locale (const char *locale); extern void rxvt_pop_locale (); -/* - ***************************************************************************** - * VARIABLES - ***************************************************************************** - */ +/****************************************************************************/ + #ifdef MENUBAR # include "menubar.h" #endif @@ -875,6 +860,55 @@ # define __attribute__(x) #endif +/****************************************************************************/ + +#define LINE_LONGER 0x0001 // line is continued on the next row +#define LINE_FILTERED 0x0002 // line has been filtered +#define LINE_COMPRESSED 0x0004 // line has been compressed (NYI) + +struct line_t { + text_t *t; // terminal the text + rend_t *r; // rendition, uses RS_ flags + tlen_t_ l; // length of each text line, LINE_CONT == continued on next line + uint32_t f; // flags + + bool is_longer () + { + return f & LINE_LONGER; + } + + void is_longer (int set) + { + if (set) + f |= LINE_LONGER; + else + f &= ~LINE_LONGER; + } + + void clear () + { + t = 0; + r = 0; + l = 0; + f = 0; + } + + void touch () // call whenever a line is changed/touched/updated + { +#if ENABLE_PERL + f &= ~LINE_FILTERED; +#endif + } + + void touch (int col) + { + max_it (l, col); + touch (); + } +}; + +/****************************************************************************/ + // primivite wrapper around mbstate_t to ensure initialisation struct mbstate { mbstate_t mbs; @@ -884,6 +918,8 @@ mbstate () { reset (); } }; +/****************************************************************************/ + #define UNICODE_MASK 0x1fffffUL #if UNICODE3 @@ -891,9 +927,14 @@ # define COMPOSE_HI 0x400fffffUL # define IS_COMPOSE(n) ((int32_t)(n) >= COMPOSE_LO) #else -# define COMPOSE_LO 0xd800UL -# define COMPOSE_HI 0xf8ffUL // dfff should be safer, but... -# define IS_COMPOSE(n) (COMPOSE_LO <= (n) && (n) <= COMPOSE_HI) +# if ENABLE_PERL +# define COMPOSE_LO 0xe000UL // our _own_ routiens don't like (illegal) surrogates +# define COMPOSE_HI 0xf8ffUL // in utf-8, so use private use area only +# else +# define COMPOSE_LO 0xd800UL +# define COMPOSE_HI 0xf8ffUL +# endif +# define IS_COMPOSE(n) IN_RANGE_INC ((n), COMPOSE_LO, COMPOSE_HI) #endif #if ENABLE_COMBINING @@ -923,19 +964,18 @@ extern class rxvt_composite_vec rxvt_composite; #endif +/****************************************************************************/ #ifdef KEYSYM_RESOURCE class keyboard_manager; #endif struct rxvt_term : zero_initialized, rxvt_vars { - log_callback *log_hook; // log error messages through this hook, if != 0 + 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 - void *self; // perl's $self + rxvt_perl_term perl; #endif - struct mbstate mbstate; // current input multibyte state unsigned char want_refresh:1, @@ -1095,12 +1135,6 @@ bar_t BarList; # endif /* (MENUBAR_MAX > 1) */ #endif -#ifdef CURSOR_BLINK - struct timeval lastcursorchange; -#endif -#ifdef POINTER_BLANK - struct timeval lastmotion; -#endif #if ENABLE_OVERLAY int ov_x, ov_y, ov_w, ov_h; // overlay dimensions @@ -1125,7 +1159,7 @@ char *env_colorfgbg; char *locale; char charsets[4]; - unsigned char *v_buffer; /* pointer to physical buffer */ + 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 */ @@ -1135,8 +1169,8 @@ const char *rs[NUM_RESOURCES]; /* command input buffering */ - unsigned char *cmdbuf_ptr, *cmdbuf_endp; - unsigned char cmdbuf_base[CBUFSIZ]; + char *cmdbuf_ptr, *cmdbuf_endp; + char cmdbuf_base[CBUFSIZ]; rxvt_salloc *talloc; // text line allocator rxvt_salloc *ralloc; // rend line allocator @@ -1155,7 +1189,7 @@ #endif // modifies first argument(!) - void paste (unsigned char *data, unsigned int len); + void paste (char *data, unsigned int len); void flush (); @@ -1206,7 +1240,7 @@ void pointer_unblank (); void tt_printf (const char *fmt,...); - void tt_write (const unsigned char *data, unsigned int len); + void tt_write (const char *data, unsigned int len); void pty_write (); void tt_winch (); @@ -1268,12 +1302,12 @@ // command.C void lookup_key (XKeyEvent &ev); - unsigned int cmd_write (const unsigned char *str, unsigned int count); + unsigned int cmd_write (const char *str, unsigned int count); - unicode_t next_char (); - unicode_t cmd_getc (); - unicode_t next_octet (); - unicode_t cmd_get8 (); + wchar_t next_char (); + wchar_t cmd_getc (); + uint32_t next_octet (); + uint32_t cmd_get8 (); bool cmd_parse (); void mouse_report (XButtonEvent &ev); @@ -1292,11 +1326,11 @@ void process_escape_seq (); void process_csi_seq (); void process_window_ops (const int *args, unsigned int nargs); - unsigned char *get_to_st (unicode_t &ends_how); + char *get_to_st (unicode_t &ends_how); void process_dcs_seq (); void process_osc_seq (); - void process_color_seq (int report, int color, const char *str, unsigned char resp); - void process_xterm_seq (int op, const char *str, unsigned char resp); + void process_color_seq (int report, int color, const char *str, char resp); + void process_xterm_seq (int op, const 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); @@ -1410,6 +1444,19 @@ return base; } + bool option (uint32_t opt) + { + return OPTION (opt); + } + + void set_option (uint32_t opt, bool set) + { + if (set) + options |= opt; + else + options &= ~opt; + } + void scr_blank_line (line_t &l, unsigned int col, unsigned int width, rend_t efs); void scr_blank_screen_mem (line_t &l, rend_t efs); int scr_scroll_text (int row1, int row2, int count); @@ -1429,7 +1476,7 @@ rxvt_fontset *scr_find_fontset (rend_t r = DEFAULT_RSTYLE); void scr_recolour (); void scr_remap_chars (); - void scr_remap_chars (const line_t &l); + void scr_remap_chars (line_t &l); void scr_poweron (); void scr_cursor (int mode); @@ -1437,7 +1484,7 @@ int scr_change_screen (int scrn); void scr_color (unsigned int color, int fgbg); void scr_rendition (int set, int style); - void scr_add_lines (const unicode_t *str, int nlines, int len); + void scr_add_lines (const wchar_t *str, int len, int minlines = 0); void scr_backspace (); void scr_tab (int count, bool ht = false); void scr_gotorc (int row, int col, int relative); @@ -1462,6 +1509,8 @@ int scr_changeview (unsigned int oldviewstart); void scr_bell (); void scr_printscreen (int fullhist); + void scr_xor_rect (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle1, rend_t rstyle2); + void scr_xor_span (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle); void scr_reverse_selection (); void scr_dump (int fd); void selection_check (int check_more);