diff src/frame.c @ 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 e77dcb66ec84
line wrap: on
line diff
--- a/src/frame.c	Sat Dec 27 01:12:57 2003 +0000
+++ b/src/frame.c	Sat Dec 27 10:00:19 2003 +0000
@@ -478,14 +478,21 @@
 static int terminal_frame_count;
 
 struct frame *
-make_terminal_frame (tty, tty_type)
-     char *tty;
+make_terminal_frame (tty_name, tty_type)
+     char *tty_name;
      char *tty_type;
 {
   register struct frame *f;
   Lisp_Object frame;
   char name[20];
-
+  struct tty_output *tty;
+
+  /* init_term may throw an error, so create the tty first. */
+  if (initialized)
+    tty = term_init (tty_name, tty_type);
+  else
+    tty = term_dummy_init ();
+  
 #ifdef MULTI_KBOARD
   if (!initial_kboard)
     {
@@ -544,10 +551,7 @@
   make_mac_terminal_frame (f);
 #else
   f->output_method = output_termcap;
-  if (initialized)
-    f->output_data.tty = term_init (tty, tty_type);
-  else
-    f->output_data.tty = term_dummy_init ();
+  f->output_data.tty = tty;
   f->output_data.tty->top_frame = frame;
 #ifdef CANNOT_DUMP
   FRAME_FOREGROUND_PIXEL(f) = FACE_TTY_DEFAULT_FG_COLOR;
@@ -608,6 +612,8 @@
     /* XXX Ugh, there must be a better way to do this. */
     tty = Fassq (Qtty, parms);
     if (EQ (tty, Qnil))
+      tty = Fassq (Qtty, XFRAME (selected_frame)->param_alist);
+    if (EQ (tty, Qnil))
       tty = Fassq (Qtty, Vdefault_frame_alist);
     if (! EQ (tty, Qnil))
       tty = XCDR (tty);
@@ -617,6 +623,8 @@
     tty_type = Fassq (Qtty_type, parms);
     if (EQ (tty_type, Qnil))
       tty_type = Fassq (Qtty_type, Vdefault_frame_alist);
+    if (EQ (tty_type, Qnil))
+      tty_type = Fassq (Qtty, XFRAME (selected_frame)->param_alist);
     if (! EQ (tty_type, Qnil))
       tty_type = XCDR (tty_type);
     if (EQ (tty_type, Qnil) || !STRINGP (tty_type))
@@ -1300,7 +1308,7 @@
 	{
 	  FOR_EACH_FRAME (tail, frame1)
 	    {
-	      if (! EQ (frame, frame1))
+	      if (! EQ (frame, frame1) && FRAME_LIVE_P (XFRAME (frame1)))
 		break;
 	    }
 	}