Mercurial > hg > xemacs-beta
annotate src/console-tty-impl.h @ 5773:94a6b8fbd56e
Use a face, show more context around open parenthesis, #'blink-matching-open
lisp/ChangeLog addition:
2013-12-17 Aidan Kehoe <kehoea@parhasard.net>
* simple.el (blink-matching-open):
When showing the opening parenthesis in the minibiffer, use the
isearch face for it, in case there are multiple parentheses in the
text shown.
When writing moderately involved macros, it's often not enough
just to show the backquote context before the parenthesis
(e.g. @,.`). Skip over that when searching for useful context in
the same way we skip over space and tab.
* simple.el (message):
* simple.el (lmessage):
If there are no ARGS, don't call #'format. This allows extent
information to be passed through to the minibuffer.
It's probably better still to update #'format to preserve extent
info.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Tue, 17 Dec 2013 20:49:52 +0200 |
parents | 248176c74e6b |
children |
rev | line source |
---|---|
872 | 1 /* Define TTY specific console, device, and frame object for XEmacs. |
2 Copyright (C) 1995 Board of Trustees, University of Illinois. | |
3 Copyright (C) 1996 Ben Wing. | |
4 | |
5 This file is part of XEmacs. | |
6 | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5127
diff
changeset
|
7 XEmacs is free software: you can redistribute it and/or modify it |
872 | 8 under the terms of the GNU General Public License as published by the |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5127
diff
changeset
|
9 Free Software Foundation, either version 3 of the License, or (at your |
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5127
diff
changeset
|
10 option) any later version. |
872 | 11 |
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5127
diff
changeset
|
18 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
872 | 19 |
20 /* Synched up with: Not in FSF. */ | |
21 | |
22 /* Written by Chuck Thompson and Ben Wing. */ | |
23 | |
24 /* NOTE: Currently each TTY console can have only one device. | |
25 Therefore, all stuff for both input and output is lumped into | |
26 the console structure. If it ever becomes meaningful to | |
27 have more than one device on a TTY console, the output stuff | |
28 will have to get separated out. */ | |
29 | |
30 #ifndef INCLUDED_console_tty_impl_h_ | |
31 #define INCLUDED_console_tty_impl_h_ | |
32 | |
33 #include "console-impl.h" | |
34 #include "console-tty.h" | |
35 | |
36 DECLARE_CONSOLE_TYPE (tty); | |
37 | |
38 struct tty_console | |
39 { | |
3092 | 40 #ifdef NEW_GC |
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5120
diff
changeset
|
41 NORMAL_LISP_OBJECT_HEADER header; |
3092 | 42 #endif /* NEW_GC */ |
872 | 43 int infd, outfd; |
44 Lisp_Object instream, outstream; | |
45 Lisp_Object terminal_type; | |
46 Lisp_Object controlling_process; | |
47 char *term_entry_buffer; | |
48 | |
49 /* Physical location of cursor on this console. */ | |
50 int cursor_x; | |
51 int cursor_y; | |
52 | |
53 /* The real location of the cursor. The above physical location may | |
54 be ahead of where we really are. */ | |
55 int real_cursor_x; | |
56 int real_cursor_y; | |
57 | |
58 int final_cursor_x; | |
59 int final_cursor_y; | |
60 | |
61 int height; | |
62 int width; | |
63 | |
5398
5256fedd50e6
issue 757 - tty device metric for num-color-cells
Jeff Sparkes <jsparkes@gmail.com>
parents:
5127
diff
changeset
|
64 int colors; |
5256fedd50e6
issue 757 - tty device metric for num-color-cells
Jeff Sparkes <jsparkes@gmail.com>
parents:
5127
diff
changeset
|
65 |
872 | 66 /* The count of frame number. */ |
67 int frame_count; | |
68 | |
69 /* flags indicating presence, absence or value of various features */ | |
70 struct | |
71 { | |
72 unsigned int must_write_spaces :1; /* terminal inserts nulls, not | |
73 spaces to fill whitespace on | |
74 screen */ | |
75 unsigned int insert_mode_motion :1; /* cursor movement commands | |
76 work while in insert mode */ | |
77 unsigned int standout_motion :1; /* cursor movement is graceful | |
78 in standout or underline mode */ | |
79 unsigned int memory_above_frame :1; /* display retained above screen */ | |
80 unsigned int memory_below_frame :1; /* display retained below screen */ | |
81 unsigned int meta_key :2; /* 0 == mask off top bit; | |
82 1 == top bit is meta; | |
83 2 == top bit is useful as | |
84 character info */ | |
85 unsigned int flow_control :1; /* Nonzero means use ^S/^Q as | |
86 cretinous flow control. */ | |
87 int standout_width; /* # of spaces printed when | |
88 change to standout mode */ | |
89 int underline_width; /* # of spaces printed when | |
90 change to underline mode */ | |
91 } flags; | |
92 | |
93 /* cursor motion entries - each entry is commented with the terminfo | |
94 and the termcap entry */ | |
95 struct | |
96 { | |
97 /* local cursor movement */ | |
98 const char *up; /* cuu1, up */ | |
99 const char *down; /* cud1, do */ | |
100 const char *left; /* cub1, le */ | |
101 const char *right; /* cuf1, nd */ | |
102 const char *home; /* home, ho */ | |
103 const char *low_left; /* ll, ll */ | |
104 const char *car_return; /* cr, cr */ | |
105 | |
106 /* parameterized local cursor movement */ | |
107 const char *multi_up; /* cuu, UP */ | |
108 const char *multi_down; /* cud, DO */ | |
109 const char *multi_left; /* cub, LE */ | |
110 const char *multi_right; /* cuf, RI */ | |
111 | |
112 /* absolute cursor motion */ | |
113 const char *abs; /* cup, cm */ | |
114 const char *hor_abs; /* hpa, ch */ | |
115 const char *ver_abs; /* vpa, cv */ | |
116 | |
117 /* scrolling */ | |
118 const char *scroll_forw; /* ind, sf */ | |
119 const char *scroll_back; /* ri, sr */ | |
120 const char *multi_scroll_forw; /* indn, SF */ | |
121 const char *multi_scroll_back; /* rin, SR */ | |
122 const char *set_scroll_region; /* csr, cs */ | |
123 } cm; | |
124 | |
125 /* screen editing entries - each entry is commented with the | |
126 terminfo and the termcap entry */ | |
127 struct | |
128 { | |
129 /* adding to the screen */ | |
130 const char *ins_line; /* il1, al */ | |
131 const char *multi_ins_line; /* il, AL */ | |
132 const char *repeat; /* rep, rp */ | |
133 const char *begin_ins_mode; /* smir, im */ | |
134 const char *end_ins_mode; /* rmir, ei */ | |
135 const char *ins_char; /* ich1, ic */ | |
136 const char *multi_ins_char; /* ich, IC */ | |
137 const char *insert_pad; /* ip, ip */ | |
138 | |
139 /* deleting from the screen */ | |
140 const char *clr_frame; /* clear, cl */ | |
141 const char *clr_from_cursor; /* ed, cd */ | |
142 const char *clr_to_eol; /* el, ce */ | |
143 const char *del_line; /* dl1, dl */ | |
144 const char *multi_del_line; /* dl, DL */ | |
145 const char *del_char; /* dch1, dc */ | |
146 const char *multi_del_char; /* dch, DC */ | |
147 const char *begin_del_mode; /* smdc, dm */ | |
148 const char *end_del_mode; /* rmdc, ed */ | |
149 const char *erase_at_cursor; /* ech, ec */ | |
150 } se; | |
151 | |
152 /* screen display entries - each entry is commented with the | |
153 terminfo and termcap entry */ | |
154 struct | |
155 { | |
156 const char *begin_standout; /* smso, so */ | |
157 const char *end_standout; /* rmso, se */ | |
158 const char *begin_underline; /* smul, us */ | |
159 const char *end_underline; /* rmul, ue */ | |
160 const char *begin_alternate; /* smacs, as */ | |
161 const char *end_alternate; /* rmacs, ae */ | |
162 | |
163 const char *turn_on_reverse; /* rev, mr */ | |
164 const char *turn_on_blinking; /* blink, mb */ | |
165 const char *turn_on_bold; /* bold, md */ | |
166 const char *turn_on_dim; /* dim, mh */ | |
167 const char *turn_off_attributes; /* sgr0, me */ | |
168 | |
169 const char *visual_bell; /* flash, vb */ | |
170 const char *audio_bell; /* bel, bl */ | |
171 | |
172 const char *cursor_visible; /* cvvis, vs */ | |
173 const char *cursor_normal; /* cnorm, ve */ | |
174 const char *init_motion; /* smcup, ti */ | |
175 const char *end_motion; /* rmcup, te */ | |
176 const char *keypad_on; /* smkx, ks */ | |
177 const char *keypad_off; /* rmkx, ke */ | |
178 | |
179 const char *orig_pair; /* op, op */ | |
180 } sd; | |
181 | |
182 /* costs of various operations */ | |
183 struct | |
184 { | |
185 int cm_up; | |
186 int cm_down; | |
187 int cm_left; | |
188 int cm_right; | |
189 int cm_home; | |
190 int cm_low_left; | |
191 int cm_car_return; | |
192 int cm_abs; | |
193 int cm_hor_abs; | |
194 int cm_ver_abs; | |
195 } cost; | |
196 | |
197 /* The initial tty mode bits */ | |
198 struct emacs_tty old_tty; | |
199 | |
200 /* Is this TTY our controlling terminal? */ | |
201 unsigned int controlling_terminal :1; | |
202 unsigned int is_stdio :1; | |
3571 | 203 /* Do East Asian chars take up two columns? */ |
204 unsigned int multiple_width :1; | |
872 | 205 }; |
206 | |
3092 | 207 #ifdef NEW_GC |
208 typedef struct tty_console Lisp_Tty_Console; | |
209 | |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
3571
diff
changeset
|
210 DECLARE_LISP_OBJECT (tty_console, Lisp_Tty_Console); |
3092 | 211 |
212 #define XTTY_CONSOLE(x) \ | |
213 XRECORD (x, tty_console, Lisp_Tty_Console) | |
214 #define wrap_tty_console(p) wrap_record (p, tty_console) | |
215 #define TTY_CONSOLE_P(x) RECORDP (x, tty_console) | |
216 #endif /* NEW_GC */ | |
217 | |
872 | 218 #define CONSOLE_TTY_DATA(c) CONSOLE_TYPE_DATA (c, tty) |
219 #define CONSOLE_TTY_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->cursor_x) | |
220 #define CONSOLE_TTY_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->cursor_y) | |
221 #define CONSOLE_TTY_REAL_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->real_cursor_x) | |
222 #define CONSOLE_TTY_REAL_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->real_cursor_y) | |
223 #define CONSOLE_TTY_FINAL_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->final_cursor_x) | |
224 #define CONSOLE_TTY_FINAL_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->final_cursor_y) | |
225 | |
3571 | 226 /* In a more ideal world where available terminfo files actually included |
227 information on whether a given TTY supports double-width characters or | |
228 not, oh, and where Mule was not conditional, SUPPORTS_MULTIPLE_WIDTH | |
229 would be as console-specific as its syntax implies. | |
230 | |
231 In this world, this is overengineering more than it is anything. */ | |
232 #define CONSOLE_TTY_SUPPORTS_MULTIPLE_WIDTH(c) (1 != MAX_ICHAR_LEN) | |
233 #define CONSOLE_TTY_MULTIPLE_WIDTH(c) \ | |
234 (CONSOLE_TTY_SUPPORTS_MULTIPLE_WIDTH(c) ? \ | |
235 CONSOLE_TTY_DATA (c)->multiple_width : (0)) | |
236 | |
872 | 237 #define TTY_CM(c) (CONSOLE_TTY_DATA (c)->cm) |
238 #define TTY_SE(c) (CONSOLE_TTY_DATA (c)->se) | |
239 #define TTY_SD(c) (CONSOLE_TTY_DATA (c)->sd) | |
240 #define TTY_FLAGS(c) (CONSOLE_TTY_DATA (c)->flags) | |
241 #define TTY_COST(c) (CONSOLE_TTY_DATA (c)->cost) | |
242 | |
243 #define TTY_INC_CURSOR_X(c, n) do { \ | |
244 int TICX_n = (n); \ | |
245 assert (CONSOLE_TTY_CURSOR_X (c) == CONSOLE_TTY_REAL_CURSOR_X (c)); \ | |
246 CONSOLE_TTY_CURSOR_X (c) += TICX_n; \ | |
247 CONSOLE_TTY_REAL_CURSOR_X (c) += TICX_n; \ | |
248 } while (0) | |
249 | |
250 #define TTY_INC_CURSOR_Y(c, n) do { \ | |
251 int TICY_n = (n); \ | |
252 CONSOLE_TTY_CURSOR_Y (c) += TICY_n; \ | |
253 CONSOLE_TTY_REAL_CURSOR_Y (c) += TICY_n; \ | |
254 } while (0) | |
255 | |
256 struct tty_device | |
257 { | |
3092 | 258 #ifdef NEW_GC |
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5120
diff
changeset
|
259 NORMAL_LISP_OBJECT_HEADER header; |
3092 | 260 #endif /* NEW_GC */ |
872 | 261 #ifdef HAVE_TERMIOS |
262 speed_t ospeed; /* Output speed (from sg_ospeed) */ | |
263 #else | |
264 short ospeed; /* Output speed (from sg_ospeed) */ | |
265 #endif | |
266 }; | |
267 | |
3092 | 268 #ifdef NEW_GC |
269 typedef struct tty_device Lisp_Tty_Device; | |
270 | |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
3571
diff
changeset
|
271 DECLARE_LISP_OBJECT (tty_device, Lisp_Tty_Device); |
3092 | 272 |
273 #define XTTY_DEVICE(x) \ | |
274 XRECORD (x, tty_device, Lisp_Tty_Device) | |
275 #define wrap_tty_device(p) wrap_record (p, tty_device) | |
276 #define TTY_DEVICE_P(x) RECORDP (x, tty_device) | |
277 #endif /* NEW_GC */ | |
278 | |
872 | 279 #define DEVICE_TTY_DATA(d) DEVICE_TYPE_DATA (d, tty) |
280 | |
281 /* termcap requires this to be global */ | |
282 #ifndef HAVE_TERMIOS | |
283 extern short ospeed; /* Output speed (from sg_ospeed) */ | |
284 #endif | |
285 | |
286 #endif /* INCLUDED_console_tty_impl_h_ */ |