--- rxvt-unicode/src/rxvt.h 2004/07/30 22:36:42 1.83 +++ rxvt-unicode/src/rxvt.h 2004/12/13 19:16:36 1.131 @@ -11,10 +11,13 @@ #include #include #include +#if ENABLE_FRILLS +#include +#endif #include "encoding.h" -#include "defaultfont.h" -#include "rxvtcolor.h" +#include "rxvtfont.h" +#include "rxvttoolkit.h" #include "iom.h" #include "salloc.h" @@ -27,10 +30,10 @@ * @ Unixware: defines (__svr4__) */ #if defined (SVR4) && !defined (__svr4__) -# define __svr4__ +# define __svr4__ 1 #endif #if defined (sun) && !defined (__sun__) -# define __sun__ +# define __sun__ 1 #endif #ifndef HAVE_XPOINTER @@ -67,15 +70,49 @@ #if defined(HAVE_GRANTPT) && defined(HAVE_UNLOCKPT) # if defined(PTYS_ARE_GETPT) || defined(PTYS_ARE_PTMX) -# define NO_SETOWNER_TTYDEV +# define NO_SETOWNER_TTYDEV 1 # endif #endif #if defined(__CYGWIN32__) || defined(PTYS_ARE_OPENPTY) -# define NO_SETOWNER_TTYDEV +# define NO_SETOWNER_TTYDEV 1 #endif /* ***************************************************************************** + * PROTOTYPES + ***************************************************************************** + */ +RETSIGTYPE rxvt_Child_signal (int sig); +RETSIGTYPE rxvt_Exit_signal (int sig); +void rxvt_clean_exit (); +void * rxvt_malloc (size_t size); +void * rxvt_calloc (size_t number, size_t size); +void * rxvt_realloc (void *ptr, size_t size); +char * rxvt_wcstombs (const wchar_t *str, int len = -1); +wchar_t * rxvt_mbstowcs (const char *str, int len = -1); +char * rxvt_wcstoutf8 (const wchar_t *str, int len = -1); +wchar_t * rxvt_utf8towcs (const char *str, int len = -1); +char * rxvt_strdup (const char *str); +char * rxvt_r_basename (const char *str); +void rxvt_vlog (const char *fmt, va_list arg_ptr); +void rxvt_log (const char *fmt,...); +void rxvt_warn (const char *fmt,...); +void rxvt_fatal (const char *fmt,...); +void rxvt_exit_failure (); +int rxvt_Str_match (const char *s1, const char *s2); +const char * rxvt_Str_skip_space (const char *str); +char * rxvt_Str_trim (char *str); +int rxvt_Str_escaped (char *str); +char ** rxvt_splitcommastring (const char *cs); +void rxvt_freecommastring (char **cs); +char * rxvt_File_find (const char *file, const char *ext, const char *path); +void rxvt_Draw_Shadow (Display *display, Window win, GC topShadow, GC botShadow, int x, int y, int w, int h); +void rxvt_Draw_Triangle (Display *display, Window win, GC topShadow, GC botShadow, int x, int y, int w, int type); + +void rxvt_privileges (rxvt_privaction action); + +/* + ***************************************************************************** * STRUCTURES AND TYPEDEFS ***************************************************************************** */ @@ -92,7 +129,7 @@ /* If we're using either the rxvt scrollbar or menu bars, keep the * scrollColor resource. */ -#if defined(RXVT_SCROLLBAR) || defined(MENUBAR) +#if defined(RXVT_SCROLLBAR) || defined(MENUBAR) || defined(PLAIN_SCROLLBAR) # define KEEP_SCROLLCOLOR 1 #else # undef KEEP_SCROLLCOLOR @@ -100,8 +137,8 @@ #ifdef XPM_BACKGROUND typedef struct { - short w, h, x, y; - Pixmap pixmap; + short w, h, x, y; + Pixmap pixmap; } bgPixmap_t; #endif @@ -110,17 +147,12 @@ * pared down from XButtonEvent */ struct mouse_event { - int clicks; - Time time; /* milliseconds */ - unsigned int state; /* key or button mask */ - unsigned int button; /* detail */ + int clicks; + Time time; /* milliseconds */ + unsigned int state; /* key or button mask */ + unsigned int button; /* detail */ }; -#ifndef min -# define min(a,b) (((a) < (b)) ? (a) : (b)) -# define max(a,b) (((a) > (b)) ? (a) : (b)) -#endif - #define MAX_IT(current, other) if ((other) > (current)) (current) = (other) #define MIN_IT(current, other) if ((other) < (current)) (current) = (other) #define SWAP_IT(one, two, typeof) \ @@ -133,6 +165,16 @@ ? 0 \ : min ((val), (((uint16_t)-1)>>1))) +#if ENABLE_FRILLS +typedef struct _mwmhints { + CARD32 flags; + CARD32 functions; + CARD32 decorations; + INT32 input_mode; + CARD32 status; +} MWMHints; +#endif + /* ***************************************************************************** * NORMAL DEFINES @@ -147,17 +189,21 @@ # define COLORTERMENVFULL COLORTERMENV #endif #ifndef TERMENV -# define TERMENV "rxvt" +# define TERMENV "rxvt-unicode" #endif #if defined (NO_MOUSE_REPORT) && !defined (NO_MOUSE_REPORT_SCROLLBAR) -# define NO_MOUSE_REPORT_SCROLLBAR +# define NO_MOUSE_REPORT_SCROLLBAR 1 #endif #ifdef NO_RESOURCES # undef USE_XGETDEFAULT #endif +#if ISO_14755 +# define ENABLE_OVERLAY 1 +#endif + /* now look for other badly set stuff */ #if !defined (EACCESS) && defined(EAGAIN) @@ -174,7 +220,7 @@ #define menuBar_margin 2 /* margin below text */ #if defined(RXVT_SCROLLBAR) || defined(NEXT_SCROLLBAR) || defined(XTERM_SCROLLBAR) || defined(PLAIN_SCROLLBAR) -# define HAVE_SCROLLBARS +# define HAVE_SCROLLBARS 1 #endif /* width of scrollBar, menuBar shadow, must be 1 or 2 */ @@ -268,10 +314,6 @@ FAST_REFRESH = 1<<0, /* Fully exposed window */ SLOW_REFRESH = 1<<1, /* Partially exposed window */ SMOOTH_REFRESH = 1<<2, /* Do sync'ing to make it smooth */ -#if 0 - REFRESH_BOUNDS = 1<<3 -#endif - REFRESH_BOUNDS = 0 /* only required for old int_bwidth code. */ //TODO: remove this and all depending code }; #ifdef NO_SECONDARY_SCREEN @@ -280,10 +322,6 @@ # define NSCREENS 1 #endif -#define IGNORE 0 -#define SAVE 's' -#define RESTORE 'r' - /* special (internal) prefix for font commands */ #define FONT_CMD '#' #define FONT_DN "#-" @@ -318,18 +356,36 @@ #define RS_None 0 /* Normal */ -#define RS_fgMask 0x000001FFu /* 512 colors */ -#define RS_bgMask 0x0003FE00u /* 512 colors */ -#define RS_Bold 0x00040000u /* bold */ -#define RS_Blink 0x00080000u /* blink */ -#define RS_RVid 0x00100000u /* reverse video */ -#define RS_Uline 0x00200000u /* underline */ +#define RS_fgMask 0x0000007fUL /* 128 colors */ +#define RS_bgMask 0x00003f80UL /* 128 colors */ + +// font styles +#define RS_Bold 0x00004000UL // value 1 +#define RS_Italic 0x00008000UL // value 2 + +// fake styles +#define RS_Blink 0x00010000UL /* blink */ +#define RS_RVid 0x00020000UL /* reverse video */ +#define RS_Uline 0x00040000UL /* underline */ + +// 5 bits still to go + +// other flags +#define RS_Careful 0x80000000UL /* be careful when drawing these */ -#define RS_fontMask 0xffc00000u /* plenty(?) of fonts */ -#define RS_fontShift 22 +#define RS_styleCount 4 +#define RS_styleMask (RS_Bold | RS_Italic) +#define RS_styleShift 14 -#define RS_baseattrMask (RS_Bold|RS_Blink|RS_RVid|RS_Uline) -#define RS_attrMask (RS_baseattrMask|RS_fontMask) +#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)) #define Sel_none 0 /* Not waiting */ #define Sel_normal 0x01 /* normal selection */ @@ -385,8 +441,14 @@ 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) XTerm_Menu = 703, // set menu item + XTerm_Color_IT = 704, // change actual 'Italic' colour + XTerm_Color_tint = 705, // change actual tint colour + + URxvt_font = 710, + URxvt_boldFont = 711, + URxvt_italicFont = 712, + URxvt_boldItalicFont = 713, }; /* Words starting with `Color_' are colours. Others are counts */ @@ -425,10 +487,8 @@ #else Color_White = maxCOLOR, #endif -#ifdef TTY_256COLOR - min256COLOR = Color_White + 1, - max256COLOR = minCOLOR + 255, -#endif + minTermCOLOR = Color_White + 1, + maxTermCOLOR = Color_White + 72, #ifndef NO_CURSORCOLOR Color_cursor, Color_cursor2, @@ -438,6 +498,7 @@ Color_border, #ifndef NO_BOLD_UNDERLINE_REVERSE Color_BD, + Color_IT, Color_UL, Color_RV, #endif @@ -455,18 +516,17 @@ #ifdef KEEP_SCROLLCOLOR Color_topShadow = NRS_COLORS, Color_bottomShadow, - TOTAL_COLORS /* upto 30 */ + TOTAL_COLORS #else - TOTAL_COLORS = NRS_COLORS /* */ + TOTAL_COLORS = NRS_COLORS #endif }; -#define Color_Bits 9 +#define Color_Bits 7 // 0 .. maxTermCOLOR + #define NPIXCLR_SETS ((TOTAL_COLORS + 31) / 32) #define NPIXCLR_BITS 32 -#define DEFAULT_RSTYLE (RS_None | (Color_fg) | (Color_bg<depth -#define XCMAP display->cmap -#define XVISUAL display->visual - +// do not change these constants lightly, there are many interdependencies #define IMBUFSIZ 128 // input modifier buffer sizes #define KBUFSZ 512 // size of keyboard mapping buffer #define CBUFSIZ 4096 // size of command buffer @@ -638,26 +700,53 @@ # define PATH_MAX 16384 #endif +/* Motif window hints */ +#define MWM_HINTS_FUNCTIONS (1L << 0) +#define MWM_HINTS_DECORATIONS (1L << 1) +#define MWM_HINTS_INPUT_MODE (1L << 2) +#define MWM_HINTS_STATUS (1L << 3) +/* bit definitions for MwmHints.functions */ +#define MWM_FUNC_ALL (1L << 0) +#define MWM_FUNC_RESIZE (1L << 1) +#define MWM_FUNC_MOVE (1L << 2) +#define MWM_FUNC_MINIMIZE (1L << 3) +#define MWM_FUNC_MAXIMIZE (1L << 4) +#define MWM_FUNC_CLOSE (1L << 5) +/* bit definitions for MwmHints.decorations */ +#define MWM_DECOR_ALL (1L << 0) +#define MWM_DECOR_BORDER (1L << 1) +#define MWM_DECOR_RESIZEH (1L << 2) +#define MWM_DECOR_TITLE (1L << 3) +#define MWM_DECOR_MENU (1L << 4) +#define MWM_DECOR_MINIMIZE (1L << 5) +#define MWM_DECOR_MAXIMIZE (1L << 6) +/* bit definitions for MwmHints.inputMode */ +#define MWM_INPUT_MODELESS 0 +#define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1 +#define MWM_INPUT_SYSTEM_MODAL 2 +#define MWM_INPUT_FULL_APPLICATION_MODAL 3 +#define PROP_MWM_HINTS_ELEMENTS 5 + /* ***************************************************************************** * 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 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)) /* convert pixel dimensions to row/column values. Everything as int32_t */ #define Pixel2Col(x) Pixel2Width((int32_t)(x)) @@ -694,20 +783,31 @@ #endif #define GET_FONT(x) (((x) & RS_fontMask) >> RS_fontShift) -#define SET_FONT(x,fid) ((x) & ~RS_fontMask) | ((fid) << RS_fontShift) +#define SET_FONT(x,fid) (((x) & ~RS_fontMask) | ((fid) << RS_fontShift)) + +#define GET_STYLE(x) (((x) & RS_styleMask) >> RS_styleShift) +#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)< allocated; // free these memory blocks with free() char *env_windowid; /* environmental variable WINDOWID */ @@ -1097,9 +1174,6 @@ 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 */ @@ -1117,12 +1191,30 @@ static vector termlist; // a vector of all running rxvt_term's - void paste (const unsigned char *data, unsigned int len); +#if ENABLE_FRILLS || ISO_14755 + // ISO 14755 entry support + unicode_t iso14755buf; + void commit_iso14755 (); + int hex_keyval (XKeyEvent &ev); +# if ISO_14755 + void iso14755_51 (unicode_t ch, rend_t r = DEFAULT_RSTYLE); + void iso14755_54 (int x, int y); +# endif +#endif + + // modifies first argument(!) + void paste (unsigned char *data, unsigned int len); void flush (); +#if TRANSPARENT void rootwin_cb (XEvent &xev); xevent_watcher rootwin_ev; +#endif + + + void sig_term (sig_watcher &w); sig_watcher sw_term; + void sig_chld (sig_watcher &w); sig_watcher sw_chld; void x_cb (XEvent &xev); xevent_watcher termwin_ev; @@ -1134,8 +1226,9 @@ xevent_watcher menubar_ev; #endif - void check_cb (check_watcher &w); check_watcher check_ev; + void check_cb (check_watcher &w); check_watcher check_ev; void destroy_cb (time_watcher &w); time_watcher destroy_ev; + void flush_cb (time_watcher &w); time_watcher flush_ev; void pty_cb (io_watcher &w, short revents); io_watcher pty_ev; @@ -1166,6 +1259,7 @@ void tt_printf (const char *fmt,...); void tt_write (const unsigned char *data, unsigned int len); + void pty_write (); void tt_winch (); @@ -1178,18 +1272,14 @@ bool pty_fill (); - void *operator new (size_t s); - void operator delete (void *p, size_t s); - void init_secondary (); const char **init_resources (int argc, const char *const *argv); void init_env (); void set_locale (const char *locale); void init_xlocale (); void init_command (const char *const *argv); - int run_command (const char *const *argv); + void run_command (const char *const *argv); int run_child (const char *const *argv); - static void child_exited (int pid); void color_aliases (int idx); void recolour_cursor (); @@ -1198,12 +1288,17 @@ void window_calc (unsigned int width, unsigned int height); #if USE_XIM + rxvt_xim *input_method; + XIC Input_Context; + XIMStyle input_style; + XPoint spot; // most recently sent spot position + void im_destroy (); void im_cb (); im_watcher im_ev; - void im_set_size (XRectangle *size); - void im_set_position (XPoint *pos); - void im_set_color (unsigned long *fg, unsigned long *bg); - void im_set_preedit_area (XRectangle * preedit_rect, XRectangle * status_rect, XRectangle * needed_rect); + void im_set_size (XRectangle &size); + void im_set_position (XPoint &pos); + void im_set_color (unsigned long &fg, unsigned long &bg); + void im_set_preedit_area (XRectangle &preedit_rect, XRectangle &status_rect, const XRectangle &needed_rect); bool IMisRunning (); void IMSendSpot (); @@ -1219,22 +1314,6 @@ void selection_extend (int x, int y, int flag); void selection_rotate (int x, int y); - /* screen (!) */ - void scr_blank_line (text_t *et, rend_t *er, unsigned int width, rend_t efs); - void scr_blank_screen_mem (text_t **tp, rend_t **rp, unsigned int row, rend_t efs); - int scr_scroll_text (int row1, int row2, int count, int spec); - void scr_reset (); - void scr_reset_realloc (); - void scr_release (); - void scr_clear (bool really = false); - void scr_refresh (unsigned char refresh_type); - bool scr_refresh_rend (rend_t mask, rend_t value); - void scr_erase_screen (int mode); - void scr_touch (bool refresh); - void scr_expose (int x, int y, int width, int height, bool refresh); - void scr_remap_chars (); - void scr_remap_chars (text_t *tp, rend_t *rp); - /* autoconvert */ // command.C @@ -1276,12 +1355,11 @@ // logging.C void makeutent (const char *pty, const char *hostname); void cleanutent (); - // main.C; - void privileges (int mode); - void privileged_utmp (char action); - void privileged_ttydev (char action); - bool change_font (const char *fontname); - bool font_up_down (int n, int direction); + // main.C + void privileged_utmp (rxvt_privaction action); + bool set_fonts (); + void set_string_property (Atom prop, const char *str, int len = -1); + void set_utf8_property (Atom prop, const char *str, int len = -1); void set_title (const char *str); void set_icon_name (const char *str); void set_window_color (int idx, const char *color); @@ -1323,14 +1401,32 @@ #endif // screen.C + void scr_blank_line (text_t *et, rend_t *er, unsigned int width, rend_t efs); + void scr_blank_screen_mem (text_t **tp, rend_t **rp, unsigned int row, rend_t efs); + int scr_scroll_text (int row1, int row2, int count, int spec); + void scr_reset (); + void scr_reset_realloc (); + void scr_release (); + void scr_clear (bool really = false); + void scr_refresh (unsigned char refresh_type); + bool scr_refresh_rend (rend_t mask, rend_t value); + void scr_erase_screen (int mode); + void scr_touch (bool refresh); + void scr_expose (int x, int y, int width, int height, bool refresh); + rxvt_fontset *scr_find_fontset (rend_t r = DEFAULT_RSTYLE); + void scr_recolour (); + void scr_remap_chars (); + void scr_remap_chars (text_t *tp, rend_t *rp); + void scr_poweron (); void scr_cursor (int mode); + void scr_do_wrap (); 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_backspace (); - void scr_tab (int count); + void scr_tab (int count, bool ht = false); void scr_backindex (); void scr_forwardindex (); void scr_gotorc (int row, int col, int relative); @@ -1352,13 +1448,13 @@ void scr_charset_set (int set, unsigned int ch); int scr_move_to (int y, int len); int scr_page (enum page_dirn direction, int nlines); - int scr_changeview (uint16_t oldviewstart); + int scr_changeview (unsigned int oldviewstart); void scr_bell (); void scr_printscreen (int fullhist); void scr_reverse_selection (); void scr_dump (int fd); void selection_check (int check_more); - int selection_paste (Window win, Atom prop, bool delete_prop); + void selection_paste (Window win, Atom prop, bool delete_prop); void selection_property (Window win, Atom prop); void selection_request (Time tm, int x, int y); int selection_request_other (Atom target, int selnum); @@ -1420,7 +1516,6 @@ #else # define __PROTO(p) () #endif -#include "protos.h" #ifdef DEBUG_malloc # include "dmalloc.h" /* This comes last */