~kklimonda/ubuntu/lucid/rxvt-unicode/lp-514821

« back to all changes in this revision

Viewing changes to src/rxvtlib.h

  • Committer: Bazaar Package Importer
  • Author(s): Decklin Foster
  • Date: 2006-09-01 14:44:58 UTC
  • mfrom: (1.2.1 upstream) (9 edgy)
  • mto: (3.2.1 squeeze)
  • mto: This revision was merged to the branch mainline in revision 10.
  • Revision ID: james.westby@ubuntu.com-20060901144458-3jn5sjka9gpg0v9i
* Edit the comments in the app-defaults file, and disable all settings by
  default. If font autoselection fails, I would prefer to open a new bug
  specifically for that. (Closes: #385481)
* Reorganize and edit README.Debian, pushing as much as possible into FAQ
  format (with resource setting issues first).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#ifndef _RXVTLIB_H_             /* include once only */
2
 
#define _RXVTLIB_H_
3
 
 
4
 
#include <cstdio>
5
 
#include <cctype>
6
 
#include <cerrno>
7
 
#include <cstdarg>
8
 
#include <cstdlib>
9
 
#include <stdint.h>
10
 
#include <sys/types.h>
11
 
#include <unistd.h>
12
 
#include <cstring>
13
 
#include <fcntl.h>
14
 
/* #include <util.h> */
15
 
#include <assert.h>
16
 
#include <sys/ioctl.h>
17
 
#include <sys/time.h>
18
 
#include <time.h>
19
 
#include <sys/select.h>
20
 
/* #include <sys/strredir.h> */
21
 
 
22
 
#include <sys/wait.h>
23
 
#include <sys/stat.h>
24
 
 
25
 
#if HAVE_CWCHAR
26
 
# include <cwchar>
27
 
#elif HAVE_WCHAR_H
28
 
# include <wchar.h>
29
 
#else
30
 
// stdlib.h might provide it
31
 
#endif
32
 
 
33
 
#include "ptytty.h"
34
 
 
35
 
extern "C" {
36
 
#include <X11/Intrinsic.h>      /* Xlib, Xutil, Xresource, Xfuncproto */
37
 
}
38
 
 
39
 
/*
40
 
 * If we haven't pulled in typedef's like  int16_t  then do them ourself
41
 
 * type of (normal and unsigned) basic sizes
42
 
 */
43
 
/* typedef short int16_t; */
44
 
/* typedef unsigned short uint16_t; */
45
 
/* typedef int int32_t; */
46
 
/* typedef unsigned int uint32_t; */
47
 
 
48
 
/* whatever normal size corresponds to a integer pointer */
49
 
#define intp_t int32_t
50
 
/* whatever normal size corresponds to a unsigned integer pointer */
51
 
#define u_intp_t u_int32_t
52
 
 
53
 
struct rxvt_fontset;
54
 
struct rxvt_color;
55
 
struct rxvt_vars;               /* defined later on */
56
 
struct rxvt_term;
57
 
struct rxvt_display;
58
 
struct rxvt_im;
59
 
struct rxvt_drawable;
60
 
 
61
 
typedef struct rxvt_term *rxvt_t;
62
 
 
63
 
extern rxvt_t rxvt_current_term;
64
 
 
65
 
#define SET_R(r) rxvt_current_term = (r)
66
 
#define GET_R rxvt_current_term
67
 
 
68
 
#define scrollbar_visible()    scrollBar.state
69
 
#define menubar_visible()      menuBar.state
70
 
 
71
 
typedef struct {
72
 
  int row;
73
 
  int col;
74
 
} row_col_t;
75
 
 
76
 
#if UNICODE_3
77
 
typedef uint32_t text_t;
78
 
#else
79
 
typedef uint16_t text_t; // saves lots of memory
80
 
#endif
81
 
typedef uint32_t rend_t;
82
 
 
83
 
/*
84
 
 * TermWin elements limits
85
 
 *  width     : 1 <= width
86
 
 *  height    : 1 <= height
87
 
 *  ncol      : 1 <= ncol       <= MAX(int16_t)
88
 
 *  nrow      : 1 <= nrow       <= MAX(int16_t)
89
 
 *  saveLines : 0 <= saveLines  <= MAX(int16_t)
90
 
 *  nscrolled : 0 <= nscrolled  <= saveLines
91
 
 *  view_start: 0 <= view_start <= nscrolled
92
 
 */
93
 
 
94
 
typedef struct {
95
 
  int            width;         /* window width                    [pixels] */
96
 
  int            height;        /* window height                   [pixels] */
97
 
  int            fwidth;        /* font width                      [pixels] */
98
 
  int            fheight;       /* font height                     [pixels] */
99
 
  int            fweight, fslant;
100
 
  int            fbase;         /* font ascent (baseline)          [pixels] */
101
 
  int            ncol;          /* window columns              [characters] */
102
 
  int            nrow;          /* window rows                 [characters] */
103
 
  int            focus;         /* window has focus                         */
104
 
  int            mapped;        /* window state mapped?                     */
105
 
  int            int_bwidth;    /* internal border width                    */
106
 
  int            ext_bwidth;    /* external border width                    */
107
 
  int            lineSpace;     /* number of extra pixels between rows      */
108
 
  int            saveLines;     /* number of lines that fit in scrollback   */
109
 
  int            nscrolled;     /* number of line actually scrolled         */
110
 
  int            view_start;    /* scrollback view starts here              */
111
 
  Window         parent[6];     /* parent identifiers - we're parent[0]     */
112
 
  Window         vt;            /* vt100 window                             */
113
 
  GC             gc;            /* GC for drawing                           */
114
 
  Pixmap         pixmap;
115
 
  rxvt_drawable *drawable;
116
 
  rxvt_fontset  *fontset[4];
117
 
} TermWin_t;
118
 
 
119
 
/*
120
 
 * screen accounting:
121
 
 * screen_t elements
122
 
 *   text:      Contains all text information including the scrollback buffer.
123
 
 *              Each line is length TermWin.ncol
124
 
 *   tlen:      The length of the line or -1 for wrapped lines.
125
 
 *   rend:      Contains rendition information: font, bold, colour, etc.
126
 
 * * Note: Each line for both text and rend are only allocated on demand, and
127
 
 *         text[x] is allocated <=> rend[x] is allocated  for all x.
128
 
 *   row:       Cursor row position                   : 0 <= row < TermWin.nrow
129
 
 *   col:       Cursor column position                : 0 <= col < TermWin.ncol
130
 
 *   tscroll:   Scrolling region top row inclusive    : 0 <= row < TermWin.nrow
131
 
 *   bscroll:   Scrolling region bottom row inclusive : 0 <= row < TermWin.nrow
132
 
 *
133
 
 * selection_t elements
134
 
 *   clicks:    1, 2 or 3 clicks - 4 indicates a special condition of 1 where
135
 
 *              nothing is selected
136
 
 *   beg:       row/column of beginning of selection  : never past mark
137
 
 *   mark:      row/column of initial click           : never past end
138
 
 *   end:       row/column of one character past end of selection
139
 
 * * Note: -TermWin.nscrolled <= beg.row <= mark.row <= end.row < TermWin.nrow
140
 
 * * Note: col == -1 ==> we're left of screen
141
 
 *
142
 
 * Layout of text/rend information in the screen_t text/rend structures:
143
 
 *   Rows [0] ... [TermWin.saveLines - 1]
144
 
 *     scrollback region : we're only here if TermWin.view_start != 0
145
 
 *   Rows [TermWin.saveLines] ... [TermWin.saveLines + TermWin.nrow - 1]
146
 
 *     normal `unscrolled' screen region
147
 
 */
148
 
typedef struct {
149
 
  int16_t        *tlen; /* length of each text line                  */
150
 
  text_t        **text; /* _all_ the text                            */
151
 
  rend_t        **rend; /* rendition, uses RS_ flags                 */
152
 
  row_col_t       cur;  /* cursor position on the screen             */
153
 
  unsigned int    tscroll;      /* top of settable scroll region             */
154
 
  unsigned int    bscroll;      /* bottom of settable scroll region          */
155
 
  unsigned int    charset;      /* character set number [0..3]               */
156
 
  unsigned int    flags;        /* see below                                 */
157
 
  row_col_t       s_cur;        /* saved cursor position                     */
158
 
  unsigned int    s_charset;    /* saved character set number [0..3]         */
159
 
  char            s_charset_char;
160
 
  rend_t          s_rstyle;     /* saved rendition style                     */
161
 
} screen_t;
162
 
 
163
 
enum selection_op_t {
164
 
  SELECTION_CLEAR = 0,  /* nothing selected                          */
165
 
  SELECTION_INIT,       /* marked a point                            */
166
 
  SELECTION_BEGIN,      /* started a selection                       */
167
 
  SELECTION_CONT,       /* continued selection                       */
168
 
  SELECTION_DONE        /* selection put in CUT_BUFFER0              */
169
 
};
170
 
 
171
 
typedef struct {
172
 
  wchar_t          *text;       /* selected text                             */
173
 
  unsigned int      len;        /* length of selected text                   */
174
 
  unsigned int      screen;     /* screen being used                         */
175
 
  unsigned int      clicks;     /* number of clicks                          */
176
 
  selection_op_t    op;         /* current operation                         */
177
 
  bool              rect;       /* rectangluar selection?                    */
178
 
  row_col_t         beg;        /* beginning of selection   <= mark          */
179
 
  row_col_t         mark;       /* point of initial click   <= end           */
180
 
  row_col_t         end;        /* one character past end point              */
181
 
} selection_t;
182
 
 
183
 
/* ------------------------------------------------------------------------- */
184
 
 
185
 
/* screen_t flags */
186
 
#define Screen_Relative         (1<<0)  /* relative origin mode flag         */
187
 
#define Screen_VisibleCursor    (1<<1)  /* cursor visible?                   */
188
 
#define Screen_Autowrap         (1<<2)  /* auto-wrap flag                    */
189
 
#define Screen_Insert           (1<<3)  /* insert mode (vs. overstrike)      */
190
 
#define Screen_WrapNext         (1<<4)  /* need to wrap for next char?       */
191
 
#define Screen_DefaultFlags     (Screen_VisibleCursor|Screen_Autowrap)
192
 
 
193
 
/* rxvt_vars.options */
194
 
#define Opt_console             (1UL<<0)
195
 
#define Opt_loginShell          (1UL<<1)
196
 
#define Opt_iconic              (1UL<<2)
197
 
#define Opt_visualBell          (1UL<<3)
198
 
#define Opt_mapAlert            (1UL<<4)
199
 
#define Opt_reverseVideo        (1UL<<5)
200
 
#define Opt_utmpInhibit         (1UL<<6)
201
 
#define Opt_scrollBar           (1UL<<7)
202
 
#define Opt_scrollBar_right     (1UL<<8)
203
 
#define Opt_scrollBar_floating  (1UL<<9)
204
 
#define Opt_meta8               (1UL<<10)
205
 
#define Opt_scrollTtyOutput     (1UL<<11)
206
 
#define Opt_scrollTtyKeypress   (1UL<<12)
207
 
#define Opt_transparent         (1UL<<13)
208
 
#define Opt_transparent_all     (1UL<<14)
209
 
#define Opt_tripleclickwords    (1UL<<15)
210
 
#define Opt_scrollWithBuffer    (1UL<<16)
211
 
#define Opt_jumpScroll          (1UL<<17)
212
 
#define Opt_mouseWheelScrollPage (1UL<<18)
213
 
#define Opt_pointerBlank        (1UL<<19)
214
 
#define Opt_cursorBlink         (1UL<<20)
215
 
#define Opt_secondaryScreen     (1UL<<21)
216
 
#define Opt_secondaryScroll     (1UL<<22)
217
 
#if ENABLE_FRILLS
218
 
# define Opt_insecure           (1UL<<23) // insecure esc sequences
219
 
# define Opt_borderLess         (1UL<<24) // mem borderless hints
220
 
#else
221
 
# define Opt_insecure           0
222
 
# define Opt_borderLess         0
223
 
#endif
224
 
#define Opt_pastableTabs        (1UL<<25)
225
 
/* place holder used for parsing command-line options */
226
 
#define Opt_Reverse             (1UL<<30)
227
 
#define Opt_Boolean             (1UL<<31)
228
 
 
229
 
#define DEFAULT_OPTIONS         (Opt_scrollBar | Opt_scrollTtyOutput \
230
 
                                 | Opt_jumpScroll | Opt_secondaryScreen \
231
 
                                 | Opt_pastableTabs)
