Mercurial > hg > xemacs-beta
annotate src/device-tty.c @ 4539:061e030e3270
Fix some bugs in load-history construction, built-in symbol file names.
lib-src/ChangeLog addition:
2008-12-27 Aidan Kehoe <kehoea@parhasard.net>
* make-docfile.c (main): Allow more than one -d argument, followed
by a directory to change to.
(put_filename): Don't strip directory information; with previous
change, allows retrieval of Lisp function and variable origin
files from #'built-in-symbol-file relative to lisp-directory.
(scan_lisp_file): Don't add an extraneous newline after the file
name, put_filename has added the newline already.
lisp/ChangeLog addition:
2008-12-27 Aidan Kehoe <kehoea@parhasard.net>
* loadup.el (load-history):
Add the contents of current-load-list to load-history before
clearing it. Move the variable declarations earlier in the file to
a format understood by make-docfile.c.
* custom.el (custom-declare-variable): Add the variable's symbol
to the current file's load history entry correctly, don't use a
cons. Eliminate a comment that we don't need to worry about, we
don't need to check the `initialized' C variable in Lisp.
* bytecomp.el (byte-compile-output-file-form):
Merge Andreas Schwab's pre-GPLv3 GNU change of 19970831 here;
treat #'custom-declare-variable correctly, generating the
docstrings in a format understood by make-docfile.c.
* loadhist.el (symbol-file): Correct behaviour for checking
autoloaded macros and functions when supplied with a TYPE
argument. Accept fully-qualified paths from
#'built-in-symbol-file; if a path is not fully-qualified, return
it relative to lisp-directory if the filename corresponds to a
Lisp file, and relative to (concat source-directory "/src/")
otherwise.
* make-docfile.el (preloaded-file-list):
Rationalise some let bindings a little. Use the "-d" argument to
make-docfile.c to supply Lisp paths relative to lisp-directory,
not absolutely. Add in loadup.el explicitly to the list of files
to be processed by make-docfile.c--it doesn't make sense to add it
to preloaded-file-list, since that is used for purposes of
byte-compilation too.
src/ChangeLog addition:
2008-12-27 Aidan Kehoe <kehoea@parhasard.net>
* doc.c (Fbuilt_in_symbol_file):
Return a subr's filename immediately if we've found it. Check for
compiled function and compiled macro docstrings in DOC too, and
return them if they exist.
The branch of the if statement focused on functions may have
executed, but we may still want to check variable bindings; an
else clause isn't appropriate.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sat, 27 Dec 2008 14:05:50 +0000 |
parents | e34711681f30 |
children | 16112448d484 e0db3c197671 |
rev | line source |
---|---|
428 | 1 /* TTY device functions. |
2 Copyright (C) 1994, 1995 Board of Trustees, University of Illinois. | |
3 Copyright (C) 1994, 1995 Free Software Foundation, Inc. | |
4 Copyright (C) 1996 Ben Wing. | |
5 | |
6 This file is part of XEmacs. | |
7 | |
8 XEmacs is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
10 Free Software Foundation; either version 2, or (at your option) any | |
11 later version. | |
12 | |
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with XEmacs; see the file COPYING. If not, write to | |
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
21 Boston, MA 02111-1307, USA. */ | |
22 | |
23 /* Synched up with: Not in FSF. */ | |
24 | |
25 /* Authors: Ben Wing and Chuck Thompson. */ | |
26 | |
27 #include <config.h> | |
28 #include "lisp.h" | |
29 | |
872 | 30 #include "device-impl.h" |
428 | 31 #include "events.h" |
32 #include "faces.h" | |
33 #include "frame.h" | |
34 #include "lstream.h" | |
35 #include "redisplay.h" | |
36 #include "sysdep.h" | |
37 | |
872 | 38 #include "console-tty-impl.h" |
800 | 39 #include "console-stream.h" |
40 | |
558 | 41 #include "sysfile.h" |
428 | 42 #include "syssignal.h" /* for SIGWINCH */ |
43 | |
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
44 Lisp_Object Qmake_device_early_tty_entry_point; |
428 | 45 |
46 | |
3092 | 47 #ifdef NEW_GC |
48 static const struct memory_description tty_device_data_description_1 [] = { | |
49 { XD_END } | |
50 }; | |
51 | |
52 DEFINE_LRECORD_IMPLEMENTATION ("tty-device", tty_device, | |
53 1, /*dumpable-flag*/ | |
54 0, 0, 0, 0, 0, | |
55 tty_device_data_description_1, | |
56 Lisp_Tty_Device); | |
57 #endif /* NEW_GC */ | |
58 | |
428 | 59 static void |
60 allocate_tty_device_struct (struct device *d) | |
61 { | |
3092 | 62 #ifdef NEW_GC |
63 d->device_data = alloc_lrecord_type (struct tty_device, &lrecord_tty_device); | |
64 #else /* not NEW_GC */ | |
428 | 65 d->device_data = xnew_and_zero (struct tty_device); |
3092 | 66 #endif /* not NEW_GC */ |
428 | 67 } |
68 | |
69 static void | |
2286 | 70 tty_init_device (struct device *d, Lisp_Object UNUSED (props)) |
428 | 71 { |
72 struct console *con = XCONSOLE (DEVICE_CONSOLE (d)); | |
73 Lisp_Object terminal_type = CONSOLE_TTY_DATA (con)->terminal_type; | |
74 | |
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
75 /* Run part of the elisp side of the TTY device initialization. |
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
76 The post-init is run in the tty_finish_init_device() method. */ |
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
77 call0 (Qmake_device_early_tty_entry_point); |
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
78 |
428 | 79 DEVICE_INFD (d) = CONSOLE_TTY_DATA (con)->infd; |
80 DEVICE_OUTFD (d) = CONSOLE_TTY_DATA (con)->outfd; | |
81 | |
82 allocate_tty_device_struct (d); | |
83 init_baud_rate (d); | |
84 | |
85 switch (init_tty_for_redisplay (d, (char *) XSTRING_DATA (terminal_type))) | |
86 { | |
87 #if 0 | |
88 case TTY_UNABLE_OPEN_DATABASE: | |
89 suppress_early_error_handler_backtrace = 1; | |
563 | 90 signal_error (Qio_error, "Can't access terminal information database", Qunbound); |
428 | 91 break; |
92 #endif | |
93 case TTY_TYPE_UNDEFINED: | |
94 suppress_early_error_handler_backtrace = 1; | |
563 | 95 signal_error (Qio_error, "Terminal type undefined (or can't access database?)", |
96 terminal_type); | |
428 | 97 break; |
98 case TTY_TYPE_INSUFFICIENT: | |
99 suppress_early_error_handler_backtrace = 1; | |
563 | 100 signal_error (Qio_error, "Terminal type not powerful enough to run Emacs", |
101 terminal_type); | |
428 | 102 break; |
103 case TTY_SIZE_UNSPECIFIED: | |
104 suppress_early_error_handler_backtrace = 1; | |
563 | 105 signal_error (Qio_error, "Can't determine window size of terminal", Qunbound); |
428 | 106 break; |
107 case TTY_INIT_SUCCESS: | |
108 break; | |
109 default: | |
2500 | 110 ABORT (); |
428 | 111 } |
112 | |
113 init_one_device (d); | |
114 } | |
115 | |
3092 | 116 #ifndef NEW_GC |
428 | 117 static void |
118 free_tty_device_struct (struct device *d) | |
119 { | |
1726 | 120 if (d->device_data) |
121 xfree (d->device_data, void *); | |
428 | 122 } |
123 | |
124 static void | |
125 tty_delete_device (struct device *d) | |
126 { | |
127 free_tty_device_struct (d); | |
128 } | |
3092 | 129 #endif /* not NEW_GC */ |
428 | 130 |
131 #ifdef SIGWINCH | |
132 | |
133 static SIGTYPE | |
2286 | 134 tty_device_size_change_signal (int UNUSED (signo)) |
428 | 135 { |
136 int old_errno = errno; | |
137 asynch_device_change_pending++; | |
138 #ifdef HAVE_UNIXOID_EVENT_LOOP | |
139 signal_fake_event (); | |
140 #endif | |
141 EMACS_REESTABLISH_SIGNAL (SIGWINCH, tty_device_size_change_signal); | |
142 errno = old_errno; | |
143 SIGRETURN; | |
144 } | |
145 | |
146 /* frame_change_signal does nothing but set a flag that it was called. | |
147 When redisplay is called, it will notice that the flag is set and | |
148 call handle_pending_device_size_change to do the actual work. */ | |
149 static void | |
150 tty_asynch_device_change (void) | |
151 { | |
152 Lisp_Object devcons, concons; | |
153 | |
154 DEVICE_LOOP_NO_BREAK (devcons, concons) | |
155 { | |
156 int width, height; | |
157 Lisp_Object tail; | |
158 struct device *d = XDEVICE (XCAR (devcons)); | |
159 struct console *con = XCONSOLE (DEVICE_CONSOLE (d)); | |
160 | |
161 if (!DEVICE_TTY_P (d)) | |
162 continue; | |
163 | |
164 get_tty_device_size (d, &width, &height); | |
165 if (width > 0 && height > 0 | |
166 && (CONSOLE_TTY_DATA (con)->width != width | |
167 || CONSOLE_TTY_DATA (con)->height != height)) | |
168 { | |
169 CONSOLE_TTY_DATA (con)->width = width; | |
170 CONSOLE_TTY_DATA (con)->height = height; | |
171 | |
172 for (tail = DEVICE_FRAME_LIST (d); | |
173 !NILP (tail); | |
174 tail = XCDR (tail)) | |
175 { | |
176 struct frame *f = XFRAME (XCAR (tail)); | |
177 | |
178 /* We know the frame is tty because we made sure that the | |
179 device is tty. */ | |
180 change_frame_size (f, height, width, 1); | |
181 } | |
182 } | |
183 } | |
184 } | |
185 | |
186 #endif /* SIGWINCH */ | |
187 | |
188 static Lisp_Object | |
189 tty_device_system_metrics (struct device *d, | |
190 enum device_metrics m) | |
191 { | |
192 struct console *con = XCONSOLE (DEVICE_CONSOLE (d)); | |
193 switch (m) | |
194 { | |
195 case DM_size_device: | |
196 return Fcons (make_int (CONSOLE_TTY_DATA (con)->width), | |
197 make_int (CONSOLE_TTY_DATA (con)->height)); | |
198 default: /* No such device metric property for TTY devices */ | |
199 return Qunbound; | |
200 } | |
201 } | |
202 | |
203 /************************************************************************/ | |
204 /* initialization */ | |
205 /************************************************************************/ | |
206 | |
207 void | |
208 syms_of_device_tty (void) | |
209 { | |
3092 | 210 #ifdef NEW_GC |
211 INIT_LRECORD_IMPLEMENTATION (tty_device); | |
212 #endif /* NEW_GC */ | |
213 | |
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
214 DEFSYMBOL (Qmake_device_early_tty_entry_point); |
428 | 215 } |
216 | |
217 void | |
218 console_type_create_device_tty (void) | |
219 { | |
220 /* device methods */ | |
221 CONSOLE_HAS_METHOD (tty, init_device); | |
3092 | 222 #ifndef NEW_GC |
428 | 223 CONSOLE_HAS_METHOD (tty, delete_device); |
3092 | 224 #endif /* not NEW_GC */ |
428 | 225 #ifdef SIGWINCH |
226 CONSOLE_HAS_METHOD (tty, asynch_device_change); | |
227 #endif /* SIGWINCH */ | |
228 CONSOLE_HAS_METHOD (tty, device_system_metrics); | |
229 } | |
230 | |
231 void | |
232 init_device_tty (void) | |
233 { | |
234 #ifdef SIGWINCH | |
235 if (initialized && !noninteractive) | |
613 | 236 EMACS_SIGNAL (SIGWINCH, tty_device_size_change_signal); |
428 | 237 #endif /* SIGWINCH */ |
238 } |