#ifndef RXVT_H_ /* include once only */
#define RXVT_H_
-#include "rxvtlib.h"
+#include <cstdio>
+#include <cctype>
+#include <cerrno>
+#include <cstdarg>
+#include <cstdlib>
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#include <sys/types.h>
+#include <unistd.h>
+#include <cstring>
+#include <assert.h>
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#ifdef HAVE_SYS_STRREDIR_H
+#include <sys/strredir.h>
+#endif
+
+#if HAVE_CWCHAR
+# include <cwchar>
+#elif HAVE_WCHAR_H
+# include <wchar.h>
+#else
+// stdlib.h might provide it
+#endif
+
+using namespace std;
+
+extern "C" {
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xresource.h>
+}
+
+#if UNICODE_3
+typedef uint32_t text_t;
+#else
+typedef uint16_t text_t; // saves lots of memory
+#endif
+typedef uint32_t rend_t;
+typedef int32_t tlen_t; // was int16_t, but this results in smaller code and memory use
+typedef int32_t tlen_t_; // specifically for use in the line_t structure
#include "feature.h"
# define ENABLE_XIM_ONTHESPOT 1
# define CURSOR_BLINK 1
# define OPTION_HC 1
+# define BUILTIN_GLYPHS 1
#else
# define ENABLE_MINIMAL 1
#endif
#include <X11/keysym.h>
#include <X11/keysymdef.h>
#include <X11/Xatom.h>
-#if ENABLE_FRILLS
-# include <X11/Xmd.h>
-#endif
#include "encoding.h"
#include "rxvtutil.h"
#include "rxvtfont.h"
#include "rxvttoolkit.h"
-#include "iom.h"
+#include "scrollbar.h"
+#include "ev_cpp.h"
#include "salloc.h"
#include "libptytty.h"
* SYSTEM HACKS
*****************************************************************************
*/
-/* Consistent defines - please report on the necessity
- * @ Unixware: defines (__svr4__)
- */
-#if defined (SVR4) && !defined (__svr4__)
-# define __svr4__ 1
-#endif
-#if defined (sun) && !defined (__sun__)
-# define __sun__ 1
-#endif
#ifndef HAVE_XPOINTER
typedef char *XPointer;
#endif
#include <termios.h>
-typedef struct termios ttymode_t;
-#ifdef HAVE_AFTERIMAGE
-# include <afterimage.h>
-#undef min
-#undef max
-#endif
+#include "background.h"
#ifndef STDIN_FILENO
# define STDIN_FILENO 0
# define STDERR_FILENO 2
#endif
+#ifndef EXIT_SUCCESS /* missing from <stdlib.h> */
+# define EXIT_SUCCESS 0 /* exit function success */
+# define EXIT_FAILURE 1 /* exit function failure */
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX 16384
+#endif
+
/****************************************************************************/
// exception thrown on fatal (per-instance) errors
/*
*****************************************************************************
- * PROTOTYPES
+ * PROTOTYPES
*****************************************************************************
*/
// main.C
-void * rxvt_malloc (size_t size);
-void * rxvt_calloc (size_t number, size_t size);
-void * rxvt_realloc (void *ptr, size_t size);
+#define SET_LOCALE(locale) rxvt_set_locale (locale)
+extern bool rxvt_set_locale (const char *locale) NOTHROW;
+extern void rxvt_push_locale (const char *locale) NOTHROW;
+extern void rxvt_pop_locale () NOTHROW;
+void rxvt_init ();
// misc.C
char * rxvt_wcstombs (const wchar_t *str, int len = -1);
char * rxvt_wcstoutf8 (const wchar_t *str, int len = -1);
wchar_t * rxvt_utf8towcs (const char *str, int len = -1);
-#define rxvt_strdup(s) ((s) ? strdup(s) : 0)
-
-char * rxvt_r_basename (const char *str) NOTHROW;
+const char * rxvt_basename (const char *str) NOTHROW;
void rxvt_vlog (const char *fmt, va_list arg_ptr) NOTHROW;
void rxvt_log (const char *fmt,...) NOTHROW;
void rxvt_warn (const char *fmt,...) NOTHROW;
void rxvt_fatal (const char *fmt, ...) THROW ((class rxvt_failure_exception)) NORETURN;
void rxvt_exit_failure () THROW ((class rxvt_failure_exception)) NORETURN;
-int rxvt_Str_match (const char *s1, const char *s2) NOTHROW;
-const char * rxvt_Str_skip_space (const char *str) NOTHROW;
-char * rxvt_Str_trim (char *str) NOTHROW;
-int rxvt_Str_escaped (char *str) NOTHROW;
+char * rxvt_strtrim (char *str) NOTHROW;
char ** rxvt_splitcommastring (const char *cs) NOTHROW;
void rxvt_freecommastring (char **cs) NOTHROW;
+void * rxvt_malloc (size_t size);
+void * rxvt_calloc (size_t number, size_t size);
+void * rxvt_realloc (void *ptr, size_t size);
+
/////////////////////////////////////////////////////////////////////////////
// temporarily replace the process environment
extern char **environ;
extern char **rxvt_environ; // the original environ pointer
-static inline void set_environ (stringvec *envv)
+static inline void
+set_environ (stringvec *envv)
{
#if ENABLE_PERL
assert (envv);
environ = (char **)envv->begin ();
}
-static inline void set_environ (char **envv)
+static inline void
+set_environ (char **envv)
{
#if ENABLE_PERL
assert (envv);
* STRUCTURES AND TYPEDEFS
*****************************************************************************
*/
-struct grwin_t;
-
-/* If we're using either the rxvt scrollbar, keep the
- * scrollColor resource.
- */
-#if defined(RXVT_SCROLLBAR) || defined(NEXT_SCROLLBAR) || defined(PLAIN_SCROLLBAR)
-# define KEEP_SCROLLCOLOR 1
-#else
-# undef KEEP_SCROLLCOLOR
-#endif
-
-#if defined(XPM_BACKGROUND) || defined(ENABLE_TRANSPARENCY)
-# define HAVE_BG_PIXMAP 1/* to simplify further usage */
-struct bgPixmap_t {
-
- enum {
- geometrySet = (1UL<<0),
- propScale = (1UL<<1),
- geometryFlags = (geometrySet|propScale),
-
- tintSet = (1UL<<8),
- tintNeeded = (1UL<<9),
- tintWholesome = (1UL<<10),
- tintServerSide = (1UL<<11),
- tintFlags = (tintSet|tintServerSide|tintNeeded|tintWholesome),
- blurNeeded = (1UL<<12),
-
- isTransparent = (1UL<<16),
- isInvalid = (1UL<<17)
- };
-
- unsigned long flags;
-
- enum {
- transpPmapTiled = (1UL<<0),
- transpPmapTinted = tintNeeded,
- transpPmapBlured = blurNeeded,
- transpTransformations = (tintNeeded|blurNeeded)
- }; /* this flags are returned by make_transparency_pixmap if called */
-
-# ifdef XPM_BACKGROUND
-# ifdef HAVE_AFTERIMAGE
- ASImage *original_asim;
- bool render_asim (ASImage *background, ARGB32 background_tint);
-# endif
-
- enum { defaultScale = 100, defaultAlign = 50 };
-
- unsigned int h_scale, v_scale;/* percents of the window size */
- int h_align, v_align; /* percents of the window size:
- 0 - left align, 50 - center, 100 - right */
- void unset_geometry () { flags = flags & ~geometryFlags; };
- bool set_geometry (const char *geom);
- void set_defaultGeometry ()
- {
- h_scale = v_scale = defaultScale;
- h_align = v_align = defaultAlign;
- flags |= geometrySet;
- };
-
- bool set_file (const char *file);
-# endif /* XPM_BACKGROUND */
-
- rxvt_term *target;
- bool set_target (rxvt_term *new_target);
-
-# ifdef ENABLE_TRANSPARENCY
- int root_depth; /* obtained when target is set */
- Pixmap root_pixmap; /* current root pixmap set */
- rxvt_color tint;
- int shade;
- int h_blurRadius, v_blurRadius;
-
- bool set_transparent ();
- bool set_blur_radius (const char *geom);
- bool set_tint (rxvt_color &new_tint);
- bool unset_tint ();
- bool set_shade (const char *shade_str);
- bool set_root_pixmap ();
-
- unsigned long make_transparency_pixmap ();/* returns combination of the transpTransformations flags */
-# endif
- double invalid_since;
-
- Pixmap pixmap;
- unsigned int pmap_width, pmap_height;
- unsigned int pmap_depth;
-
- bool window_size_sensitive ();
- bool need_client_side_rendering ();
- void apply ();
- bool render ();
- void invalidate () {
- if (!(flags & isInvalid))
- {
- flags |= isInvalid;
- invalid_since = NOW;
- }
- };
-};
-#else
-# undef HAVE_BG_PIXMAP
-#endif
/*
* the 'essential' information for reporting Mouse Events
* pared down from XButtonEvent
*/
-struct mouse_event {
+struct mouse_event
+{
int clicks;
Time time; /* milliseconds */
unsigned int state; /* key or button mask */
unsigned int button; /* detail */
};
-#if ENABLE_FRILLS
-typedef struct _mwmhints {
- CARD32 flags;
- CARD32 functions;
- CARD32 decorations;
- INT32 input_mode;
- CARD32 status;
-} 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_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_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_CURRENT 0
+# define XEMBED_FOCUS_FIRST 1
# define XEMBED_FOCUS_LAST 2
# define XEMBED_MAPPED (1 << 0)
/* COLORTERM, TERM environment variables */
#define COLORTERMENV "rxvt"
-#ifdef XPM_BACKGROUND
+#ifdef BG_IMAGE_FROM_FILE
# define COLORTERMENVFULL COLORTERMENV "-xpm"
#else
# define COLORTERMENVFULL COLORTERMENV
# define NO_MOUSE_REPORT_SCROLLBAR 1
#endif
-/* now look for other badly set stuff */
-
-#if !defined (EACCESS) && defined(EAGAIN)
-# define EACCESS EAGAIN
-#endif
-
-#ifndef EXIT_SUCCESS /* missing from <stdlib.h> */
-# define EXIT_SUCCESS 0 /* exit function success */
-# define EXIT_FAILURE 1 /* exit function failure */
-#endif
-
#define scrollBar_esc 30
-#if defined(RXVT_SCROLLBAR) || defined(NEXT_SCROLLBAR) || defined(XTERM_SCROLLBAR) || defined(PLAIN_SCROLLBAR)
-# define HAVE_SCROLLBARS 1
-#endif
-
-#define R_SB_ALIGN_CENTRE 0
-#define R_SB_ALIGN_TOP 1
-#define R_SB_ALIGN_BOTTOM 2
-
-#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
-#define SB_WIDTH_PLAIN 7
-#ifndef SB_WIDTH_RXVT
-# define SB_WIDTH_RXVT 10
+#if !defined (RXVT_SCROLLBAR) && !defined (NEXT_SCROLLBAR)
+# define NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING 1
#endif
-/*
- * NeXT scrollbar defines
- */
-#define SB_PADDING 1
-#define SB_BORDER_WIDTH 1
-#define SB_BEVEL_WIDTH_UPPER_LEFT 1
-#define SB_BEVEL_WIDTH_LOWER_RIGHT 2
-#define SB_LEFT_PADDING (SB_PADDING + SB_BORDER_WIDTH)
-#define SB_MARGIN_SPACE (SB_PADDING * 2)
-#define SB_BUTTON_WIDTH (SB_WIDTH_NEXT - SB_MARGIN_SPACE - SB_BORDER_WIDTH)
-#define SB_BUTTON_HEIGHT (SB_BUTTON_WIDTH)
-#define SB_BUTTON_SINGLE_HEIGHT (SB_BUTTON_HEIGHT + SB_PADDING)
-#define SB_BUTTON_BOTH_HEIGHT (SB_BUTTON_SINGLE_HEIGHT * 2)
-#define SB_BUTTON_TOTAL_HEIGHT (SB_BUTTON_BOTH_HEIGHT + SB_PADDING)
-#define SB_BUTTON_BEVEL_X (SB_LEFT_PADDING)
-#define SB_BUTTON_FACE_X (SB_BUTTON_BEVEL_X + SB_BEVEL_WIDTH_UPPER_LEFT)
-#define SB_THUMB_MIN_HEIGHT (SB_BUTTON_WIDTH - (SB_PADDING * 2))
- /*
- * +-------------+
- * | | <---< SB_PADDING
- * | ::::::::::: |
- * | ::::::::::: |
- * '''''''''''''''''
- * ,,,,,,,,,,,,,,,,,
- * | ::::::::::: |
- * | ::::::::::: |
- * | +---------------< SB_BEVEL_WIDTH_UPPER_LEFT
- * | | :::::::: |
- * | V :::: vv-------< SB_BEVEL_WIDTH_LOWER_RIGHT
- * | +---------+ |
- * | | ......%%| |
- * | | ......%%| |
- * | | .. ()..%%| |
- * | | ......%%| |
- * | | %%%%%%%%| |
- * | +---------+ | <.........................
- * | | <---< SB_PADDING :
- * | +---------+ | <-+.......... :---< SB_BUTTON_TOTAL_HEIGHT
- * | | ......%%| | | : :
- * | | ../\..%%| | |---< SB_BUTTON_HEIGHT :
- * | | %%%%%%%%| | | : :
- * | +---------+ | <-+ : :
- * | | : :
- * | +---------+ | <-+ :---< SB_BUTTON_BOTH_HEIGHT
- * | | ......%%| | | : :
- * | | ..\/..%%| | | : :
- * | | %%%%%%%%| | |---< SB_BUTTON_SINGLE_HEIGHT
- * | +---------+ | | : :
- * | | | : :
- * +-------------+ <-+.........:............:
- * ^^|_________| :
- * || | :
- * || +---< SB_BUTTON_WIDTH
- * || :
- * |+------< SB_PADDING
- * |: :
- * +----< SB_BORDER_WIDTH
- * : :
- * :............:
- * |
- * +---< SB_WIDTH_NEXT
- */
-
enum {
NO_REFRESH = 0, /* Window not visible at all! */
FAST_REFRESH = 1, /* Fully exposed window */
#define RS_None 0
-#define RS_fgMask 0x0000007fUL // 128 colors
-#define RS_bgMask 0x00003f80UL // 128 colors
+#ifndef USE_256_COLORS
+#define RS_colorMask 0x0000007fUL // 128 colors
+#else
+#define RS_colorMask 0x000001ffUL
+#endif
+#define RS_fgShift 0
+#define RS_bgShift Color_Bits
+#define RS_fgMask (RS_colorMask << RS_fgShift)
+#define RS_bgMask (RS_colorMask << RS_bgShift)
// font styles
-#define RS_Bold 0x00004000UL // value 1
-#define RS_Italic 0x00008000UL // value 2
+#define RS_Bold 0x08000000UL // value 1
+#define RS_Italic 0x10000000UL // value 2
// fake styles
-#define RS_Blink 0x00010000UL // blink
-#define RS_RVid 0x00020000UL // reverse video
-#define RS_Uline 0x00040000UL // underline
-
-// toggle this to force redraw, must be != RS_Careful
-#define RS_redraw 0x01000000UL
+#define RS_Blink 0x20000000UL // blink
+#define RS_RVid 0x40000000UL // reverse video
+#define RS_Uline 0x80000000UL // underline
// 5 custom bits for extensions
-#define RS_customCount 32
-#define RS_customMask 0x00f80000UL
-#define RS_customShift 19
+#define RS_customCount 16
+#define RS_customMask 0x07800000UL
+#define RS_customShift 23
+
+// must have space for rxvt_fontset::fontCount * 2 + 2 values
+#define RS_fontMask 0x007c0000UL // includes RS_Careful
+#define RS_fontShift 18
+#define RS_Careful 0x00010000UL /* be careful when drawing these */
-// other flags
-#define RS_Careful 0x80000000UL /* be careful when drawing these */
+// toggle this to force redraw, must be != RS_Careful and otherwise "pretty neutral"
+#define RS_redraw 0x00020000UL
#define RS_styleCount 4
#define RS_styleMask (RS_Bold | RS_Italic)
-#define RS_styleShift 14
+#define RS_styleShift 27
#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 DEFAULT_RSTYLE (RS_None | (Color_fg << RS_fgShift) | (Color_bg << RS_bgShift))
+#define OVERLAY_RSTYLE (RS_None | (Color_Black << RS_fgShift) | (Color_Yellow << RS_bgShift))
#define Sel_none 0 /* Not waiting */
#define Sel_normal 0x01 /* normal selection */
C0_BS , C0_HT , C0_LF , C0_VT , C0_FF , C0_CR , C0_SO , C0_SI ,
C0_DLE, C0_DC1, C0_DC2, D0_DC3, C0_DC4, C0_NAK, C0_SYN, C0_ETB,
C0_CAN, C0_EM , C0_SUB, C0_ESC, C0_IS4, C0_IS3, C0_IS2, C0_IS1,
-};
+};
#define CHAR_ST 0x9c /* 0234 */
/*
XTerm_title = 2,
XTerm_property = 3, // change X property
XTerm_Color = 4, // change colors
- XTerm_Color00 = 10, // not implemented, CLASH!
- XTerm_Color01 = 11, // not implemented
+ XTerm_Color00 = 10, // change fg color
+ XTerm_Color01 = 11, // change bg color
XTerm_Color_cursor = 12, // change actual 'Cursor' color
XTerm_Color_pointer_fg = 13, // change actual 'Pointer' fg color
XTerm_Color_pointer_bg = 14, // change actual 'Pointer' bg color
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
*/
- Rxvt_Color_BD = 18, // change actual 'Bold' color
- Rxvt_Color_UL = 19, // change actual 'Underline' color
+
+ // deprecated
+ Rxvt_Color_BD = 18,
+ Rxvt_Color_UL = 19,
+ Rxvt_restoreFG = 39,
+ Rxvt_restoreBG = 49,
+
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_Color_IT = 704, // change actual 'Italic' colour
URxvt_Color_tint = 705, // change actual tint colour
- URxvt_Color_BD = 706,
- URxvt_Color_UL = 707,
+ URxvt_Color_BD = 706, // change actual 'Bold' color
+ URxvt_Color_UL = 707, // change actual 'Underline' color
+ URxvt_Color_border = 708,
URxvt_font = 710,
URxvt_boldFont = 711,
URxvt_view_up = 720,
URxvt_view_down = 721,
- URxvt_perl = 777,
+ URxvt_perl = 777, // for use by perl extensions, starts with "extension-name;"
};
/* Words starting with `Color_' are colours. Others are counts */
Color_White = maxCOLOR,
#endif
minTermCOLOR = Color_White + 1,
+#ifndef USE_256_COLORS
maxTermCOLOR = Color_White + 72,
+#else
+ maxTermCOLOR = Color_White + 240,
+#endif
#ifndef NO_CURSORCOLOR
Color_cursor,
Color_cursor2,
#ifdef OPTION_HC
Color_HC,
#endif
-#ifdef KEEP_SCROLLCOLOR
Color_scroll,
+#ifdef RXVT_SCROLLBAR
Color_trough,
#endif
#if ENABLE_TRANSPARENCY
Color_fade,
#endif
NRS_COLORS, /* */
-#ifdef KEEP_SCROLLCOLOR
+#ifdef RXVT_SCROLLBAR
Color_topShadow = NRS_COLORS,
Color_bottomShadow,
TOTAL_COLORS
#endif
};
+#ifndef USE_256_COLORS
#define Color_Bits 7 // 0 .. maxTermCOLOR
+#else
+#define Color_Bits 9 // 0 .. maxTermCOLOR
+#endif
/*
* Resource list
#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<<20) */
+#define PrivMode_MouseBtnEvent (1UL<<20)
+#define PrivMode_MouseAnyEvent (1UL<<21)
+#define PrivMode_BracketPaste (1UL<<22)
-#define PrivMode_mouse_report (PrivMode_MouseX10|PrivMode_MouseX11)
+#define PrivMode_mouse_report (PrivMode_MouseX10|PrivMode_MouseX11|PrivMode_MouseBtnEvent|PrivMode_MouseAnyEvent)
#ifdef ALLOW_132_MODE
# define PrivMode_Default (PrivMode_Autowrap|PrivMode_ShiftKeys|PrivMode_VisibleCursor|PrivMode_132OK)
#define IMBUFSIZ 128 // input modifier buffer sizes
#define KBUFSZ 512 // size of keyboard mapping buffer
#define CBUFSIZ 2048 // size of command buffer
+#define CBUFCNT 8 // never call pty_fill/cmd_parse more than this often in a row
#define UBUFSIZ 2048 // character buffer
-#ifndef PATH_MAX
-# define PATH_MAX 16384
+#if ENABLE_FRILLS
+# include <X11/Xmd.h>
+typedef struct _mwmhints
+{
+ CARD32 flags;
+ CARD32 functions;
+ CARD32 decorations;
+ INT32 input_mode;
+ CARD32 status;
+} MWMHints;
#endif
/* Motif window hints */
#define Width2Pixel(n) ((int32_t)(n) * (int32_t)fwidth)
#define Height2Pixel(n) ((int32_t)(n) * (int32_t)fheight)
-// for m >= -n, ensure remainder lies between 0..n-1
-#define MOD(m,n) (((m) + (n)) % (n))
+#define LINENO_of(t,n) MOD ((t)->term_start + int(n), (t)->total_rows)
+#define ROW_of(t,n) (t)->row_buf [LINENO_of ((t), n)]
-#define LINENO(n) MOD (term_start + int(n), total_rows)
-#define ROW(n) row_buf [LINENO (n)]
+#define LINENO(n) LINENO_of (this, n)
+#define ROW(n) ROW_of (this, n)
/* how to build & extract colors and attributes */
-#define GET_BASEFG(x) (((x) & RS_fgMask))
-#define GET_BASEBG(x) (((x) & RS_bgMask)>>Color_Bits)
+#define GET_BASEFG(x) (((x) & RS_fgMask) >> RS_fgShift)
+#define GET_BASEBG(x) (((x) & RS_bgMask) >> RS_bgShift)
#define GET_FONT(x) (((x) & RS_fontMask) >> RS_fontShift)
#define SET_FONT(x,fid) (((x) & ~RS_fontMask) | ((fid) << RS_fontShift))
#define GET_ATTR(x) (((x) & RS_attrMask))
#define GET_BGATTR(x) \
(((x) & RS_RVid) ? (((x) & (RS_attrMask & ~RS_RVid)) \
- | (((x) & RS_fgMask)<<Color_Bits)) \
+ | (((x) & RS_colorMask) << RS_bgShift)) \
: ((x) & (RS_attrMask | RS_bgMask)))
-#define SET_FGCOLOR(x,fg) (((x) & ~RS_fgMask) | (fg))
-#define SET_BGCOLOR(x,bg) (((x) & ~RS_bgMask) | ((bg)<<Color_Bits))
+#define SET_FGCOLOR(x,fg) (((x) & ~RS_fgMask) | ((fg) << RS_fgShift))
+#define SET_BGCOLOR(x,bg) (((x) & ~RS_bgMask) | ((bg) << RS_bgShift))
#define SET_ATTR(x,a) (((x) & ~RS_attrMask) | (a))
#define RS_SAME(a,b) (!(((a) ^ (b)) & ~RS_Careful))
#define ISSET_PIXCOLOR(idx) (!!rs[Rs_color + (idx)])
#if ENABLE_STYLES
-# define FONTSET(style) fontset[GET_STYLE (style)]
+# define FONTSET_of(t,style) (t)->fontset[GET_STYLE (style)]
#else
-# define FONTSET(style) fontset[0]
+# define FONTSET_of(t,style) (t)->fontset[0]
#endif
-#ifdef HAVE_SCROLLBARS
-# define scrollbar_TotalWidth() (scrollBar.width + sb_shadow * 2)
-#else
-# define scrollbar_TotalWidth() (0)
-#endif
-#define scrollbar_isMotion() (scrollBar.state == 'm')
-#define scrollbar_isUp() (scrollBar.state == 'U')
-#define scrollbar_isDn() (scrollBar.state == 'D')
-#define scrollbar_isUpDn() isupper (scrollBar.state)
-#define isScrollbarWindow(w) (scrollBar.state && (w) == scrollBar.win)
-
-#define scrollbarnext_dnval() (scrollBar.end + (scrollBar.width + 1))
-#define scrollbarnext_upButton(y) ((y) > scrollBar.end \
- && (y) <= scrollbarnext_dnval ())
-#define scrollbarnext_dnButton(y) ((y) > scrollbarnext_dnval())
-#define SCROLLNEXT_MINHEIGHT SB_THUMB_MIN_HEIGHT
-#define scrollbarrxvt_upButton(y) ((y) < scrollBar.beg)
-#define scrollbarrxvt_dnButton(y) ((y) > scrollBar.end)
-#define SCROLLRXVT_MINHEIGHT 10
-#define SCROLLXTERM_MINHEIGHT 10
-
-#define scrollbar_minheight() (scrollBar.style == R_SB_NEXT \
- ? SCROLLNEXT_MINHEIGHT \
- : SCROLLRXVT_MINHEIGHT)
-#define scrollbar_above_slider(y) ((y) < scrollBar.top)
-#define scrollbar_below_slider(y) ((y) > scrollBar.bot)
-#define scrollbar_position(y) ((y) - scrollBar.beg)
-#define scrollbar_size() (scrollBar.end - scrollBar.beg \
- - scrollbar_minheight ())
+#define FONTSET(style) FONTSET_of (this, style)
typedef callback<void (const char *)> log_callback;
typedef callback<int (int)> getfd_callback;
-#define SET_LOCALE(locale) rxvt_set_locale (locale)
-extern bool rxvt_set_locale (const char *locale) NOTHROW;
-extern void rxvt_push_locale (const char *locale) NOTHROW;
-extern void rxvt_pop_locale () NOTHROW;
-
/****************************************************************************/
#define LINE_LONGER 0x0001 // line is continued on the next row
#define LINE_FILTER 0x0008 // line needs to be filtered before display (NYI)
#define LINE_BIDI 0x0010 // line needs bidi (NYI)
-struct line_t {
+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
+ tlen_t_ l; // length of each text line
uint32_t f; // flags
bool is_longer ()
/****************************************************************************/
-// primivite wrapper around mbstate_t to ensure initialisation
-struct mbstate {
+// primitive wrapper around mbstate_t to ensure initialisation
+struct mbstate
+{
mbstate_t mbs;
operator mbstate_t *() { return &mbs; }
#define UNICODE_MASK 0x1fffffUL
-#if UNICODE3
+#if UNICODE_3
# define COMPOSE_LO 0x40000000UL
# define COMPOSE_HI 0x400fffffUL
# define IS_COMPOSE(n) ((int32_t)(n) >= COMPOSE_LO)
// 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 {
+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 {
+class rxvt_composite_vec
+{
vector<compose_char> v;
public:
text_t compose (unicode_t c1, unicode_t c2 = NOCHAR);
class keyboard_manager;
#endif
-struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen {
+typedef struct rxvt_term *rxvt_t;
+
+extern rxvt_t rxvt_current_term;
+
+#define SET_R(r) rxvt_current_term = const_cast<rxvt_term *>(r)
+#define GET_R rxvt_current_term
+
+/* ------------------------------------------------------------------------- */
+struct overlay_base
+{
+ int x, y, w, h; // overlay dimensions
+ text_t **text;
+ rend_t **rend;
+
+ // while tempting to add swap() etc. here, it effetcively only increases code size
+};
+
+/* ------------------------------------------------------------------------- */
+
+typedef struct
+{
+ int row;
+ int col;
+} row_col_t;
+
+/*
+ * terminal limits:
+ *
+ * width : 1 <= width
+ * height : 1 <= height
+ * ncol : 1 <= ncol <= MAX(tlen_t)
+ * nrow : 1 <= nrow <= MAX(int)
+ * saveLines : 0 <= saveLines <= MAX(int)
+ * term_start : 0 <= term_start < saveLines
+ * total_rows : nrow + saveLines
+ *
+ * top_row : -saveLines <= top_row <= 0
+ * view_start : top_row <= view_start <= 0
+ *
+ * | most coordinates are stored relative to term_start,
+ * ROW_BUF | which is the first line of the terminal screen
+ * |························= row_buf[0]
+ * |························= row_buf[1]
+ * |························= row_buf[2] etc.
+ * |
+ * +------------+···········= term_start + top_row
+ * | scrollback |
+ * | scrollback +---------+·= term_start + view_start
+ * | scrollback | display |
+ * | scrollback | display |
+ * +------------+·display·+·= term_start
+ * | terminal | display |
+ * | terminal +---------+
+ * | terminal |
+ * | terminal |
+ * +------------+···········= term_start + nrow - 1
+ * |
+ * |
+ * END······················= total_rows
+ */
+
+struct TermWin_t
+{
+ int width; /* window width [pixels] */
+ int height; /* window height [pixels] */
+ int fwidth; /* font width [pixels] */
+ int fheight; /* font height [pixels] */
+ int fbase; /* font ascent (baseline) [pixels] */
+ int ncol; /* window columns [characters] */
+ int nrow; /* window rows [characters] */
+ int focus; /* window has focus */
+ int mapped; /* window state mapped? */
+ int int_bwidth; /* internal border width */
+ int ext_bwidth; /* external border width */
+ int lineSpace; /* number of extra pixels between rows */
+ int letterSpace; /* number of extra pixels between columns */
+ int saveLines; /* number of lines that fit in scrollback */
+ int total_rows; /* total number of rows in this terminal */
+ int term_start; /* term lines start here */
+ int view_start; /* scrollback view starts here */
+ int top_row; /* topmost row index of scrollback */
+ Window parent[6]; /* parent identifiers - we're parent[0] */
+ Window vt; /* vt100 window */
+ GC gc; /* GC for drawing */
+ Pixmap pixmap;
+ rxvt_drawable *drawable;
+ rxvt_fontset *fontset[4];
+};
+
+/*
+ * screen accounting:
+ * screen_t elements
+ * row: Cursor row position : 0 <= row < nrow
+ * col: Cursor column position : 0 <= col < ncol
+ * tscroll: Scrolling region top row inclusive : 0 <= row < nrow
+ * bscroll: Scrolling region bottom row inclusive : 0 <= row < nrow
+ *
+ * selection_t elements
+ * clicks: 1, 2 or 3 clicks - 4 indicates a special condition of 1 where
+ * nothing is selected
+ * beg: row/column of beginning of selection : never past mark
+ * mark: row/column of initial click : never past end
+ * end: row/column of one character past end of selection
+ * * Note: top_row <= beg.row <= mark.row <= end.row < nrow
+ * * Note: col == -1 ==> we're left of screen
+ *
+ */
+struct screen_t
+{
+ row_col_t cur; /* cursor position on the screen */
+ int tscroll; /* top of settable scroll region */
+ int bscroll; /* bottom of settable scroll region */
+ unsigned int charset; /* character set number [0..3] */
+ unsigned int flags; /* see below */
+ row_col_t s_cur; /* saved cursor position */
+ unsigned int s_charset; /* saved character set number [0..3] */
+ char s_charset_char;
+ rend_t s_rstyle; /* saved rendition style */
+};
+
+enum selection_op_t
+{
+ SELECTION_CLEAR = 0, /* nothing selected */
+ SELECTION_INIT, /* marked a point */
+ SELECTION_BEGIN, /* started a selection */
+ SELECTION_CONT, /* continued selection */
+ SELECTION_DONE /* selection put in CUT_BUFFER0 */
+};
+
+struct selection_t
+{
+ wchar_t *text; /* selected text */
+ unsigned int len; /* length of selected text */
+ unsigned int screen; /* screen being used */
+ unsigned int clicks; /* number of clicks */
+ selection_op_t op; /* current operation */
+ bool rect; /* rectangular selection? */
+ row_col_t beg; /* beginning of selection <= mark */
+ row_col_t mark; /* point of initial click <= end */
+ row_col_t end; /* one character past end point */
+ wchar_t *clip_text; /* text copied to the clipboard */
+ unsigned int clip_len; /* length of clipboard text */
+};
+
+/* ------------------------------------------------------------------------- */
+
+/* screen_t flags */
+#define Screen_Relative (1<<0) /* relative origin mode flag */
+#define Screen_VisibleCursor (1<<1) /* cursor visible? */
+#define Screen_Autowrap (1<<2) /* auto-wrap flag */
+#define Screen_Insert (1<<3) /* insert mode (vs. overstrike) */
+#define Screen_WrapNext (1<<4) /* need to wrap for next char? */
+#define Screen_DefaultFlags (Screen_VisibleCursor | Screen_Autowrap)
+
+/* rxvt_vars.options */
+enum {
+# define def(name,idx) Opt_ ## name = idx,
+# define nodef(name) Opt_ ## name = 0,
+# include "optinc.h"
+# undef nodef
+# undef def
+Opt_count
+};
+
+/* ------------------------------------------------------------------------- */
+
+struct rxvt_vars : TermWin_t
+{
+ scrollBar_t scrollBar;
+ uint8_t options[(Opt_count + 7) >> 3];
+ XSizeHints szHint;
+ rxvt_color *pix_colors;
+ Cursor TermWin_cursor; /* cursor for vt window */
+ int numlock_state;
+ line_t *row_buf; // all lines, scrollback + terminal, circular, followed by temp_buf
+ line_t *drawn_buf; // text on screen
+ line_t *swap_buf; // lines for swap buffer
+ char *tabs; /* per location: 1 == tab-stop */
+ screen_t screen;
+ screen_t swap;
+ selection_t selection;
+ rxvt_color pix_colors_focused[TOTAL_COLORS];
+#ifdef OFF_FOCUS_FADING
+ rxvt_color pix_colors_unfocused[TOTAL_COLORS];
+#endif
+};
+
+struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen
+{
// special markers with magic addresses
static const char resval_undef []; // options specifically unset
static const char resval_on []; // boolean options switched on
static const char resval_off []; // or off
-
+
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
struct mbstate mbstate; // current input multibyte state
unsigned char want_refresh:1,
-#ifdef ENABLE_TRANSPARENCY
- want_full_refresh:1, /* awaiting full screen refresh */
-#endif
current_screen:1, /* primary or secondary */
num_scr_allow:1,
bypass_keystate:1,
-#ifdef CURSOR_BLINK
+#if ENABLE_FRILLS
+ urgency_hint:1,
+#endif
+#if CURSOR_BLINK
hidden_cursor:1,
#endif
-#ifdef TEXT_BLINK
+#if TEXT_BLINK
hidden_text:1,
#endif
-#ifdef POINTER_BLANK
+#if POINTER_BLANK
hidden_pointer:1,
#endif
- 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 */
+ enc_utf8:1, /* whether locale uses utf-8 */
+ seen_input:1, /* whether we have seen some program output yet */
+ seen_resize:1, /* whether we had a resize event */
parsed_geometry:1;
unsigned char refresh_type,
#ifdef META8_OPTION
meta_char, /* Alt-key prefix */
#endif
- scrollbar_align,
selection_wait,
selection_type;
/* ---------- */
#ifndef NO_BELL
bool rvideo_bell;
#endif
- int num_scr; /* screen: number lines scrolled */
+ int num_scr; /* screen: number of lines scrolled */
int prev_ncol, /* screen: previous number of columns */
prev_nrow; /* screen: previous number of rows */
/* ---------- */
mouse_slip_wheel_speed,
#endif
refresh_count,
- last_bot, /* scrollbar last bottom position */
- last_top, /* scrollbar last top position */
- last_state, /* scrollbar last state */
- scrollbar_len,
window_vt_x,
window_vt_y,
- window_sb_x,
+ mouse_row,
+ mouse_col,
# ifdef POINTER_BLANK
pointerBlankDelay,
# endif
/* ---------- */
Atom *xa;
/* ---------- */
-#ifdef RXVT_SCROLLBAR
- GC scrollbarGC,
- topShadowGC,
- botShadowGC;
-#endif
-#ifdef XTERM_SCROLLBAR
- GC xscrollbarGC,
- ShadowGC;
-#endif
-#ifdef PLAIN_SCROLLBAR
- GC pscrollbarGC;
-#endif
-#ifdef NEXT_SCROLLBAR
- GC blackGC,
- whiteGC,
- grayGC,
- darkGC,
- stippleGC;
- Pixmap dimple,
- upArrow,
- downArrow,
- upArrowHi,
- downArrowHi;
-#endif
-/* ---------- */
Time selection_time,
- selection_request_time;
+ selection_request_time,
+ clipboard_time;
pid_t cmd_pid; /* process id of child */
char * incr_buf;
size_t incr_buf_size, incr_buf_fill;
/* ---------- */
- Cursor leftptr_cursor;
-/* ---------- */
-#ifndef NO_BACKSPACE_KEY
- const char *key_backspace;
-#endif
-#ifndef NO_DELETE_KEY
- const char *key_delete;
-#endif
struct mouse_event MEvent;
XComposeStatus compose;
- ttymode_t tio;
+ struct termios tio;
row_col_t oldcursor;
#ifdef HAVE_BG_PIXMAP
bgPixmap_t bgPixmap;
#ifdef HAVE_AFTERIMAGE
ASVisual *asv;
ASImageManager *asimman;
+
+ void init_asv ()
+ {
+ if (!asv)
+ asv = create_asvisual_for_id (dpy, display->screen, depth, XVisualIDFromVisual (visual), cmap, NULL);
+ }
#endif
#if ENABLE_OVERLAY
- int ov_x, ov_y, ov_w, ov_h; // overlay dimensions
- text_t **ov_text;
- rend_t **ov_rend;
+ overlay_base ov;
void scr_swap_overlay () NOTHROW;
void scr_overlay_new (int x, int y, int w, int h) NOTHROW;
#ifdef KEYSYM_RESOURCE
keyboard_manager *keyboard;
#endif
+#ifndef NO_RESOURCES
+ XrmDatabase option_db;
+#endif
const char *rs[NUM_RESOURCES];
/* command input buffering */
// 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, int x = 0, int y = -1);
void iso14755_54 (int x, int y);
# endif
#endif
- // modifies first argument(!)
- void paste (char *data, unsigned int len) NOTHROW;
-
- long vt_emask, vt_emask_perl, vt_emask_xim;
+ long vt_emask, vt_emask_perl, vt_emask_xim, vt_emask_mouse;
void vt_select_input () const NOTHROW
{
- XSelectInput (dpy, vt, vt_emask | vt_emask_perl | vt_emask_xim);
+ XSelectInput (dpy, vt, vt_emask | vt_emask_perl | vt_emask_xim | vt_emask_mouse);
}
#if ENABLE_TRANSPARENCY || ENABLE_PERL
xevent_watcher rootwin_ev;
#endif
#ifdef HAVE_BG_PIXMAP
- int update_background ();
- void update_background_cb (time_watcher &w);
- time_watcher update_background_ev;
+ void update_background ();
+#if TRACE_PIXMAPS
+ void trace_update_background (const char *file, int line);
+# define update_background() trace_update_background (__FILE__, __LINE__)
+#endif
+ void update_background_cb (ev::timer &w, int revents);
+ ev::timer update_background_ev;
#endif
void x_cb (XEvent &xev);
- void flush ();
xevent_watcher termwin_ev;
xevent_watcher vt_ev;
-#ifdef HAVE_SCROLLBARS
xevent_watcher scrollbar_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;
- void pty_cb (io_watcher &w, short revents); io_watcher pty_ev;
- void incr_cb (time_watcher &w) NOTHROW; time_watcher incr_ev;
+ void child_cb (ev::child &w, int revents); ev::child child_ev;
+ void destroy_cb (ev::idle &w, int revents); ev::idle destroy_ev;
+ void refresh_check ();
+ void flush ();
+ void flush_cb (ev::timer &w, int revents); ev::timer flush_ev;
+ bool pty_fill ();
+ void pty_cb (ev::io &w, int revents); ev::io pty_ev;
+ void incr_cb (ev::timer &w, int revents) NOTHROW; ev::timer incr_ev;
#ifdef CURSOR_BLINK
- void cursor_blink_cb (time_watcher &w); time_watcher cursor_blink_ev;
+ void cursor_blink_cb (ev::timer &w, int revents); ev::timer cursor_blink_ev;
#endif
#ifdef TEXT_BLINK
- void text_blink_cb (time_watcher &w); time_watcher text_blink_ev;
+ void text_blink_cb (ev::timer &w, int revents); ev::timer text_blink_ev;
#endif
-#ifndef NO_BELL
- void bell_cb (time_watcher &w); time_watcher bell_ev;
+#ifndef NO_BELL
+ void bell_cb (ev::timer &w, int revents); ev::timer bell_ev;
#endif
#ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
- void cont_scroll_cb (time_watcher &w); time_watcher cont_scroll_ev;
+ void cont_scroll_cb (ev::timer &w, int revents); ev::timer cont_scroll_ev;
#endif
#ifdef SELECTION_SCROLLING
- void sel_scroll_cb (time_watcher &w); time_watcher sel_scroll_ev;
+ void sel_scroll_cb (ev::timer &w, int revents); ev::timer sel_scroll_ev;
#endif
#if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)
- void slip_wheel_cb (time_watcher &w); time_watcher slip_wheel_ev;
+ void slip_wheel_cb (ev::timer &w, int revents); ev::timer slip_wheel_ev;
#endif
#ifdef POINTER_BLANK
- void pointer_cb (time_watcher &w); time_watcher pointer_ev;
+ void pointer_cb (ev::timer &w, int revents); ev::timer pointer_ev;
void pointer_blank ();
#endif
void pointer_unblank ();
void tt_write (const char *data, unsigned int len);
void pty_write ();
- void tt_winch ();
-
- rxvt_term ();
- ~rxvt_term ();
- void destroy ();
- void emergency_cleanup ();
-
- bool init (int argc, const char *const *argv, stringvec *envv);
-
- bool init (stringvec *argv, stringvec *envv)
+ void init (stringvec *argv, stringvec *envv)
{
this->argv = argv;
- return init (argv->size (), argv->begin (), envv);
+ init (argv->size (), argv->begin (), envv);
}
-
- bool init_vars ();
-
- bool pty_fill ();
void make_current () const // make this the "currently active" urxvt instance
{
rxvt_set_locale (locale);
}
- 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 ();
- void init_command (const char *const *argv);
- void run_command (const char *const *argv);
- int run_child (const char *const *argv);
-
- void color_aliases (int idx);
- void recolour_cursor ();
- void create_windows (int argc, const char *const *argv);
- 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;
void IMSetPosition ();
#endif
- void resize_scrollbar ();
-
// command.C
void key_press (XKeyEvent &ev);
void key_release (XKeyEvent &ev);
uint32_t next_octet () NOTHROW;
uint32_t cmd_get8 () THROW ((class out_of_input));
- bool cmd_parse ();
+ void cmd_parse ();
void mouse_report (XButtonEvent &ev);
void button_press (XButtonEvent &ev);
void button_release (XButtonEvent &ev);
void focus_in ();
void focus_out ();
+#if ENABLE_FRILLS
+ void set_urgency (bool enable);
+#else
+ void set_urgency (bool enable) { }
+#endif
void update_fade_color (unsigned int idx);
#ifdef PRINTPIPE
FILE *popen_printer ();
void process_dcs_seq ();
void process_osc_seq ();
void process_color_seq (int report, int color, const char *str, char resp);
- void process_xterm_seq (int op, const char *str, char resp);
+ void process_xterm_seq (int op, 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);
void process_graphics ();
// init.C
- void Get_Colours ();
+ void init_vars ();
+ const char **init_resources (int argc, const char *const *argv);
+ void init (int argc, const char *const *argv, stringvec *envv);
+ void init_env ();
+ void set_locale (const char *locale);
+ void init_xlocale ();
+ void init_command (const char *const *argv);
+ void run_command (const char *const *argv);
+ int run_child (const char *const *argv);
+ void color_aliases (int idx);
+ void create_windows (int argc, const char *const *argv);
+ void get_colours ();
void get_ourmods ();
// main.C
+ void tt_winch ();
+ rxvt_term ();
+ ~rxvt_term ();
+ void destroy ();
+ void emergency_cleanup ();
+ void recolour_cursor ();
+ void resize_all_windows (unsigned int newwidth, unsigned int newheight, int ignoreparent);
+ void window_calc (unsigned int newwidth, unsigned int newheight);
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);
bool set_color (rxvt_color &color, const char *name);
void alias_color (int dst, int src);
void set_widthheight (unsigned int newwidth, unsigned int newheight);
+ void get_window_origin (int &x, int &y);
+ Pixmap get_pixmap_property (int prop_id);
// screen.C
bool option (uint8_t opt) const NOTHROW
{
+ if (!opt)
+ return 0;
+
+ --opt;
return options[opt >> 3] & (1 << (opt & 7));
}
void set_option (uint8_t opt, bool set = true) NOTHROW
{
+ if (!opt)
+ return;
+
+ --opt;
if (set)
options[opt >> 3] |= (1 << (opt & 7));
else
options[opt >> 3] &= ~(1 << (opt & 7));
}
- void PrivMode (int set, unsigned bit) NOTHROW
+ void set_privmode (unsigned bit, int set) NOTHROW
{
if (set)
priv_modes |= bit;
priv_modes &= ~bit;
}
+ // modifies first argument(!)
+ void paste (char *data, unsigned int len) NOTHROW;
void scr_blank_line (line_t &l, unsigned int col, unsigned int width, rend_t efs) const NOTHROW;
void scr_blank_screen_mem (line_t &l, rend_t efs) const NOTHROW;
+ void scr_kill_char (line_t &l, int col) const NOTHROW;
int scr_scroll_text (int row1, int row2, int count) NOTHROW;
void scr_reset ();
void scr_release () NOTHROW;
#endif
void scr_touch (bool refresh) NOTHROW;
void scr_expose (int x, int y, int width, int height, bool refresh) NOTHROW;
- rxvt_fontset *scr_find_fontset (rend_t r = DEFAULT_RSTYLE);
void scr_recolour () NOTHROW;
void scr_remap_chars () NOTHROW;
void scr_remap_chars (line_t &l) NOTHROW;
enum cursor_mode { SAVE, RESTORE };
void scr_poweron ();
+ void scr_soft_reset () NOTHROW;
void scr_cursor (cursor_mode mode) NOTHROW;
void scr_do_wrap () NOTHROW;
void scr_swap_screen () NOTHROW;
void selection_property (Window win, Atom prop) NOTHROW;
void selection_request (Time tm, int selnum = Sel_Primary) NOTHROW;
int selection_request_other (Atom target, int selnum) NOTHROW;
- void selection_clear () NOTHROW;
+ void selection_clear (bool clipboard = false) NOTHROW;
+ void clipboard_copy (Time tm);
void selection_make (Time tm);
- bool selection_grab (Time tm) NOTHROW;
+ bool selection_grab (Time tm, bool clipboard = false) NOTHROW;
void selection_start_colrow (int col, int row) NOTHROW;
void selection_delimit_word (enum page_dirn dirn, const row_col_t *mark, row_col_t *ret) NOTHROW;
void selection_extend_colrow (int32_t col, int32_t row, int button3, int buttonpress, int clickchange) NOTHROW;
void selection_extend (int x, int y, int flag) NOTHROW;
void selection_rotate (int x, int y) NOTHROW;
- void pixel_position (int *x, int *y) NOTHROW;
-
-#if defined(NEXT_SCROLLBAR)
- // scrollbar-next.C
- Pixmap renderPixmap (const char *const *data, int width, int height);
- void init_scrollbar_stuff ();
- void drawBevel (Drawable d, int x1, int y1, int w, int h);
- int scrollbar_show_next (int update, int last_top, int last_bot, int scrollbar_len);
-#endif
-
-#if defined(RXVT_SCROLLBAR)
- // scrollbar-rxvt.C
- int scrollbar_show_rxvt (int update, int last_top, int last_bot, int scrollbar_len);
-#endif
-
-#if defined(XTERM_SCROLLBAR)
- // scrollbar-xterm.C
- int scrollbar_show_xterm (int update, int last_top, int last_bot, int scrollbar_len);
-#endif
-
-#if defined(PLAIN_SCROLLBAR)
- // scrollbar-plain.C
- int scrollbar_show_plain (int update, int last_top, int last_bot, int scrollbar_len);
-#endif
-
- // scrollbar.C
- int scrollbar_mapping (int map);
- int scrollbar_show (int update);
- void setup_scrollbar (const char *scrollalign, const char *scrollstyle, const char *thickness);
-
// xdefaults.C
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);
+ const char *x_resource (const char *name);
void extract_resources ();
- // xpm.C
- void get_window_origin (int &x, int &y);
- Pixmap get_pixmap_property (int prop_id);
};
-#endif /* _RXVT_H_ */
+#endif /* _RXVT_H_ */