--- rxvt-unicode/src/rxvtlib.h.in 2004/02/24 00:44:23 1.12 +++ rxvt-unicode/src/rxvtlib.h.in 2005/12/18 00:59:42 1.49 @@ -1,9 +1,9 @@ #ifndef _RXVTLIB_H_ /* include once only */ #define _RXVTLIB_H_ -#include -#include -#include +#include +#include +#include @include_stdarg_h@ @include_stdlib_h@ @include_stdint_h@ @@ -22,6 +22,16 @@ #include #include +#if HAVE_CWCHAR +# include +#elif HAVE_WCHAR_H +# include +#else +// stdlib.h might provide it +#endif + +#include "ptytty.h" + extern "C" { #include /* Xlib, Xutil, Xresource, Xfuncproto */ } @@ -52,23 +62,44 @@ extern rxvt_t rxvt_current_term; -# define SET_R(r) rxvt_current_term = (r) -# define GET_R rxvt_current_term +#define SET_R(r) rxvt_current_term = (r) +#define GET_R rxvt_current_term #define scrollbar_visible() scrollBar.state #define menubar_visible() menuBar.state typedef struct { - int32_t row; - int32_t col; + int row; + int col; } row_col_t; -#if UNICODE3 +#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 int16_t tlen_t; + +#define LINE_CONT -1 + +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 + + bool is_cont () + { + return l < 0; + } + + void clear () + { + t = 0; + r = 0; + l = 0; + } +}; /* * TermWin elements limits @@ -77,48 +108,51 @@ * ncol : 1 <= ncol <= MAX(int16_t) * nrow : 1 <= nrow <= MAX(int16_t) * saveLines : 0 <= saveLines <= MAX(int16_t) - * nscrolled : 0 <= nscrolled <= saveLines - * view_start: 0 <= view_start <= nscrolled + * nsaved : 0 <= nscrolled <= saveLines + * term_start: 0 <= term_start < saveLines + * view_start: 0 <= view_start < saveLines */ -typedef struct { - uint16_t width; /* window width [pixels] */ - uint16_t height; /* window height [pixels] */ - uint16_t fwidth; /* font width [pixels] */ - uint16_t fheight; /* font height [pixels] */ - uint16_t fbase; /* font ascent (baseline) [pixels] */ - uint16_t propfont; /* font proportional flags */ - uint16_t ncol; /* window columns [characters] */ - uint16_t nrow; /* window rows [characters] */ - uint16_t focus; /* window has focus */ - uint16_t mapped; /* window state mapped? */ - uint16_t int_bwidth; /* internal border width */ - uint16_t ext_bwidth; /* external border width */ - uint16_t lineSpace; /* number of extra pixels between rows */ - uint16_t saveLines; /* number of lines that fit in scrollback */ - uint16_t nscrolled; /* number of line actually scrolled */ - uint16_t view_start; /* scrollback view starts here */ +struct TermWin_t { + int width; /* window width [pixels] */ + int height; /* window height [pixels] */ + int fwidth; /* font width [pixels] */ + int fheight; /* font height [pixels] */ + int fweight, fslant; + 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 saveLines; /* number of lines that fit in scrollback */ + int nsaved; /* number of line actually scrolled */ + int nscrolled; /*D*///TODO remove + int term_start; /* term lines start here */ + int view_start; /* scrollback view starts here */ Window parent[6]; /* parent identifiers - we're parent[0] */ Window vt; /* vt100 window */ GC gc; /* GC for drawing */ Pixmap pixmap; - rxvt_fontset *fontset; rxvt_drawable *drawable; -} TermWin_t; + rxvt_fontset *fontset[4]; +}; /* * screen accounting: * screen_t elements * text: Contains all text information including the scrollback buffer. - * Each line is length TermWin.ncol + * Each line is length ncol * tlen: The length of the line or -1 for wrapped lines. * rend: Contains rendition information: font, bold, colour, etc. * * Note: Each line for both text and rend are only allocated on demand, and * text[x] is allocated <=> rend[x] is allocated for all x. - * row: Cursor row position : 0 <= row < TermWin.nrow - * col: Cursor column position : 0 <= col < TermWin.ncol - * tscroll: Scrolling region top row inclusive : 0 <= row < TermWin.nrow - * bscroll: Scrolling region bottom row inclusive : 0 <= row < TermWin.nrow + * 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 @@ -126,26 +160,25 @@ * 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: -TermWin.nscrolled <= beg.row <= mark.row <= end.row < TermWin.nrow + * * Note: -nscrolled <= beg.row <= mark.row <= end.row < nrow * * Note: col == -1 ==> we're left of screen * * Layout of text/rend information in the screen_t text/rend structures: - * Rows [0] ... [TermWin.saveLines - 1] - * scrollback region : we're only here if TermWin.view_start != 0 - * Rows [TermWin.saveLines] ... [TermWin.saveLines + TermWin.nrow - 1] + * Rows [0] ... [saveLines - 1] + * scrollback region : we're only here if view_start != 0 + * Rows [saveLines] ... [saveLines + nrow - 1] * normal `unscrolled' screen region */ typedef struct { - int16_t *tlen; /* length of each text line */ - text_t **text; /* _all_ the text */ - rend_t **rend; /* rendition, uses RS_ flags */ + line_t **line; + row_col_t cur; /* cursor position on the screen */ - uint16_t tscroll; /* top of settable scroll region */ - uint16_t bscroll; /* bottom of settable scroll region */ - uint16_t charset; /* character set number [0..3] */ + unsigned int tscroll; /* top of settable scroll region */ + unsigned 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 */ - uint16_t s_charset; /* saved character set number [0..3] */ + unsigned int s_charset; /* saved character set number [0..3] */ char s_charset_char; rend_t s_rstyle; /* saved rendition style */ } screen_t; @@ -159,76 +192,84 @@ }; typedef struct { - unsigned char *text; /* selected text */ - uint32_t len; /* length of selected text */ - short screen; /* screen being used */ - short clicks; /* number of clicks */ - selection_op_t op; /* current operation */ - 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 *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; /* rectangluar 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 */ } selection_t; -typedef enum { - OLD_SELECT, OLD_WORD_SELECT, NEW_SELECT -} sstyle_t; - /* ------------------------------------------------------------------------- */ /* 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 */ -#define Opt_console (1LU<<0) -#define Opt_loginShell (1LU<<1) -#define Opt_iconic (1LU<<2) -#define Opt_visualBell (1LU<<3) -#define Opt_mapAlert (1LU<<4) -#define Opt_reverseVideo (1LU<<5) -#define Opt_utmpInhibit (1LU<<6) -#define Opt_scrollBar (1LU<<7) -#define Opt_scrollBar_right (1LU<<8) -#define Opt_scrollBar_floating (1LU<<9) -#define Opt_meta8 (1LU<<10) -#define Opt_scrollTtyOutput (1LU<<11) -#define Opt_scrollTtyKeypress (1LU<<12) -#define Opt_transparent (1LU<<13) -#define Opt_transparent_all (1LU<<14) -#define Opt_mc_hack (1LU<<15) -#define Opt_tripleclickwords (1LU<<16) -#define Opt_scrollWithBuffer (1LU<<17) -#define Opt_jumpScroll (1LU<<18) -#define Opt_mouseWheelScrollPage (1LU<<19) -#define Opt_pointerBlank (1LU<<20) -#define Opt_cursorBlink (1LU<<21) +#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 */ +#define Opt_console (1UL<<0) +#define Opt_loginShell (1UL<<1) +#define Opt_iconic (1UL<<2) +#define Opt_visualBell (1UL<<3) +#define Opt_mapAlert (1UL<<4) +#define Opt_reverseVideo (1UL<<5) +#define Opt_utmpInhibit (1UL<<6) +#define Opt_scrollBar (1UL<<7) +#define Opt_scrollBar_right (1UL<<8) +#define Opt_scrollBar_floating (1UL<<9) +#define Opt_meta8 (1UL<<10) +#define Opt_scrollTtyOutput (1UL<<11) +#define Opt_scrollTtyKeypress (1UL<<12) +#define Opt_transparent (1UL<<13) +#define Opt_tripleclickwords (1UL<<14) +#define Opt_scrollWithBuffer (1UL<<15) +#define Opt_jumpScroll (1UL<<16) +#define Opt_mouseWheelScrollPage (1UL<<17) +#define Opt_pointerBlank (1UL<<18) +#define Opt_cursorBlink (1UL<<19) +#define Opt_secondaryScreen (1UL<<20) +#define Opt_secondaryScroll (1UL<<21) +#define Opt_pastableTabs (1UL<<22) +#define Opt_cursorUnderline (1UL<<23) +#if ENABLE_FRILLS +# define Opt_insecure (1UL<<24) // insecure esc sequences +# define Opt_borderLess (1UL<<25) // mem borderless hints +#else +# define Opt_insecure 0 +# define Opt_borderLess 0 +#endif /* place holder used for parsing command-line options */ -#define Opt_Reverse (1LU<<30) -#define Opt_Boolean (1LU<<31) +#define Opt_Reverse (1UL<<30) +#define Opt_Boolean (1UL<<31) -#define DEFAULT_OPTIONS (Opt_scrollBar | Opt_scrollTtyOutput \ - | Opt_jumpScroll) +#define DEFAULT_OPTIONS (Opt_scrollBar | Opt_scrollTtyOutput \ + | Opt_jumpScroll | Opt_secondaryScreen \ + | Opt_pastableTabs) /* ------------------------------------------------------------------------- */ typedef struct { short state; Window win; + struct rxvt_drawable *drawable; } menuBar_t; typedef struct { char state; /* scrollbar state */ char init; /* scrollbar has been initialised */ - short beg; /* slider sub-window begin height */ - short end; /* slider sub-window end height */ - short top; /* slider top position */ - short bot; /* slider bottom position */ - short style; /* style: rxvt, xterm, next */ - short width; /* scrollbar width */ + 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); @@ -238,33 +279,33 @@ void setDn() { state = 'D'; } } scrollBar_t; -struct rxvt_vars { - TermWin_t TermWin; +struct rxvt_vars : TermWin_t { scrollBar_t scrollBar; menuBar_t menuBar; - unsigned long Options; + unsigned long options; XSizeHints szHint; rxvt_display *display; - rxvt_color *PixColors; - short numPixColors; + rxvt_color *pix_colors; + rxvt_color *pix_colors_focused; +#ifdef OFF_FOCUS_FADING + rxvt_color *pix_colors_unfocused; +#endif + short numpix_colors; Cursor TermWin_cursor; /* cursor for vt window */ int sb_shadow; /* scrollbar shadow width */ - int cmd_fd; /* pty file descriptor; connected to command */ - int tty_fd; /* tty file descriptor; connected to child */ + rxvt_ptytty pty; int numlock_state; - text_t **drawn_text; /* text drawn on screen (characters) */ - rend_t **drawn_rend; /* text drawn on screen (rendition) */ - text_t **buf_text; - rend_t **buf_rend; + line_t *save; // all lines, scorllback + terminal, circular + line_t *drawn; // text on screen + line_t *buf; // temporary buffer + line_t *swap_save; // lines for swap buffer char *tabs; /* per location: 1 == tab-stop */ screen_t screen; screen_t swap; selection_t selection; - sstyle_t selection_style; }; -void rxvt_init_signals (); -rxvt_t rxvt_init (int argc, const char *const *argv); +void rxvt_init (); #endif /* _RXVTLIB_H_ */