232
 
 
233
 
/* ------------------------------------------------------------------------- */
234
 
 
235
 
typedef struct {
236
 
  short           state;
237
 
  Window          win;
238
 
  struct rxvt_drawable *drawable;
239
 
} menuBar_t;
240
 
 
241
 
typedef struct {
242
 
  char            state;        /* scrollbar state                          */
243
 
  char            init;         /* scrollbar has been initialised           */
244
 
  unsigned int    beg;          /* slider sub-window begin height           */
245
 
  unsigned int    end;          /* slider sub-window end height             */
246
 
  unsigned int    top;          /* slider top position                      */
247
 
  unsigned int    bot;          /* slider bottom position                   */
248
 
  unsigned int    style;        /* style: rxvt, xterm, next                 */
249
 
  unsigned int    width;        /* scrollbar width                          */
250
 
  Window          win;
251
 
  int             (rxvt_term::*update)(int, int, int, int);
252
 
 
253
 
  void setIdle()   { state =  1 ; }
254
 
  void setMotion() { state = 'm'; }
255
 
  void setUp()     { state = 'U'; }
256
 
  void setDn()     { state = 'D'; }
257
 
} scrollBar_t;
258
 
 
259
 
struct rxvt_vars {
260
 
  TermWin_t       TermWin;
261
 
