--- rxvt-unicode/src/rxvt.h 2004/03/03 04:07:52 1.45 +++ rxvt-unicode/src/rxvt.h 2004/03/22 15:15:04 1.60 @@ -10,13 +10,12 @@ #include #include +#include "encoding.h" #include "defaultfont.h" #include "rxvtcolor.h" #include "iom.h" #include "salloc.h" -#include - /* ***************************************************************************** * SYSTEM HACKS @@ -32,7 +31,6 @@ # define __sun__ #endif - #ifndef HAVE_XPOINTER typedef char *XPointer; #endif @@ -139,10 +137,6 @@ ***************************************************************************** */ -#if defined (NO_OLD_SELECTION) && defined(NO_NEW_SELECTION) -# error if you disable both selection styles, how can you select, silly? -#endif - /* COLORTERM, TERM environment variables */ #define COLORTERMENV "rxvt" #ifdef XPM_BACKGROUND @@ -360,33 +354,34 @@ XTerm_name = 0, XTerm_iconName = 1, XTerm_title = 2, - XTerm_property = 3, /* change X property, not yet implemented */ - XTerm_Color = 4, /* change colors */ - XTerm_Color00 = 10, /* not implemented, CLASH! */ - XTerm_Color01 = 11, /* not implemented */ - XTerm_Color_cursor = 12, /* change actual 'Cursor' color */ - XTerm_Color_pointer = 13, /* change actual 'Pointer' color */ - XTerm_Color04 = 14, /* not implemented */ - XTerm_Color05 = 15, /* not implemented */ - XTerm_Color06 = 16, /* not implemented */ - XTerm_Color_RV = 17, /* change actual 'Highlight' color */ - XTerm_logfile = 46, /* not implemented */ + XTerm_property = 3, // change X property, not yet implemented + XTerm_Color = 4, // change colors + XTerm_Color00 = 10, // not implemented, CLASH! + XTerm_Color01 = 11, // not implemented + XTerm_Color_cursor = 12, // change actual 'Cursor' color + XTerm_Color_pointer = 13, // change actual 'Pointer' color + XTerm_Color04 = 14, // not implemented + XTerm_Color05 = 15, // not implemented + XTerm_Color06 = 16, // not implemented + XTerm_Color_RV = 17, // change actual 'Highlight' color + XTerm_logfile = 46, // not implemented XTerm_font = 50, - XTerm_konsole30 = 30, /* reserved for konsole */ - XTerm_konsole31 = 31, /* reserved for konsole */ - XTerm_emacs51 = 51, /* reserved for emacs shell */ + XTerm_konsole30 = 30, // reserved for konsole + XTerm_konsole31 = 31, // reserved for konsole + XTerm_emacs51 = 51, // reserved for emacs shell /* * rxvt extensions of XTerm OSCs: ESC ] Ps;Pt (ST|BEL) */ - XTerm_locale = 9, /* change locale */ - XTerm_Menu = 10, /* set menu item */ - XTerm_Color_BD = 18, /* change actual 'Bold' color */ - XTerm_Color_UL = 19, /* change actual 'Underline' color */ - XTerm_Pixmap = 20, /* new bg pixmap */ - XTerm_restoreFG = 39, /* change default fg color */ - XTerm_restoreBG = 49, /* change default bg color */ - XTerm_dumpscreen = 55, /* dump scrollback and all of screen */ + XTerm_Menu = 10, // set menu item + XTerm_Color_BD = 18, // change actual 'Bold' color + XTerm_Color_UL = 19, // change actual 'Underline' color + XTerm_Pixmap = 20, // new bg pixmap + XTerm_restoreFG = 39, // change default fg color + XTerm_restoreBG = 49, // change default bg color + XTerm_dumpscreen = 55, // dump scrollback and all of screen + XTerm_locale = 701, // change locale + XTerm_findfont = 702, // find font of given character (in decimal) }; /* Words starting with `Color_' are colours. Others are counts */ @@ -524,10 +519,6 @@ Rs_preeditType, Rs_inputMethod, #endif -#if defined (HOTKEY_CTRL) || defined (HOTKEY_META) - Rs_bigfont_key, - Rs_smallfont_key, -#endif #ifdef TRANSPARENT Rs_transparent, Rs_transparent_all, @@ -541,9 +532,6 @@ Rs_lineSpace, #endif Rs_cutchars, -#ifdef ACS_ASCII - Rs_acs_chars, -#endif Rs_modifier, Rs_answerbackstring, Rs_tripleclickwords, @@ -598,32 +586,29 @@ #define PrivMode_smoothScroll (1LU<<18) #define PrivMode_vt52 (1LU<<19) /* too annoying to implement X11 highlight tracking */ -/* #define PrivMode_MouseX11Track (1LU<<18) */ +/* #define PrivMode_MouseX11Track (1LU<<20) */ #define PrivMode_mouse_report (PrivMode_MouseX10|PrivMode_MouseX11) #define PrivMode(test,bit) \ if (test) \ PrivateModes |= (bit); \ else \ - PrivateModes &= ~ (bit) + PrivateModes &= ~(bit) #ifdef ALLOW_132_MODE -# define PrivMode_Default \ -(PrivMode_Autowrap|PrivMode_aplKP|PrivMode_ShiftKeys|PrivMode_VisibleCursor|PrivMode_132OK) +# define PrivMode_Default (PrivMode_Autowrap|PrivMode_aplKP|PrivMode_ShiftKeys|PrivMode_VisibleCursor|PrivMode_132OK) #else -# define PrivMode_Default \ -(PrivMode_Autowrap|PrivMode_aplKP|PrivMode_ShiftKeys|PrivMode_VisibleCursor) +# define PrivMode_Default (PrivMode_Autowrap|PrivMode_aplKP|PrivMode_ShiftKeys|PrivMode_VisibleCursor) #endif #define XDEPTH display->depth #define XCMAP display->cmap #define XVISUAL display->visual -#define IMBUFSIZ 128 /* input modifier buffer sizes */ -#ifndef BUFSIZ -# define BUFSIZ 4096 -#endif -#define KBUFSZ 512 /* size of keyboard mapping buffer */ +#define IMBUFSIZ 128 // input modifier buffer sizes +#define KBUFSZ 512 // size of keyboard mapping buffer +#define CBUFSIZ 4096 // size of command buffer +#define UBUFSIZ 4096 // character buffer /* ***************************************************************************** @@ -803,6 +788,19 @@ # define D_X(x) #endif +extern class rxvt_failure_exception { } rxvt_failure_exception; + +typedef callback1 log_callback; + +extern void rxvt_vlog (const char *fmt, va_list arg_ptr); +extern void rxvt_log (const char *fmt, ...); +extern void rxvt_warn (const char *fmt, ...); +extern void rxvt_fatal (const char *fmt, ...) __attribute__ ((noreturn)); +extern void rxvt_exit_failure () __attribute__ ((noreturn)); + +#define SET_LOCALE(locale) rxvt_set_locale (locale) +extern void rxvt_set_locale (const char *locale); + /* ***************************************************************************** * VARIABLES @@ -833,8 +831,48 @@ mbstate () { reset (); } }; +#if UNICODE3 +# define COMPOSE_LO 0x40000000UL +# 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) +#endif + +#if ENABLE_COMBINING +// 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 { + 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 { + vector v; +public: + text_t compose (unicode_t c1, unicode_t c2 = NOCHAR); + int expand (unicode_t c, wchar_t *r); + compose_char *operator [](text_t c) + { + return c >= COMPOSE_LO && c < COMPOSE_LO + v.size () + ? &v[c - COMPOSE_LO] + : 0; + } +}; + +extern class rxvt_composite_vec rxvt_composite; +#endif + + struct rxvt_term : rxvt_vars { - struct mbstate mbstate; + log_callback *log_hook; + + struct mbstate mbstate; unsigned char want_refresh:1, #ifdef TRANSPARENT @@ -858,8 +896,8 @@ hidden_pointer:1, #endif parsed_geometry:1, - seen_input:1, /* wether any input has been seen so far */ - enc_utf8:1; /* wether terminal reads/writes utf-8 */ +// enc_utf8:1, /* wether terminal reads/writes utf-8 */ + seen_input:1; /* wether any input has been seen so far */ unsigned char refresh_type, #ifdef UTMP_SUPPORT @@ -987,9 +1025,6 @@ #ifndef NO_DELETE_KEY const char *key_delete; #endif -#if defined (HOTKEY_CTRL) || defined (HOTKEY_META) - KeySym ks_bigfont, ks_smallfont; -#endif #ifdef USE_XIM rxvt_xim *input_method; XIC Input_Context; @@ -1034,25 +1069,27 @@ struct timeval lastmotion; #endif -/* these three don't need to be kept but do so to placate some mem checkers */ + vector allocated; // free these memory blocks + char *env_windowid; /* environmental variable WINDOWID */ char *env_display; /* environmental variable DISPLAY */ char *env_term; /* environmental variable TERM */ char *env_colorfgbg; char *locale; +#if 0 char *codeset; +#endif char charsets[4]; unsigned char *v_buffer; /* pointer to physical buffer */ unsigned int v_buflen; /* size of area to write */ - char *newfont[MAX_NFONTS]; stringvec *argv, *envv; /* if != 0, will be freed on destroy time */ #ifdef KEYSYM_RESOURCE const unsigned char *Keysym_map[256]; #endif const char *rs[NUM_RESOURCES]; -/* command input buffering */ + /* command input buffering */ unsigned char *cmdbuf_ptr, *cmdbuf_endp; - unsigned char cmdbuf_base[BUFSIZ]; + unsigned char cmdbuf_base[CBUFSIZ]; rxvt_salloc *ralloc; rxvt_salloc *talloc; @@ -1106,7 +1143,7 @@ bool init (int argc, const char *const *argv); bool init_vars (); - uint32_t next_char (); + unicode_t next_char (); bool pty_fill (); @@ -1171,7 +1208,7 @@ // command.C void lookup_key (XKeyEvent &ev); unsigned int cmd_write (const unsigned char *str, unsigned int count); - uint32_t cmd_getc (); + unicode_t cmd_getc (); bool cmd_parse (); void mouse_report (XButtonEvent &ev); void button_press (XButtonEvent &ev); @@ -1182,12 +1219,12 @@ int pclose_printer (FILE *stream); #endif void process_print_pipe (); - void process_nonprinting (unsigned char ch); - void process_escape_vt52 (unsigned char ch); + void process_nonprinting (unicode_t ch); + void process_escape_vt52 (unicode_t ch); void process_escape_seq (); void process_csi_seq (); void process_window_ops (const int *args, unsigned int nargs); - unsigned char * get_to_st (unsigned char *ends_how); + unsigned char *get_to_st (unicode_t &ends_how); void process_dcs_seq (); void process_osc_seq (); void xterm_seq (int op, const char *str, unsigned char resp __attribute__ ((unused))); @@ -1208,7 +1245,7 @@ bool change_font (const char *fontname); bool font_up_down (int n, int direction); void set_title (const char *str); - void set_iconName (const char *str); + 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); @@ -1253,7 +1290,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 uint32_t *str, int nlines, int len); + void scr_add_lines (const unicode_t *str, int nlines, int len); void scr_backspace (); void scr_tab (int count); void scr_backindex (); @@ -1335,9 +1372,6 @@ Pixmap set_bgPixmap (const char *file); }; -#define SET_LOCALE(locale) rxvt_set_locale (locale) -extern void rxvt_set_locale (const char *locale); - /* ***************************************************************************** * PROTOTYPES