diff README.multi-tty @ 53233:fe9b37bee5f7

Fully eliminated global tty state variables. lib-src/emacsclient.c (main.c): Fix error message. lisp/frame.el (make-frame-on-tty): New function. lisp/server.el (server-process-filter): Notify emacsclient if there was on error during evaluation. src/cm.c: Fix remaining cases of direct Wcm references. src/dispextern.h: Updated prototypes. src/dispnew.c (Fredraw_frame): Fix set_terminal_modes call. (init_display): Remove reference to meta_key. src/frame.c (make_terminal_frame): Renamed first parameter to tty_name. Call term_init before creating the frame. (Fmake_terminal_frame): Look up the `tty' and `tty-type' frame parameters from the currently selected terminal before the global default. (Fdelete_frame): Make sure that the new selected frame is live. src/keyboard.c (meta_key): Moved to struct tty_output. (read_avail_input): Fix C syntax. Update references to meta_key. (Fsuspend_emacs): pass current tty to init_sys_modes via record_unwind_protect. (Fset_input_mode): Update references to meta_key. (Fcurrent_input_mode): Ditto. src/sysdep.c (init_sys_modes): Updated old_tty and meta_key references. Don't call set_terminal_modes, it needs termcap strings. (reset_sys_modes): Call tty_reset_terminal_modes instead of reset_terminal_modes. Updated old_tty references. src/term.c: Massive updates throuout the file. (TS_*, TN_*): Moved to struct tty_output. (RPov, delete_in_insert_mode se_is_so, costs_set, insert_mode): Ditto. (standout_mode, specified_window, tty_cursor_hidden): Ditto. (tty_set_terminal_modes, tty_reset_terminal_modes): New functions. (turn_on_insert, turn_off_insert): Added tty parameter. (turn_on_highlight, turn_off_highlight, toggle_highlight): Added tty parameter. (tty_hide_cursor, tty_show_cursor): Ditto. (background_highlight, highlight_if_desired): Ditto. (tty_capable_p): Changed first parameter to tty_output. (term_init): Make sure top_frame is initialized. Don't exit on errors if this would have been a secondary terminal. Call set_terminal_modes on the end. (delete_tty): New function. (delete_tty_1): New function. (print_all_frames): New function, marginally useful for debugging. src/termchar.h (struct tty_output): Changed old_tty to be a pointer. Removed old_tty_valid member. Added tty-specific variables from term.c. src/xfaces.c (Ftty_supports_face_attributes_p): Update for new tty_capable_p. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-9
author Karoly Lorentey <lorentey@elte.hu>
date Sat, 27 Dec 2003 10:00:19 +0000
parents 22aaf1e5fbe6
children f3b94bd26d21
line wrap: on
line diff
--- a/README.multi-tty	Sat Dec 27 01:12:57 2003 +0000
+++ b/README.multi-tty	Sat Dec 27 10:00:19 2003 +0000
@@ -27,8 +27,8 @@
 Basic support is there; there are some rough edges, but it already
 seems to be usable.  Input is read from all terminals (NOT via
 MULTIKBOARD!).  At the moment, the type of the new terminals must be
-the same as the initial terminal.  Emacsclient was extended to support
-opening a new terminal frame.
+the same as the initial terminal.  Emacsclient has been extended to
+support opening a new terminal frame.
 
 To try it out, start up the emacs server (M-x server-start), and then
 (from a shell prompt on another terminal) start emacsclient with
@@ -147,38 +147,68 @@
    (Done, emacsclient signals Emacs after writing to the proxy pseudo
    terminal.  This means that multi-tty does not work with raw ttys!)
 
+
+-- Make make-terminal-frame look up the `tty' and `tty-type' frame
+   parameters from the currently selected terminal before the global
+   default.
+
+   (Done.)
+
+-- Put all cached terminal escape sequences into struct tty_output.
+   Currently, they are still stored in global variables, so we don't
+   really support multiple terminal types.
+
+   (Done.)
+
+-- Implement sane error handling after initialization.  (Currently
+   emacs exits if you specify a bad terminal type.)  The helpful error
+   messages must still be provided when Emacs starts.
+
+   (Done.)
+
+-- Implement terminal deletion, i.e., deleting local frames, closing
+   the tty device and restoring its previous state without exiting
+   Emacs.
+
+   (Done, but at the moment only called when an error happens during
+   initialization.  There is a memory corruption error around this
+   somewhere.)
+
+
 THINGS TO DO
 ------------
 
-** Implement sane error handling after initialization.  (Currently
-   emacs exits if you specify a bad terminal type.)  The helpful error
-   messages must still be provided when Emacs starts.
+** Fix mysterious memory corruption error with tty deletion.  To
+   trigger it, try the following shell command:
+
+	while true; do TERM=no-such-terminal-definition emacsclient -h; done
+
+   Emacs usually dumps core after a few dozen iterations.  (The bug
+   seems to be related to the xfree()ing or bzero()ing of
+   tty_output.Wcm.  Maybe there are outside references to struct Wcm?
+   Sounds logical, otherwise these vars would not have been collected
+   into a struct.  But where?)
+
+   This does not seem to happen if the error occurs before terminal
+   initialization or if I comment out all xfree()s in delete_frame.
+   Update: yes it does, although it is much rarer.
 
 ** C-g should work on secondary terminals.
 
-** Make make-terminal-frame look up the tty and tty-type parameters
-   from the currently selected terminal before the global default.
-
 ** Move optimalization parameters (costs) from union output_data to
    a backend-neutral per-device structure.
 
-** Implement terminal deletion, i.e., deleting local frames, closing
-   the tty device and restoring its previous state without exiting
-   Emacs.  This should be exported to the Lisp environment.
-
 ** Implement automatic deletion of terminals when the last frame on
    that terminal is closed.
 
-** Put all cached terminal escape sequences into struct tty_output.
-   Currently, they are still stored in global variables, so we don't
-   really support multiple terminal types.
-
 ** Make parts of struct tty_output accessible from Lisp.  The device
    name and the type is sufficient.
 
+** Export delete_tty to the Lisp environment.
+
 ** 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 necessary a good idea.
+   later, with emacsclient.)  Not necessarily a good idea.
 
 ** Support raw secondary terminals.  (This one is tricky, SIGIO works
    only on the controlling terminal.)