Mercurial > hg > xemacs-beta
annotate src/frame-tty.c @ 4622:8cbca852bcd4
#'check-coding-systems-region: return nil on success, not t.
lisp/ChangeLog addition:
2009-02-18 Aidan Kehoe <kehoea@parhasard.net>
* coding.el (check-coding-systems-region):
Return null on success, not t. See
http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=1723
tests/ChangeLog addition:
2009-02-18 Aidan Kehoe <kehoea@parhasard.net>
* automated/query-coding-tests.el : Check that
#'check-coding-systems-region returns null on success here, not t.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Wed, 18 Feb 2009 07:53:34 +0000 |
parents | e34711681f30 |
children | 308d34e9f07d |
rev | line source |
---|---|
428 | 1 /* TTY frame functions. |
771 | 2 Copyright (C) 1995, 1997 Free Software Foundation, Inc. |
3 Copyright (C) 1995, 1996, 2002 Ben Wing. | |
428 | 4 |
5 This file is part of XEmacs. | |
6 | |
7 XEmacs is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
9 Free Software Foundation; either version 2, or (at your option) any | |
10 later version. | |
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 | |
18 along with XEmacs; see the file COPYING. If not, write to | |
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
20 Boston, MA 02111-1307, USA. */ | |
21 | |
22 /* Synched up with: Not in FSF. */ | |
23 | |
24 /* Written by Ben Wing. | |
25 Multi-frame support added by Hrvoje Niksic. */ | |
26 | |
27 #include <config.h> | |
28 #include "lisp.h" | |
29 | |
872 | 30 #include "device-impl.h" |
800 | 31 #include "events.h" |
872 | 32 #include "frame-impl.h" |
428 | 33 |
872 | 34 #include "console-tty-impl.h" |
428 | 35 |
36 | |
37 /* Default properties to use when creating frames. */ | |
38 Lisp_Object Vdefault_tty_frame_plist; | |
39 | |
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3025
diff
changeset
|
40 Lisp_Object Qframe_number, Qmake_frame_after_init_entry_point; |
771 | 41 |
428 | 42 static void tty_raise_frame (struct frame *); |
43 | |
44 | |
45 static void | |
2286 | 46 tty_init_frame_1 (struct frame *f, Lisp_Object UNUSED (props), |
771 | 47 int frame_name_is_defaulted) |
428 | 48 { |
49 struct device *d = XDEVICE (FRAME_DEVICE (f)); | |
50 struct console *c = XCONSOLE (DEVICE_CONSOLE (d)); | |
51 | |
52 ++CONSOLE_TTY_DATA (c)->frame_count; | |
53 f->order_count = CONSOLE_TTY_DATA (c)->frame_count; | |
54 f->height = CONSOLE_TTY_DATA (c)->height; | |
55 f->width = CONSOLE_TTY_DATA (c)->width; | |
771 | 56 if (frame_name_is_defaulted) |
57 f->name = emacs_sprintf_string ("F%d", f->order_count); | |
428 | 58 } |
59 | |
60 static void | |
61 tty_init_frame_3 (struct frame *f) | |
62 { | |
63 tty_raise_frame (f); | |
64 } | |
65 | |
66 static void | |
67 tty_select_frame_if_unhidden (Lisp_Object frame) | |
68 { | |
69 if (FRAME_REPAINT_P (XFRAME (frame))) | |
70 select_frame_1 (frame); | |
71 } | |
72 | |
73 static void | |
74 tty_schedule_frame_select (struct frame *f) | |
75 { | |
793 | 76 Lisp_Object frame = wrap_frame (f); |
428 | 77 |
78 enqueue_magic_eval_event (tty_select_frame_if_unhidden, frame); | |
79 } | |
80 | |
81 static void | |
2286 | 82 tty_after_init_frame (struct frame *f, int UNUSED (first_on_device), |
428 | 83 int first_on_console) |
84 { | |
85 if (first_on_console) | |
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3025
diff
changeset
|
86 call1 (Qmake_frame_after_init_entry_point, FRAME_CONSOLE (f)); |
428 | 87 } |
88 | |
89 /* Change from withdrawn state to mapped state. */ | |
90 static void | |
91 tty_make_frame_visible (struct frame *f) | |
92 { | |
771 | 93 if (!FRAME_VISIBLE_P (f)) |
428 | 94 { |
95 f->visible = -1; | |
96 } | |
97 } | |
98 | |
99 /* Change from mapped state to withdrawn state. */ | |
100 static void | |
101 tty_make_frame_invisible (struct frame *f) | |
102 { | |
103 f->visible = 0; | |
104 } | |
105 | |
106 static void | |
107 tty_make_frame_hidden (struct frame *f) | |
108 { | |
109 f->visible = -1; | |
110 } | |
111 | |
112 static void | |
113 tty_make_frame_unhidden (struct frame *f) | |
114 { | |
771 | 115 if (!FRAME_REPAINT_P (f)) |
428 | 116 { |
771 | 117 SET_FRAME_CLEAR (f); |
428 | 118 f->visible = 1; |
119 } | |
120 } | |
121 | |
122 static int | |
123 tty_frame_visible_p (struct frame *f) | |
124 { | |
125 return FRAME_VISIBLE_P (f); | |
126 } | |
127 | |
128 static void | |
129 tty_raise_frame_no_select (struct frame *f) | |
130 { | |
131 LIST_LOOP_2 (frame, DEVICE_FRAME_LIST (XDEVICE (FRAME_DEVICE (f)))) | |
132 { | |
133 struct frame *o = XFRAME (frame); | |
134 if (o != f && FRAME_REPAINT_P (o)) | |
135 { | |
136 tty_make_frame_hidden (o); | |
137 break; | |
138 } | |
139 } | |
140 tty_make_frame_unhidden (f); | |
141 } | |
142 | |
143 static void | |
144 tty_raise_frame (struct frame *f) | |
145 { | |
146 tty_raise_frame_no_select (f); | |
147 tty_schedule_frame_select (f); | |
148 } | |
149 | |
150 static void | |
151 tty_lower_frame (struct frame *f) | |
152 { | |
153 Lisp_Object frame_list = DEVICE_FRAME_LIST (XDEVICE (FRAME_DEVICE (f))); | |
3025 | 154 Lisp_Object tail, new_; |
428 | 155 |
156 if (!FRAME_REPAINT_P (f)) | |
157 return; | |
158 | |
159 LIST_LOOP (tail, frame_list) | |
160 { | |
161 if (f == XFRAME (XCAR (tail))) | |
162 break; | |
163 } | |
164 | |
165 /* To lower this frame, another frame has to be raised. Return if | |
166 there is no other frame. */ | |
771 | 167 if (NILP (tail) && EQ (frame_list, tail)) |
428 | 168 return; |
169 | |
170 tty_make_frame_hidden (f); | |
171 if (CONSP (XCDR (tail))) | |
3025 | 172 new_ = XCAR (XCDR (tail)); |
428 | 173 else |
3025 | 174 new_ = XCAR (frame_list); |
175 tty_make_frame_unhidden (XFRAME (new_)); | |
176 tty_schedule_frame_select (XFRAME (new_)); | |
428 | 177 } |
178 | |
179 static void | |
180 tty_delete_frame (struct frame *f) | |
181 { | |
182 struct device *d = XDEVICE (FRAME_DEVICE (f)); | |
183 | |
184 if (!NILP (DEVICE_SELECTED_FRAME (d))) | |
185 tty_raise_frame (XFRAME (DEVICE_SELECTED_FRAME (d))); | |
186 } | |
771 | 187 |
188 static Lisp_Object | |
189 tty_frame_property (struct frame *f, Lisp_Object property) | |
190 { | |
191 if (EQ (Qframe_number, property)) | |
192 return make_int (f->order_count); | |
193 | |
194 return Qunbound; | |
195 } | |
196 | |
197 static int | |
2286 | 198 tty_internal_frame_property_p (struct frame *UNUSED (f), Lisp_Object property) |
771 | 199 { |
200 return EQ (property, Qframe_number); | |
201 } | |
202 | |
203 static Lisp_Object | |
204 tty_frame_properties (struct frame *f) | |
205 { | |
206 Lisp_Object props = Qnil; | |
207 | |
208 props = cons3 (Qframe_number, make_int (f->order_count), props); | |
209 | |
210 return props; | |
211 } | |
428 | 212 |
213 /************************************************************************/ | |
214 /* initialization */ | |
215 /************************************************************************/ | |
216 | |
217 void | |
218 console_type_create_frame_tty (void) | |
219 { | |
220 CONSOLE_HAS_METHOD (tty, init_frame_1); | |
221 CONSOLE_HAS_METHOD (tty, init_frame_3); | |
222 CONSOLE_HAS_METHOD (tty, after_init_frame); | |
223 CONSOLE_HAS_METHOD (tty, make_frame_visible); | |
224 CONSOLE_HAS_METHOD (tty, make_frame_invisible); | |
225 CONSOLE_HAS_METHOD (tty, frame_visible_p); | |
226 CONSOLE_HAS_METHOD (tty, raise_frame); | |
227 CONSOLE_HAS_METHOD (tty, lower_frame); | |
228 CONSOLE_HAS_METHOD (tty, delete_frame); | |
771 | 229 CONSOLE_HAS_METHOD (tty, frame_property); |
230 CONSOLE_HAS_METHOD (tty, internal_frame_property_p); | |
231 CONSOLE_HAS_METHOD (tty, frame_properties); | |
232 } | |
233 | |
234 void | |
235 syms_of_frame_tty (void) | |
236 { | |
237 DEFSYMBOL (Qframe_number); | |
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3025
diff
changeset
|
238 DEFSYMBOL (Qmake_frame_after_init_entry_point); |
428 | 239 } |
240 | |
241 void | |
242 vars_of_frame_tty (void) | |
243 { | |
244 DEFVAR_LISP ("default-tty-frame-plist", &Vdefault_tty_frame_plist /* | |
245 Plist of default frame-creation properties for tty frames. | |
246 These are in addition to and override what is specified in | |
247 `default-frame-plist', but are overridden by the arguments to the | |
248 particular call to `make-frame'. | |
249 */ ); | |
250 Vdefault_tty_frame_plist = Qnil; | |
251 | |
252 tty_console_methods->device_specific_frame_props = | |
253 &Vdefault_tty_frame_plist; | |
254 | |
255 /* Tty frames are now supported. Advertise a feature to indicate this. */ | |
256 Fprovide (intern ("tty-frames")); | |
257 } |