Commit | Line | Data |
---|---|---|
970ed795 EL |
1 | /* $NetBSD: chared.h,v 1.20 2010/04/15 00:57:33 christos Exp $ */ |
2 | ||
3 | /*- | |
4 | * Copyright (c) 1992, 1993 | |
5 | * The Regents of the University of California. All rights reserved. | |
6 | * | |
7 | * This code is derived from software contributed to Berkeley by | |
8 | * Christos Zoulas of Cornell University. | |
9 | * | |
10 | * Redistribution and use in source and binary forms, with or without | |
11 | * modification, are permitted provided that the following conditions | |
12 | * are met: | |
13 | * 1. Redistributions of source code must retain the above copyright | |
14 | * notice, this list of conditions and the following disclaimer. | |
15 | * 2. Redistributions in binary form must reproduce the above copyright | |
16 | * notice, this list of conditions and the following disclaimer in the | |
17 | * documentation and/or other materials provided with the distribution. | |
18 | * 3. Neither the name of the University nor the names of its contributors | |
19 | * may be used to endorse or promote products derived from this software | |
20 | * without specific prior written permission. | |
21 | * | |
22 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
23 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
24 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
25 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
26 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
27 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
28 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
29 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
30 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
31 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
32 | * SUCH DAMAGE. | |
33 | * | |
34 | * @(#)chared.h 8.1 (Berkeley) 6/4/93 | |
35 | */ | |
36 | ||
37 | /* | |
38 | * el.chared.h: Character editor interface | |
39 | */ | |
40 | #ifndef _h_el_chared | |
41 | #define _h_el_chared | |
42 | ||
43 | #include <ctype.h> | |
44 | #include <string.h> | |
45 | ||
46 | #include "histedit.h" | |
47 | ||
48 | #define EL_MAXMACRO 10 | |
49 | ||
50 | /* | |
51 | * This is an issue of basic "vi" look-and-feel. Defining VI_MOVE works | |
52 | * like real vi: i.e. the transition from command<->insert modes moves | |
53 | * the cursor. | |
54 | * | |
55 | * On the other hand we really don't want to move the cursor, because | |
56 | * all the editing commands don't include the character under the cursor. | |
57 | * Probably the best fix is to make all the editing commands aware of | |
58 | * this fact. | |
59 | */ | |
60 | #define VI_MOVE | |
61 | ||
62 | ||
63 | typedef struct c_macro_t { | |
64 | int level; | |
65 | int offset; | |
66 | Char **macro; | |
67 | } c_macro_t; | |
68 | ||
69 | /* | |
70 | * Undo information for vi - no undo in emacs (yet) | |
71 | */ | |
72 | typedef struct c_undo_t { | |
73 | ssize_t len; /* length of saved line */ | |
74 | int cursor; /* position of saved cursor */ | |
75 | Char *buf; /* full saved text */ | |
76 | } c_undo_t; | |
77 | ||
78 | /* redo for vi */ | |
79 | typedef struct c_redo_t { | |
80 | Char *buf; /* redo insert key sequence */ | |
81 | Char *pos; | |
82 | Char *lim; | |
83 | el_action_t cmd; /* command to redo */ | |
84 | Char ch; /* char that invoked it */ | |
85 | int count; | |
86 | int action; /* from cv_action() */ | |
87 | } c_redo_t; | |
88 | ||
89 | /* | |
90 | * Current action information for vi | |
91 | */ | |
92 | typedef struct c_vcmd_t { | |
93 | int action; | |
94 | Char *pos; | |
95 | } c_vcmd_t; | |
96 | ||
97 | /* | |
98 | * Kill buffer for emacs | |
99 | */ | |
100 | typedef struct c_kill_t { | |
101 | Char *buf; | |
102 | Char *last; | |
103 | Char *mark; | |
104 | } c_kill_t; | |
105 | ||
106 | /* | |
107 | * Note that we use both data structures because the user can bind | |
108 | * commands from both editors! | |
109 | */ | |
110 | typedef struct el_chared_t { | |
111 | c_undo_t c_undo; | |
112 | c_kill_t c_kill; | |
113 | c_redo_t c_redo; | |
114 | c_vcmd_t c_vcmd; | |
115 | c_macro_t c_macro; | |
116 | } el_chared_t; | |
117 | ||
118 | ||
119 | #define STRQQ "\"\"" | |
120 | ||
121 | #define isglob(a) (strchr("*[]?", (a)) != NULL) | |
122 | ||
123 | #define NOP 0x00 | |
124 | #define DELETE 0x01 | |
125 | #define INSERT 0x02 | |
126 | #define YANK 0x04 | |
127 | ||
128 | #define CHAR_FWD (+1) | |
129 | #define CHAR_BACK (-1) | |
130 | ||
131 | #define MODE_INSERT 0 | |
132 | #define MODE_REPLACE 1 | |
133 | #define MODE_REPLACE_1 2 | |
134 | ||
135 | #include "common.h" | |
136 | #include "vi.h" | |
137 | #include "emacs.h" | |
138 | #include "search.h" | |
139 | #include "fcns.h" | |
140 | ||
141 | ||
142 | protected int cv__isword(Int); | |
143 | protected int cv__isWord(Int); | |
144 | protected void cv_delfini(EditLine *); | |
145 | protected Char *cv__endword(Char *, Char *, int, int (*)(Int)); | |
146 | protected int ce__isword(Int); | |
147 | protected void cv_undo(EditLine *); | |
148 | protected void cv_yank(EditLine *, const Char *, int); | |
149 | protected Char *cv_next_word(EditLine*, Char *, Char *, int, int (*)(Int)); | |
150 | protected Char *cv_prev_word(Char *, Char *, int, int (*)(Int)); | |
151 | protected Char *c__next_word(Char *, Char *, int, int (*)(Int)); | |
152 | protected Char *c__prev_word(Char *, Char *, int, int (*)(Int)); | |
153 | protected void c_insert(EditLine *, int); | |
154 | protected void c_delbefore(EditLine *, int); | |
155 | protected void c_delbefore1(EditLine *); | |
156 | protected void c_delafter(EditLine *, int); | |
157 | protected void c_delafter1(EditLine *); | |
158 | protected int c_gets(EditLine *, Char *, const Char *); | |
159 | protected int c_hpos(EditLine *); | |
160 | ||
161 | protected int ch_init(EditLine *); | |
162 | protected void ch_reset(EditLine *, int); | |
163 | protected int ch_enlargebufs(EditLine *, size_t); | |
164 | protected void ch_end(EditLine *); | |
165 | ||
166 | #endif /* _h_el_chared */ |