--- rxvt-unicode/src/rxvt.h 2005/12/20 19:30:59 1.163 +++ rxvt-unicode/src/rxvt.h 2006/01/04 04:42:45 1.186 @@ -74,15 +74,6 @@ # define STDERR_FILENO 2 #endif -#if defined(HAVE_GRANTPT) && defined(HAVE_UNLOCKPT) -# if defined(PTYS_ARE_GETPT) || defined(PTYS_ARE_PTMX) -# define NO_SETOWNER_TTYDEV 1 -# endif -#endif -#if defined(__CYGWIN32__) || defined(PTYS_ARE_OPENPTY) -# define NO_SETOWNER_TTYDEV 1 -#endif - /* ***************************************************************************** * PROTOTYPES @@ -164,18 +155,6 @@ unsigned int button; /* detail */ }; -#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) \ - do { \ - typeof swapittmp; \ - (swapittmp) = (one); (one) = (two); (two) = (swapittmp); \ - } while (/* CONSTCOND */ 0) -#define BOUND_POSITIVE_INT16(val) \ - (int16_t) ((val) <= 0 \ - ? 0 \ - : min ((val), (((uint16_t)-1)>>1))) - #if ENABLE_FRILLS typedef struct _mwmhints { CARD32 flags; @@ -236,7 +215,7 @@ # undef USE_XGETDEFAULT #endif -#if ISO_14755 +#if defined (ISO_14755) || defined (ENABLE_PERL) # define ENABLE_OVERLAY 1 #endif @@ -261,9 +240,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 @@ -365,9 +344,9 @@ /* flags for rxvt_scr_gotorc () */ enum { - C_RELATIVE = 1 , /* col movement is relative */ - R_RELATIVE = 2, /* row movement is relative */ - RELATIVE = 1 | 2, + C_RELATIVE = 1, /* col movement is relative */ + R_RELATIVE = 2, /* row movement is relative */ + RELATIVE = C_RELATIVE | R_RELATIVE, }; /* modes for rxvt_scr_insdel_chars (), rxvt_scr_insdel_lines () */ @@ -390,21 +369,24 @@ SECONDARY, }; -#define RS_None 0 /* Normal */ +#define RS_None 0 -#define RS_fgMask 0x0000007fUL /* 128 colors */ -#define RS_bgMask 0x00003f80UL /* 128 colors */ +#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 +#define RS_Blink 0x00010000UL // blink +#define RS_RVid 0x00020000UL // reverse video +#define RS_Uline 0x00040000UL // underline + +// 5 custom bits for extensions +#define RS_customCount 32 +#define RS_customMask 0x00f80000UL +#define RS_customShift 19 // other flags #define RS_Careful 0x80000000UL /* be careful when drawing these */ @@ -489,6 +471,8 @@ URxvt_view_up = 720, URxvt_view_down = 721, + + URxvt_perl = 777, }; /* Words starting with `Color_' are colours. Others are counts */ @@ -575,107 +559,11 @@ * Resource list */ enum { - Rs_display_name = 0, - Rs_term_name, - Rs_iconName, - Rs_geometry, - Rs_reverseVideo, - Rs_color, - _Rs_color = Rs_color + NRS_COLORS - 1, - Rs_font, -#if ENABLE_STYLES - Rs_boldFont, - Rs_italicFont, - Rs_boldItalicFont, -#endif - Rs_name, - Rs_title, -#if defined (XPM_BACKGROUND) || (MENUBAR_MAX) - Rs_path, -#endif -#ifdef XPM_BACKGROUND - Rs_backgroundPixmap, -#endif -#if (MENUBAR_MAX) - Rs_menu, -#endif - Rs_loginShell, - Rs_jumpScroll, -#ifdef HAVE_SCROLLBARS - Rs_scrollBar, - Rs_scrollBar_right, - Rs_scrollBar_floating, - Rs_scrollBar_align, - Rs_scrollstyle, /* Rs_scrollBar_style */ - Rs_scrollBar_thickness, -#endif - Rs_scrollTtyOutput, - Rs_scrollTtyKeypress, - Rs_scrollWithBuffer, - Rs_saveLines, - Rs_utmpInhibit, - Rs_visualBell, -#if ! defined(NO_MAPALERT) && defined(MAPALERT_OPTION) - Rs_mapAlert, -#endif -#ifdef META8_OPTION - Rs_meta8, -#endif -#ifdef MOUSE_WHEEL - Rs_mouseWheelScrollPage, -#endif -#ifndef NO_BACKSPACE_KEY - Rs_backspace_key, -#endif -#ifndef NO_DELETE_KEY - Rs_delete_key, -#endif - Rs_selectstyle, -#ifdef PRINTPIPE - Rs_print_pipe, -#endif -#ifdef USE_XIM - Rs_preeditType, - Rs_inputMethod, -#endif -#ifdef TRANSPARENT - Rs_transparent, - Rs_transparent_all, -#endif -#if ENABLE_FRILLS - Rs_ext_bwidth, - Rs_int_bwidth, - Rs_borderLess, - Rs_lineSpace, - Rs_pty_fd, - Rs_cursorUnderline, -#endif -#if CURSOR_BLINK - Rs_cursorBlink, -#endif -#if ENABLE_XEMBED - Rs_embed, -#endif - Rs_cutchars, - Rs_modifier, - Rs_answerbackstring, - Rs_tripleclickwords, - Rs_insecure, - Rs_pointerBlank, - Rs_pointerBlankDelay, - Rs_imLocale, - Rs_imFont, - Rs_pastableTabs, -#ifndef NO_SECONDARY_SCREEN - Rs_secondaryScreen, - Rs_secondaryScroll, -#endif -#ifdef OFF_FOCUS_FADING - Rs_fade, -#endif -#ifdef TINTING - Rs_shade, -#endif +# define def(name) Rs_ ## name, +# define reserve(name,count) Rs_ ## name ## _ = Rs_ ## name + (count) - 1, +# include "rsinc.h" +# undef def +# undef reserve NUM_RESOURCES }; @@ -760,8 +648,8 @@ // 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 -#define UBUFSIZ 4096 // character buffer +#define CBUFSIZ 2048 // size of command buffer +#define UBUFSIZ 2048 // character buffer #ifndef PATH_MAX # define PATH_MAX 16384 @@ -799,22 +687,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 */ @@ -827,29 +699,15 @@ #define Width2Pixel(n) ((int32_t)(n) * (int32_t)fwidth) #define Height2Pixel(n) ((int32_t)(n) * (int32_t)fheight) -#define TermWin_TotalWidth() ((int32_t)width) -#define TermWin_TotalHeight() ((int32_t)height) +// for m >= -n, ensure remainder lies between 0..n-1 +#define MOD(m,n) (((m) + (n)) % (n)) + +#define LINENO(n) MOD (term_start + int(n), total_rows) +#define ROW(n) row_buf [LINENO (n)] /* how to build & extract colors and attributes */ #define GET_BASEFG(x) (((x) & RS_fgMask)) #define GET_BASEBG(x) (((x) & RS_bgMask)>>Color_Bits) -#ifndef NO_BRIGHTCOLOR -# define GET_FGCOLOR(x) \ - ((((x) & RS_Bold) == 0 \ - || GET_BASEFG (x) < minCOLOR \ - || GET_BASEFG (x) >= minBrightCOLOR) \ - ? GET_BASEFG (x) \ - : (GET_BASEFG (x) + (minBrightCOLOR - minCOLOR))) -# define GET_BGCOLOR(x) \ - ((((x) & RS_Blink) == 0 \ - || GET_BASEBG (x) < minCOLOR \ - || GET_BASEBG (x) >= minBrightCOLOR) \ - ? GET_BASEBG (x) \ - : (GET_BASEBG (x) + (minBrightCOLOR - minCOLOR))) -#else -# define GET_FGCOLOR(x) GET_BASEFG(x) -# define GET_BGCOLOR(x) GET_BASEBG(x) -#endif #define GET_FONT(x) (((x) & RS_fontMask) >> RS_fontShift) #define SET_FONT(x,fid) (((x) & ~RS_fontMask) | ((fid) << RS_fontShift)) @@ -909,8 +767,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) @@ -966,6 +824,7 @@ extern class rxvt_failure_exception { } rxvt_failure_exception; typedef callback1 log_callback; +typedef callback1 getfd_callback; extern void rxvt_vlog (const char *fmt, va_list arg_ptr); extern void rxvt_log (const char *fmt, ...); @@ -975,6 +834,8 @@ #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_pop_locale (); /* ***************************************************************************** @@ -1052,6 +913,11 @@ struct rxvt_term : zero_initialized, rxvt_vars { 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 +#endif struct mbstate mbstate; // current input multibyte state @@ -1212,12 +1078,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 @@ -1242,7 +1102,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 */ @@ -1252,8 +1112,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 @@ -1266,13 +1126,13 @@ void commit_iso14755 (); int hex_keyval (XKeyEvent &ev); # if ISO_14755 - void iso14755_51 (unicode_t ch, rend_t r = DEFAULT_RSTYLE); + void iso14755_51 (unicode_t ch, rend_t r = DEFAULT_RSTYLE, int x = 0, int y = -1); void iso14755_54 (int x, int y); # endif #endif // modifies first argument(!) - void paste (unsigned char *data, unsigned int len); + void paste (char *data, unsigned int len); void flush (); @@ -1323,13 +1183,14 @@ 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 (); rxvt_term (); ~rxvt_term (); + void child_exit (); // child has exited, usually destroys void destroy (); void emergency_cleanup (); @@ -1384,7 +1245,7 @@ // 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 (); @@ -1408,11 +1269,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); @@ -1476,11 +1337,13 @@ l.r = (rend_t *)ralloc->alloc (); } +#if 0 void lfree (line_t &l) { talloc->free (l.t); ralloc->free (l.r); } +#endif void lresize (line_t &l) { @@ -1490,17 +1353,44 @@ l.t = (text_t *)talloc->alloc (l.t, prev_ncol * sizeof (text_t)); l.r = (rend_t *)ralloc->alloc (l.r, prev_ncol * sizeof (rend_t)); - MIN_IT (l.l, (int16_t)ncol); + l.l = min (l.l, ncol); if (ncol > prev_ncol) scr_blank_line (l, prev_ncol, ncol - prev_ncol, DEFAULT_RSTYLE); } + int fgcolor_of (rend_t r) + { + int base = GET_BASEFG (r); +#ifndef NO_BRIGHTCOLOR + if (r & RS_Bold +# if ENABLE_STYLES + && OPTION (Opt_intensityStyles) +# endif + && IN_RANGE_INC (base, minCOLOR, minBrightCOLOR)) + base += minBrightCOLOR - minCOLOR; +#endif + return base; + } + + int bgcolor_of (rend_t r) + { + int base = GET_BASEBG (r); +#ifndef NO_BRIGHTCOLOR + if (r & RS_Blink +# if ENABLE_STYLES + && OPTION (Opt_intensityStyles) +# endif + && IN_RANGE_INC (base, minCOLOR, minBrightCOLOR)) + base += minBrightCOLOR - minCOLOR; +#endif + return base; + } + 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, int spec); + int scr_scroll_text (int row1, int row2, int count); void scr_reset (); - void scr_reset_realloc (); void scr_release (); void scr_clear (bool really = false); void scr_refresh (unsigned char refresh_type); @@ -1558,6 +1448,7 @@ int selection_request_other (Atom target, int selnum); void selection_clear (); void selection_make (Time tm); + bool selection_grab (Time tm); void selection_start_colrow (int col, int row); void selection_delimit_word (enum page_dirn dirn, const row_col_t *mark, row_col_t *ret); void selection_extend_colrow (int32_t col, int32_t row, int button3, int buttonpress, int clickchange);