#include "rxvtutil.h"
#include "rxvtfont.h"
#include "rxvttoolkit.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;
#include "background.h"
# define STDERR_FILENO 2
#endif
-#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 */
char * rxvt_wcstoutf8 (const wchar_t *str, int len = -1);
wchar_t * rxvt_utf8towcs (const char *str, int len = -1);
-char * rxvt_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;
*****************************************************************************
*/
-/* 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
-
/*
* 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 */
#define scrollBar_esc 30
-#if defined(RXVT_SCROLLBAR) || defined(NEXT_SCROLLBAR) || defined(XTERM_SCROLLBAR) || defined(PLAIN_SCROLLBAR)
-# define HAVE_SCROLLBARS 1
+#if !defined (RXVT_SCROLLBAR) && !defined (NEXT_SCROLLBAR)
+# define NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING 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
-#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
+#define RS_colorMask ((1UL << Color_Bits) - 1UL)
+#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 */
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_LFNL (1UL<<19)
#define PrivMode_MouseBtnEvent (1UL<<20)
#define PrivMode_MouseAnyEvent (1UL<<21)
+#define PrivMode_BracketPaste (1UL<<22)
#define PrivMode_mouse_report (PrivMode_MouseX10|PrivMode_MouseX11|PrivMode_MouseBtnEvent|PrivMode_MouseAnyEvent)
#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
#if ENABLE_FRILLS
# include <X11/Xmd.h>
-typedef struct _mwmhints {
+typedef struct _mwmhints
+{
CARD32 flags;
CARD32 functions;
CARD32 decorations;
#define Width2Pixel(n) ((int32_t)(n) * (int32_t)fwidth)
#define Height2Pixel(n) ((int32_t)(n) * (int32_t)fheight)
-#define LINENO(n) MOD (term_start + int(n), total_rows)
-#define ROW(n) row_buf [LINENO (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) 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 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
/****************************************************************************/
// primitive wrapper around mbstate_t to ensure initialisation
-struct mbstate {
+struct mbstate
+{
mbstate_t mbs;
operator mbstate_t *() { return &mbs; }
// 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);
#define SET_R(r) rxvt_current_term = const_cast<rxvt_term *>(r)
#define GET_R rxvt_current_term
-typedef struct {
+/* ------------------------------------------------------------------------- */
+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 +---------+
* | terminal |
* | terminal |
- * +------------+···········= term_stat + nrow - 1
+ * +------------+···········= term_start + nrow - 1
* |
* |
* END······················= total_rows
*/
-struct TermWin_t {
+struct TermWin_t
+{
int width; /* window width [pixels] */
int height; /* window height [pixels] */
int fwidth; /* font width [pixels] */
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 */
* 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: -nsaved <= beg.row <= mark.row <= end.row < nrow
+ * * Note: top_row <= beg.row <= mark.row <= end.row < nrow
* * Note: col == -1 ==> we're left of screen
*
*/
-typedef struct {
+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 s_charset; /* saved character set number [0..3] */
char s_charset_char;
rend_t s_rstyle; /* saved rendition style */
-} screen_t;
+};
-enum selection_op_t {
+enum selection_op_t
+{
SELECTION_CLEAR = 0, /* nothing selected */
SELECTION_INIT, /* marked a point */
SELECTION_BEGIN, /* started a selection */
SELECTION_DONE /* selection put in CUT_BUFFER0 */
};
-typedef struct {
+struct selection_t
+{
wchar_t *text; /* selected text */
unsigned int len; /* length of selected text */
unsigned int screen; /* screen being used */
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 */
-} selection_t;
+ wchar_t *clip_text; /* text copied to the clipboard */
+ unsigned int clip_len; /* length of clipboard text */
+};
/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */
-typedef struct {
- char state; /* scrollbar state */
- char init; /* scrollbar has been initialised */
- unsigned int beg; /* slider sub-window begin height */
- unsigned int end; /* slider sub-window end height */
- unsigned int top; /* slider top position */
- unsigned int bot; /* slider bottom position */
- unsigned int style; /* style: rxvt, xterm, next */
- unsigned int width; /* scrollbar width */
- Window win;
- int (rxvt_term::*update)(int, int, int, int);
-
- void setIdle() { state = 1 ; }
- void setMotion() { state = 'm'; }
- void setUp() { state = 'U'; }
- void setDn() { state = 'D'; }
-} scrollBar_t;
-
-struct rxvt_vars : TermWin_t {
+struct rxvt_vars : TermWin_t
+{
scrollBar_t scrollBar;
uint8_t options[(Opt_count + 7) >> 3];
XSizeHints szHint;
rxvt_color *pix_colors;
- rxvt_color *pix_colors_focused;
-#ifdef OFF_FOCUS_FADING
- rxvt_color *pix_colors_unfocused;
-#endif
Cursor TermWin_cursor; /* cursor for vt window */
- int sb_shadow; /* scrollbar shadow width */
int numlock_state;
line_t *row_buf; // all lines, scrollback + terminal, circular, followed by temp_buf
line_t *drawn_buf; // text on screen
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 {
+struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen
+{
// special markers with magic addresses
static const char resval_undef []; // options specifically unset
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
/* ---------- */
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;
-/* ---------- */
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;
// 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);
void x_cb (XEvent &xev);
xevent_watcher termwin_ev;
xevent_watcher vt_ev;
-#ifdef HAVE_SCROLLBARS
xevent_watcher scrollbar_ev;
-#endif
void child_cb (ev::child &w, int revents); ev::child child_ev;
void destroy_cb (ev::idle &w, int revents); ev::idle destroy_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 init_vars ();
- void init_secondary ();
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 ();
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_colours ();
void get_ourmods ();
// main.C
void tt_winch ();
~rxvt_term ();
void destroy ();
void emergency_cleanup ();
- void init (int argc, const char *const *argv, stringvec *envv);
void recolour_cursor ();
void resize_all_windows (unsigned int newwidth, unsigned int newheight, int ignoreparent);
void window_calc (unsigned int newwidth, unsigned int newheight);
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;
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;
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;
-#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
- void resize_scrollbar ();
- 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);