--- rxvt-unicode/src/rxvt.h 2005/12/20 20:58:31 1.164 +++ rxvt-unicode/src/rxvt.h 2006/01/19 23:14:39 1.226 @@ -5,6 +5,23 @@ #include "feature.h" +#if defined (ISO_14755) || defined (ENABLE_PERL) +# define ENABLE_OVERLAY 1 +#endif + +#if ENABLE_PERL +# define ENABLE_FRILLS 1 +# define ENABLE_COMBINING 1 +#endif + +#if ENABLE_FRILLS +# define ENABLE_XEMBED 1 +# define ENABLE_EWMH 1 +# define CURSOR_BLINK 1 +#else +# define ENABLE_MINIMAL 1 +#endif + #include #include @@ -21,10 +38,15 @@ #include "iom.h" #include "salloc.h" -#if ENABLE_FRILLS -# define ENABLE_XEMBED 1 -# define ENABLE_EWMH 1 -# define CURSOR_BLINK 1 +#include "rxvtperl.h" + +// try to avoid some macros to decrease code size, on some systems +#if ENABLE_MINIMAL +# define strcmp(a,b) (strcmp)(a,b) +# define strlen(a) (strlen)(a) +# define strcpy(a,b) (strcpy)(a,b) +# define memset(a,c,l) (memset)(a,c,l) +# define memcpy(a,b,l) (memcpy)(a,b,l) #endif /* @@ -43,7 +65,7 @@ #endif #ifndef HAVE_XPOINTER -typedef char *XPointer; +typedef char *XPointer; #endif #ifdef HAVE_TERMIOS_H @@ -74,15 +96,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 @@ -95,7 +108,6 @@ void * rxvt_malloc (size_t size); void * rxvt_calloc (size_t number, size_t size); void * rxvt_realloc (void *ptr, size_t size); -void rxvt_privileges (rxvt_privaction action); // util.C char * rxvt_wcstombs (const wchar_t *str, int len = -1); @@ -118,10 +130,26 @@ 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_usleep (int usecs); +///////////////////////////////////////////////////////////////////////////// + +// temporarily replace the process environment +extern char **environ; +extern char **rxvt_environ; // the original environ pointer + +inline void set_environ (stringvec *envv) +{ + if (envv) + environ = (char **)envv->begin (); +} + +inline void set_environ (char **envv) +{ + if (envv) + environ = envv; +} + /* ***************************************************************************** * STRUCTURES AND TYPEDEFS @@ -129,18 +157,10 @@ */ struct grwin_t; -/* Sanitize menubar info */ -#ifndef MENUBAR -# undef MENUBAR_MAX -#endif -#ifndef MENUBAR_MAX -# define MENUBAR_MAX 0 -#endif - -/* If we're using either the rxvt scrollbar or menu bars, keep the +/* If we're using either the rxvt scrollbar, keep the * scrollColor resource. */ -#if defined(RXVT_SCROLLBAR) || defined(NEXT_SCROLLBAR) || defined(MENUBAR) || defined(PLAIN_SCROLLBAR) +#if defined(RXVT_SCROLLBAR) || defined(NEXT_SCROLLBAR) || defined(PLAIN_SCROLLBAR) # define KEEP_SCROLLCOLOR 1 #else # undef KEEP_SCROLLCOLOR @@ -153,6 +173,32 @@ } bgPixmap_t; #endif +struct rxvt_ptytty { + int pty; // pty file descriptor; connected to rxvt + int tty; // tty file descriptor; connected to child + + rxvt_ptytty () + : pty(-1), tty(-1) + { + } + + virtual ~rxvt_ptytty () + { + } + + virtual bool get () = 0; +#if UTMP_SUPPORT + virtual void login (int cmd_pid, bool login_shell, const char *hostname) = 0; +#endif + + void close_tty (); + bool make_controlling_tty (); + void set_utf8_mode (bool on); +}; + +rxvt_ptytty *rxvt_new_ptytty (); // create a new pty object +void rxvt_ptytty_server (); // start the ptytty server process + /* * the 'essential' information for reporting Mouse Events * pared down from XButtonEvent @@ -164,18 +210,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; @@ -232,14 +266,6 @@ # 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) @@ -251,21 +277,12 @@ # define EXIT_FAILURE 1 /* exit function failure */ #endif -#define menuBar_esc 10 #define scrollBar_esc 30 -#define menuBar_margin 2 /* margin below text */ #if defined(RXVT_SCROLLBAR) || defined(NEXT_SCROLLBAR) || defined(XTERM_SCROLLBAR) || defined(PLAIN_SCROLLBAR) # define HAVE_SCROLLBARS 1 #endif -/* width of scrollBar, menuBar shadow, must be 1 or 2 */ -#ifdef HALFSHADOW -# define SHADOW 1 -#else -# define SHADOW 2 -#endif - #define R_SB_ALIGN_CENTRE 0 #define R_SB_ALIGN_TOP 1 #define R_SB_ALIGN_BOTTOM 2 @@ -346,10 +363,9 @@ */ enum { - NO_REFRESH = 0 , /* Window not visible at all! */ - 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 */ + NO_REFRESH = 0, /* Window not visible at all! */ + FAST_REFRESH = 1, /* Fully exposed window */ + SLOW_REFRESH = 2, /* Partially exposed window */ }; #ifdef NO_SECONDARY_SCREEN @@ -365,9 +381,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 +406,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 */ @@ -456,10 +475,10 @@ XTerm_Color00 = 10, // not implemented, CLASH! XTerm_Color01 = 11, // not implemented XTerm_Color_cursor = 12, // change actual 'Cursor' color - XTerm_Color_pointer_fg = 13, // change actual 'Pointer' color - XTerm_Color_pointer_bg = 14, // not implemented - XTerm_Color05 = 15, // not implemented - XTerm_Color06 = 16, // not implemented + XTerm_Color_pointer_fg = 13, // change actual 'Pointer' fg color + XTerm_Color_pointer_bg = 14, // change actual 'Pointer' bg color + XTerm_Color05 = 15, // not implemented (tektronix fg) + XTerm_Color06 = 16, // not implemented (tektronix bg) XTerm_Color_RV = 17, // change actual 'Highlight' color XTerm_logfile = 46, // not implemented XTerm_font = 50, @@ -469,18 +488,21 @@ XTerm_emacs51 = 51, // reserved for emacs shell /* * rxvt extensions of XTerm OSCs: ESC ] Ps;Pt (ST|BEL) + * at least Rxvt_Color_BD and Rxvt_Color_UL clash with xterm */ - 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 + Rxvt_Color_BD = 18, // change actual 'Bold' color + Rxvt_Color_UL = 19, // change actual 'Underline' color + Rxvt_Pixmap = 20, // new bg pixmap + Rxvt_restoreFG = 39, // change default fg color + Rxvt_restoreBG = 49, // change default bg color + Rxvt_dumpscreen = 55, // dump scrollback and all of screen URxvt_locale = 701, // change locale - URxvt_Menu = 703, // set menu item + URxvt_Color_IT = 704, // change actual 'Italic' colour URxvt_Color_tint = 705, // change actual tint colour + URxvt_Color_BD = 706, + URxvt_Color_UL = 707, URxvt_font = 710, URxvt_boldFont = 711, @@ -489,6 +511,8 @@ URxvt_view_up = 720, URxvt_view_down = 721, + + URxvt_perl = 777, }; /* Words starting with `Color_' are colours. Others are counts */ @@ -575,107 +599,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 }; @@ -735,14 +663,13 @@ #define PrivMode_MouseX10 (1UL<<12) #define PrivMode_MouseX11 (1UL<<13) #define PrivMode_scrollBar (1UL<<14) -#define PrivMode_menuBar (1UL<<15) -#define PrivMode_TtyOutputInh (1UL<<16) -#define PrivMode_Keypress (1UL<<17) -#define PrivMode_smoothScroll (1UL<<18) -#define PrivMode_vt52 (1UL<<19) -#define PrivMode_LFNL (1UL<<20) +#define PrivMode_TtyOutputInh (1UL<<15) +#define PrivMode_Keypress (1UL<<16) +#define PrivMode_smoothScroll (1UL<<17) +#define PrivMode_vt52 (1UL<<18) +#define PrivMode_LFNL (1UL<<19) /* too annoying to implement X11 highlight tracking */ -/* #define PrivMode_MouseX11Track (1LU<<21) */ +/* #define PrivMode_MouseX11Track (1LU<<20) */ #define PrivMode_mouse_report (PrivMode_MouseX10|PrivMode_MouseX11) #define PrivMode(test,bit) \ @@ -760,8 +687,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,23 +726,8 @@ * 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 +#define dLocal(type,name) type const name = this->name +#define dDisp Display *disp = this->display->display /* convert pixel dimensions to row/column values. Everything as int32_t */ #define Pixel2Col(x) Pixel2Width((int32_t)(x)) @@ -827,29 +739,20 @@ #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) +#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)) + +#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)) @@ -907,41 +810,12 @@ #define scrollbar_size() (scrollBar.end - scrollBar.beg \ - scrollbar_minheight ()) -#if (MENUBAR_MAX > 1) -/* rendition style flags */ -# define menuBar_height() (fheight + SHADOW) -# define menuBar_TotalHeight() (menuBar_height() + SHADOW + menuBar_margin) -# define isMenuBarWindow(w) ((w) == menuBar.win) -#else -# define menuBar_height() (0) -# define menuBar_TotalHeight() (0) -# define isMenuBarWindow(w) (0) -#endif - #ifdef XPM_BACKGROUND # define XPMClearArea(a, b, c, d, e, f, g) XClearArea((a), (b), (c), (d), (e), (f), (g)) #else # define XPMClearArea(a, b, c, d, e, f, g) #endif -#ifdef UTMP_SUPPORT -# if !defined(RXVT_UTMPX_FILE) || !defined(HAVE_STRUCT_UTMPX) -# undef HAVE_UTMPX_H -# undef HAVE_STRUCT_UTMPX -# endif -# if !defined(RXVT_UTMP_FILE) || !defined(HAVE_STRUCT_UTMP) -# undef HAVE_UTMP_H -# undef HAVE_STRUCT_UTMP -# endif - -# ifdef HAVE_UTMPX_H -# include -# endif -# ifdef HAVE_UTMP_H -# include -# endif -#endif - #ifdef DEBUG_CMD # define D_CMD(x) fprintf x ; fputc('\n', stderr) #else @@ -966,6 +840,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,15 +850,10 @@ #define SET_LOCALE(locale) rxvt_set_locale (locale) extern bool rxvt_set_locale (const char *locale); +extern void rxvt_push_locale (const char *locale); +extern void rxvt_pop_locale (); -/* - ***************************************************************************** - * VARIABLES - ***************************************************************************** - */ -#ifdef MENUBAR -# include "menubar.h" -#endif +/****************************************************************************/ #define BLINK_INTERVAL 0.5 #define TEXT_BLINK_INTERVAL 0.5 @@ -997,6 +867,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; @@ -1006,6 +925,8 @@ mbstate () { reset (); } }; +/****************************************************************************/ + #define UNICODE_MASK 0x1fffffUL #if UNICODE3 @@ -1013,9 +934,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 @@ -1045,14 +971,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 + rxvt_perl_term perl; +#endif struct mbstate mbstate; // current input multibyte state unsigned char want_refresh:1, @@ -1117,13 +1047,6 @@ last_top, /* scrollbar last top position */ last_state, /* scrollbar last state */ scrollbar_len, -#ifdef MENUBAR - menu_readonly, /* okay to alter menu? */ - Arrows_x, -#endif -#if MENUBAR_MAX > 1 - Nbars, -#endif window_vt_x, window_vt_y, window_sb_x, @@ -1142,10 +1065,7 @@ /* ---------- */ Atom xa[NUM_XA]; /* ---------- */ -#ifdef MENUBAR - GC menubarGC; -#endif -#if defined(MENUBAR) || defined(RXVT_SCROLLBAR) +#ifdef RXVT_SCROLLBAR GC scrollbarGC, topShadowGC, botShadowGC; @@ -1187,37 +1107,11 @@ struct mouse_event MEvent; XComposeStatus compose; ttymode_t tio; -#ifdef UTMP_SUPPORT -# ifdef HAVE_STRUCT_UTMP - struct utmp ut; -# endif -# ifdef HAVE_STRUCT_UTMPX - struct utmpx utx; -# endif -# if (defined(HAVE_STRUCT_UTMP) && defined(HAVE_UTMP_PID)) || defined(HAVE_STRUCT_UTMPX) - char ut_id[5]; -# endif - int utmp_pos; -#endif row_col_t oldcursor; #ifdef XPM_BACKGROUND bgPixmap_t bgPixmap; XpmAttributes xpmAttr; /* originally loaded pixmap and its scaling */ #endif -#ifdef MENUBAR - menu_t *ActiveMenu, /* currently active menu */ - *BuildMenu; /* the menu currently being built */ - bar_t *CurrentBar; -# if ! (MENUBAR_MAX > 1) - 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 +1136,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 +1146,10 @@ 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_ptytty *pty; rxvt_salloc *talloc; // text line allocator rxvt_salloc *ralloc; // rend line allocator @@ -1266,15 +1162,20 @@ 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 (); + long vt_emask, vt_emask_perl; + + void vt_select_input () const + { + XSelectInput (display->display, vt, vt_emask | vt_emask_perl); + } #if TRANSPARENT void rootwin_cb (XEvent &xev); @@ -1282,15 +1183,14 @@ #endif void x_cb (XEvent &xev); + void flush (); xevent_watcher termwin_ev; xevent_watcher vt_ev; #ifdef HAVE_SCROLLBARS xevent_watcher scrollbar_ev; #endif -#ifdef MENUBAR - xevent_watcher menubar_ev; -#endif + void child_cb (child_watcher &w, int status); child_watcher child_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; @@ -1323,7 +1223,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 (); @@ -1338,8 +1238,16 @@ bool pty_fill (); + void make_current () const // make this the "currently active" urxvt instance + { + SET_R (this); + rxvt_set_locale (locale); + set_environ (envv); + } + void init_secondary (); const char **init_resources (int argc, const char *const *argv); + const char *x_resource (const char *name); void init_env (); void set_locale (const char *locale); void init_xlocale (); @@ -1384,12 +1292,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); @@ -1408,11 +1316,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); @@ -1420,11 +1328,7 @@ // init.C void Get_Colours (); void get_ourmods (); - // logging.C - void makeutent (const char *pty, const char *hostname); - void cleanutent (); // 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); @@ -1435,54 +1339,23 @@ int rXParseAllocColor (rxvt_color * screen_in_out, const char *colour); void set_widthheight (unsigned int newwidth, unsigned int newheight); -#ifdef MENUBAR - // menubar.C - void menuitem_free (menu_t *menu, menuitem_t *item); - int action_dispatch (action_t *action); - void menuarrow_free (char name); - void menuarrow_add (char *string); - char *menu_find_base (menu_t **menu, char *path); - menu_t *menu_delete (menu_t *menu); - menu_t *menu_add (menu_t *parent, char *path); - void drawbox_menubar (int x, int len, int state); - void drawtriangle (int x, int y, int state); - void drawbox_menuitem (int y, int state); - void menu_show (); - void menu_display (void (rxvt_term::*update) ()); - void menu_hide_all (); - void menu_hide (); - void menu_clear (menu_t *menu); - void menubar_clear (); - bar_t *menubar_find (const char *name); - int menubar_push (const char *name); - void menubar_remove (const char *name); - void menubar_dump (FILE *fp); - void menubar_read (const char *filename); - void menubar_dispatch (char *str); - void draw_Arrows (int name, int state); - void menubar_expose (); - int menubar_mapping (int map); - int menu_select (XButtonEvent &ev); - void menubar_select (XButtonEvent &ev); - void menubar_control (XButtonEvent &ev); - void map_menuBar (int map); -#endif - // screen.C - void lalloc (line_t &l) + void lalloc (line_t &l) const { l.t = (text_t *)talloc->alloc (); 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) + void lresize (line_t &l) const { if (!l.t) return; @@ -1490,20 +1363,60 @@ 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); } - 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 fgcolor_of (rend_t r) const + { + 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) const + { + 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; + } + + bool option (uint32_t opt) const + { + 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) const; + void scr_blank_screen_mem (line_t &l, rend_t efs) const; 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); + void scr_refresh (); bool scr_refresh_rend (rend_t mask, rend_t value); void scr_erase_screen (int mode); #if ENABLE_FRILLS @@ -1516,15 +1429,17 @@ 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); + + enum cursor_mode { SAVE, RESTORE }; void scr_poweron (); - void scr_cursor (int mode); + void scr_cursor (cursor_mode 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_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); @@ -1544,20 +1459,23 @@ void set_font_style (); void scr_charset_choose (int set); 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 (unsigned int oldviewstart); + void scr_move_to (int y, int len); + bool scr_page (enum page_dirn direction, int nlines); + bool scr_changeview (int new_view_start); 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); 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); + void selection_request (Time tm, int selnum); 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); @@ -1574,7 +1492,6 @@ #if defined(RXVT_SCROLLBAR) // scrollbar-rxvt.C - void Draw_button (int x, int y, int state, int dirn); int scrollbar_show_rxvt (int update, int last_top, int last_bot, int scrollbar_len); #endif