mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-04 14:40:54 -08:00
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
484 lines
16 KiB
Text
484 lines
16 KiB
Text
-*- 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.
|
|
|
|
Some use cases:
|
|
|
|
Emacs is notoriously slow at startup, so most people use another
|
|
editor or emacsclient for quick editing jobs from the console.
|
|
Unfortunately, emacsclient was very awkward to use, because it did not
|
|
support opening a new Emacs frame on the current virtual console.
|
|
Now, with multi-tty support, it can do that. (Emacsclient starts up
|
|
faster than vi!)
|
|
|
|
Some Gnus users (including me) run Gnus in an X frame in its own Emacs
|
|
instance, which they typically leave running for weeks. It would be
|
|
nice if they could connect to this instance from a remote ssh session
|
|
and check their messages without opening a remote X frame or resorting
|
|
to gnus-slave.
|
|
|
|
|
|
WHO IS DOING IT
|
|
---------------
|
|
|
|
I'm Károly Lőrentey. My address: lorentey@elte.hu.
|
|
|
|
Patches or suggestions are welcome!
|
|
|
|
Retrieving the latest version of the branch:
|
|
|
|
tla register-archive lorentey@elte.hu--2004 http://lorentey.web.elte.hu/arch/2004/
|
|
tla get lorentey@elte.hu--2004/emacs--multi-tty <directory>
|
|
|
|
(I use a recent arch development snapshot, but any of the released
|
|
versions of arch will do fine, I think.)
|
|
|
|
If you don't have arch, the branch has a homepage from which you can
|
|
download conventional patches against Emacs CVS HEAD:
|
|
|
|
http://lorentey.web.elte.hu/project/emacs.html
|
|
|
|
STATUS
|
|
------
|
|
|
|
Multi-tty support is stable, I think most of the problems were fixed.
|
|
(It still needs testing on other architectures, though.) Please let
|
|
me know if you find any bugs in it. Emacsclient has been extended to
|
|
support opening a new terminal frame.
|
|
|
|
To try it out, compile and run the multi-tty branch with the following
|
|
commands:
|
|
|
|
mkdir +build
|
|
cd +build
|
|
../configure
|
|
make bootstrap
|
|
src/emacs -nw
|
|
M-x server-start
|
|
|
|
and then (from a shell prompt on another terminal) start emacsclient
|
|
with
|
|
|
|
lib-src/emacsclient -t /optional/file/names...
|
|
|
|
You'll hopefully have two fully working, independent frames on
|
|
separate terminals. The new frame is closed automatically when you
|
|
have finished editing the specified files (C-x #), but delete-frame
|
|
(C-x 5 0) also works. Of course, you can create frames on more than
|
|
two tty devices.
|
|
|
|
Creating new frames on the same tty with C-x 5 2 works, and they
|
|
behave the same way as in previous Emacs versions. If you exit emacs,
|
|
all terminals should be restored to their previous states.
|
|
|
|
This is work in progress, and probably full of bugs. You should
|
|
always run emacs from gdb, so that you'll have a live instance to
|
|
debug if something goes wrong. Please send me your reports.
|
|
|
|
Problems:
|
|
|
|
* Suspending Emacs is disabled if there are multiple tty
|
|
devices. Also, there is no way to suspend emacsclient. This
|
|
will be fixed.
|
|
|
|
* X support is (I hope) working, but at the moment there are
|
|
problems with simultaneous X and tty devices, so don't do
|
|
that - start a separate Emacs with -nw and run the server
|
|
there.
|
|
|
|
* Mac, Windows and DOS support is broken, probably doesn't
|
|
even compile -- this will be solved later.
|
|
|
|
* Only tested on my GNU/Linux box.
|
|
|
|
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'. `tty' must be a
|
|
terminal device created by the updated emacsclient, or there will
|
|
be problems with terminal input and window resizes.
|
|
|
|
You can test for the presence of multiple terminal support by
|
|
testing for the `multi-tty' feature.
|
|
|
|
** A make-frame-on-tty function has been added to make it easier to
|
|
create frames on new terminals.
|
|
|
|
** New functions: frame-tty-name, frame-tty-type for accessing
|
|
terminal parameters, and delete-tty for closing the terminal
|
|
device.
|
|
|
|
** Emacsclient has been extended to support opening a new terminal
|
|
frame.
|
|
|
|
CHANGELOG
|
|
---------
|
|
|
|
See arch logs.
|
|
|
|
THINGS TO DO
|
|
------------
|
|
|
|
** Fix color handling during X+tty combo sessions. (It seems that tty
|
|
sessions automatically convert the face colors to terminal colors
|
|
when the face is loaded. This conversion must happen instead on
|
|
the fly in write_glyphs, which might be problematic, as color
|
|
approximation is done in lisp (term/tty-colors.el).)
|
|
|
|
** The command `emacsclient -t -e '(delete-frame)'' fails to exit.
|
|
|
|
** Find out the best way to support suspending Emacs with multiple
|
|
ttys. My guess: disable it on the controlling tty, but from other
|
|
ttys pass it on to emacsclient somehow. (It is (I hope) trivial to
|
|
extend emacsclient to handle suspend/resume. A `kill -STOP' almost
|
|
works right now.)
|
|
|
|
** During an X session, Emacs seems to read from stdin.
|
|
|
|
** Move baud_rate to struct display.
|
|
|
|
** Do tty output through struct display, like graphical display
|
|
backends.
|
|
|
|
** 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 necessarily a good idea.
|
|
|
|
** 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).
|
|
|
|
** Do a grep on XXX and ?? for more issues.
|
|
|
|
** Understand Emacs's low-level input system (it seems complicated) :-)
|
|
What does interrupt_input do? I tried to disable it for raw
|
|
secondary tty support, but it does not seem to do anything useful.
|
|
(Update: Look again. X unconditionally enables this, maybe that's
|
|
why raw terminal support is broken again. I really do need to
|
|
understand input.)
|
|
|
|
** Make sure C-g goes to the right frame with ttys. This is hard, as
|
|
SIGINT doesn't have a tty parameter. :-(
|
|
|
|
** I have seen a case when Emacs with multiple ttys fell into a loop
|
|
eating 100% of CPU time. Strace showed this loop:
|
|
|
|
getpid() = 30284
|
|
kill(30284, SIGIO) = 0
|
|
--- SIGIO (I/O possible) @ 0 (0) ---
|
|
ioctl(6, FIONREAD, [0]) = -1 EIO (Input/output error)
|
|
ioctl(5, FIONREAD, [0]) = -1 EIO (Input/output error)
|
|
ioctl(0, FIONREAD, [0]) = 0
|
|
sigreturn() = ? (mask now [])
|
|
gettimeofday({1072842297, 747760}, NULL) = 0
|
|
gettimeofday({1072842297, 747806}, NULL) = 0
|
|
select(9, [0 3 5 6], NULL, NULL, {0, 0}) = 2 (in [5 6], left {0, 0})
|
|
select(9, [0 3 5 6], NULL, NULL, {0, 0}) = 2 (in [5 6], left {0, 0})
|
|
gettimeofday({1072842297, 748245}, NULL) = 0
|
|
|
|
I have seen something similar with a single X frame, but have not
|
|
been able to reproduce it for debugging.
|
|
|
|
Update: This may have been caused by checking for nread != 0
|
|
instead of nread > 0 after calling read_socket_hook in
|
|
read_avail_input.
|
|
|
|
** Define an output_initial value for output_method for the initial
|
|
frame that is dumped with Emacs. Checking for this frame (e.g. in
|
|
cmd_error_internal) is ugly.
|
|
|
|
** emacsclient -t from an Emacs term buffer does not work, complains
|
|
about face problems. This can even lock up Emacs (if the recursive
|
|
frame sets single_kboard). Update: the face problems are caused by
|
|
bugs in term.el, not in multi-tty. The lockup is caused by
|
|
single_kboard mode.
|
|
|
|
DIARY OF CHANGES
|
|
----------------
|
|
|
|
(ex-TODO items with explanations.)
|
|
|
|
-- Introduce a new struct for terminal devices.
|
|
|
|
(Done, see struct tty_output. The list of members 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'.)
|
|
|
|
-- Implement support for reading from multiple terminals.
|
|
|
|
(Done, read_avail_input tries to read from each terminal, until one
|
|
succeeds. MULTI_KBOARD is not used. Secondary terminals don't send
|
|
SIGIO!)
|
|
|
|
(Update: They do, now.)
|
|
|
|
(Update2: After enabling X, they don't.)
|
|
|
|
-- other-frame should cycle through the frames on the `current'
|
|
terminal only.
|
|
|
|
(Done, by trivially modifiying next_frame and prev_frame.)
|
|
|
|
-- Support different terminal sizes.
|
|
|
|
(Done, no problem.)
|
|
|
|
-- Make sure terminal resizes are handled gracefully. (Could be
|
|
problematic.)
|
|
|
|
(Done. We don't get automatic SIGWINCH for additional ttys,
|
|
though.)
|
|
|
|
-- Extend emacsclient to automatically open a new tty when it connects
|
|
to Emacs.
|
|
|
|
(Done. It's an ugly hack, needs more work.)
|
|
|
|
-- Redisplay must refresh the topmost frame on *all* terminals, not
|
|
just the initial terminal.
|
|
|
|
(Done, but introduced an ugly redisplay problems. Ugh.)
|
|
|
|
-- Fix redisplay problems.
|
|
|
|
(Done; it turned out that the entire Wcm structure must be moved
|
|
inside tty_output. Why didn't I catch this earlier?)
|
|
|
|
-- Provide a way for emacsclient to tell Emacs that the tty has been
|
|
resized.
|
|
|
|
(Done, simply forward the SIGWINCH signal.)
|
|
|
|
-- Each keypress should automatically select the frame corresponding
|
|
to the terminal that it was coming from. This means that Emacs
|
|
must know from which terminal the last keyboard event came from.
|
|
|
|
(Done, it was quite simple, the input event system already
|
|
supported multiple frames.)
|
|
|
|
-- Fix SIGIO issue with secondary terminals.
|
|
|
|
(Done, emacsclient signals Emacs after writing to the proxy pseudo
|
|
terminal. Note that this means that multi-tty does not work with
|
|
raw ttys!)
|
|
|
|
(Update: This is bullshit. There is a read_input_waiting function,
|
|
extend that somehow.)
|
|
|
|
(Update of update: The first update was not right either, extending
|
|
read_input_waiting was not necessary. Secondary ttys do seem to
|
|
send signals on input.)
|
|
|
|
(Update^3: Not any more.)
|
|
|
|
-- Make make-terminal-frame look up the `tty' and `tty-type' frame
|
|
parameters from the currently selected terminal before the global
|
|
default.
|
|
|
|
(Done.)
|
|
|
|
-- 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.
|
|
|
|
(Done. It was not fun.)
|
|
|
|
-- Implement sane error handling after initialization. (Currently
|
|
emacs exits if you specify a bad terminal type.) The helpful error
|
|
messages must still be provided when Emacs starts.
|
|
|
|
(Done.)
|
|
|
|
-- Implement terminal deletion, i.e., deleting local frames, closing
|
|
the tty device and restoring its previous state without exiting
|
|
Emacs.
|
|
|
|
(Done, but at the moment only called when an error happens during
|
|
initialization. There is a memory corruption error around this
|
|
somewhere.) (Update: now it is fully enabled.)
|
|
|
|
-- Implement automatic deletion of terminals when the last frame on
|
|
that terminal is closed.
|
|
|
|
(Done.)
|
|
|
|
-- Restore tty screen after closing the terminal.
|
|
|
|
(Done, we do the same as Emacs 21.2 for all terminals.)
|
|
|
|
-- 'TERM=dumb src/emacs' does not restore the terminal state.
|
|
|
|
(Done.)
|
|
|
|
-- C-g should work on secondary terminals.
|
|
|
|
(Done, but the binding is not configurable.)
|
|
|
|
-- Deal with SIGHUP in Emacs and in emacsclient. (After this, the
|
|
server-frames may be removed from server.el.)
|
|
|
|
(Done, nothing to do. It seems that Emacs does not receive SIGHUP
|
|
from secondary ttys, which is actually a good thing.) (Update: I
|
|
think it would be a bad idea to remove server-frames.)
|
|
|
|
-- Change emacsclient/server.el to support the -t argument better,
|
|
i.e. automatically close the socket when the frame is closed.
|
|
|
|
(Seems to be working OK.)
|
|
|
|
-- Fix mysterious memory corruption error with tty deletion. To
|
|
trigger it, try the following shell command:
|
|
|
|
while true; do TERM=no-such-terminal-definition emacsclient -h; done
|
|
|
|
Emacs usually dumps core after a few dozen iterations. (The bug
|
|
seems to be related to the xfree()ing or bzero()ing of
|
|
tty_output.Wcm. Maybe there are outside references to struct Wcm?
|
|
Why were these vars collected into a struct before multi-tty
|
|
support?)
|
|
|
|
(Done. Whew. It turned out that the problem had nothing to do
|
|
with hypothetical external references to Wcm, or any other
|
|
tty_output component; it was simply that delete_tty closed the
|
|
filehandles of secondary ttys twice, resulting in fclose doubly
|
|
free()ing memory. Utterly trivial matter. I love the C's memory
|
|
management, it puts hair on your chest.)
|
|
|
|
-- Support raw secondary terminals. (Note that SIGIO works only on
|
|
the controlling terminal.) Hint: extend read_input_waiting() for
|
|
multiple ttys and hopefully this will be fixed.
|
|
|
|
(Done, it seems to have been working already for some time. It
|
|
seems F_SETOWN does work, after all. Not sure what made it fail
|
|
earlier, but it seems to be fixed (there were several changes
|
|
around request_sigio, maybe one of them did it).
|
|
read_input_waiting() is only used in sys_select(), don't change
|
|
it.) (Update: After adding X support, it's broken again.)
|
|
|
|
-- Find out why does Emacs abort when it wants to close its
|
|
controlling tty. Hint: chan_process[] array. Hey, maybe
|
|
noninterrupt-IO would work, too? Update: no, there is no process
|
|
for stdin/out.
|
|
|
|
(Done. Added add/delete_keyboard_wait_descriptor to
|
|
term_init/delete_tty. The hint was right, in a way.)
|
|
|
|
-- Issue with SIGIO: it needs to be disabled during redisplay. See if
|
|
fcntl() kernel behaviour could be emulated by emacsclient.
|
|
|
|
(Done. Simply disabled the SIGIO emulation hack in emacsclient.)
|
|
(Update: it was added back.)
|
|
|
|
-- server.el: There are issues with saving files in buffers of closed
|
|
clients. Try editing a file with emacsclient -f, and (without
|
|
saving it) do a delete-frame. The frame is closed without
|
|
question, and a surprising confirmation prompt appears in another
|
|
frame.
|
|
|
|
(Done. delete-frame now asks for confirmation if it still has
|
|
pending buffers, and modified buffers don't seem to be deleted.)
|
|
|
|
-- emacsclient.el, server.el: Handle eval or file open errors when
|
|
doing -t.
|
|
|
|
(Done.)
|
|
|
|
-- Make parts of struct tty_output accessible from Lisp. The device
|
|
name and the type is sufficient.
|
|
|
|
(Done, see frame-tty-name and frame-tty-type.)
|
|
|
|
-- Export delete_tty to the Lisp environment, for emacsclient.
|
|
|
|
(Done, see delete-tty.)
|
|
|
|
-- Get rid of the accessor macros in termchar.h, or define macros for
|
|
all members.
|
|
|
|
(Done.)
|
|
|
|
-- Move device-specific parameters (like costs) commonly used by
|
|
device backends to a common, device-dependent structure.
|
|
|
|
(Done. See struct display_method in termhooks.h.)
|
|
|
|
-- Fix X support.
|
|
|
|
(Done. Well, it seems to be working.)
|
|
|
|
-- Allow simultaneous X and tty frames. (Handling input could be
|
|
tricky. Or maybe not.)
|
|
|
|
(Done. Allowed, that is. It is currently extremely unstable, to
|
|
the point of being unusable. The rif variable causes constant
|
|
core dumps. Handling input is indeed tricky.)
|
|
|
|
-- Rewrite multi-tty input in terms of MULTI_KBOARD.
|
|
|
|
(Done. In fact, there was no need to rewrite anything, I just
|
|
added a kboard member to tty_display_info, and initialized the
|
|
frame's kboard from there.)
|
|
|
|
-- Fix rif issue with X-tty combo sessions. IMHO the best thing to do
|
|
is to get rid of that global variable (and use the value value in
|
|
display_method, which is guaranteed to be correct).
|
|
|
|
(Done, did exactly that. Core dumps during combo sessions became
|
|
much rarer. In fact, I have not yet met a single one.)
|
|
|
|
-- Add multi-tty support to talk.el.
|
|
|
|
(Done.)
|
|
|
|
-- Clean up the source of emacsclient. It is a mess.
|
|
|
|
(Done, eliminated stupid proxy-pty kludge.)
|
|
|
|
-- Fix faces on tty frames during X-tty combo sessions. There is an
|
|
init_frame_faces call in init_sys_modes, see if there is a problem
|
|
with it.
|
|
|
|
(Done, there was a stupid mistake in
|
|
Ftty_supports_face_attributes_p. Colors are broken, though.)
|
|
|
|
-- C-x 5 2, C-x 5 o, C-x 5 0 on an emacsclient frame unexpectedly
|
|
exits emacsclient. This is a result of trying to be clever with
|
|
delete-frame-functions.
|
|
|
|
(Fixed, added delete-tty-after-functions, and changed server.el to
|
|
use it.)
|
|
|
|
-- Something with (maybe) multi-keyboard support broke function keys
|
|
and arrows on ttys during X+tty combo sessions. Debug this.
|
|
|
|
(I can't reproduce it, maybe the terminal type was wrong.)
|
|
|
|
-- Fix input from raw ttys (again).
|
|
|
|
(Now it seems to work all right.)
|
|
|
|
-- During an X-tty combo session, a (message "Hello") from a tty frame
|
|
goes to the X frame. Fix this.
|
|
|
|
(Done. There was a safeguard against writing to the initial
|
|
terminal frame during bootstrap which prevented echo_area_display
|
|
from working correctly on a tty frame during a combo session.)
|
|
|
|
;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d
|