diff README.multi-tty @ 53226:dd3018b4785b

Implemented multiple tty support. README.multi-tty: New file. src/termchar.h (struct terminal): Renamed to struct tty_output. Added name, type, input, output, termscript, old_tty, term_initted, old_tty_valid, background_pixel, foreground_pixel, next fields. (TERMINAL_*): Renamed to TTY_* for brevity. (CURRENT_TERMINAL): Renamed to CURTTY for brevity. (tty_list): New variable. (TERMINAL_PTR): Removed. (FRAME_TTY): New function. (TTY_NAME, TTY_TYPE): New macros. src/term.c (current_terminal): Removed. (_current_terminal): Removed. (tty_list): New variable. (OUTPUT, OUTPUT1, OUTPUTL, OUTPUT_IF, OUTPUT1_IF): Added tty parameter. (set_terminal_modes): Added tty parameter. (reset_terminal_modes): Added tty parameter. (cursor_to, raw_cursor_to): Updated cmgoto() calls. (clear_end_of_line, write_glyphs): Add indirection to terminal output, updated cmcheckmagic() calls. (get_named_tty): New function. (term_dummy_init): New function. (term_init): Added name parameter, added tty_output return value. Changed algorithm to update tty_list. Call init_sys_modes() to set up tty mode on the newly opened terminal device. (get_current_tty): New function, intended for debugging. src/termhooks.h (termscript): Removed. src/w32term.h (FRAME_FOREGROUND_PIXEL, FRAME_BACKGROUND_PIXEL): Removed redundant definition. src/macterm.h (FRAME_FOREGROUND_PIXEL, FRAME_BACKGROUND_PIXEL): Ditto. src/window.c (init_window_once): Call make_terminal_frame with two zero parameters. src/cm.h (emacs_tputs): New macro to set current_tty, and then call tputs(). (current_tty): New variable, for cmputc(). (cmcheckmagic, cmputc, cmgoto): Added prototypes. src/cm.c (current_tty): New variable, for cmputc(). (cmputc): Use it. (cmcheckmagic): Added tty parameter, look up terminal streams there. (calccost): Added tty parameter. Use emacs_tputs() instead of tputs(). (cmgoto): Added tty parameter. Pass it on to calccost(). Use emacs_tputs() instead of tputs(). src/dispextern.h (set_terminal_modes, reset_terminal_modes): Added tty parameter. (term_init): Added name parameter (the filename of the terminal device). Added return value (struct tty_output). src/dispnew.c: Replace CURTTY() with local variables throughout the file (where applicable). (termscript): Moved to struct tty_output. (terminal_type): Removed. src/emacs.c (main): Don't call init_sys_modes(), the new term_init() already does that during init_display(). (shut_down_emacs): Call reset_all_sys_modes() instead of reset_sys_modes(). src/frame.c (Qtty, Qtty_type): New variables. (syms_of_frame): Initialize them. (tty_display): Removed. (make_terminal_frame): New parameters (tty filename and type). Initialize output_data.tty field instead of output_data.x. Use term_init() to find the right tty_output. (Use term_dummy_init() during bootstrap.) (Fmake_terminal_frame): Get device filename and type from frame parameters. src/frame.h (FRAME_FOREGROUND_PIXEL, FRAME_BACKGROUND_PIXEL): Do the right thing if the frame is a tty. (struct frame): New member in output_data: tty. (make_terminal_frame): Updated of prototype. src/keyboard.c (Fset_input_mode): Call reset_all_sys_modes(), not reset_sys_modes(). Ditto with init_sys_modes(). src/lisp.h (tty_output): Added forward declaration. (init_sys_modes, reset_sys_modes): Updated prototype. (init_all_sys_modes, reset_all_sys_modes): New prototypes. src/scroll.c: Replace CURTTY() with local variables throughout the file (where applicable). src/sysdep.c (old_tty, term_initted, old_tty_valid): Moved to struct tty_output.( (init_all_sys_modes): New function. (init_sys_modes): Added tty_output parameter. Use it. (reset_all_sys_modes): New function. (reset_sys_modes): Added tty_output parameter. Use it. src/Makefile.in: Update dependencies. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-2
author Karoly Lorentey <lorentey@elte.hu>
date Thu, 25 Dec 2003 06:59:31 +0000
parents
children c5b253fd2504
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.multi-tty	Thu Dec 25 06:59:31 2003 +0000
@@ -0,0 +1,129 @@
+			-*- coding: utf-8; -*-
+GOAL
+----
+
+The ultimate goal of this branch is to implement support for opening
+multiple, different tty devices and simultaneous X and tty frames from
+a single Emacs session.
+
+WHO IS DOING IT
+---------------
+
+I'm Károly Lőrentey.  My address: lorentey@elte.hu.
+
+Patches or suggestions are welcome!
+
+
+STATUS
+------
+
+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:
+
+	(make-terminal-frame '((tty . "/dev/pts/5") (tty-type . "xterm")))
+
+(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.
+
+X, Mac, Windows and DOS support is broken.
+
+NEWS
+----
+
+For the NEWS file:
+
+** Support for multiple terminal devices has been added.  You can
+   specify a terminal device (`tty' parameter) and a terminal type
+   (`tty-type' parameter) to `make-terminal-frame'.
+
+
+CHANGELOG
+---------
+
+See arch logs.
+
+
+THINGS THAT ARE DONE
+--------------------
+
+-- Introduce a new abstraction for terminal devices.  
+
+   (Done, see struct tty_output.  The abstraction is not yet
+   complete.)
+
+
+-- Change the bootstrap procedure to initialize tty_list.
+
+   (Done, but needs review.)
+
+
+-- Change make-terminal-frame to support specifying another tty.
+
+   (Done, new frame parameters: `tty' and `tty-type'.)
+
+
+THINGS TO DO
+------------
+
+** 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.
+
+** 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.
+
+** 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.
+
+** 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.
+
+** 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.
+
+** Fix X support.
+
+** Allow simultaneous X and tty frames.
+
+** Fix Mac support (I can't do this myself).
+
+** Fix W32 support (I can't do this myself).
+
+** Fix DOS support (I can't do this myself).
+
+
+
+;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d