comparison 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
comparison
equal deleted inserted replaced
53228:c5b253fd2504 53229:33c3c7c16e13
23 23
24 STATUS 24 STATUS
25 ------ 25 ------
26 26
27 We can create frames on new tty devices, but there are problems with 27 We can create frames on new tty devices, but there are problems with
28 refresh (only the (single) selected frame is refreshed), and input is 28 redisplay. Input is read from all terminals (NOT via MULTIKBOARD!).
29 read only from the initial terminal. At the moment, the type of the 29 At the moment, the type of the new terminals must be the same as the
30 new terminals must be the same as the initial terminal. 30 initial terminal. Emacsclient is extended to support opening a new
31 terminal frame.
31 32
32 To try it out, start up emacs, and evaluate the following: 33 To try it out, start up the emacs server (M-x server-start), and then
34 start emacsclient with
33 35
34 (make-terminal-frame '((tty . "/dev/pts/5") (tty-type . "xterm"))) 36 emacsclient -h
35 37
36 (With your own values, of course.) If you switch to the new frame 38 If you exit emacs, both terminals are restored to their previous
37 with M-x other-frame, the new tty is refreshed with the frame 39 states.
38 contents. The result of input from the original terminal appears on
39 the new. If you exit emacs, both terminals are restored to their
40 previous states.
41 40
42 X, Mac, Windows and DOS support is broken. 41 X, Mac, Windows and DOS support is broken.
43 42
44 NEWS 43 NEWS
45 ---- 44 ----
48 47
49 ** Support for multiple terminal devices has been added. You can 48 ** Support for multiple terminal devices has been added. You can
50 specify a terminal device (`tty' parameter) and a terminal type 49 specify a terminal device (`tty' parameter) and a terminal type
51 (`tty-type' parameter) to `make-terminal-frame'. 50 (`tty-type' parameter) to `make-terminal-frame'.
52 51
52 ** Emacsclient has been extended to support opening a new terminal
53 frame.
53 54
54 CHANGELOG 55 CHANGELOG
55 --------- 56 ---------
56 57
57 See arch logs. 58 See arch logs.
74 -- Change make-terminal-frame to support specifying another tty. 75 -- Change make-terminal-frame to support specifying another tty.
75 76
76 (Done, new frame parameters: `tty' and `tty-type'.) 77 (Done, new frame parameters: `tty' and `tty-type'.)
77 78
78 79
80 -- Implement support for reading from multiple terminals.
81
82 (Done, read_avail_input tries to read from each terminal, until one
83 succeeds.)
84
85 -- other-frame should cycle through the frames on the `current'
86 terminal.
87
88 (Done. A little fragile, but seems to work.)
89
90 -- Support different terminal sizes.
91
92 (Done, no problem.)
93
94 -- Make sure terminal resizes are handled gracefully. (Could be
95 problematic.)
96
97 (Done. We don't get SIGWINCH for additional ttys, though.)
98
99 -- Extend emacsclient to automatically open a new tty when it connects
100 to Emacs.
101
102 (Done. It's an ugly hack, needs more work.)
103
104 -- Redisplay must refresh the topmost frame on all terminals, not just
105 the initial terminal.
106
107 (Done, but introduced ugly redisplay problems. Ugh.)
108
109
79 THINGS TO DO 110 THINGS TO DO
80 ------------ 111 ------------
112
113 ** Fix redisplay problems.
81 114
82 ** Make make-terminal-frame look up the tty and tty-type parameters 115 ** Make make-terminal-frame look up the tty and tty-type parameters
83 from the currently selected terminal before the global default. 116 from the currently selected terminal before the global default.
84 117
85 ** Move optimalization parameters (costs) from union output_data to 118 ** Move optimalization parameters (costs) from union output_data to
86 struct frame. 119 struct frame.
120
121 ** Provide a way for emacsclient to tell Emacs that the tty has been
122 resized.
87 123
88 ** Implement terminal deletion, i.e., closing the tty device and 124 ** Implement terminal deletion, i.e., closing the tty device and
89 restoring its previous state without exiting Emacs. This should be 125 restoring its previous state without exiting Emacs. This should be
90 exported to the Lisp interpreter. 126 exported to the Lisp interpreter.
91 127
94 130
95 ** Put all cached terminal escape sequences into struct tty_output. 131 ** Put all cached terminal escape sequences into struct tty_output.
96 Currently, they are still stored in global variables, so we don't 132 Currently, they are still stored in global variables, so we don't
97 really support multiple terminal types. 133 really support multiple terminal types.
98 134
99 ** Support different terminal sizes. (Should be solved by the
100 previous entry.)
101 135
102 ** Make sure terminal resizes are handled gracefully. (Could be 136 ** Each keypress should automatically select the frame corresponding
103 problematic.) 137 to the terminal that it was coming from. This means that Emacs
104 138 must know from which terminal the last keyboard event came from.
105 ** Implement support for reading from multiple terminals. 139 (Multikeyboard support may help with this.)
106
107 ** other-frame should cycle through the frames on the `current'
108 terminal. This means that Emacs must know from which terminal the
109 last keyboard event came from. (Multikeyboard support may help
110 with this.)
111
112 ** Redisplay must refresh the topmost on all terminals, not just
113 the initial terminal.
114 140
115 ** Make struct tty_output available from Lisp. 141 ** Make struct tty_output available from Lisp.
116
117 ** Extend emacsclient to automatically open a new tty when it connects
118 to Emacs.
119 142
120 ** Implement support for starting an interactive Emacs session without 143 ** Implement support for starting an interactive Emacs session without
121 an initial frame. (The user would connect to it and open frames 144 an initial frame. (The user would connect to it and open frames
122 later, with emacsclient.) Not necessary a good idea. 145 later, with emacsclient.) Not necessary a good idea.
123 146