1 /* $NetBSD: screen.h,v 1.3 2013/11/25 22:43:46 christos Exp $ */
3 * Copyright (c) 1992, 1993, 1994
4 * The Regents of the University of California. All rights reserved.
5 * Copyright (c) 1992, 1993, 1994, 1995, 1996
6 * Keith Bostic. All rights reserved.
8 * See the LICENSE file for redistribution information.
10 * Id: screen.h,v 10.49 2002/03/02 23:47:02 skimo Exp (Berkeley) Date: 2002/03/02 23:47:02
14 * There are minimum values that vi has to have to display a screen. The row
15 * minimum is fixed at 1 (the svi code can share a line between the text line
16 * and the colon command/message line). Column calculation is a lot trickier.
17 * For example, you have to have enough columns to display the line number,
18 * not to mention guaranteeing that tabstop and shiftwidth values are smaller
19 * than the current column value. It's simpler to have a fixed value and not
23 * MINIMUM_SCREEN_COLS is almost certainly wrong.
25 #define MINIMUM_SCREEN_ROWS 1
26 #define MINIMUM_SCREEN_COLS 20
30 * A list of screens that are displayed as a whole.
33 TAILQ_ENTRY(_win
) q
; /* Windows. */
35 TAILQ_HEAD(_scrh
, _scr
) scrq
; /* Screens */
37 GS
*gp
; /* Pointer to global area. */
39 SCR
*ccl_sp
; /* Colon command-line screen. */
41 void *perl_private
; /* Perl interpreter. */
43 void *ip_private
; /* IP support private area. */
45 void *th_private
; /* Threading support private area. */
48 * Ex command structures (EXCMD). Defined here because ex commands
49 * exist outside of any particular screen or file.
51 #define EXCMD_RUNNING(wp) ((wp)->ecq.lh_first->clen != 0)
52 LIST_HEAD(_excmdh
, _excmd
) ecq
; /* Ex command linked list. */
53 EXCMD excmd
; /* Default ex command structure. */
54 char *if_name
; /* Current associated file. */
55 db_recno_t if_lno
; /* Current associated line number. */
57 EVENT
*i_event
; /* Array of input events. */
58 size_t i_nelem
; /* Number of array elements. */
59 size_t i_cnt
; /* Count of events. */
60 size_t i_next
; /* Offset of next event. */
62 CB
*dcbp
; /* Default cut buffer pointer. */
63 CB dcb_store
; /* Default cut buffer storage. */
64 LIST_HEAD(_cuth
, _cb
) cutq
; /* Linked list of cut buffers. */
66 /* For now, can be either char or CHAR_T buffer */
67 char *tmp_bp
; /* Temporary buffer. */
68 size_t tmp_blen
; /* Temporary buffer size. */
70 char *l_lp
; /* Log buffer. */
71 size_t l_len
; /* Log buffer length. */
76 #define W_TMP_INUSE 0x0001 /* Temporary buffer in use. */
79 /* Message or ex output. */
80 void (*scr_msg
) __P((SCR
*, mtype_t
, char *, size_t));
85 * The screen structure. To the extent possible, all screen information
86 * is stored in the various private areas. The only information here
87 * is used by global routines or is shared by too many screens.
90 /* INITIALIZED AT SCREEN CREATE. */
91 TAILQ_ENTRY(_scr
) q
; /* Screens. */
92 TAILQ_ENTRY(_scr
) eq
; /* Screens. */
94 int id
; /* Screen id #. */
95 int refcnt
; /* Reference count. */
97 WIN
*wp
; /* Pointer to window. */
98 GS
*gp
; /* Pointer to global area. */
99 SCR
*nextdisp
; /* Next display screen. */
100 SCR
*ccl_parent
; /* Colon command-line parent screen. */
101 EXF
*ep
; /* Screen's current EXF structure. */
103 CHAR_T
*c_lp
; /* Cached line. */
104 size_t c_len
; /* Cached line length. */
105 /* May move out again once we use DB
106 * to cache internal representation
108 size_t c_blen
; /* Cached line buffer length. */
109 db_recno_t c_lno
; /* Cached line number. */
111 FREF
*frp
; /* FREF being edited. */
112 char **argv
; /* NULL terminated file name array. */
113 char **cargv
; /* Current file name. */
115 u_long ccnt
; /* Command count. */
116 u_long q_ccnt
; /* Quit or ZZ command count. */
119 size_t rows
; /* 1-N: number of rows. */
120 size_t cols
; /* 1-N: number of columns. */
121 size_t t_rows
; /* 1-N: cur number of text rows. */
122 size_t t_maxrows
; /* 1-N: max number of text rows. */
123 size_t t_minrows
; /* 1-N: min number of text rows. */
124 size_t coff
; /* 0-N: screen col offset in display. */
125 size_t roff
; /* 0-N: screen row offset in display. */
128 db_recno_t lno
; /* 1-N: file line. */
129 size_t cno
; /* 0-N: file character in line. */
131 size_t rcm
; /* Vi: 0-N: Most attractive column. */
133 #define L_ADDED 0 /* Added lines. */
134 #define L_CHANGED 1 /* Changed lines. */
135 #define L_DELETED 2 /* Deleted lines. */
136 #define L_JOINED 3 /* Joined lines. */
137 #define L_MOVED 4 /* Moved lines. */
138 #define L_SHIFT 5 /* Shift lines. */
139 #define L_YANKED 6 /* Yanked lines. */
140 db_recno_t rptlchange
; /* Ex/vi: last L_CHANGED lno. */
141 db_recno_t rptlines
[L_YANKED
+ 1];/* Ex/vi: lines changed by last op. */
143 TEXTH tiq
; /* Ex/vi: text input queue. */
145 SCRIPT
*script
; /* Vi: script mode information .*/
147 db_recno_t defscroll
; /* Vi: ^D, ^U scroll information. */
149 /* Display character. */
150 u_char cname
[MAX_CHARACTER_COLUMNS
+ 1];
151 size_t clen
; /* Length of display character. */
153 enum { /* Vi editor mode. */
154 SM_APPEND
= 0, SM_CHANGE
, SM_COMMAND
, SM_INSERT
,
155 SM_REPLACE
} showmode
;
157 void *ex_private
; /* Ex private area. */
158 void *vi_private
; /* Vi private area. */
159 void *perl_private
; /* Perl private area. */
160 void *cl_private
; /* Curses private area. */
164 struct _log_state state
; /* State during log traversal. */
166 /* PARTIALLY OR COMPLETELY COPIED FROM PREVIOUS SCREEN. */
167 char *alt_name
; /* Ex/vi: alternate file name. */
169 ARG_CHAR_T at_lbuf
; /* Ex/vi: Last executed at buffer. */
171 /* Ex/vi: re_compile flags. */
172 #define RE_WSTART L("[[:<:]]") /* Ex/vi: not-in-word search pattern. */
173 #define RE_WSTOP L("[[:>:]]")
174 #define RE_WSTART_LEN (sizeof(RE_WSTART)/sizeof(CHAR_T)-1)
175 #define RE_WSTOP_LEN (sizeof(RE_WSTOP)/sizeof(CHAR_T)-1)
176 /* Ex/vi: flags to search routines. */
177 #define SEARCH_CSCOPE 0x000001 /* Search for a cscope pattern. */
178 #define SEARCH_CSEARCH 0x000002 /* Compile search replacement. */
179 #define SEARCH_CSUBST 0x000004 /* Compile substitute replacement. */
180 #define SEARCH_EOL 0x000008 /* Offset past EOL is okay. */
181 #define SEARCH_EXTEND 0x000010 /* Extended RE. */
182 #define SEARCH_FIRST 0x000020 /* Search from the first line. */
183 #define SEARCH_IC 0x000040 /* Ignore case. */
184 #define SEARCH_ICL 0x000080 /* Ignore case. */
185 #define SEARCH_INCR 0x000100 /* Search incrementally. */
186 #define SEARCH_LITERAL 0x000200 /* Literal string. */
187 #define SEARCH_MSG 0x000400 /* Display search messages. */
188 #define SEARCH_NOOPT 0x000800 /* Ignore edit options. */
189 #define SEARCH_PARSE 0x001000 /* Parse the search pattern. */
190 #define SEARCH_SET 0x002000 /* Set search direction. */
191 #define SEARCH_TAG 0x004000 /* Search for a tag pattern. */
192 #define SEARCH_WMSG 0x008000 /* Display search-wrapped messages. */
193 #define SEARCH_WRAP 0x010000 /* Wrap past sof/eof. */
195 /* Ex/vi: RE information. */
196 dir_t searchdir
; /* Last file search direction. */
197 regex_t re_c
; /* Search RE: compiled form. */
198 CHAR_T
*re
; /* Search RE: uncompiled form. */
199 size_t re_len
; /* Search RE: uncompiled length. */
200 regex_t subre_c
; /* Substitute RE: compiled form. */
201 CHAR_T
*subre
; /* Substitute RE: uncompiled form. */
202 size_t subre_len
; /* Substitute RE: uncompiled length). */
203 CHAR_T
*repl
; /* Substitute replacement. */
204 size_t repl_len
; /* Substitute replacement length.*/
205 size_t *newl
; /* Newline offset array. */
206 size_t newl_len
; /* Newline array size. */
207 size_t newl_cnt
; /* Newlines in replacement. */
208 u_int8_t c_suffix
; /* Edcompatible 'c' suffix value. */
209 u_int8_t g_suffix
; /* Edcompatible 'g' suffix value. */
211 OPTION opts
[O_OPTIONCOUNT
]; /* Ex/vi: Options. */
218 #define SC_EX 0x00000001 /* Ex editor. */
219 #define SC_VI 0x00000002 /* Vi editor. */
222 * Screen formatting flags, first major, then minor.
225 * Ex screen, i.e. cooked mode.
227 * Vi screen, i.e. raw mode.
229 * The editor had to write on the screen behind curses' back, and we can't
230 * let curses change anything until the user agrees, e.g. entering the
231 * commands :!utility followed by :set. We have to switch back into the
232 * vi "editor" to read the user's command input, but we can't touch the
233 * rest of the screen because it's known to be wrong.
235 * The expected presentation of the lines on the screen have changed,
236 * requiring that the intended screen lines be recalculated. Implies
239 * The screen doesn't correctly represent the file; repaint it. Note,
240 * setting SC_SCR_REDRAW in the current window causes *all* windows to
243 * If the current line isn't already on the screen, center it.
245 * If the current line isn't already on the screen, put it at the to@.
247 #define SC_SCR_EX 0x00000004 /* Screen is in ex mode. */
248 #define SC_SCR_VI 0x00000008 /* Screen is in vi mode. */
249 #define SC_SCR_EXWROTE 0x00000010 /* Ex overwrite: see comment above. */
250 #define SC_SCR_REFORMAT 0x00000020 /* Reformat (refresh). */
251 #define SC_SCR_REDRAW 0x00000040 /* Refresh. */
253 #define SC_SCR_CENTER 0x00000080 /* Center the line if not visible. */
254 #define SC_SCR_TOP 0x00000100 /* Top the line if not visible. */
256 /* Screen/file changes. */
257 #define SC_EXIT 0x00000200 /* Exiting (not forced). */
258 #define SC_EXIT_FORCE 0x00000400 /* Exiting (forced). */
259 #define SC_FSWITCH 0x00000800 /* Switch underlying files. */
260 #define SC_SSWITCH 0x00001000 /* Switch screens. */
262 #define SC_ARGNOFREE 0x00002000 /* Argument list wasn't allocated. */
263 #define SC_ARGRECOVER 0x00004000 /* Argument list is recovery files. */
264 #define SC_AT_SET 0x00008000 /* Last at buffer set. */
265 #define SC_COMEDIT 0x00010000 /* Colon command-line edit window. */
266 #define SC_EX_GLOBAL 0x00020000 /* Ex: executing a global command. */
267 #define SC_EX_SILENT 0x00040000 /* Ex: batch script. */
268 #define SC_EX_WAIT_NO 0x00080000 /* Ex: don't wait for the user. */
269 #define SC_EX_WAIT_YES 0x00100000 /* Ex: do wait for the user. */
270 #define SC_READONLY 0x00200000 /* Persistent readonly state. */
271 #define SC_RE_SEARCH 0x00400000 /* Search RE has been compiled. */
272 #define SC_RE_SUBST 0x00800000 /* Substitute RE has been compiled. */
273 #define SC_SCRIPT 0x01000000 /* Shell script window. */
274 #define SC_STATUS 0x02000000 /* Welcome message. */
275 #define SC_STATUS_CNT 0x04000000 /* Welcome message plus file count. */
276 #define SC_TINPUT 0x08000000 /* Doing text input. */
277 #define SC_TINPUT_INFO 0x10000000 /* Doing text input on info line. */
278 #define SC_CONV_ERROR 0x20000000 /* Met with a conversion error. */
281 int db_error
; /* Return code from db function. */