1 -*- coding: utf-8; mode: text; -*-
5 The goal of this branch is to implement support for opening multiple,
6 different tty devices and simultaneous X and tty frames from a single
10 Emacs is notoriously slow at startup, so most people use another
11 editor or emacsclient for quick editing jobs from the console.
12 Unfortunately, emacsclient was very awkward to use, because it did not
13 support opening a new Emacs frame on the current virtual console.
14 Now, with multi-tty support, it can do that. (Emacsclient starts up
17 Some Gnus users (including me) run Gnus in an X frame in its own Emacs
18 instance, which they typically leave running for weeks. It would be
19 nice if they could connect to this instance from a remote ssh session
20 and check their messages without opening a remote X frame or resorting
26 I'm Károly Lőrentey. My address: lorentey@elte.hu.
28 Comments, bug reports, suggestions and patches are welcome!
30 Retrieving the latest version of the branch:
32 tla register-archive lorentey@elte.hu--2004 http://lorentey.web.elte.hu/arch/2004/
33 tla get lorentey@elte.hu--2004/emacs--multi-tty <directory>
35 (I use a recent arch development snapshot, but any of the released
36 versions of arch will do fine, I think.)
38 To update your source tree to the latest revision after the first
39 checkout, simply use the following command:
41 tla replay lorentey@elte.hu--2004/emacs--multi-tty--0
43 If you are interested, you can find more detailed information about
44 Arch on http://wiki.gnuarch.org/. It's a wonderful source control
45 system, I highly recommend it.
47 If you don't have arch, the branch has a homepage from which you can
48 download conventional patches against Emacs CVS HEAD:
50 http://lorentey.web.elte.hu/project/emacs.html
52 If you want to be notified of new revisions, sign up to the
53 multi-tty@listbox.elte.hu mailing list by visiting the
54 below homepage and following its instructions.
56 https://listbox.elte.hu/mailman/listinfo/multi-tty
58 Please note that the multi-tty mailing list is read-only, and is
59 reserved for automatic commit messages. Discussion about the branch
60 and bug reports should be sent directly to me (lorentey@elte.hu), or
61 to the emacs-devel@gnu.org mailing list. (I hope to merge my branch
62 into CVS HEAD reasonably soon, so I don't want to set up an elaborate
63 development infrastructure for the multi-tty branch.)
68 The branch is now very stable and almost full-featured. I hope the
69 major problems were fixed. (It still needs testing on other
70 architectures, though.) Both multiple tty device support and
71 simultaneous X and tty frame support works fine. Emacsclient has been
72 extended to support opening new tty and X frames. It has been changed
73 open new Emacs frames by default.
75 Please let me know if you find any bugs in this branch.
77 HOW TO COMPILE AND TEST
78 -----------------------
80 To try out the multi-tty branch, compile and run the multi-tty branch
81 with the following commands:
83 find -name "*.elc" | xargs rm # Delete leftover stuff
86 ../configure <your favourite options>
88 src/emacs -nw # You can also try without -nw
91 and then (from a shell prompt on another terminal) start emacsclient
93 lib-src/emacsclient /optional/file/names...
95 lib-src/emacsclient -t /optional/file/names...
97 You'll hopefully have two fully working, independent frames on
98 separate terminals. The new frame is closed automatically when you
99 finish editing the specified files (C-x #), but delete-frame (C-x 5 0)
100 also works. Of course, you can create frames on more than two tty
103 Creating new frames on the same tty with C-x 5 2 works, and they
104 behave the same way as in previous Emacs versions. If you exit emacs,
105 all terminals should be restored to their previous states.
107 This is work in progress, and probably full of bugs. You should
108 always run emacs from gdb, so that you'll have a live instance to
109 debug if something goes wrong. Please send me your bug reports.
111 I think the best way to use the new Emacs is to have it running inside
112 a disconnected GNU screen session, and always use emacsclient for
113 normal work. This way not a single keystroke of your work will be
114 lost if the display device that you are using crashes, or the network
115 connection times out, or whatever. As long as the server that runs
116 your Emacs remains up, all your buffers remain exactly as they were
117 before the crash, and you can continue working as if nothing had
118 happened. (I had an extremely unstable X server for some time while I
119 was developing these patches, and running Emacs this way has saved me
120 a number of M-x recover-session invocations.)
122 (I am thinking about introducing a --daemon option to get rid of the
123 above screen dependency.)
127 * Mac, Windows and DOS support is broken, probably doesn't
128 even compile -- this will be solved later.
130 * Only tested on my GNU/Linux box, Solaris 8 and FreeBSD.
137 ** Support for multiple terminal devices has been added.
139 *** You can specify a terminal device (`tty' parameter) and a terminal
140 type (`tty-type' parameter) to `make-terminal-frame'.
142 *** You can test for the presence of multiple terminal support by
143 testing for the `multi-tty' feature.
145 *** Emacsclient has been extended to support opening a new terminal
146 frame. Its behaviour has been changed to open a new Emacs frame by
147 default. Use the -c option to get the old behavior of opening
148 files in the currently selected Emacs frame.
150 *** A make-frame-on-tty function has been added to make it easier to
151 create frames on new terminals.
153 *** New functions: frame-tty-name, frame-tty-type for accessing
154 terminal parameters, and delete-tty for closing the terminal
157 *** talk.el has been extended for multiple tty support.
160 ** Support for simultaneous graphical and terminal frames has been
163 *** The function `make-frame-on-display' now works during a terminal
164 session, and `make-frame-on-tty' works during a graphical session.
166 *** The `window-system' variable has been made frame-local.
168 *** The new `initial-window-system' variable contains the
169 `window-system' value for the first frame.
174 The following is an (incomplete) list of people who have contributed
175 to the project by testing, bug reports, and suggestions. Thanks!
177 Robert J. Chassell <bob at rattlesnake dot com>
178 Romain Francoise <romain at orebokech dot com>
179 Ami Fischman <ami at fischman dot org>
180 Istvan Marko <mi-mtty ar kismala dot com>
181 Dan Nicolaescu <dann at ics dot uci dot edu>
182 Gergely Nagy <algernon at debian dot org>
183 Mark Plaksin <happy at mcplaksin dot org>
184 Francisco Borges <borges at let dot rug dot nl>
185 Frank Ruell <stoerte at dreamwarrior dot net>
188 Richard Stallman was kind enough to review an earlier version of my
199 ** frame-creation-function was removed, which might be a bad idea.
200 Think up a compatible solution.
202 ** make-frame does not correctly handle extra parameters in its
205 (frame-parameter (make-frame (list (cons 'foobar 42))) 'foobar)
208 (This is likely an error in the CVS trunk.)
210 ** Fix set-input-mode for multi-tty. It's a truly horrible interface;
211 what if we'd blow it up into several separate functions (with a
212 compatibility definition)?
214 ** Emacs assumes that all terminal frames have the same locale
215 settings as Emacs itself. This may lead to bogus results in a
216 multi-locale setup. (E.g., while logging in from a remote client
217 with a different locale.)
219 ** The single-keyboard mode of MULTI_KBOARD is extremely confusing
220 sometimes; Emacs does not respond to stimuli from other keyboards.
221 At least a beep or a message would be important, if the single-mode
222 is still required to prevent interference. (Reported by Dan
223 Nicolaescu.) (Update: selecting a region with the mouse enables
224 single_kboard under X. This is very confusing.)
226 ** Change Lisp code not to (getenv "TERM"); use the `tty-type' frame
227 parameter or the frame-tty-type function instead. (M-x tags-search
228 "TERM" helps with this.) Update: Actually, all getenv invocations
229 should be checked for multi-tty compatibility, and an interface
230 must be implemented to get the remote client's environment.
232 ** The terminal customization files in term/*.el tend to change global
233 parameters, which may confuse Emacs with multiple displays. Change
234 them to tweak only frame-local settings, if possible.
236 ** Dan Nicolaescu suggests that -nw should be added as an alias for -t
237 in emacsclient. Good idea. (Alas, implementing this is not
238 trivial, getopt_long does not seem to support two-letter ``short''
239 options. Patches are welcome.) :-)
241 ** Mark Plaksin suggests that emacsclient should accept the same
242 X-related command-line arguments as Emacs. Most of the X-related
243 argument-handling is done in Lisp, so this should be quite easy to
246 ** Gergely Nagy suggests that C-x # should only kill the current
247 frame, not any other emacsclient frame that may have the same file
248 opened for editing. I think I agree with him.
250 ** Miles Bader suggests that C-x C-c on an emacsclient frame should
251 only close the frame, not exit the entire Emacs session.
253 ** Make `struct display' accessible to Lisp programs. Accessor functions:
255 (displayp OBJECT): Returns t if OBJECT is a display.
257 (display-list): Returns list of currently active displays.
259 (selected-display): Returns the display object of the selected frame.
261 (frame-display FRAME): Returns the display object of FRAME.
263 (display-frames DISPLAY): Returns a list of frames on DISPLAY.
265 (display-type DISPLAY): Returns the type of DISPLAY, as a
266 symbol. (See `framep'.)
268 (display-device DISPLAY): Returns the name of the device that
269 DISPLAY uses, as a string. (E.g: "/dev/pts/16", or
274 See next issue why this is necessary.
276 ** The following needs to be supported:
283 The cleanest way to solve this is to allow multiple displays on the
284 same terminal device; each new emacsclient process should create
285 its own display. As displays are currently identified by their
286 device names, this is not possible until struct display becomes
287 accessible as a Lisp-level object.
289 ** Add an elaborate mechanism for display-local variables. (There are
290 already a few of these; search for `terminal-local' in the Elisp
293 ** Very strange bug: visible-bell does not work on secondary
294 terminals in xterm and konsole. The screen does flicker a bit,
295 but it's so quick it isn't noticable.
297 ** Clean up the frame-local variable system. I think it's ugly and
298 error-prone. But maybe I just haven't yet fully understood it.
300 ** Move baud_rate to struct display.
302 ** Implement support for starting an interactive Emacs session without
303 an initial frame. (The user would connect to it and open frames
304 later, with emacsclient.)
306 ** Fix Mac support (I can't do this myself). Note that the current
307 state of Mac-specific source files in the multi-tty tree are not
308 useful; before starting work on Mac support, revert to pristine,
309 pre-multi-tty versions.
311 ** Fix W32 support (I can't do this myself). Note that the current
312 state of W32-specific source files in the multi-tty tree are not
313 useful; before starting work on W32 support, revert to pristine,
314 pre-multi-tty versions.
316 ** Fix DOS support (I can't do this myself). Note that the current
317 state of DOS-specific source files in the multi-tty tree are not
318 useful; before starting work on DOS support, revert to pristine,
319 pre-multi-tty versions.
321 ** Do a grep on XXX and ?? for more issues.
323 ** Understand Emacs's low-level input system (it's black magic) :-)
324 What exactly does interrupt_input do? I tried to disable it for
325 raw secondary tty support, but it does not seem to do anything
326 useful. (Update: Look again. X unconditionally enables this, maybe
327 that's why raw terminal support is broken again. I really do need
328 to understand input.)
330 ** Maybe standard-display-table should be display-local.
335 (ex-TODO items with explanations.)
337 -- Introduce a new struct for terminal devices.
339 (Done, see struct tty_output. The list of members is not yet
342 -- Change the bootstrap procedure to initialize tty_list.
344 (Done, but needs review.)
346 -- Change make-terminal-frame to support specifying another tty.
348 (Done, new frame parameters: `tty' and `tty-type'.)
350 -- Implement support for reading from multiple terminals.
352 (Done, read_avail_input tries to read from each terminal, until one
353 succeeds. MULTI_KBOARD is not used. Secondary terminals don't send
356 (Update: They do, now.)
358 (Update2: After enabling X, they don't.)
360 -- other-frame should cycle through the frames on the `current'
363 (Done, by trivially modifiying next_frame and prev_frame.)
365 -- Support different terminal sizes.
369 -- Make sure terminal resizes are handled gracefully. (Could be
372 (Done. We don't get automatic SIGWINCH for additional ttys,
375 -- Extend emacsclient to automatically open a new tty when it connects
378 (Done. It's an ugly hack, needs more work.)
380 -- Redisplay must refresh the topmost frame on *all* terminals, not
381 just the initial terminal.
383 (Done, but introduced an ugly redisplay problems. Ugh.)
385 -- Fix redisplay problems.
387 (Done; it turned out that the entire Wcm structure must be moved
388 inside tty_output. Why didn't I catch this earlier?)
390 -- Provide a way for emacsclient to tell Emacs that the tty has been
393 (Done, simply forward the SIGWINCH signal.)
395 -- Each keypress should automatically select the frame corresponding
396 to the terminal that it was coming from. This means that Emacs
397 must know from which terminal the last keyboard event came from.
399 (Done, it was quite simple, the input event system already
400 supported multiple frames.)
402 -- Fix SIGIO issue with secondary terminals.
404 (Done, emacsclient signals Emacs after writing to the proxy pseudo
405 terminal. Note that this means that multi-tty does not work with
408 (Update: This is bullshit. There is a read_input_waiting function,
409 extend that somehow.)
411 (Update of update: The first update was not right either, extending
412 read_input_waiting was not necessary. Secondary ttys do seem to
413 send signals on input.)
415 (Update^3: Not any more.)
417 -- Make make-terminal-frame look up the `tty' and `tty-type' frame
418 parameters from the currently selected terminal before the global
423 -- Put all cached terminal escape sequences into struct tty_output.
424 Currently, they are still stored in global variables, so we don't
425 really support multiple terminal types.
427 (Done. It was not fun.)
429 -- Implement sane error handling after initialization. (Currently
430 emacs exits if you specify a bad terminal type.) The helpful error
431 messages must still be provided when Emacs starts.
435 -- Implement terminal deletion, i.e., deleting local frames, closing
436 the tty device and restoring its previous state without exiting
439 (Done, but at the moment only called when an error happens during
440 initialization. There is a memory corruption error around this
441 somewhere.) (Update: now it is fully enabled.)
443 -- Implement automatic deletion of terminals when the last frame on
444 that terminal is closed.
448 -- Restore tty screen after closing the terminal.
450 (Done, we do the same as Emacs 21.2 for all terminals.)
452 -- 'TERM=dumb src/emacs' does not restore the terminal state.
456 -- C-g should work on secondary terminals.
458 (Done, but the binding is not configurable.)
460 -- Deal with SIGHUP in Emacs and in emacsclient. (After this, the
461 server-frames may be removed from server.el.)
463 (Done, nothing to do. It seems that Emacs does not receive SIGHUP
464 from secondary ttys, which is actually a good thing.) (Update: I
465 think it would be a bad idea to remove server-frames.)
467 -- Change emacsclient/server.el to support the -t argument better,
468 i.e. automatically close the socket when the frame is closed.
470 (Seems to be working OK.)
472 -- Fix mysterious memory corruption error with tty deletion. To
473 trigger it, try the following shell command:
475 while true; do TERM=no-such-terminal-definition emacsclient -h; done
477 Emacs usually dumps core after a few dozen iterations. (The bug
478 seems to be related to the xfreeing or bzeroing of
479 tty_output.Wcm. Maybe there are outside references to struct Wcm?
480 Why were these vars collected into a struct before multi-tty
483 (Done. Whew. It turned out that the problem had nothing to do
484 with hypothetical external references to Wcm, or any other
485 tty_output component; it was simply that delete_tty closed the
486 filehandles of secondary ttys twice, resulting in fclose doubly
487 freeing memory. Utterly trivial matter. I love the C's memory
488 management, it puts hair on your chest.)
490 -- Support raw secondary terminals. (Note that SIGIO works only on
491 the controlling terminal.) Hint: extend read_input_waiting for
492 multiple ttys and hopefully this will be fixed.
494 (Done, it seems to have been working already for some time. It
495 seems F_SETOWN does work, after all. Not sure what made it fail
496 earlier, but it seems to be fixed (there were several changes
497 around request_sigio, maybe one of them did it).
498 read_input_waiting is only used in sys_select, don't change
499 it.) (Update: After adding X support, it's broken again.)
500 (Update^2: No it isn't.) :-)
502 -- Find out why does Emacs abort when it wants to close its
503 controlling tty. Hint: chan_process[] array. Hey, maybe
504 noninterrupt-IO would work, too? Update: no, there is no process
507 (Done. Added add/delete_keyboard_wait_descriptor to
508 term_init/delete_tty. The hint was right, in a way.)
510 -- Issue with SIGIO: it needs to be disabled during redisplay. See if
511 fcntl kernel behaviour could be emulated by emacsclient.
513 (Done. Simply disabled the SIGIO emulation hack in emacsclient.)
514 (Update: it was added back.) (Update^2: and removed again.)
516 -- server.el: There are issues with saving files in buffers of closed
517 clients. Try editing a file with emacsclient -f, and (without
518 saving it) do a delete-frame. The frame is closed without
519 question, and a surprising confirmation prompt appears in another
522 (Done. delete-frame now asks for confirmation if it still has
523 pending buffers, and modified buffers don't seem to be deleted.)
525 -- emacsclient.el, server.el: Handle eval or file open errors when
530 -- Make parts of struct tty_output accessible from Lisp. The device
531 name and the type is sufficient.
533 (Done, see frame-tty-name and frame-tty-type.)
535 -- Export delete_tty to the Lisp environment, for emacsclient.
537 (Done, see delete-tty.)
539 -- Get rid of the accessor macros in termchar.h, or define macros for
544 -- Move device-specific parameters (like costs) commonly used by
545 device backends to a common, device-dependent structure.
547 (Done. See struct display_method in termhooks.h.)
551 (Done. Well, it seems to be working.)
553 -- Allow simultaneous X and tty frames. (Handling input could be
554 tricky. Or maybe not.)
556 (Done. Allowed, that is. It is currently extremely unstable, to
557 the point of being unusable. The rif variable causes constant
558 core dumps. Handling input is indeed tricky.)
560 -- Rewrite multi-tty input in terms of MULTI_KBOARD.
562 (Done. In fact, there was no need to rewrite anything, I just
563 added a kboard member to tty_display_info, and initialized the
564 frame's kboard from there.)
566 -- Fix rif issue with X-tty combo sessions. IMHO the best thing to do
567 is to get rid of that global variable (and use the value value in
568 display_method, which is guaranteed to be correct).
570 (Done, did exactly that. Core dumps during combo sessions became
571 much rarer. In fact, I have not yet met a single one.)
573 -- Add multi-tty support to talk.el.
577 -- Clean up the source of emacsclient. It is a mess.
579 (Done, eliminated stupid proxy-pty kludge.)
581 -- Fix faces on tty frames during X-tty combo sessions. There is an
582 init_frame_faces call in init_sys_modes, see if there is a problem
585 (Done, there was a stupid mistake in
586 Ftty_supports_face_attributes_p. Colors are broken, though.)
588 -- C-x 5 2, C-x 5 o, C-x 5 0 on an emacsclient frame unexpectedly
589 exits emacsclient. This is a result of trying to be clever with
590 delete-frame-functions.
592 (Fixed, added delete-tty-after-functions, and changed server.el to
595 -- Something with (maybe) multi-keyboard support broke function keys
596 and arrows on ttys during X+tty combo sessions. Debug this.
598 (I can't reproduce it, maybe the terminal type was wrong.)
600 -- Fix input from raw ttys (again).
602 (Now it seems to work all right.)
604 -- During an X-tty combo session, a (message "Hello") from a tty frame
605 goes to the X frame. Fix this.
607 (Done. There was a safeguard against writing to the initial
608 terminal frame during bootstrap which prevented echo_area_display
609 from working correctly on a tty frame during a combo session.)
611 -- If there are no frames on its controlling terminal, Emacs should
612 exit if the user presses C-c there.
614 (Done, as far as possible. See the SIGTERM comment in
615 interrupt_signal on why this seems to be impossible to solve this
618 -- During an X session, Emacs seems to read from stdin. Also, Emacs
619 fails to start without a controlling tty.
621 (Fixed by replacing the troublesome termcap display with a dummy
622 bootstrap display during bootstrap.
624 -- Do tty output through struct display, like graphical display
629 -- Define an output_initial value for output_method for the initial
630 frame that is dumped with Emacs. Checking for this frame (e.g. in
631 cmd_error_internal) is ugly.
633 (Done, broking interactive temacs.)
635 -- The command `emacsclient -t -e '(delete-frame)'' fails to exit.
639 -- frame-creation-function should always create a frame that is on the
640 same display as the selected frame. Maybe frame-creation-function
641 should simply be removed and make-frame changed to do the right
644 (Done, with a nice hack. frame-creation-function is now frame-local.)
646 -- Fix C-g on raw ttys.
648 (Done. I disabled the interrupt/quit keys on all secondary
649 terminals, so Emacs sees C-g as normal input. This looks like an
650 overkill, because emacsclient has extra code to pass SIGINT to
651 Emacs, so C-g should remain the interrupt/quit key on emacsclient
652 frames. See the next entry why implementing this distinction would
655 -- Make sure C-g goes to the right frame with ttys. This is hard, as
656 SIGINT doesn't have a tty parameter. :-(
658 (Done, the previous change fixes this as a pleasant side effect.)
660 -- I have seen a case when Emacs with multiple ttys fell into a loop
661 eating 100% of CPU time. Strace showed this loop:
664 kill(30284, SIGIO) = 0
665 --- SIGIO (I/O possible) @ 0 (0) ---
666 ioctl(6, FIONREAD, [0]) = -1 EIO (Input/output error)
667 ioctl(5, FIONREAD, [0]) = -1 EIO (Input/output error)
668 ioctl(0, FIONREAD, [0]) = 0
669 sigreturn() = ? (mask now [])
670 gettimeofday({1072842297, 747760}, NULL) = 0
671 gettimeofday({1072842297, 747806}, NULL) = 0
672 select(9, [0 3 5 6], NULL, NULL, {0, 0}) = 2 (in [5 6], left {0, 0})
673 select(9, [0 3 5 6], NULL, NULL, {0, 0}) = 2 (in [5 6], left {0, 0})
674 gettimeofday({1072842297, 748245}, NULL) = 0
676 I have seen something similar with a single X frame, but have not
677 been able to reproduce it for debugging.
679 Update: This may have been caused by checking for nread != 0
680 instead of nread > 0 after calling read_socket_hook in
683 (Fixed. This was caused by unconditionally including stdin in
684 input_wait_mask in init_process. The select call in
685 wait_reading_process_input always returned immediately, indicating
686 that there is pending input from stdin, which nobody read.
688 Note that the above strace output seems to be an unrelated but
689 similar bug. I think that is now fixed.)
691 -- Exiting Emacs while there are emacsclient frames doesn't restore the
692 ttys to their default states.
694 (This seems to be fixed by some previous change.)
696 -- Allow opening an X session after -nw.
700 -- Fix color handling during tty+X combo sessions. (It seems that tty
701 sessions automatically convert the face colors to terminal colors
702 when the face is loaded. This conversion must happen instead on
703 the fly in write_glyphs, which might be problematic, as color
704 approximation is currently done in lisp (term/tty-colors.el).)
705 (Update: hm, colors seem to work fine if I start emacs with -nw and
706 then create an X frame. Maybe it's just a small buglet somewhere.)
708 (Seems to be fixed. The problem was in startup.el, it did not
709 initialize tty colors when the initial window system was
712 -- emacs -nw --eval '(y-or-n-p "Foobar")' segfaults. (Reported by
715 (Fixed, there was a keyboard initialization problem.)
717 -- Fix interactive use of temacs. There are face-related SEGVs, most
718 likely because of changes in realize_default_face, realize_face.
722 -- Don't exit Emacs when the last X connection fails during a
723 multi-display session.
727 -- Dan Nicolaescu noticed that starting emacsclient on the same
728 terminal device that is the controlling tty of the Emacs process
729 gives unexpected results.
733 -- Istvan Marko reported that Emacs hang on ttys if it was started
736 (Fixed. There was a bug in the multi-tty version of
737 narrow_foreground_group. tcsetpgrp blocks if it is called from a
738 process that is not in the same process group as the tty.)
740 -- emacsclient -t from an Emacs term buffer does not work, complains
741 about face problems. This can even lock up Emacs (if the recursive
742 frame sets single_kboard). Update: the face problems are caused by
743 bugs in term.el, not in multi-tty. The lockup is caused by
744 single_kboard mode, and is not easily resolvable. The best thing to
745 do is to simply refuse to create a tty frame of type `eterm'.
747 (Fixed, changed emacsclient to check for TERM=eterm. The face
748 complaints seem to be caused by bugs in term.el; they are not
749 related to multi-tty.)
751 -- Find out the best way to support suspending Emacs with multiple
752 ttys. My guess: disable it on the controlling tty, but from other
753 ttys pass it on to emacsclient somehow. (It is (I hope) trivial to
754 extend emacsclient to handle suspend/resume. A `kill -STOP' almost
757 (Done. I needed to play with signal handling and the server
758 protocol a bit to make emacsclient behave as a normal UNIX program
759 wrt foreground/background process groups.)
761 -- There is a flicker during the startup of `emacs -nw'; it's as if
762 the terminal is initialized, reset and then initialialized again.
763 Debug this. (Hint: narrow_foreground_group is called twice during
768 -- Robert Chassell has found serious copy-paste bugs with the
769 multi-tty branch. There seem to be redisplay bugs while copying
770 from X to a terminal frame. Copying accented characters do not
773 (Patch-124 should fix this, by changing the interprogram-*-function
774 variables to be frame-local, as suggested by Mark Plaksin
775 (thanks!). I think that the redisplay bugs are in fact not bugs,
776 but delays caused by single_kboard --> perhaps MULTI_KBOARD should
781 ;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d