diff src/term.c @ 53229:33c3c7c16e13

lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work. (here): New variable. (decode_options): Use it. (ec_get_tty, ec_set_tty, init_tty, window_change, hang_up_signal): New functions. (window_change_signal, init_signals, reset_tty, init_pty, copy_from_to): Ditto. (pty_conversation): Ditto. (main): Use them. (master, pty_name, old_tty, tty, old_tty_valid, tty_erase_char): New variables. (flow_control, meta_key, _sobuf, in_conversation, quit_conversation): Ditto. lisp/server.el (server-process-filter): Added support for opening a new terminal frame. dispextern.h (get_frame_size): Renamed to get_tty_size, added tty_output parameter. dispnew.c (Fredraw_frame): fflush the current terminal instead of stdout. (direct_output_for_insert, direct_output_forward_char, update_frame_1): Ditto. (Fding, bitch_at_user): Ditto. (update_frame_1): Count pending output for current terminal instead of stdout. (window_change_signal): Resize all terminals. (change_frame_size): Don't resize all terminals to the same size. frame.c (Vterminal_frame): Removed. (syms_of_frame): Removed declaration of Vterminal_frame. (make_terminal_frame): Set the top frame of the terminal to the new frame. (Fmake_terminal_frame): Get a new frame size from get_tty_size, don't copy it. (do_switch_frame): Handle terminal frame visibility. (next_frame, prev_frame): Skip over frames on different terminals. frame.h (Vterminal_frame): Removed. keyboard.c (input_fd): Removed. (read_avail_input): Removed first argument from read_socket_hook. Try to read from each available tty, until one succeeds. (Fsuspend_emacs): Don't suspend if there are multiple terminals. lisp.h (get_frame_size): Removed superflous declaration. xterm.c (Xtread_socket): Removed first parameter. macterm.h (XTread_socket): Ditto. w32inevt.c (w32_console_read_socket): Ditto. w32term.c (w32_read_socket): Ditto. sysdep.c (input_fd): Removed. (change_input_fd): Removed. (discard_tty_input): Discard pending input on _all_ input descriptors. (stuff_char, tabs_safe_p): Use current terminal instead of input_fd. (init_baud_rate, request_sigio, unrequest_sigio): Ditto. (init_sys_modes, reset_sys_modes): Ditto. (narrow_foreground_group, widen_foreground_group): Use stdin. (init_sys_modes, reset_sys_modes): otty parameter renamed to tty_out. (get_frame_size): Renamed to get_tty_size, added tty_out parameter. term.c (read_socket_hook): Removed first parameter. (clear_end_of_line): Use updating_frame, if possible. (write_glyphs, insert_glyphs, ins_del_lines): Ditto. (term_init): Renamed get_frame_size to get_tty_size. termchar.h (struct tty_output): New entries: top_frame, previous_terminal_frame. termhooks.h (read_socket_hook): Removed first parameter. window.c (init_window_once): Removed reference to Vterminal_frame. xdisp.c (previous_terminal_frame): Moved to struct tty_output. (redisplay_internal): Updated to use previous_terminal_frame in tty_output. Allow for simultaneous refresh of multiple ttys. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-5
author Karoly Lorentey <lorentey@elte.hu>
date Fri, 26 Dec 2003 04:24:54 +0000
parents 1595c5e1e9bb
children 22aaf1e5fbe6
line wrap: on
line diff
--- a/src/term.c	Thu Dec 25 07:36:05 2003 +0000
+++ b/src/term.c	Fri Dec 26 04:24:54 2003 +0000
@@ -28,10 +28,10 @@
 
 #include <sys/file.h>
 
+#include "lisp.h"
 #include "systty.h" /* For emacs_tty in termchar.h */
 #include "termchar.h"
 #include "termopts.h"
-#include "lisp.h"
 #include "charset.h"
 #include "coding.h"
 #include "keyboard.h"
@@ -123,7 +123,7 @@
 void (*write_glyphs_hook) P_ ((struct glyph *, int));
 void (*delete_glyphs_hook) P_ ((int));
 
-int (*read_socket_hook) P_ ((int, struct input_event *, int, int));
+int (*read_socket_hook) P_ ((struct input_event *, int, int));
 
 void (*frame_up_to_date_hook) P_ ((struct frame *));
 
