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) ---