comparison README.multi-tty @ 83004:7900111db01c

Converted display hooks to be display-local. Plus many bugfixes. lib-src/emacsclient.c (window_change_signal): Renamed to pass_signal_to_emacs. (init_signal): Pass SIGINT and SIGQUIT to the emacs process. lisp/faces.el (face-valid-attribute-values): Use the window-system function, not the variable. (read-face-attribute, face-spec-set-match-display, frame-set-background-mode) (face-set-after-frame-default): Ditto. lisp/frame.el (make-frame-on-tty): Added interactive declaration (suggested by Robert J. Chassell). Use tty-create-frame-with-faces, not make-terminal-frame. src/termhooks.h (struct display_method): Renamed to display for brevity. (struct display): Added all display hook variables as members of this structure. Added next_display, reference_count, type and display_info components. (FRAME_MUST_WRITE_SPACES, FRAME_FAST_CLEAR_END_OF_LINE, FRAME_LINE_INS_DEL_OK) (FRAME_CHAR_INS_DEL_OK, FRAME_SCROLL_REGION_OK, FRAME_SCROLL_REGION_COST) (FRAME_MEMORY_BELOW_FRAME, FRAME_RIF): Updated for struct display. (FRAME_DISPLAY): New macro. (create_display, delete_display): New prototypes. src/frame.h (struct frame): Added `display' member, removed display_method. (FRAME_LIVE_P): Look at f->display, not f->output_data. src/termchar.h (struct tty_display_info): Removed display_method component. (FRAME_TTY): Use the display structure, not output_data. src/term.c (display_list): New variable. (cursor_to_hook, raw_cursor_to_hook, clear_to_end_hook, clear_frame_hook) (clear_end_of_line_hook, ins_del_lines_hook, delete_glyphs_hook) (ring_bell_hook, reset_terminal_modes_hook, set_terminal_modes_hook) (update_begin_hook, update_end_hook, set_terminal_window_hook) (insert_glyphs_hook, write_glyphs_hook, delete_glyphs_hoo, read_socket_hook) (frame_up_to_date_hook, mouse_position_hook, frame_rehighlight_hook) (frame_raise_lower_hook, set_vertical_scroll_bar_hook, condemn_scroll_bars_hook) (redeem_scroll_bar_hook, judge_scroll_bars_hook): Moved to struct display. (tty_display_method_template): Removed. (syms_of_term): Don't initialize tty_display_method_template. (ring_bell, set_terminal_modes, reset_terminal_modes, update_begin) (update_end, set_terminal_window, cursor_to, raw_cursor_to, clear_to_end) (clear_frame, clear_end_of_line, write_glyphs, insert_glyphs) (delete_glyphs, ins_del_lines): Access display hooks through the frame pointer. (Ftty_display_color_p): Use the frame given as a parameter, or else return nil. (Ftty_display_color_cells): Ditto. (get_named_tty): Renamed to get_named_tty_display, changed return type to struct display. (term_dummy_init): Renamed to initial_term_init. Create and return an initial display. (term_init): Initialize a new struct display and return a pointer to it instead of tty_display_info. Removed frame initialization kludge. (Fdelete_tty): Updated for struct display. (delete_tty): The parameter type is now struct display, not tty_display_info. Delete the display, too. (create_tty_output): New function for creating tty_output structures. (delete_tty_output): New function for deleting tty_output structures. (create_display): New function for creating and registering display structures. (delete_display): New function for deleting and unregistering display structures. src/dispextern.h: Updated prototypes. src/dispnew.c: Include frame.h before termhooks.h. (init_display): Updated term_init call to new signature. src/emacs.c: Include frame.h (for termhooks.h). src/keymap.c: Ditto. src/lread.c: Ditto. src/xsmfns.c: Ditto. src/process.c: Include frame.h before termhooks.h. src/frame.c (Fwindow_system): New function. (syms_of_frame): Initialize it. (make_terminal_frame): Open the terminal device before creating the new frame. Disable scrollbars here, term_init cannot do that anymore. (Fdelete_frame): Use the new delete_frame_hook, don't do display-specific frame deletion here. Ditto for delete_display_hook. (Fmouse_position, Fmouse_pixel_position, Fraise_frame, Flower_frame) (Fredirect_frame_focus): Access display hooks through the frame pointer. src/keyboard.c: Include frame.h before termhooks.h. (start_polling, input_polling_used, stop_polling, gobble_input): Ignore read_socket_hook. (kbd_buffer_get_event, Fset_input_mode): Access display hooks through the frame pointer. (read_avail_input): Loop through all display devices for and call all read_socket_hook functions. Check ttys even if read_socket_hook returned an error. src/sysdep.c (discard_tty_input): Ignore read_socket_hook. (stuff_char): Don't do anything if the current frame is not on a termcap display. (request_sigio, unrequest_sigio): Ignore read_socket_hook. (init_sys_modes): Always call narrow_foreground_group. Set up terminal modes and sigio even under X. src/xdisp.c (message2_nolog, message3_nolog, redisplay_internal) (set_vertical_scroll_bar, redisplay_window): Access display hooks through the frame pointer. (echo_area_display): Don't be afraid of termcap frames during an X+tty combo session. src/xfaces.c: Include termhooks.h. (Ftty_supports_face_attributes_p): Use the given frame, not selected_frame. src/xfns.c (x_set_scroll_bar_foreground, x_set_scroll_bar_background): Access display hooks through the frame pointer. (Fx_create_frame, x_create_tip_frame): Initialize the frame's display structure. src/xmenu.c: Include termhooks.h after frame.h. src/xselect.c (x_own_selection, some_frame_on_display, x_get_foreign_selection) (Fx_disown_selection_internal, Fx_get_cut_buffer_internal) (Fx_store_cut_buffer_internal, Fx_rotate_cut_buffers_internal): Don't do anything if the selected frame is not an X frame. src/xterm.c (x_display_method): Removed. (x_create_frame_display, x_delete_frame_display): New functions for handling struct display objects. (x_term_init): Set up a new struct display object, too. (x_delete_display): Delete the struct display corresponding to the X display. (x_initialize): Moved hook initialization to x_create_frame_display. src/xterm.h (x_display_method): Removed. (struct x_display_info): Added frame_display component. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-44
author Karoly Lorentey <lorentey@elte.hu>
date Mon, 05 Jan 2004 05:54:35 +0000
parents af2d6b850383
children 040dd41ed7d0
comparison
equal deleted inserted replaced
83003:19208c3cbcc9 83004:7900111db01c
125 See arch logs. 125 See arch logs.
126 126
127 THINGS TO DO 127 THINGS TO DO
128 ------------ 128 ------------
129 129
130 ** Something with (maybe) multi-keyboard support broke function keys 130 ** Fix color handling during X+tty combo sessions. (It seems that tty
131 and arrows on ttys during X+tty combo sessions. Debug this. 131 sessions automatically convert the face colors to terminal colors
132 132 when the face is loaded. This conversion must happen instead on
133 ** Fix faces on tty frames during X-tty combo sessions. There is an 133 the fly in write_glyphs, which might be problematic, as color
134 init_frame_faces call in init_sys_modes, see if there is a problem 134 approximation is done in lisp (term/tty-colors.el).)
135 with it. 135
136 136 ** The command `emacsclient -t -e '(delete-frame)'' fails to exit.
137 ** During an X-tty combo session, a (message "Hello") from a tty frame
138 goes to the X frame. Fix this.
139 137
140 ** Find out the best way to support suspending Emacs with multiple 138 ** Find out the best way to support suspending Emacs with multiple
141 ttys. My guess: disable it on the controlling tty, but from other 139 ttys. My guess: disable it on the controlling tty, but from other
142 ttys pass it on to emacsclient somehow. (It is (I hope) trivial to 140 ttys pass it on to emacsclient somehow. (It is (I hope) trivial to
143 extend emacsclient to handle suspend/resume. A `kill -STOP' almost 141 extend emacsclient to handle suspend/resume. A `kill -STOP' almost
144 works right now.) 142 works right now.)
145 143
146 ** Move baud_rate to tty_output. 144 ** During an X session, Emacs seems to read from stdin.
147 145
148 ** Do tty output through term_hooks, like graphical display backends. 146 ** Move baud_rate to struct display.
147
148 ** Do tty output through struct display, like graphical display
149 backends.
149 150
150 ** Implement support for starting an interactive Emacs session without 151 ** Implement support for starting an interactive Emacs session without
151 an initial frame. (The user would connect to it and open frames 152 an initial frame. (The user would connect to it and open frames
152 later, with emacsclient.) Not necessarily a good idea. 153 later, with emacsclient.) Not necessarily a good idea.
153 154
154 ** Fix input from raw ttys (again).
155
156 ** Fix Mac support (I can't do this myself). 155 ** Fix Mac support (I can't do this myself).
157 156
158 ** Fix W32 support (I can't do this myself). 157 ** Fix W32 support (I can't do this myself).
159 158
160 ** Fix DOS support (I can't do this myself). 159 ** Fix DOS support (I can't do this myself).
161 160
162 ** Do a grep on XXX and ?? for more issues. 161 ** Do a grep on XXX and ?? for more issues.
163 162
164 ** Understand Emacs's low-level input system (it seems complicated) :-) 163 ** Understand Emacs's low-level input system (it seems complicated) :-)
165 164 What does interrupt_input do? I tried to disable it for raw
166 ** What does interrupt_input do? I tried to disable it for raw
167 secondary tty support, but it does not seem to do anything useful. 165 secondary tty support, but it does not seem to do anything useful.
168 (Update: Look again. X unconditionally enables this, maybe that's 166 (Update: Look again. X unconditionally enables this, maybe that's
169 why raw terminal support is broken again. I really do need to 167 why raw terminal support is broken again. I really do need to
170 understand input.) 168 understand input.)
171 169
172 ** Make sure C-g goes to the right frame. This is hard, as SIGINT 170 ** Make sure C-g goes to the right frame with ttys. This is hard, as
173 doesn't have a tty parameter. :-( 171 SIGINT doesn't have a tty parameter. :-(
174 172
175 ** I have seen a case when Emacs with multiple ttys fell into a loop 173 ** I have seen a case when Emacs with multiple ttys fell into a loop
176 eating 100% of CPU time. Strace showed this loop: 174 eating 100% of CPU time. Strace showed this loop:
177 175
178 getpid() = 30284 176 getpid() = 30284
189 gettimeofday({1072842297, 748245}, NULL) = 0 187 gettimeofday({1072842297, 748245}, NULL) = 0
190 188
191 I have seen something similar with a single X frame, but have not 189 I have seen something similar with a single X frame, but have not
192 been able to reproduce it for debugging. 190 been able to reproduce it for debugging.
193 191
194 ** Define a output_initial value for output_method for the initial 192 Update: This may have been caused by checking for nread != 0
193 instead of nread > 0 after calling read_socket_hook in
194 read_avail_input.
195
196 ** Define an output_initial value for output_method for the initial
195 frame that is dumped with Emacs. Checking for this frame (e.g. in 197 frame that is dumped with Emacs. Checking for this frame (e.g. in
196 cmd_error_internal) is ugly. 198 cmd_error_internal) is ugly.
197 199
198 ** emacsclient -t from an Emacs term buffer does not work, complains 200 ** emacsclient -t from an Emacs term buffer does not work, complains
199 about face problems. This can even lock up Emacs (if the recursive 201 about face problems. This can even lock up Emacs (if the recursive
200 frame sets single_kboard). 202 frame sets single_kboard). Update: the face problems are caused by
201 203 bugs in term.el, not in multi-tty. The lockup is caused by
202 ** Clean up the source of emacsclient. It is a mess. 204 single_kboard mode.
203
204 ** C-x 5 2, C-x 5 o, C-x 5 0 on an emacsclient frame unexpectedly
205 exits emacsclient. This is a result of trying to be clever with
206 delete-frame-functions.
207 205
208 DIARY OF CHANGES 206 DIARY OF CHANGES
209 ---------------- 207 ----------------
210 208
211 (ex-TODO items with explanations.) 209 (ex-TODO items with explanations.)
447 445
448 -- Add multi-tty support to talk.el. 446 -- Add multi-tty support to talk.el.
449 447
450 (Done.) 448 (Done.)
451 449
450 -- Clean up the source of emacsclient. It is a mess.
451
452 (Done, eliminated stupid proxy-pty kludge.)
453
454 -- Fix faces on tty frames during X-tty combo sessions. There is an
455 init_frame_faces call in init_sys_modes, see if there is a problem
456 with it.
457
458 (Done, there was a stupid mistake in
459 Ftty_supports_face_attributes_p. Colors are broken, though.)
460
461 -- C-x 5 2, C-x 5 o, C-x 5 0 on an emacsclient frame unexpectedly
462 exits emacsclient. This is a result of trying to be clever with
463 delete-frame-functions.
464
465 (Fixed, added delete-tty-after-functions, and changed server.el to
466 use it.)
467
468 -- Something with (maybe) multi-keyboard support broke function keys
469 and arrows on ttys during X+tty combo sessions. Debug this.
470
471 (I can't reproduce it, maybe the terminal type was wrong.)
472
473 -- Fix input from raw ttys (again).
474
475 (Now it seems to work all right.)
476
477 -- During an X-tty combo session, a (message "Hello") from a tty frame
478 goes to the X frame. Fix this.
479
480 (Done. There was a safeguard against writing to the initial
481 terminal frame during bootstrap which prevented echo_area_display
482 from working correctly on a tty frame during a combo session.)
483
452 ;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d 484 ;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d