changeset 53340:db645482d6bc

Trivial changes git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-18
author Karoly Lorentey <lorentey@elte.hu>
date Sun, 28 Dec 2003 22:28:52 +0000
parents 09ea561dfa8c
children d4e6a050c9b1
files README.multi-tty src/cm.c src/cm.h src/term.c
diffstat 4 files changed, 52 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/README.multi-tty	Sun Dec 28 16:05:28 2003 +0000
+++ b/README.multi-tty	Sun Dec 28 22:28:52 2003 +0000
@@ -28,7 +28,8 @@
 already seems to be usable.  Emacsclient has been extended to support
 opening a new terminal frame.
 
-To try it out, compile Emacs with the following commands
+To try it out, compile the multi-tty branch with the following
+commands:
 
    	mkdir +build
 	cd +build
@@ -38,17 +39,24 @@
 then start up the emacs server (src/emacs, M-x server-start), and then
 (from a shell prompt on another terminal) start emacsclient with
 
-	lib-src/emacsclient -h
+	lib-src/emacsclient -h  /optional/file/names...
 
-You'll hopefully have two fully working frames on separate terminals.
-If you exit emacs, both terminals should be restored to their previous
-states.  You can close the newly opened frame and return to the shell
-without exiting Emacs by pressing C-x 5 0, i.e., delete-frame.
+You'll hopefully have two fully working, independent frames on
+separate terminals.  (This seems to be very useful, emacsclient starts
+up even faster than vi!) :-) You can close the newly opened frame and
+return to the shell without exiting Emacs by pressing C-x 5 0, i.e.,
+delete-frame.  (Note that this does not seem to work yet on the
+original terminal.)  Creating new frames on the same tty with C-x 5 2
+works exactly as before.  Suspending Emacs is disabled at the moment.
+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
-compile -- this will be solved later.
+compile -- this will be solved later.  Please see the attached README
+for other issues, implementation notes and sub-TODO items.
 
-Tested under GNU/Linux only.
+Only tested on my GNU/Linux box.
+
 
 NEWS
 ----
--- a/src/cm.c	Sun Dec 28 16:05:28 2003 +0000
+++ b/src/cm.c	Sun Dec 28 22:28:52 2003 +0000
@@ -134,8 +134,7 @@
  * after we reach the last column; this takes us to a known state.
  */
 void
-cmcheckmagic (tty)
-     struct tty_output *tty;
+cmcheckmagic (struct tty_output *tty)
 {
   if (curX (tty) == FrameCols (tty))
     {
--- a/src/cm.h	Sun Dec 28 16:05:28 2003 +0000
+++ b/src/cm.h	Sun Dec 28 22:28:52 2003 +0000
@@ -166,10 +166,10 @@
 extern struct tty_output *current_tty;
 extern void cmcheckmagic P_ ((struct tty_output *));
 extern int cmputc P_ ((int));
-extern void cmcostinit P_ ((struct tty_output *tty));
+extern void cmcostinit P_ ((struct tty_output *));
 extern void cmgoto P_ ((struct tty_output *, int, int));
-extern void Wcm_clear P_ ((struct tty_output *tty));
-extern int Wcm_init P_ ((struct tty_output *tty));
+extern void Wcm_clear P_ ((struct tty_output *));
+extern int Wcm_init P_ ((struct tty_output *));
 
 /* arch-tag: acc1535a-7136-49d6-b22d-9bc85702251b
    (do not change this comment) */
--- a/src/term.c	Sun Dec 28 16:05:28 2003 +0000
+++ b/src/term.c	Sun Dec 28 22:28:52 2003 +0000
@@ -917,18 +917,19 @@
 {
   char *buf;
   struct glyph *glyph = NULL;
-  struct frame *f = (updating_frame ? updating_frame : XFRAME (selected_frame));
+  struct frame *f;
   struct tty_output *tty;
   
   if (len <= 0)
     return;
 
-  if (insert_glyphs_hook  && ! FRAME_TERMCAP_P (f))
+  if (insert_glyphs_hook)
     {
       (*insert_glyphs_hook) (start, len);
       return;
     }
 
+  f = (updating_frame ? updating_frame : XFRAME (selected_frame));  
   tty = FRAME_TTY (f);
 
   if (tty->TS_ins_multi_chars)
@@ -2156,11 +2157,9 @@
       tty_list = tty;
     }
 
-  if (tty->Wcm)
-    Wcm_clear (tty);
-  else
-    tty->Wcm = (struct cm *) xmalloc (sizeof (struct cm));
-  
+  if (! tty->Wcm)
+      tty->Wcm = (struct cm *) xmalloc (sizeof (struct cm));
+
   if (name)
     {
       int fd;
@@ -2676,24 +2675,6 @@
 {
   Lisp_Object tail, frame;
 
-  FOR_EACH_FRAME (tail, frame)
-    {
-      struct frame *f = XFRAME (frame);
-      if (FRAME_LIVE_P (f) && FRAME_TTY (f) == tty)
-        {
-          Fdelete_frame (frame, Qt);
-          f->output_data.tty = 0;
-        }
-    }
-  
-  /* Close the terminal and free memory. */
-  delete_tty_1 (tty);
-}
-
-static void
-delete_tty_1 (struct tty_output *tty)
-{
-
   if (tty == tty_list)
     tty_list = tty->next;
   else
@@ -2709,13 +2690,25 @@
       p->next = p->next->next;
     }
 
+  FOR_EACH_FRAME (tail, frame)
+    {
+      struct frame *f = XFRAME (frame);
+      if (FRAME_LIVE_P (f) && FRAME_TTY (f) == tty)
+        {
+          Fdelete_frame (frame, Qt);
+          f->output_data.tty = 0;
+        }
+    }
+  
   /* This hangs. */
-  /*  reset_sys_modes (tty); */
-
-    if (tty->name)
+  /*
+  reset_sys_modes (tty);
+
+  if (tty->name)
     xfree (tty->name);
   if (tty->type)
     xfree (tty->type);
+  */
   if (tty->input)
     fclose (tty->input);
   if (tty->output)
@@ -2723,9 +2716,19 @@
   if (tty->termscript)
     fclose (tty->termscript);
 
+  tty->input = 0;
+  tty->output = 0;
+  tty->termscript = 0;
+  
   /*
   if (tty->old_tty)
-    xfree (tty->old_tty);
+    {
+      memset (tty->old_tty, 'Z', sizeof (struct emacs_tty));
+      tty->old_tty = 0;
+    }
+  
+    
+    /*    xfree (tty->old_tty);
 
     if (tty->Wcm)
     {