aboutsummaryrefslogtreecommitdiffstats
path: root/README.multi-tty
diff options
context:
space:
mode:
authorKaroly Lorentey2004-01-02 01:15:26 +0000
committerKaroly Lorentey2004-01-02 01:15:26 +0000
commitdaf0170133e658c41f3ae2fc8558c5ab74227c1d (patch)
treefa6577e49c4c63a6ad6e672f9e3bd1a018cb61d0 /README.multi-tty
parent28d7d09f841801cd052bb4ba0df92016b9245870 (diff)
downloademacs-daf0170133e658c41f3ae2fc8558c5ab74227c1d.tar.gz
emacs-daf0170133e658c41f3ae2fc8558c5ab74227c1d.zip
Fixed X support, preliminary support for X-tty combo sessions.
lib-src/emacsclient.c (copy_from_to, pty_conversation): Re-added SIGIO hack. (Sigh.) lisp/frame.el (make-frame-on-tty): Use make-terminal-frame, not make-frame. src/dispnew.c (line_hash_code, line_draw_cost): Updated to use the new display_method parameters. (Fredraw_frame): fflush the tty only if f is a termcap frame. (direct_output_for_insert): Updated to use the new display_method parameters. fflush the tty only if f is a termcap frame. (direct_output_forward_char, update_frame_1, scrolling): Ditto. (update_frame_line, Fding, bitch_at_user): Ditto. (Fsend_string_to_terminal): Fail if current frame is not on a tty. (init_display): Frame size change is safe here. src/frame.c (Vterminal_frame): Restored previously deleted variable. (syms_of_frame): Initialize it. (make_terminal_frame): Copy the frame's display_method from tty_display_info. (Fmake_terminal_frame): Enable simultaneous X and tty frames (buggy). (Fredirect_frame_focus): Don't call frame_rehighlight_hook if frame is on a termcap device. src/frame.h (struct frame): Renamed display to display_method. (Vterminal_frame): Re-added declaration. src/keyboard.c (flow_control): Moved to struct tty_display_info. (read_avail_input): Check ttys even if there is a read_socket_hook. (Fset_input_mode): Call reset_sys_modes/init_sys_modes and set flow_control or meta_key only when the frame is a termcap frame. (Fcurrent_input_mode): Handle flow_control and meta_key right on non-termcap frames. src/scroll.c (calculate_scrolling, calculate_direct_scrolling): Update to use the new display_method parameters. (scrolling_1, scroll_cost): Ditto. src/sysdep.c (init_sys_modes, reset_sys_modes): Always set the terminal parameters if tty_out->input is not stdin. Updated to the new location of flow_control. (hft_init): Moved HFT init code to term_init, as it needs the frame. src/term.c (tty_display_method_template): New variable. (update_begin): Added rif hack. (set_terminal_window, ins_del_lines, term_init): Updated to use the new display_method parameters. (insert_glyphs, ins_del_lines): Only call insert_glyphs_hook if the current frame is not on a tty. (calculate_costs): Don't calculate costs if not on a tty. (term_dummy_init): Fixed tty->output initialization. Preallocate Wcm and display_method. (term_init): Allocate & initialize display_method. Blindly fixed WINDOWSNT-specific parts. Added HFT-specific initialization exception from hft_init. (delete_tty): Only delete termcap frames. Free() the display_method. src/termchar.h (struct tty_display_info): Moved high-level terminal characteristics to struct display_method. Added flow_control and display_method members. src/termhooks.h (struct display_method): New struct (renamed from struct device). Added accessor macros. src/window.c (init_window_once): Initialize Vterminal_frame. src/xdisp.c (init_iterator, expose_frame): Added rif hack. (try_window_id): Updated to use the new display_method parameters. src/xfaces.c (realize_basic_faces): Don't call x_update_menu_appearance if the frame is a tty frame. src/xfns.c (Fx_create_frame): Added rif hack. Initialize display_method. (x_create_tip_frame): Initialize display_method. src/xterm.c (x_display_method): New variable. (x_flush, x_frame_of_widget, XTmouse_position): Ignore non-X frames. (x_window_to_scroll_bar, x_window_to_menu_bar): Ditto. (xim_destroy_callback, xim_instantiate_callback): Ditto. (frame_highlight, frame_unhighlight): Added rif hack. (x_initialize): Don't initialize rif. Do initialize x_display_method. src/xterm.h (x_display_method): New declaration. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-30
Diffstat (limited to 'README.multi-tty')
-rw-r--r--README.multi-tty94
1 files changed, 65 insertions, 29 deletions
diff --git a/README.multi-tty b/README.multi-tty
index 8003cef473e..96397405ca5 100644
--- a/README.multi-tty
+++ b/README.multi-tty
@@ -16,7 +16,7 @@ Patches or suggestions are welcome!
16Retrieving the latest version of the branch: 16Retrieving the latest version of the branch:
17 17
18 tla register-archive lorentey@elte.hu--2004 http://lorentey.web.elte.hu/arch/2004/ 18 tla register-archive lorentey@elte.hu--2004 http://lorentey.web.elte.hu/arch/2004/
19 tla get lorentey@elte.hu--2004/emacs--multi-tty--0 <directory> 19 tla get lorentey@elte.hu--2004/emacs--multi-tty <directory>
20 20
21(I use tla 1.1.) 21(I use tla 1.1.)
22 22
@@ -33,11 +33,11 @@ commands:
33 33
34 mkdir +build 34 mkdir +build
35 cd +build 35 cd +build
36 ../configure --with-x-toolkit=no --without-x 36 ../configure
37 make bootstrap 37 make bootstrap
38 38
39then start up the emacs server (src/emacs, M-x server-start), and then 39then start up the emacs server (src/emacs -nw, M-x server-start), and
40(from a shell prompt on another terminal) start emacsclient with 40then (from a shell prompt on another terminal) start emacsclient with
41 41
42 lib-src/emacsclient -f /optional/file/names... 42 lib-src/emacsclient -f /optional/file/names...
43 43
@@ -50,7 +50,10 @@ works exactly as before. Suspending Emacs is disabled at the moment.
50If you exit emacs, all terminals should be restored to their previous 50If you exit emacs, all terminals should be restored to their previous
51states. 51states.
52 52
53X, Mac, Windows and DOS support is broken, probably doesn't even 53X support is (I hope) working, but at the moment there are problems
54with simultaneous X and tty devices, so don't do that.
55
56Mac, Windows and DOS support is broken, probably doesn't even
54compile -- this will be solved later. 57compile -- this will be solved later.
55 58
56Only tested on my GNU/Linux box. 59Only tested on my GNU/Linux box.
@@ -91,9 +94,9 @@ DIARY OF CHANGES
91 94
92(ex-TODO items with explanations.) 95(ex-TODO items with explanations.)
93 96
94-- Introduce a new abstraction for terminal devices. 97-- Introduce a new struct for terminal devices.
95 98
96 (Done, see struct tty_output. The abstraction is not yet 99 (Done, see struct tty_output. The list of members is not yet
97 complete.) 100 complete.)
98 101
99-- Change the bootstrap procedure to initialize tty_list. 102-- Change the bootstrap procedure to initialize tty_list.
@@ -112,6 +115,8 @@ DIARY OF CHANGES
112 115
113 (Update: They do, now.) 116 (Update: They do, now.)
114 117
118 (Update2: After enabling X, they don't.)
119
115-- other-frame should cycle through the frames on the `current' 120-- other-frame should cycle through the frames on the `current'
116 terminal only. 121 terminal only.
117 122
@@ -167,6 +172,8 @@ DIARY OF CHANGES
167 read_input_waiting was not necessary. Secondary ttys do seem to 172 read_input_waiting was not necessary. Secondary ttys do seem to
168 send signals on input.) 173 send signals on input.)
169 174
175 (Update^3: Not any more.)
176
170-- Make make-terminal-frame look up the `tty' and `tty-type' frame 177-- Make make-terminal-frame look up the `tty' and `tty-type' frame
171 parameters from the currently selected terminal before the global 178 parameters from the currently selected terminal before the global
172 default. 179 default.
@@ -191,7 +198,7 @@ DIARY OF CHANGES
191 198
192 (Done, but at the moment only called when an error happens during 199 (Done, but at the moment only called when an error happens during
193 initialization. There is a memory corruption error around this 200 initialization. There is a memory corruption error around this
194 somewhere.) 201 somewhere.) (Update: now it is fully enabled.)
195 202
196-- Implement automatic deletion of terminals when the last frame on 203-- Implement automatic deletion of terminals when the last frame on
197 that terminal is closed. 204 that terminal is closed.
@@ -214,9 +221,10 @@ DIARY OF CHANGES
214 server-frames may be removed from server.el.) 221 server-frames may be removed from server.el.)
215 222
216 (Done, nothing to do. It seems that Emacs does not receive SIGHUP 223 (Done, nothing to do. It seems that Emacs does not receive SIGHUP
217 from secondary ttys.) 224 from secondary ttys, which is actually a good thing.) (Update: I
225 think it would be a bad idea to remove server-frames anyway.)
218 226
219-- Change emacsclient/server.el to support the -h argument better, 227-- Change emacsclient/server.el to support the -t argument better,
220 i.e. automatically close the socket when the frame is closed. 228 i.e. automatically close the socket when the frame is closed.
221 229
222 (Seems to be working OK.) 230 (Seems to be working OK.)
@@ -248,7 +256,7 @@ DIARY OF CHANGES
248 earlier, but it seems to be fixed (there were several changes 256 earlier, but it seems to be fixed (there were several changes
249 around request_sigio, maybe one of them did it). 257 around request_sigio, maybe one of them did it).
250 read_input_waiting() is only used in sys_select(), don't change 258 read_input_waiting() is only used in sys_select(), don't change
251 it.) 259 it.) (Update: After adding X support, it's broken again.)
252 260
253-- Find out why does Emacs abort when it wants to close its 261-- Find out why does Emacs abort when it wants to close its
254 controlling tty. Hint: chan_process[] array. Hey, maybe 262 controlling tty. Hint: chan_process[] array. Hey, maybe
@@ -262,6 +270,7 @@ DIARY OF CHANGES
262 fcntl() kernel behaviour could be emulated by emacsclient. 270 fcntl() kernel behaviour could be emulated by emacsclient.
263 271
264 (Done. Simply disabled the SIGIO emulation hack in emacsclient.) 272 (Done. Simply disabled the SIGIO emulation hack in emacsclient.)
273 (Update: it was added back.)
265 274
266-- server.el: There are issues with saving files in buffers of closed 275-- server.el: There are issues with saving files in buffers of closed
267 clients. Try editing a file with emacsclient -f, and (without 276 clients. Try editing a file with emacsclient -f, and (without
@@ -273,7 +282,7 @@ DIARY OF CHANGES
273 pending buffers, and modified buffers don't seem to be deleted.) 282 pending buffers, and modified buffers don't seem to be deleted.)
274 283
275-- emacsclient.el, server.el: Handle eval or file open errors when 284-- emacsclient.el, server.el: Handle eval or file open errors when
276 doing -f. 285 doing -t.
277 286
278 (Done.) 287 (Done.)
279 288
@@ -286,32 +295,52 @@ DIARY OF CHANGES
286 295
287 (Done, see delete-tty.) 296 (Done, see delete-tty.)
288 297
298-- Get rid of the accessor macros in termchar.h, or define macros for
299 all members.
300
301 (Done.)
302
303-- Move device-specific parameters (like costs) commonly used by
304 device backends to a common, device-dependent structure.
305
306 (Done. See struct display_method in termhooks.h.)
307
308-- Fix X support.
309
310 (Done. Well, it seems to be working.)
311
312-- Allow simultaneous X and tty frames. (Handling input could be
313 tricky. Or maybe not.)
314
315 (Done. Allowed, that is. It is currently extremely unstable, to
316 the point of being unusable. The rif variable causes constant
317 core dumps. Handling input is indeed tricky.)
289 318
290THINGS TO DO 319THINGS TO DO
291------------ 320------------
292 321
322** Fix rif issue with X-tty combo sessions. IMHO the best thing to do
323 is to get rid of that global variable (and use the value value in
324 display_method, which is guaranteed to be correct).
325
326** Fix faces on tty frames during X-tty combo sessions.
327
293** Find out the best way to support suspending Emacs with multiple 328** Find out the best way to support suspending Emacs with multiple
294 ttys. My guess: disable it on the controlling tty, but other ttys 329 ttys. My guess: disable it on the controlling tty, but from other
295 should pass it on to emacsclient somehow. (It is (I hope) trivial 330 ttys pass it on to emacsclient somehow. (It is (I hope) trivial to
296 to extend emacsclient to handle suspend/resume. A `kill -STOP' 331 extend emacsclient to handle suspend/resume. A `kill -STOP' almost
297 almost works right now.) 332 works right now.)
298 333
299** Move baud_rate to tty_output. 334** Move baud_rate to tty_output.
300 335
301** Move device-specific parameters (like costs) commonly used by
302 device backends to a common, device-dependent structure.
303
304** Do tty output through term_hooks, like graphical display backends. 336** Do tty output through term_hooks, like graphical display backends.
305 337
306** Fix X support.
307
308** Allow simultaneous X and tty frames. (Handling input could be
309 tricky. Or maybe not.)
310
311** Implement support for starting an interactive Emacs session without 338** Implement support for starting an interactive Emacs session without
312 an initial frame. (The user would connect to it and open frames 339 an initial frame. (The user would connect to it and open frames
313 later, with emacsclient.) Not necessarily a good idea. 340 later, with emacsclient.) Not necessarily a good idea.
314 341
342** Fix input from raw ttys (again).
343
315** Fix Mac support (I can't do this myself). 344** Fix Mac support (I can't do this myself).
316 345
317** Fix W32 support (I can't do this myself). 346** Fix W32 support (I can't do this myself).
@@ -320,14 +349,22 @@ THINGS TO DO
320 349
321** Do a grep on XXX and ?? for more issues. 350** Do a grep on XXX and ?? for more issues.
322 351
323** Get rid of the accessor macros in termchar.h, or define macros for 352** Understand Emacs's low-level input system (it seems complicated)
324 all members. 353 :-) and maybe rewrite multi-tty input in terms of MULTI_KBOARD.
354 (Update: This backtrace from a tty-X combo session hints that this
355 may be necessary.)
325 356
326** Understand Emacs's low-level input system (it seems complicated) :-) 357 #0 abort () at /home/lorentey/work/emacs/emacs--multi-tty/src/emacs.c:417
327 and maybe rewrite multi-tty input in terms of MULTIKBOARD. 358 #1 0x081104fb in read_char (commandflag=0, nmaps=0, maps=0x0, prev_event=675499188, used_mouse_menu=0x0) at /home/lorentey/work/emacs/emacs--multi-tty/src/keyboard.c:2581
359 #2 0x0819f23e in read_filtered_event (no_switch_frame=1, ascii_required=0, error_nonascii=0, input_method=0) at /home/lorentey/work/emacs/emacs--multi-tty/src/lread.c:468
360 #3 0x0819387c in Fy_or_n_p (prompt=1759896324) at /home/lorentey/work/emacs/emacs--multi-tty/src/fns.c:3115
361 ...
328 362
329** What does interrupt_input do? I tried to disable it for raw 363** What does interrupt_input do? I tried to disable it for raw
330 secondary tty support, but it does not seem to do anything useful. 364 secondary tty support, but it does not seem to do anything useful.
365 (Update: Look again. X unconditionally enables this, maybe that's
366 why raw terminal support is broken again. I really do need to
367 understand input.)
331 368
332** Make sure C-g goes to the right frame. This is hard, as SIGINT 369** Make sure C-g goes to the right frame. This is hard, as SIGINT
333 doesn't have a tty parameter. :-( 370 doesn't have a tty parameter. :-(
@@ -335,7 +372,6 @@ THINGS TO DO
335** I have seen a case when Emacs with multiple ttys fell into a loop 372** I have seen a case when Emacs with multiple ttys fell into a loop
336 eating 100% of CPU time. Strace showed this loop: 373 eating 100% of CPU time. Strace showed this loop:
337 374
338
339 getpid() = 30284 375 getpid() = 30284
340 kill(30284, SIGIO) = 0 376 kill(30284, SIGIO) = 0
341 --- SIGIO (I/O possible) @ 0 (0) --- 377 --- SIGIO (I/O possible) @ 0 (0) ---