  scrollBar_t     scrollBar;
262
 
  menuBar_t       menuBar;
263
 
  unsigned long   options;
264
 
  XSizeHints      szHint;
265
 
  rxvt_display   *display;
266
 
  rxvt_color     *pix_colors;
267
 
  rxvt_color     *pix_colors_focused;
268
 
#ifdef OFF_FOCUS_FADING
269
 
  rxvt_color     *pix_colors_unfocused;
270
 
#endif
271
 
  short           numpix_colors;
272
 
  Cursor          TermWin_cursor;       /* cursor for vt window */
273
 
  int             sb_shadow;    /* scrollbar shadow width                    */
274
 
  rxvt_ptytty     pty;
275
 
  int             numlock_state;
276
 
  text_t        **drawn_text;   /* text drawn on screen (characters)         */
277
 
  rend_t        **drawn_rend;   /* text drawn on screen (rendition)          */
278
 
  text_t        **buf_text;
279
 
  rend_t        **buf_rend;
280
 
  char           *tabs;         /* per location: 1 == tab-stop               */
281
 
  screen_t        screen;
282
 
  screen_t        swap;
283
 
  selection_t     selection;
284
 
};
285
 
 
286
 
void rxvt_init ();
287
 
 
288
 
#endif                          /* _RXVTLIB_H_ */
289