--- rxvt-unicode/src/rxvt.h 2004/08/17 02:18:38 1.102 +++ rxvt-unicode/src/rxvt.h 2006/01/04 02:37:30 1.185 @@ -12,7 +12,7 @@ #include #include #if ENABLE_FRILLS -#include +# include #endif #include "encoding.h" @@ -21,6 +21,12 @@ #include "iom.h" #include "salloc.h" +#if ENABLE_FRILLS +# define ENABLE_XEMBED 1 +# define ENABLE_EWMH 1 +# define CURSOR_BLINK 1 +#endif + /* ***************************************************************************** * SYSTEM HACKS @@ -68,28 +74,28 @@ # 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 ***************************************************************************** */ +// main.C 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); +void rxvt_privileges (rxvt_privaction action); + +// util.C +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); + +// misc.C char * rxvt_r_basename (const char *str); void rxvt_vlog (const char *fmt, va_list arg_ptr); void rxvt_log (const char *fmt,...); @@ -101,11 +107,11 @@ 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); +void rxvt_usleep (int usecs); /* ***************************************************************************** @@ -125,7 +131,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(NEXT_SCROLLBAR) || defined(MENUBAR) || defined(PLAIN_SCROLLBAR) # define KEEP_SCROLLCOLOR 1 #else # undef KEEP_SCROLLCOLOR @@ -133,8 +139,8 @@ #ifdef XPM_BACKGROUND typedef struct { - short w, h, x, y; - Pixmap pixmap; + short w, h, x, y; + Pixmap pixmap; } bgPixmap_t; #endif @@ -143,24 +149,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 */ }; -#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; @@ -171,6 +165,31 @@ } MWMHints; #endif +#if ENABLE_XEMBED +// XEMBED messages +# define XEMBED_EMBEDDED_NOTIFY 0 +# define XEMBED_WINDOW_ACTIVATE 1 +# define XEMBED_WINDOW_DEACTIVATE 2 +# define XEMBED_REQUEST_FOCUS 3 +# define XEMBED_FOCUS_IN 4 +# define XEMBED_FOCUS_OUT 5 +# define XEMBED_FOCUS_NEXT 6 +# define XEMBED_FOCUS_PREV 7 + +# define XEMBED_MODALITY_ON 10 +# define XEMBED_MODALITY_OFF 11 +# define XEMBED_REGISTER_ACCELERATOR 12 +# define XEMBED_UNREGISTER_ACCELERATOR 13 +# define XEMBED_ACTIVATE_ACCELERATOR 14 + +// XEMBED detail code +# define XEMBED_FOCUS_CURRENT 0 +# define XEMBED_FOCUS_FIRST 1 +# define XEMBED_FOCUS_LAST 2 + +# define XEMBED_MAPPED (1 << 0) +#endif + /* ***************************************************************************** * NORMAL DEFINES @@ -185,7 +204,7 @@ # define COLORTERMENVFULL COLORTERMENV #endif #ifndef TERMENV -# define TERMENV "rxvt" +# define TERMENV "rxvt-unicode" #endif #if defined (NO_MOUSE_REPORT) && !defined (NO_MOUSE_REPORT_SCROLLBAR) @@ -196,7 +215,7 @@ # undef USE_XGETDEFAULT #endif -#if ISO_14755 +#if defined (ISO_14755) || defined (ENABLE_PERL) # define ENABLE_OVERLAY 1 #endif @@ -221,19 +240,19 @@ /* 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 #define R_SB_ALIGN_TOP 1 #define R_SB_ALIGN_BOTTOM 2 -#define R_SB_RXVT 0 #define R_SB_NEXT 1 #define R_SB_XTERM 2 #define R_SB_PLAIN 4 +#define R_SB_RXVT 8 #define SB_WIDTH_NEXT 19 #define SB_WIDTH_XTERM 15 @@ -325,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 () */ @@ -350,22 +369,41 @@ SECONDARY, }; -#define RS_None 0 /* Normal */ +#define RS_None 0 + +#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 -#define RS_fgMask 0x000001FFUL /* 512 colors */ -#define RS_bgMask 0x0003FE00UL /* 512 colors */ -#define RS_Bold 0x00040000UL /* bold */ -#define RS_Italic 0x00080000UL -#define RS_Blink 0x00100000UL /* blink */ -#define RS_RVid 0x00200000UL /* reverse video */ -#define RS_Uline 0x00400000UL /* underline */ - -#define RS_fontCount 512 -#define RS_fontMask 0xff800000UL /* plenty(?) of fonts */ -#define RS_fontShift 23 +// fake styles +#define RS_Blink 0x00010000UL // blink +#define RS_RVid 0x00020000UL // reverse video +#define RS_Uline 0x00040000UL // underline -#define RS_baseattrMask (RS_Bold|RS_Blink|RS_RVid|RS_Uline) -#define RS_attrMask (RS_baseattrMask|RS_fontMask) +// 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 */ + +#define RS_styleCount 4 +#define RS_styleMask (RS_Bold | RS_Italic) +#define RS_styleShift 14 + +#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 */ @@ -420,16 +458,26 @@ 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) - XTerm_Menu = 703, // set menu item + + 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_font = 710, + URxvt_boldFont = 711, + URxvt_italicFont = 712, + URxvt_boldItalicFont = 713, + + URxvt_view_up = 720, + URxvt_view_down = 721, + + URxvt_perl = 777, }; /* Words starting with `Color_' are colours. Others are counts */ /* - * The following comment is mostly obsolete since pixcolor_set was expanded: - * We're currently upto 29 colours. Only 3 more available. The - * PixColor and rendition colour usage should probably be decoupled + * The PixColor and rendition colour usage should probably be decoupled * on the unnecessary items, e.g. Color_pointer, but won't bother * until we need to. Also, be aware of usage in pixcolor_set */ @@ -461,10 +509,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, @@ -474,9 +520,13 @@ Color_border, #ifndef NO_BOLD_UNDERLINE_REVERSE Color_BD, + Color_IT, Color_UL, Color_RV, #endif +#if ENABLE_FRILLS + Color_underline, +#endif #ifdef OPTION_HC Color_HC, #endif @@ -487,118 +537,33 @@ #if TINTING Color_tint, #endif +#if OFF_FOCUS_FADING + Color_fade, +#endif NRS_COLORS, /* */ #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<display + /* convert pixel dimensions to row/column values. Everything as int32_t */ #define Pixel2Col(x) Pixel2Width((int32_t)(x)) #define Pixel2Row(y) Pixel2Height((int32_t)(y)) -#define Pixel2Width(x) ((int32_t)(x) / (int32_t)TermWin.fwidth) -#define Pixel2Height(y) ((int32_t)(y) / (int32_t)TermWin.fheight) +#define Pixel2Width(x) ((int32_t)(x) / (int32_t)fwidth) +#define Pixel2Height(y) ((int32_t)(y) / (int32_t)fheight) #define Col2Pixel(col) ((int32_t)Width2Pixel(col)) #define Row2Pixel(row) ((int32_t)Height2Pixel(row)) -#define Width2Pixel(n) ((int32_t)(n) * (int32_t)TermWin.fwidth) -#define Height2Pixel(n) ((int32_t)(n) * (int32_t)TermWin.fheight) +#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 TermWin_TotalWidth() ((int32_t)TermWin.width) -#define TermWin_TotalHeight() ((int32_t)TermWin.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) +#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)< 1) /* rendition style flags */ -# define menuBar_height() (TermWin.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) @@ -817,13 +801,6 @@ # define XPMClearArea(a, b, c, d, e, f, g) #endif -#ifndef STRICT_FONT_CHECKING -# define rxvt_get_fontwidest(font) ((font)->max_bounds.width) -#endif - -#define rxvt_Gr_ButtonPress(x,y) rxvt_Gr_ButtonReport (R, 'P',(x),(y)) -#define rxvt_Gr_ButtonRelease(x,y) rxvt_Gr_ButtonReport (R, 'R',(x),(y)) - #ifdef UTMP_SUPPORT # if !defined(RXVT_UTMPX_FILE) || !defined(HAVE_STRUCT_UTMPX) # undef HAVE_UTMPX_H @@ -866,6 +843,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, ...); @@ -875,6 +853,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 (); /* ***************************************************************************** @@ -906,6 +886,8 @@ mbstate () { reset (); } }; +#define UNICODE_MASK 0x1fffffUL + #if UNICODE3 # define COMPOSE_LO 0x40000000UL # define COMPOSE_HI 0x400fffffUL @@ -944,8 +926,17 @@ #endif -struct rxvt_term : rxvt_vars { +#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 + 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 @@ -970,8 +961,9 @@ #ifdef POINTER_BLANK hidden_pointer:1, #endif -// enc_utf8:1, /* wether terminal reads/writes utf-8 */ + enc_utf8:1, /* wether locale uses utf-8 */ seen_input:1, /* wether we have seen some program output yet */ + seen_resize:1, /* wether we had a resize event */ parsed_geometry:1; unsigned char refresh_type, @@ -983,8 +975,8 @@ selection_type; /* ---------- */ short rvideo; - int16_t num_scr; /* screen: number lines scrolled */ - unsigned int prev_ncol, /* screen: previous number of columns */ + int num_scr; /* screen: number lines scrolled */ + int prev_ncol, /* screen: previous number of columns */ prev_nrow; /* screen: previous number of rows */ /* ---------- */ rend_t rstyle; @@ -1025,12 +1017,10 @@ # endif allowedxerror; /* ---------- */ - unsigned int ModMetaMask, - ModNumLockMask, -#ifndef NO_BRIGHTCOLOR - colorfgbg, -#endif - old_width, /* last used width in screen resize */ + unsigned int ModLevel3Mask, + ModMetaMask, + ModNumLockMask; + int old_width, /* last used width in screen resize */ old_height; /* last used height in screen resize */ unsigned long priv_modes, SavedModes; @@ -1068,11 +1058,10 @@ Time selection_time, selection_request_time; pid_t cmd_pid; /* process id of child */ + char * incr_buf; + size_t incr_buf_size, incr_buf_fill; /* ---------- */ Cursor leftptr_cursor; -#ifdef POINTER_BLANK - Cursor blank_cursor; -#endif /* ---------- */ #ifndef NO_BACKSPACE_KEY const char *key_backspace; @@ -1080,11 +1069,6 @@ #ifndef NO_DELETE_KEY const char *key_delete; #endif -#ifdef USE_XIM - rxvt_xim *input_method; - XIC Input_Context; - XIMStyle input_style; -#endif struct mouse_event MEvent; XComposeStatus compose; ttymode_t tio; @@ -1130,8 +1114,9 @@ void scr_overlay_off (); void scr_overlay_set (int x, int y, text_t text, - rend_t rend = SET_BGCOLOR (SET_FGCOLOR (RS_None, Color_bg), Color_fg)); + rend_t rend = OVERLAY_RSTYLE); void scr_overlay_set (int x, int y, const char *s); + void scr_overlay_set (int x, int y, const wchar_t *s); #endif vector allocated; // free these memory blocks with free() @@ -1141,16 +1126,15 @@ 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 */ stringvec *argv, *envv; /* if != 0, will be freed on destroy time */ + #ifdef KEYSYM_RESOURCE - const unsigned char *Keysym_map[256]; + keyboard_manager *keyboard; #endif + const char *rs[NUM_RESOURCES]; /* command input buffering */ unsigned char *cmdbuf_ptr, *cmdbuf_endp; @@ -1167,12 +1151,13 @@ void commit_iso14755 (); int hex_keyval (XKeyEvent &ev); # if ISO_14755 - void iso14755_51 (wchar_t ch); + 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 - void paste (const unsigned char *data, unsigned int len); + // modifies first argument(!) + void paste (unsigned char *data, unsigned int len); void flush (); @@ -1224,21 +1209,21 @@ void tt_printf (const char *fmt,...); void tt_write (const unsigned 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 (); bool init (int argc, const char *const *argv); bool init_vars (); 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 (); @@ -1247,15 +1232,19 @@ void init_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 (); void create_windows (int argc, const char *const *argv); - void resize_all_windows (unsigned int width, unsigned int height, int ignoreparent); - void window_calc (unsigned int width, unsigned int height); + void resize_all_windows (unsigned int newwidth, unsigned int newheight, int ignoreparent); + void window_calc (unsigned int newwidth, unsigned int newheight); #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); @@ -1292,6 +1281,8 @@ void mouse_report (XButtonEvent &ev); void button_press (XButtonEvent &ev); void button_release (XButtonEvent &ev); + void focus_in (); + void focus_out (); int check_our_parents (); #ifdef PRINTPIPE FILE *popen_printer (); @@ -1320,14 +1311,15 @@ void cleanutent (); // main.C void privileged_utmp (rxvt_privaction action); - bool change_font (const char *fontname); - bool font_up_down (int n, int direction); + 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); void set_colorfgbg (); int rXParseAllocColor (rxvt_color * screen_in_out, const char *colour); - void set_widthheight (unsigned int width, unsigned int height); + void set_widthheight (unsigned int newwidth, unsigned int newheight); #ifdef MENUBAR // menubar.C @@ -1363,20 +1355,83 @@ #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 lalloc (line_t &l) + { + 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) + { + if (!l.t) + return; + + 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)); + + 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); 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); +#if ENABLE_FRILLS + void scr_erase_savelines (); + void scr_backindex (); + void scr_forwardindex (); +#endif 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_remap_chars (const line_t &l); void scr_poweron (); void scr_cursor (int mode); @@ -1386,9 +1441,7 @@ 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_backindex (); - void scr_forwardindex (); + void scr_tab (int count, bool ht = false); void scr_gotorc (int row, int col, int relative); void scr_index (enum page_dirn direction); void scr_erase_line (int mode); @@ -1408,18 +1461,19 @@ 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); 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); @@ -1459,7 +1513,7 @@ void get_options (int argc, const char *const *argv); int parse_keysym (const char *str, const char *arg); void get_xdefaults (FILE *stream, const char *name); - void extract_resources (Display *display, const char *name); + void extract_resources (); // xpm.C int scale_pixmap (const char *geom); void resize_pixmap ();