# 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;
# define COLORTERMENVFULL COLORTERMENV
#endif
#ifndef TERMENV
-# define TERMENV "rxvt-unicode"
+# ifdef USE_256_COLORS
+# define TERMENV "rxvt-unicode-256color"
+# else
+# define TERMENV "rxvt-unicode"
+# endif
#endif
#if defined (NO_MOUSE_REPORT) && !defined (NO_MOUSE_REPORT_SCROLLBAR)
SECONDARY,
};
+// define various rendition bits and masks. the rendition word
+// is 32 bits in size, and we should use it as efficiently as possible
+
#define RS_None 0
-#define RS_fgMask 0x0000007fUL // 128 colors
-#define RS_bgMask 0x00003f80UL // 128 colors
+// GET_BGATTR depends on RS_fgShift > RS_bgShift
+#define RS_colorMask ((1UL << Color_Bits) - 1UL)
+#define RS_bgShift 0
+#define RS_fgShift (RS_bgShift + Color_Bits)
+#define RS_bgMask (RS_colorMask << RS_bgShift)
+#define RS_fgMask (RS_colorMask << RS_fgShift)
-// font styles
-#define RS_Bold 0x00004000UL // value 1
-#define RS_Italic 0x00008000UL // value 2
+// must have space for rxvt_fontset::fontCount * 2 + 2 values
+#define RS_fontShift (RS_fgShift + Color_Bits)
+#define RS_Careful (1UL << RS_fontShift) /* be careful when drawing these */
+#define RS_fontMask ((rxvt_fontset::fontCount << (RS_fontShift + 1)) | RS_Careful) // includes RS_Careful
-// 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 and otherwise "pretty neutral"
+#define RS_redraw (2UL << RS_fontShift)
-// toggle this to force redraw, must be != RS_Careful
-#define RS_redraw 0x01000000UL
+#define RS_Sel (1UL << 22)
// 5 custom bits for extensions
-#define RS_customCount 32
-#define RS_customMask 0x00f80000UL
-#define RS_customShift 19
+#define RS_customCount 16UL
+#define RS_customShift 23
+#define RS_customMask ((RS_customCount - 1UL) << RS_customShift)
-// other flags
-#define RS_Careful 0x80000000UL /* be careful when drawing these */
+// font styles
+#define RS_Bold (1UL << RS_styleShift)
+#define RS_Italic (2UL << RS_styleShift)
#define RS_styleCount 4
+#define RS_styleShift 27
#define RS_styleMask (RS_Bold | RS_Italic)
-#define RS_styleShift 14
+
+// fake styles
+#define RS_Blink (1UL << 29)
+#define RS_RVid (1UL << 30) // reverse video
+#define RS_Uline (1UL << 31) // underline
#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_Color_pointer_bg = 14, // change actual 'Pointer' bg color
XTerm_Color05 = 15, // not implemented (tektronix fg)
XTerm_Color06 = 16, // not implemented (tektronix bg)
- XTerm_Color_RV = 17, // change actual 'Highlight' color
+ XTerm_Color_HC = 17, // change actual 'Highlight' bg color
+ XTerm_Color_HTC = 19, // change actual 'Highlight' fg color
XTerm_logfile = 46, // not implemented
XTerm_font = 50,
*/
// deprecated
- Rxvt_Color_BD = 18,
- Rxvt_Color_UL = 19,
Rxvt_restoreFG = 39,
Rxvt_restoreBG = 49,
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,
#endif
#ifdef OPTION_HC
Color_HC,
+ Color_HTC,
#endif
Color_scroll,
#ifdef RXVT_SCROLLBAR
#endif
};
+#ifndef USE_256_COLORS
#define Color_Bits 7 // 0 .. maxTermCOLOR
+#else
+#define Color_Bits 9 // 0 .. maxTermCOLOR
+#endif
/*
* Resource list
#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 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)<<Color_Bits)) \
- : ((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))
+// return attributes defining the background, encoding doesn't matter
+// depends on RS_fgShift > RS_bgShift
+#define GET_BGATTR(x) \
+ (expect_false ((x) & RS_RVid) \
+ ? (((x) & (RS_attrMask & ~RS_RVid)) \
+ | (((x) & RS_fgMask) >> (RS_fgShift - RS_bgShift))) \
+ : ((x) & (RS_attrMask | RS_bgMask)))
+#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))
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 */
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 */
};
/* ------------------------------------------------------------------------- */
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
#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,
#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 */
/* ---------- */
old_height; /* last used height in screen resize */
unsigned long priv_modes,
SavedModes;
+ bool button_state[5];
/* ---------- */
Atom *xa;
/* ---------- */
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;
// command.C
void key_press (XKeyEvent &ev);
void key_release (XKeyEvent &ev);
+ void update_user_time (Time time);
unsigned int cmd_write (const char *str, unsigned int count);
wchar_t next_char () NOTHROW;
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 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_make (Time tm);
- bool selection_grab (Time tm) NOTHROW;
+ void selection_clear (bool clipboard = false) NOTHROW;
+ void clipboard_copy (Time tm);
+ void selection_make (Time tm, bool clipboard = false);
+ 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;