diff README.multi-tty @ 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 c5b253fd2504
children 22aaf1e5fbe6
line wrap: on
line diff
--- a/README.multi-tty	Thu Dec 25 07:36:05 2003 +0000
+++ b/README.multi-tty	Fri Dec 26 04:24:54 2003 +0000
@@ -25,19 +25,18 @@
 ------
 
 We can create frames on new tty devices, but there are problems with
-refresh (only the (single) selected frame is refreshed), and input is
-read only from the initial terminal.  At the moment, the type of the
-new terminals must be the same as the initial terminal.
-
-To try it out, start up emacs, and evaluate the following:
+redisplay.  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 is extended to support opening a new
+terminal frame.
 
-	(make-terminal-frame '((tty . "/dev/pts/5") (tty-type . "xterm")))
+To try it out, start up the emacs server (M-x server-start), and then
+start emacsclient with
 
-(With your own values, of course.)  If you switch to the new frame
-with M-x other-frame, the new tty is refreshed with the frame
-contents.  The result of input from the original terminal appears on
-the new.  If you exit emacs, both terminals are restored to their
-previous states.
+	emacsclient -h
+
+If you exit emacs, both terminals are restored to their previous
+states.
 
 X, Mac, Windows and DOS support is broken.
 
@@ -50,6 +49,8 @@
    specify a terminal device (`tty' parameter) and a terminal type
    (`tty-type' parameter) to `make-terminal-frame'.
 
+** Emacsclient has been extended to support opening a new terminal
+   frame.
 
 CHANGELOG
 ---------
@@ -76,15 +77,50 @@
    (Done, new frame parameters: `tty' and `tty-type'.)
 
 
+-- Implement support for reading from multiple terminals.
+
+   (Done, read_avail_input tries to read from each terminal, until one
+   succeeds.)
+
+-- other-frame should cycle through the frames on the `current'
+   terminal.  
+
+   (Done.  A little fragile, but seems to work.)
+
+-- Support different terminal sizes.
+   
+   (Done, no problem.)
+
+-- Make sure terminal resizes are handled gracefully.  (Could be
+   problematic.)
+
+   (Done.  We don't get SIGWINCH for additional ttys, though.)
+
+-- Extend emacsclient to automatically open a new tty when it connects
+   to Emacs.
+   
+   (Done.  It's an ugly hack, needs more work.)
+
+-- Redisplay must refresh the topmost frame on all terminals, not just
+   the initial terminal.
+   
+   (Done, but introduced ugly redisplay problems.  Ugh.)
+
+
 THINGS TO DO
 ------------
 
+** Fix redisplay problems.
+
 ** 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
    struct frame.
 
+** Provide a way for emacsclient to tell Emacs that the tty has been
+   resized.
+
 ** Implement terminal deletion, i.e., closing the tty device and
    restoring its previous state without exiting Emacs.  This should be
    exported to the Lisp interpreter.
@@ -96,27 +132,14 @@
    Currently, they are still stored in global variables, so we don't
    really support multiple terminal types.
 
-** Support different terminal sizes.  (Should be solved by the
-   previous entry.)
 
-** Make sure terminal resizes are handled gracefully.  (Could be
-   problematic.)
-
-** Implement support for reading from multiple terminals.
-
-** other-frame should cycle through the frames on the `current'
-   terminal.  This means that Emacs must know from which terminal the
-   last keyboard event came from.  (Multikeyboard support may help
-   with this.)
-
-** Redisplay must refresh the topmost on all terminals, not just
-   the initial terminal.
+** Each keypress should automatically select the frame corresponding
+   to the terminal that it was coming from.  This means that Emacs
+   must know from which terminal the last keyboard event came from.
+   (Multikeyboard support may help with this.)
 
 ** Make struct tty_output available from Lisp.
 
-** Extend emacsclient to automatically open a new tty when it connects
-   to Emacs.
-
 ** 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.