Mercurial > emacs
diff README.multi-tty @ 82990:2ecd1f669db9
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
| author | Karoly Lorentey <lorentey@elte.hu> |
|---|---|
| date | Fri, 02 Jan 2004 01:15:26 +0000 |
| parents | f3845715a5f6 |
| children | 2b26656ff804 |
line wrap: on
line diff
--- a/README.multi-tty Thu Jan 01 17:55:53 2004 +0000 +++ b/README.multi-tty Fri Jan 02 01:15:26 2004 +0000 @@ -16,7 +16,7 @@ Retrieving the latest version of the branch: tla register-archive lorentey@elte.hu--2004 http://lorentey.web.elte.hu/arch/2004/ - tla get lorentey@elte.hu--2004/emacs--multi-tty--0 <directory> + tla get lorentey@elte.hu--2004/emacs--multi-tty <directory> (I use tla 1.1.) @@ -33,11 +33,11 @@ mkdir +build cd +build - ../configure --with-x-toolkit=no --without-x + ../configure make bootstrap -then start up the emacs server (src/emacs, M-x server-start), and then -(from a shell prompt on another terminal) start emacsclient with +then start up the emacs server (src/emacs -nw, M-x server-start), and +then (from a shell prompt on another terminal) start emacsclient with lib-src/emacsclient -f /optional/file/names... @@ -50,7 +50,10 @@ If you exit emacs, all terminals should be restored to their previous states. -X, Mac, Windows and DOS support is broken, probably doesn't even +X support is (I hope) working, but at the moment there are problems +with simultaneous X and tty devices, so don't do that. + +Mac, Windows and DOS support is broken, probably doesn't even compile -- this will be solved later. Only tested on my GNU/Linux box. @@ -91,9 +94,9 @@ (ex-TODO items with explanations.) --- Introduce a new abstraction for terminal devices. +-- Introduce a new struct for terminal devices. - (Done, see struct tty_output. The abstraction is not yet + (Done, see struct tty_output. The list of members is not yet complete.) -- Change the bootstrap procedure to initialize tty_list. @@ -112,6 +115,8 @@ (Update: They do, now.) + (Update2: After enabling X, they don't.) + -- other-frame should cycle through the frames on the `current' terminal only. @@ -167,6 +172,8 @@ read_input_waiting was not necessary. Secondary ttys do seem to send signals on input.) + (Update^3: Not any more.) + -- Make make-terminal-frame look up the `tty' and `tty-type' frame parameters from the currently selected terminal before the global default. @@ -191,7 +198,7 @@ (Done, but at the moment only called when an error happens during initialization. There is a memory corruption error around this - somewhere.) + somewhere.) (Update: now it is fully enabled.) -- Implement automatic deletion of terminals when the last frame on that terminal is closed. @@ -214,9 +221,10 @@ server-frames may be removed from server.el.) (Done, nothing to do. It seems that Emacs does not receive SIGHUP - from secondary ttys.) + from secondary ttys, which is actually a good thing.) (Update: I + think it would be a bad idea to remove server-frames anyway.) --- Change emacsclient/server.el to support the -h argument better, +-- Change emacsclient/server.el to support the -t argument better, i.e. automatically close the socket when the frame is closed. (Seems to be working OK.) @@ -248,7 +256,7 @@ earlier, but it seems to be fixed (there were several changes around request_sigio, maybe one of them did it). read_input_waiting() is only used in sys_select(), don't change - it.) + it.) (Update: After adding X support, it's broken again.) -- Find out why does Emacs abort when it wants to close its controlling tty. Hint: chan_process[] array. Hey, maybe @@ -262,6 +270,7 @@ fcntl() kernel behaviour could be emulated by emacsclient. (Done. Simply disabled the SIGIO emulation hack in emacsclient.) + (Update: it was added back.) -- server.el: There are issues with saving files in buffers of closed clients. Try editing a file with emacsclient -f, and (without @@ -273,7 +282,7 @@ pending buffers, and modified buffers don't seem to be deleted.) -- emacsclient.el, server.el: Handle eval or file open errors when - doing -f. + doing -t. (Done.) @@ -286,32 +295,52 @@ (Done, see delete-tty.) +-- Get rid of the accessor macros in termchar.h, or define macros for + all members. + + (Done.) + +-- Move device-specific parameters (like costs) commonly used by + device backends to a common, device-dependent structure. + + (Done. See struct display_method in termhooks.h.) + +-- Fix X support. + + (Done. Well, it seems to be working.) + +-- Allow simultaneous X and tty frames. (Handling input could be + tricky. Or maybe not.) + + (Done. Allowed, that is. It is currently extremely unstable, to + the point of being unusable. The rif variable causes constant + core dumps. Handling input is indeed tricky.) THINGS TO DO ------------ +** Fix rif issue with X-tty combo sessions. IMHO the best thing to do + is to get rid of that global variable (and use the value value in + display_method, which is guaranteed to be correct). + +** Fix faces on tty frames during X-tty combo sessions. + ** Find out the best way to support suspending Emacs with multiple - ttys. My guess: disable it on the controlling tty, but other ttys - should pass it on to emacsclient somehow. (It is (I hope) trivial - to extend emacsclient to handle suspend/resume. A `kill -STOP' - almost works right now.) + ttys. My guess: disable it on the controlling tty, but from other + ttys pass it on to emacsclient somehow. (It is (I hope) trivial to + extend emacsclient to handle suspend/resume. A `kill -STOP' almost + works right now.) ** Move baud_rate to tty_output. -** Move device-specific parameters (like costs) commonly used by - device backends to a common, device-dependent structure. - ** Do tty output through term_hooks, like graphical display backends. -** Fix X support. - -** Allow simultaneous X and tty frames. (Handling input could be - tricky. Or maybe not.) - ** Implement support for starting an interactive Emacs session without an initial frame. (The user would connect to it and open frames later, with emacsclient.) Not necessarily a good idea. +** Fix input from raw ttys (again). + ** Fix Mac support (I can't do this myself). ** Fix W32 support (I can't do this myself). @@ -320,14 +349,22 @@ ** Do a grep on XXX and ?? for more issues. -** Get rid of the accessor macros in termchar.h, or define macros for - all members. +** Understand Emacs's low-level input system (it seems complicated) + :-) and maybe rewrite multi-tty input in terms of MULTI_KBOARD. + (Update: This backtrace from a tty-X combo session hints that this + may be necessary.) -** Understand Emacs's low-level input system (it seems complicated) :-) - and maybe rewrite multi-tty input in terms of MULTIKBOARD. + #0 abort () at /home/lorentey/work/emacs/emacs--multi-tty/src/emacs.c:417 + #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 + #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 + #3 0x0819387c in Fy_or_n_p (prompt=1759896324) at /home/lorentey/work/emacs/emacs--multi-tty/src/fns.c:3115 + ... ** What does interrupt_input do? I tried to disable it for raw secondary tty support, but it does not seem to do anything useful. + (Update: Look again. X unconditionally enables this, maybe that's + why raw terminal support is broken again. I really do need to + understand input.) ** Make sure C-g goes to the right frame. This is hard, as SIGINT doesn't have a tty parameter. :-( @@ -335,7 +372,6 @@ ** I have seen a case when Emacs with multiple ttys fell into a loop eating 100% of CPU time. Strace showed this loop: - getpid() = 30284 kill(30284, SIGIO) = 0 --- SIGIO (I/O possible) @ 0 (0) ---
