diff options
| author | Karoly Lorentey | 2004-01-02 01:15:26 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2004-01-02 01:15:26 +0000 |
| commit | daf0170133e658c41f3ae2fc8558c5ab74227c1d (patch) | |
| tree | fa6577e49c4c63a6ad6e672f9e3bd1a018cb61d0 /README.multi-tty | |
| parent | 28d7d09f841801cd052bb4ba0df92016b9245870 (diff) | |
| download | emacs-daf0170133e658c41f3ae2fc8558c5ab74227c1d.tar.gz emacs-daf0170133e658c41f3ae2fc8558c5ab74227c1d.zip | |
Fixed X support, preliminary support for X-tty combo sessions.
lib-src/emacsclient.c (copy_from_to, pty_conversation): Re-added SIGIO
hack. (Sigh.)
lisp/frame.el (make-frame-on-tty): Use make-terminal-frame, not
make-frame.
src/dispnew.c (line_hash_code, line_draw_cost): Updated to use
the new display_method parameters.
(Fredraw_frame): fflush the tty only if f is a termcap frame.
(direct_output_for_insert): Updated to use the new display_method
parameters. fflush the tty only if f is a termcap frame.
(direct_output_forward_char, update_frame_1, scrolling): Ditto.
(update_frame_line, Fding, bitch_at_user): Ditto.
(Fsend_string_to_terminal): Fail if current frame is not on a tty.
(init_display): Frame size change is safe here.
src/frame.c (Vterminal_frame): Restored previously deleted variable.
(syms_of_frame): Initialize it.
(make_terminal_frame): Copy the frame's display_method from tty_display_info.
(Fmake_terminal_frame): Enable simultaneous X and tty frames (buggy).
(Fredirect_frame_focus): Don't call frame_rehighlight_hook if frame
is on a termcap device.
src/frame.h (struct frame): Renamed display to display_method.
(Vterminal_frame): Re-added declaration.
src/keyboard.c (flow_control): Moved to struct tty_display_info.
(read_avail_input): Check ttys even if there is a read_socket_hook.
(Fset_input_mode): Call reset_sys_modes/init_sys_modes and set
flow_control or meta_key only when the frame is a termcap frame.
(Fcurrent_input_mode): Handle flow_control and meta_key right on
non-termcap frames.
src/scroll.c (calculate_scrolling, calculate_direct_scrolling): Update
to use the new display_method parameters.
(scrolling_1, scroll_cost): Ditto.
src/sysdep.c (init_sys_modes, reset_sys_modes): Always set the
terminal parameters if tty_out->input is not stdin. Updated to the
new location of flow_control.
(hft_init): Moved HFT init code to term_init, as it needs the frame.
src/term.c (tty_display_method_template): New variable.
(update_begin): Added rif hack.
(set_terminal_window, ins_del_lines, term_init): Updated to use the
new display_method parameters.
(insert_glyphs, ins_del_lines): Only call insert_glyphs_hook if the
current frame is not on a tty.
(calculate_costs): Don't calculate costs if not on a tty.
(term_dummy_init): Fixed tty->output initialization. Preallocate Wcm
and display_method.
(term_init): Allocate & initialize display_method. Blindly fixed
WINDOWSNT-specific parts. Added HFT-specific initialization
exception from hft_init.
(delete_tty): Only delete termcap frames. Free() the display_method.
src/termchar.h (struct tty_display_info): Moved high-level terminal
characteristics to struct display_method. Added flow_control and
display_method members.
src/termhooks.h (struct display_method): New struct (renamed from
struct device). Added accessor macros.
src/window.c (init_window_once): Initialize Vterminal_frame.
src/xdisp.c (init_iterator, expose_frame): Added rif hack.
(try_window_id): Updated to use the new display_method parameters.
src/xfaces.c (realize_basic_faces): Don't call
x_update_menu_appearance if the frame is a tty frame.
src/xfns.c (Fx_create_frame): Added rif hack. Initialize
display_method.
(x_create_tip_frame): Initialize display_method.
src/xterm.c (x_display_method): New variable.
(x_flush, x_frame_of_widget, XTmouse_position): Ignore non-X frames.
(x_window_to_scroll_bar, x_window_to_menu_bar): Ditto.
(xim_destroy_callback, xim_instantiate_callback): Ditto.
(frame_highlight, frame_unhighlight): Added rif hack.
(x_initialize): Don't initialize rif. Do initialize x_display_method.
src/xterm.h (x_display_method): New declaration.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-30
Diffstat (limited to 'README.multi-tty')
| -rw-r--r-- | README.multi-tty | 94 |
1 files changed, 65 insertions, 29 deletions
diff --git a/README.multi-tty b/README.multi-tty index 8003cef473e..96397405ca5 100644 --- a/README.multi-tty +++ b/README.multi-tty | |||
| @@ -16,7 +16,7 @@ Patches or suggestions are welcome! | |||
| 16 | Retrieving the latest version of the branch: | 16 | Retrieving the latest version of the branch: |
| 17 | 17 | ||
| 18 | tla register-archive lorentey@elte.hu--2004 http://lorentey.web.elte.hu/arch/2004/ | 18 | tla register-archive lorentey@elte.hu--2004 http://lorentey.web.elte.hu/arch/2004/ |
| 19 | tla get lorentey@elte.hu--2004/emacs--multi-tty--0 <directory> | 19 | tla get lorentey@elte.hu--2004/emacs--multi-tty <directory> |
| 20 | 20 | ||
| 21 | (I use tla 1.1.) | 21 | (I use tla 1.1.) |
| 22 | 22 | ||
| @@ -33,11 +33,11 @@ commands: | |||
| 33 | 33 | ||
| 34 | mkdir +build | 34 | mkdir +build |
| 35 | cd +build | 35 | cd +build |
| 36 | ../configure --with-x-toolkit=no --without-x | 36 | ../configure |
| 37 | make bootstrap | 37 | make bootstrap |
| 38 | 38 | ||
| 39 | then start up the emacs server (src/emacs, M-x server-start), and then | 39 | then start up the emacs server (src/emacs -nw, M-x server-start), and |
| 40 | (from a shell prompt on another terminal) start emacsclient with | 40 | then (from a shell prompt on another terminal) start emacsclient with |
| 41 | 41 | ||
| 42 | lib-src/emacsclient -f /optional/file/names... | 42 | lib-src/emacsclient -f /optional/file/names... |
| 43 | 43 | ||
| @@ -50,7 +50,10 @@ works exactly as before. Suspending Emacs is disabled at the moment. | |||
| 50 | If you exit emacs, all terminals should be restored to their previous | 50 | If you exit emacs, all terminals should be restored to their previous |
| 51 | states. | 51 | states. |
| 52 | 52 | ||
| 53 | X, Mac, Windows and DOS support is broken, probably doesn't even | 53 | X support is (I hope) working, but at the moment there are problems |
| 54 | with simultaneous X and tty devices, so don't do that. | ||
| 55 | |||
| 56 | Mac, Windows and DOS support is broken, probably doesn't even | ||
| 54 | compile -- this will be solved later. | 57 | compile -- this will be solved later. |
| 55 | 58 | ||
| 56 | Only tested on my GNU/Linux box. | 59 | Only tested on my GNU/Linux box. |
| @@ -91,9 +94,9 @@ DIARY OF CHANGES | |||
| 91 | 94 | ||
| 92 | (ex-TODO items with explanations.) | 95 | (ex-TODO items with explanations.) |
| 93 | 96 | ||
| 94 | -- Introduce a new abstraction for terminal devices. | 97 | -- Introduce a new struct for terminal devices. |
| 95 | 98 | ||
| 96 | (Done, see struct tty_output. The abstraction is not yet | 99 | (Done, see struct tty_output. The list of members is not yet |
| 97 | complete.) | 100 | complete.) |
| 98 | 101 | ||
| 99 | -- Change the bootstrap procedure to initialize tty_list. | 102 | -- Change the bootstrap procedure to initialize tty_list. |
| @@ -112,6 +115,8 @@ DIARY OF CHANGES | |||
| 112 | 115 | ||
| 113 | (Update: They do, now.) | 116 | (Update: They do, now.) |
| 114 | 117 | ||
| 118 | (Update2: After enabling X, they don't.) | ||
| 119 | |||
| 115 | -- other-frame should cycle through the frames on the `current' | 120 | -- other-frame should cycle through the frames on the `current' |
| 116 | terminal only. | 121 | terminal only. |
| 117 | 122 | ||
| @@ -167,6 +172,8 @@ DIARY OF CHANGES | |||
| 167 | read_input_waiting was not necessary. Secondary ttys do seem to | 172 | read_input_waiting was not necessary. Secondary ttys do seem to |
| 168 | send signals on input.) | 173 | send signals on input.) |
| 169 | 174 | ||
| 175 | (Update^3: Not any more.) | ||
| 176 | |||
| 170 | -- Make make-terminal-frame look up the `tty' and `tty-type' frame | 177 | -- Make make-terminal-frame look up the `tty' and `tty-type' frame |
| 171 | parameters from the currently selected terminal before the global | 178 | parameters from the currently selected terminal before the global |
| 172 | default. | 179 | default. |
| @@ -191,7 +198,7 @@ DIARY OF CHANGES | |||
| 191 | 198 | ||
| 192 | (Done, but at the moment only called when an error happens during | 199 | (Done, but at the moment only called when an error happens during |
| 193 | initialization. There is a memory corruption error around this | 200 | initialization. There is a memory corruption error around this |
| 194 | somewhere.) | 201 | somewhere.) (Update: now it is fully enabled.) |
| 195 | 202 | ||
| 196 | -- Implement automatic deletion of terminals when the last frame on | 203 | -- Implement automatic deletion of terminals when the last frame on |
| 197 | that terminal is closed. | 204 | that terminal is closed. |
| @@ -214,9 +221,10 @@ DIARY OF CHANGES | |||
| 214 | server-frames may be removed from server.el.) | 221 | server-frames may be removed from server.el.) |
| 215 | 222 | ||
| 216 | (Done, nothing to do. It seems that Emacs does not receive SIGHUP | 223 | (Done, nothing to do. It seems that Emacs does not receive SIGHUP |
| 217 | from secondary ttys.) | 224 | from secondary ttys, which is actually a good thing.) (Update: I |
| 225 | think it would be a bad idea to remove server-frames anyway.) | ||
| 218 | 226 | ||
| 219 | -- Change emacsclient/server.el to support the -h argument better, | 227 | -- Change emacsclient/server.el to support the -t argument better, |
| 220 | i.e. automatically close the socket when the frame is closed. | 228 | i.e. automatically close the socket when the frame is closed. |
| 221 | 229 | ||
| 222 | (Seems to be working OK.) | 230 | (Seems to be working OK.) |
| @@ -248,7 +256,7 @@ DIARY OF CHANGES | |||
| 248 | earlier, but it seems to be fixed (there were several changes | 256 | earlier, but it seems to be fixed (there were several changes |
| 249 | around request_sigio, maybe one of them did it). | 257 | around request_sigio, maybe one of them did it). |
| 250 | read_input_waiting() is only used in sys_select(), don't change | 258 | read_input_waiting() is only used in sys_select(), don't change |
| 251 | it.) | 259 | it.) (Update: After adding X support, it's broken again.) |
| 252 | 260 | ||
| 253 | -- Find out why does Emacs abort when it wants to close its | 261 | -- Find out why does Emacs abort when it wants to close its |
| 254 | controlling tty. Hint: chan_process[] array. Hey, maybe | 262 | controlling tty. Hint: chan_process[] array. Hey, maybe |
| @@ -262,6 +270,7 @@ DIARY OF CHANGES | |||
| 262 | fcntl() kernel behaviour could be emulated by emacsclient. | 270 | fcntl() kernel behaviour could be emulated by emacsclient. |
| 263 | 271 | ||
| 264 | (Done. Simply disabled the SIGIO emulation hack in emacsclient.) | 272 | (Done. Simply disabled the SIGIO emulation hack in emacsclient.) |
| 273 | (Update: it was added back.) | ||
| 265 | 274 | ||
| 266 | -- server.el: There are issues with saving files in buffers of closed | 275 | -- server.el: There are issues with saving files in buffers of closed |
| 267 | clients. Try editing a file with emacsclient -f, and (without | 276 | clients. Try editing a file with emacsclient -f, and (without |
| @@ -273,7 +282,7 @@ DIARY OF CHANGES | |||
| 273 | pending buffers, and modified buffers don't seem to be deleted.) | 282 | pending buffers, and modified buffers don't seem to be deleted.) |
| 274 | 283 | ||
| 275 | -- emacsclient.el, server.el: Handle eval or file open errors when | 284 | -- emacsclient.el, server.el: Handle eval or file open errors when |
| 276 | doing -f. | 285 | doing -t. |
| 277 | 286 | ||
| 278 | (Done.) | 287 | (Done.) |
| 279 | 288 | ||
| @@ -286,32 +295,52 @@ DIARY OF CHANGES | |||
| 286 | 295 | ||
| 287 | (Done, see delete-tty.) | 296 | (Done, see delete-tty.) |
| 288 | 297 | ||
| 298 | -- Get rid of the accessor macros in termchar.h, or define macros for | ||
| 299 | all members. | ||
| 300 | |||
| 301 | (Done.) | ||
| 302 | |||
| 303 | -- Move device-specific parameters (like costs) commonly used by | ||
| 304 | device backends to a common, device-dependent structure. | ||
| 305 | |||
| 306 | (Done. See struct display_method in termhooks.h.) | ||
| 307 | |||
| 308 | -- Fix X support. | ||
| 309 | |||
| 310 | (Done. Well, it seems to be working.) | ||
| 311 | |||
| 312 | -- Allow simultaneous X and tty frames. (Handling input could be | ||
| 313 | tricky. Or maybe not.) | ||
| 314 | |||
| 315 | (Done. Allowed, that is. It is currently extremely unstable, to | ||
| 316 | the point of being unusable. The rif variable causes constant | ||
| 317 | core dumps. Handling input is indeed tricky.) | ||
| 289 | 318 | ||
| 290 | THINGS TO DO | 319 | THINGS TO DO |
| 291 | ------------ | 320 | ------------ |
| 292 | 321 | ||
| 322 | ** Fix rif issue with X-tty combo sessions. IMHO the best thing to do | ||
| 323 | is to get rid of that global variable (and use the value value in | ||
| 324 | display_method, which is guaranteed to be correct). | ||
| 325 | |||
| 326 | ** Fix faces on tty frames during X-tty combo sessions. | ||
| 327 | |||
| 293 | ** Find out the best way to support suspending Emacs with multiple | 328 | ** Find out the best way to support suspending Emacs with multiple |
| 294 | ttys. My guess: disable it on the controlling tty, but other ttys | 329 | ttys. My guess: disable it on the controlling tty, but from other |
| 295 | should pass it on to emacsclient somehow. (It is (I hope) trivial | 330 | ttys pass it on to emacsclient somehow. (It is (I hope) trivial to |
| 296 | to extend emacsclient to handle suspend/resume. A `kill -STOP' | 331 | extend emacsclient to handle suspend/resume. A `kill -STOP' almost |
| 297 | almost works right now.) | 332 | works right now.) |
| 298 | 333 | ||
| 299 | ** Move baud_rate to tty_output. | 334 | ** Move baud_rate to tty_output. |
| 300 | 335 | ||
| 301 | ** Move device-specific parameters (like costs) commonly used by | ||
| 302 | device backends to a common, device-dependent structure. | ||
| 303 | |||
| 304 | ** Do tty output through term_hooks, like graphical display backends. | 336 | ** Do tty output through term_hooks, like graphical display backends. |
| 305 | 337 | ||
| 306 | ** Fix X support. | ||
| 307 | |||
| 308 | ** Allow simultaneous X and tty frames. (Handling input could be | ||
| 309 | tricky. Or maybe not.) | ||
| 310 | |||
| 311 | ** Implement support for starting an interactive Emacs session without | 338 | ** Implement support for starting an interactive Emacs session without |
| 312 | an initial frame. (The user would connect to it and open frames | 339 | an initial frame. (The user would connect to it and open frames |
| 313 | later, with emacsclient.) Not necessarily a good idea. | 340 | later, with emacsclient.) Not necessarily a good idea. |
| 314 | 341 | ||
| 342 | ** Fix input from raw ttys (again). | ||
| 343 | |||
| 315 | ** Fix Mac support (I can't do this myself). | 344 | ** Fix Mac support (I can't do this myself). |
| 316 | 345 | ||
| 317 | ** Fix W32 support (I can't do this myself). | 346 | ** Fix W32 support (I can't do this myself). |
| @@ -320,14 +349,22 @@ THINGS TO DO | |||
| 320 | 349 | ||
| 321 | ** Do a grep on XXX and ?? for more issues. | 350 | ** Do a grep on XXX and ?? for more issues. |
| 322 | 351 | ||
| 323 | ** Get rid of the accessor macros in termchar.h, or define macros for | 352 | ** Understand Emacs's low-level input system (it seems complicated) |
| 324 | all members. | 353 | :-) and maybe rewrite multi-tty input in terms of MULTI_KBOARD. |
| 354 | (Update: This backtrace from a tty-X combo session hints that this | ||
| 355 | may be necessary.) | ||
| 325 | 356 | ||
| 326 | ** Understand Emacs's low-level input system (it seems complicated) :-) | 357 | #0 abort () at /home/lorentey/work/emacs/emacs--multi-tty/src/emacs.c:417 |
| 327 | and maybe rewrite multi-tty input in terms of MULTIKBOARD. | 358 | #1 0x081104fb in read_char (commandflag=0, nmaps=0, maps=0x0, prev_event=675499188, used_mouse_menu=0x0) at /home/lorentey/work/emacs/emacs--multi-tty/src/keyboard.c:2581 |
| 359 | #2 0x0819f23e in read_filtered_event (no_switch_frame=1, ascii_required=0, error_nonascii=0, input_method=0) at /home/lorentey/work/emacs/emacs--multi-tty/src/lread.c:468 | ||
| 360 | #3 0x0819387c in Fy_or_n_p (prompt=1759896324) at /home/lorentey/work/emacs/emacs--multi-tty/src/fns.c:3115 | ||
| 361 | ... | ||
| 328 | 362 | ||
| 329 | ** What does interrupt_input do? I tried to disable it for raw | 363 | ** What does interrupt_input do? I tried to disable it for raw |
| 330 | secondary tty support, but it does not seem to do anything useful. | 364 | secondary tty support, but it does not seem to do anything useful. |
| 365 | (Update: Look again. X unconditionally enables this, maybe that's | ||
| 366 | why raw terminal support is broken again. I really do need to | ||
| 367 | understand input.) | ||
| 331 | 368 | ||
| 332 | ** Make sure C-g goes to the right frame. This is hard, as SIGINT | 369 | ** Make sure C-g goes to the right frame. This is hard, as SIGINT |
| 333 | doesn't have a tty parameter. :-( | 370 | doesn't have a tty parameter. :-( |
| @@ -335,7 +372,6 @@ THINGS TO DO | |||
| 335 | ** I have seen a case when Emacs with multiple ttys fell into a loop | 372 | ** I have seen a case when Emacs with multiple ttys fell into a loop |
| 336 | eating 100% of CPU time. Strace showed this loop: | 373 | eating 100% of CPU time. Strace showed this loop: |
| 337 | 374 | ||
| 338 | |||
| 339 | getpid() = 30284 | 375 | getpid() = 30284 |
| 340 | kill(30284, SIGIO) = 0 | 376 | kill(30284, SIGIO) = 0 |
| 341 | --- SIGIO (I/O possible) @ 0 (0) --- | 377 | --- SIGIO (I/O possible) @ 0 (0) --- |