comparison 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
comparison
equal deleted inserted replaced
53225:4250e7e26247 53226:dd3018b4785b
1 -*- coding: utf-8; -*-
2 GOAL
3 ----
4
5 The ultimate goal of this branch is to implement support for opening
6 multiple, different tty devices and simultaneous X and tty frames from
7 a single Emacs session.
8
9 WHO IS DOING IT
10 ---------------
11
12 I'm Károly Lőrentey. My address: lorentey@elte.hu.
13
14 Patches or suggestions are welcome!
15
16
17 STATUS
18 ------
19
20 We can create frames on new tty devices, but there are problems with
21 refresh (only the (single) selected frame is refreshed), and input is
22 read only from the initial terminal. At the moment, the type of the
23 new terminals must be the same as the initial terminal.
24
25 To try it out, start up emacs, and evaluate the following:
26
27 (make-terminal-frame '((tty . "/dev/pts/5") (tty-type . "xterm")))
28
29 (With your own values, of course.) If you switch to the new frame
30 with M-x other-frame, the new tty is refreshed with the frame
31 contents. The result of input from the original terminal appears on
32 the new. If you exit emacs, both terminals are restored to their
33 previous states.
34
35 X, Mac, Windows and DOS support is broken.
36
37 NEWS
38 ----
39
40 For the NEWS file:
41
42 ** Support for multiple terminal devices has been added. You can
43 specify a terminal device (`tty' parameter) and a terminal type
44 (`tty-type' parameter) to `make-terminal-frame'.
45
46
47 CHANGELOG
48 ---------
49
50 See arch logs.
51
52
53 THINGS THAT ARE DONE
54 --------------------
55
56 -- Introduce a new abstraction for terminal devices.
57
58 (Done, see struct tty_output. The abstraction is not yet
59 complete.)
60
61
62 -- Change the bootstrap procedure to initialize tty_list.
63
64 (Done, but needs review.)
65
66
67 -- Change make-terminal-frame to support specifying another tty.
68
69 (Done, new frame parameters: `tty' and `tty-type'.)
70
71
72 THINGS TO DO
73 ------------
74
75 ** Make make-terminal-frame look up the tty and tty-type parameters
76 from the currently selected terminal before the global default.
77
78 ** Move optimalization parameters (costs) from union output_data to
79 struct frame.
80
81 ** Implement terminal deletion, i.e., closing the tty device and
82 restoring its previous state without exiting Emacs. This should be
83 exported to the Lisp interpreter.
84
85 ** Implement automatic deletion of terminals, when the last frame on
86 that terminal is closed.
87
88 ** Put all cached terminal escape sequences into struct tty_output.
89 Currently, they are still stored in global variables, so we don't
90 really support multiple terminal types.
91
92 ** Support different terminal sizes. (Should be solved by the
93 previous entry.)
94
95 ** Make sure terminal resizes are handled gracefully. (Could be
96 problematic.)
97
98 ** Implement support for reading from multiple terminals.
99
100 ** other-frame should cycle through the frames on the `current'
101 terminal. This means that Emacs must know from which terminal the
102 last keyboard event came from. (Multikeyboard support may help
103 with this.)
104
105 ** Redisplay must refresh the topmost on all terminals, not just
106 the initial terminal.
107
108 ** Make struct tty_output available from Lisp.
109
110 ** Extend emacsclient to automatically open a new tty when it connects
111 to Emacs.
112
113 ** Implement support for starting an interactive Emacs session without
114 an initial frame. (The user would connect to it and open frames
115 later, with emacsclient.) Not necessary a good idea.
116
117 ** Fix X support.
118
119 ** Allow simultaneous X and tty frames.
120
121 ** Fix Mac support (I can't do this myself).
122
123 ** Fix W32 support (I can't do this myself).
124
125 ** Fix DOS support (I can't do this myself).
126
127
128
129 ;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d