@@ -792,12 +792,11 @@
     }
   else
     {			/* have to do it the hard way */
-      struct frame *sf = XFRAME (selected_frame);
       turn_off_insert ();
 
       /* Do not write in last row last col with Auto-wrap on. */
-      if (AutoWrap && curY == FRAME_LINES (sf) - 1
-	  && first_unused_hpos == FRAME_COLS (sf))
+      if (AutoWrap && curY == FRAME_LINES (f) - 1
+	  && first_unused_hpos == FRAME_COLS (f))
 	first_unused_hpos--;
 
       for (i = curX; i < first_unused_hpos; i++)
@@ -925,8 +924,7 @@
      register int len;
 {
   int produced, consumed;
-  struct frame *sf = XFRAME (selected_frame);
-  struct frame *f = updating_frame ? updating_frame : sf;
+  struct frame *f = updating_frame ? updating_frame : XFRAME (selected_frame);
   unsigned char conversion_buffer[1024];
   int conversion_buffer_size = sizeof conversion_buffer;
 
@@ -944,8 +942,8 @@
      since that would scroll the whole frame on some terminals.  */
 
   if (AutoWrap
-      && curY + 1 == FRAME_LINES (sf)
-      && (curX + len) == FRAME_COLS (sf))
+      && curY + 1 == FRAME_LINES (f)
+      && (curX + len) == FRAME_COLS (f))
     len --;
   if (len <= 0)
     return;
@@ -1028,7 +1026,7 @@
 {
   char *buf;
   struct glyph *glyph = NULL;
-  struct frame *f, *sf;
+  struct frame *f;
 
   if (len <= 0)
     return;
@@ -1039,8 +1037,7 @@
       return;
     }
 
-  sf = XFRAME (selected_frame);
-  f = updating_frame ? updating_frame : sf;
+  f = updating_frame ? updating_frame : XFRAME (selected_frame);
 
   if (TS_ins_multi_chars)
     {
@@ -1159,7 +1156,7 @@
   char *multi = n > 0 ? TS_ins_multi_lines : TS_del_multi_lines;
   char *single = n > 0 ? TS_ins_line : TS_del_line;
   char *scroll = n > 0 ? TS_rev_scroll : TS_fwd_scroll;
-  struct frame *sf;
+  struct frame *f;
 
   register int i = n > 0 ? n : -n;
   register char *buf;
@@ -1170,7 +1167,7 @@
       return;
     }
 
-  sf = XFRAME (selected_frame);
+  f = (updating_frame ? updating_frame : XFRAME (selected_frame));
 
   /* If the lines below the insertion are being pushed
      into the end of the window, this is the same as clearing;
@@ -1179,11 +1176,11 @@
   /* If the lines below the deletion are blank lines coming
      out of the end of the window, don't bother,
      as there will be a matching inslines later that will flush them. */
-  if (TTY_SCROLL_REGION_OK (FRAME_TTY (sf))
+  if (TTY_SCROLL_REGION_OK (FRAME_TTY (f))
       && vpos + i >= specified_window)
     return;
-  if (!TTY_MEMORY_BELOW_FRAME (FRAME_TTY (sf))
-      && vpos + i >= FRAME_LINES (sf))
+  if (!TTY_MEMORY_BELOW_FRAME (FRAME_TTY (f))
+      && vpos + i >= FRAME_LINES (f))
     return;
 
   if (multi)
@@ -1191,7 +1188,7 @@
       raw_cursor_to (vpos, 0);
       background_highlight ();
       buf = tparam (multi, 0, 0, i);
-      OUTPUT (FRAME_TTY (sf), buf);
+      OUTPUT (FRAME_TTY (f), buf);
       xfree (buf);
     }
   else if (single)
@@ -1199,7 +1196,7 @@
       raw_cursor_to (vpos, 0);
       background_highlight ();
       while (--i >= 0)
-	OUTPUT (FRAME_TTY (sf), single);
+	OUTPUT (FRAME_TTY (f), single);
       if (TF_teleray)
 	curX = 0;
     }
@@ -1212,15 +1209,15 @@
 	raw_cursor_to (vpos, 0);
       background_highlight ();
       while (--i >= 0)
-	OUTPUTL (FRAME_TTY (sf), scroll, specified_window - vpos);
+	OUTPUTL (FRAME_TTY (f), scroll, specified_window - vpos);
       set_scroll_region (0, specified_window);
     }
 
-  if (!TTY_SCROLL_REGION_OK (FRAME_TTY (sf))
-      && TTY_MEMORY_BELOW_FRAME (FRAME_TTY (sf))
+  if (!TTY_SCROLL_REGION_OK (FRAME_TTY (f))
+      && TTY_MEMORY_BELOW_FRAME (FRAME_TTY (f))
       && n < 0)
     {
-      cursor_to (FRAME_LINES (sf) + n, 0);
+      cursor_to (FRAME_LINES (f) + n, 0);
       clear_to_end ();
     }
 }
@@ -2475,7 +2472,7 @@
   /* Get frame size from system, or else from termcap.  */
   {
     int height, width;
-    get_frame_size (&width, &height);
+    get_tty_size (tty, &width, &height);
     FRAME_COLS (sf) = width;
     FRAME_LINES (sf) = height;
   }