1-*- coding: utf-8; mode: text; -*- 2 3Copyright (C) 2007-2021 Free Software Foundation, Inc. 4See the end of the file for license conditions. 5 6From README.multi-tty in the multi-tty branch. 7Some of this information may be out of date. 8 9 10THANKS 11------ 12 13The following is a (sadly incomplete) list of people who have 14contributed to the project by testing, submitting patches, bug 15reports, and suggestions. Thanks! 16 17Bernard Adrian <bernadrian@free.fr> 18ARISAWA Akihiro <ari@mbf.ocn.ne.jp> 19Vincent Bernat <bernat@luffy.cx> 20Han Boetes <han@mijncomputer.nl> 21Francisco Borges <borges@let.rug.nl> 22Damien Cassou <damien.cassou@laposte.net> 23Robert J. Chassell <bob@rattlesnake.com> 24Romain Francoise <romain@orebokech.com> 25Ami Fischman <ami@fischman.org> 26Noah Friedman <friedman@splode.com> 27Friedrich Delgado Friedrichs <friedel@nomaden.org> 28Samium Gromoff <_deepfire@mail.ru> 29Mikhail Gusarov <dottedmag@dottedmag.net> 30Eric Hanchrow <offby1@blarg.net> 31IRIE Tetsuya <irie@t.email.ne.jp> 32Yoshiaki Kasahara <kasahara@nc.kyushu-u.ac.jp> 33Bas Kok <nekkobassu@yahoo.com> 34Jurej Kubelka <Juraj.Kubelka@email.cz> 35David Lichteblau <david@lichteblau.com> 36Richard Lewis <rtf@jabble.com> 37mace <mace@kirjakaapeli.lib.hel.fi> 38Suresh Madhu <madhu@cs.unm.edu> 39Xavier Mallard <zedek@gnu-rox.org> 40Istvan Marko <mi-mtty@kismala.com> 41Ted Morse <morse@ciholas.com> 42Gergely Nagy <algernon@debian.org> 43Dan Nicolaescu <dann@ics.uci.edu> 44Kalle Olavi Niemitalo <kon@iki.fi> 45Mark Plaksin <happy@mcplaksin.org> 46Frank Ruell <stoerte@dreamwarrior.net> 47Tom Schutzer-Weissmann <trmsw@yahoo.co.uk> 48Joakim Verona <joakim@verona.se> 49Dan Waber <dwaber@logolalia.com> 50and many others. 51 52Richard Stallman was kind enough to review an earlier version of my 53patches. 54 55 56STATUS 57------ 58 59It still needs to be ported to Windows/Mac/DOS. Both multiple 60tty device support and simultaneous X and tty frame support works 61fine. Emacsclient has been extended to support opening new tty and X 62frames. It has been changed to open new Emacs frames by default. 63 64Tested on GNU/Linux, Solaris 8, FreeBSD and OpenBSD. 65 66Known problems: 67 68 * GTK support. If you compile your Emacs with the GTK 69 toolkit, some functionality of multi-tty may be lost. In 70 particular, you may get crashes while working on multiple X 71 displays at once. Previous releases of GTK had limitations 72 and bugs that prevented full-blown multi-display support in 73 Emacs. (GTK crashed when Emacs tries to disconnect from an 74 X server.) Things are much improved in the current GTK 75 version, but if you do experience crashes in libgtk, try 76 compiling Emacs with the Lucid toolkit instead. 77 78 * The single-kboard mode. 79 80 If your multi-tty Emacs session seems to be frozen, you 81 probably have a recursive editing session or a pending 82 minibuffer prompt (which is a kind of recursive editing) on 83 another display. To unfreeze your session, switch to that 84 display and complete the recursive edit, for example by 85 pressing C-] ('abort-recursive-edit'). 86 87 I am sorry to say that currently there is no way to break 88 out of this "single-kboard mode" from a frozen display. If 89 you are unable to switch to the display that locks the 90 others (for example because it is on a remote computer), 91 then you can use emacsclient to break out of all recursive 92 editing sessions: 93 94 emacsclient -e '(top-level)' 95 96 Note that this (perhaps) unintuitive behavior is by design. 97 Single-kboard mode is required because of an intrinsic Emacs 98 limitation that is very hard to eliminate. (This limitation 99 is related to the single-threaded nature of Emacs.) 100 101 I plan to implement better user notification and support for 102 breaking out of single-kboard mode from locked displays. 103 104TESTING 105------- 106 107To test the multi-tty feature, start up the Emacs server with the 108following commands: 109 110 emacs 111 M-x server-start 112 113and then (from a shell prompt on another terminal) start emacsclient 114with 115 emacsclient -t /optional/file/names... (for a tty frame) 116 emacsclient /optional/file/names... (for an X frame) 117 118(Make sure both emacs and emacsclient are multi-tty versions.) 119You'll hopefully have two fully working, independent frames on 120separate terminals. The new frame is closed automatically when you 121finish editing the specified files (C-x #), but delete-frame (C-x 5 0) 122also works. Of course, you can create frames on more than two tty 123devices. 124 125Creating new frames on the same tty with C-x 5 2 (make-frame-command) 126works, and behaves the same way as in previous Emacs versions. If you 127exit emacs, all terminals should be restored to their previous states. 128 129TIPS & TRICKS 130------------- 131 132I think the best way to use the new Emacs is to have it running inside 133a disconnected GNU screen session, and always use emacsclient for 134normal work. One advantage of this is that not a single keystroke of 135your work will be lost if the display device that you are using 136crashes, or the network connection times out, or whatever. (I had an 137extremely unstable X server for some time while I was developing these 138patches, and running Emacs this way has saved me a number of M-x 139recover-session invocations.) 140 141I use the following two bash scripts to handle my Emacs sessions: 142 143-------------------------------------------------------connect-emacs-- 144#!/bin/bash 145# Usage: connect-emacs <name> <args>... 146# 147# Connects to the Emacs instance called NAME. Starts up the instance 148# if it is not already running. The rest of the arguments are passed 149# to emacsclient. 150 151name="$1" 152shift 153 154if [ -z "$name" ]; then 155 echo "Usage: connect_emacs <name> <args>..." >&2 156 exit 1 157fi 158preload-emacs "$name" wait 159/usr/bin/emacsclient.emacs-multi-tty -s "$name" "$@" 160---------------------------------------------------------------------- 161 162-------------------------------------------------------preload-emacs-- 163#!/bin/bash 164# Usage: preload-emacs <name> [<waitp>] 165# 166# Preloads the Emacs instance called NAME in a detached screen 167# session. Does nothing if the instance is already running. If WAITP 168# is non-empty, the function waits until the server starts up and 169# creates its socket; otherwise it returns immediately. 170 171name="$1" 172waitp="$2" 173screendir="/var/run/screen/S-$USER" 174if [ "${XDG_RUNTIME_DIR+set}" ]; then 175 serverdir="$XDG_RUNTIME_DIR/emacs" 176else 177 serverdir="${TMPDIR-/tmp}/emacs$UID" 178fi 179emacs=/usr/bin/emacs-multi-tty # Or wherever you installed your multi-tty Emacs 180 181if [ -z "$name" ]; then 182 echo "Usage: preload_emacs <name> [<waitp>]" >&2 183 exit 1 184fi 185 186if [ ! -e "$screendir"/*."$name" ]; then 187 if [ -e "$serverdir/$name" ]; then 188 # Delete leftover socket (for the wait option) 189 rm "$serverdir/$name" 190 fi 191 screen -dmS "$name" "$emacs" -nw --eval "(setq server-name \"$name\")" -f server-start 192fi 193if [ ! -z "$waitp" ]; then 194 while [ ! -e "$serverdir/$name" ]; do sleep 0.1; done 195fi 196---------------------------------------------------------------------- 197 198I have the following in my profile to have two instances automatically 199preloaded for editing and email: 200 201 preload-emacs editor 202 preload-emacs gnus 203 204It is useful to set up short aliases for connect-emacs. I use the 205following: 206 207 alias edit="connect-emacs editor" 208 alias e=edit 209 alias et="connect-emacs editor -t" 210 alias gnus="connect-emacs gnus" 211 212 213THINGS TO DO 214------------ 215 216** See if 'tty-defined-color-alist' needs to be terminal-local. 217 Update: Dan says it should be, so convert it. 218 219** Mikhail Gusarov suggest to add a hook akin to 220 'after-make-frame-functions' that is called whenever Emacs connects 221 to a new terminal. Good idea! 222 223** emacsclient -t on the console does not work after su. You have to 224 use non-root accounts or start as root to see this. 225 226 Login: root 227 Password: 228 # su lorentey 229 $ emacsclient -t 230 *ERROR*: Could not open file: /dev/tty1 231 232 The tty can be opened as /dev/tty by emacsclient, but not by Emacs. 233 This seems to be a serious problem. Currently my only idea is to 234 bring back the ugly pty proxy hack from the initial versions of 235 multi-tty. Suggestions would be appreciated. 236 237 Update: we could change emacsclient to pass its open file 238 descriptor to the Emacs process. Unfortunately, this requires a 239 new Lisp-level Emacs API, and as file descriptors are not otherwise 240 exported to Lisp, this approach seems at least as ugly as the pty 241 proxy idea. 242 243** lisp/vc.el depends on the terminal type during load time. 244 'vc-annotate-color-map' is one example that needs to be fixed. 245 246** Understand how 'quit_throw_to_read_char' works, and fix any bugs 247 that come to light. 248 249** See if getcjmp can be eliminated somehow. Why does Emacs allow 250 asynchronous input processing while it's reading input anyway? 251 252** 'delete-frame' events are handled by 'special-event-map' 253 immediately when read by 'read_char'. This is fine but it prevents 254 higher-level keymaps from binding that event to get notified of the 255 deleted frame. 256 257 Sometimes it would be useful for Lisp code to be notified of frame 258 deletions after they have happened, usually because they want to 259 clean up after the deleted frame. Not all frame-local states can 260 be stored as a frame parameter. For example, 261 'display-splash-screen' uses 'recursive-edit' with a special keymap 262 override to create its buffer---and it leads to all kinds of 263 nastiness if Emacs stays in this recursive edit mode after the 264 frame containing the splash screen is deleted. Basically, the 265 splash-screen implementation wants to throw out of the recursive 266 edit when the frame is deleted; however, it is not legal to throw 267 from 'delete-frame-functions' because 'delete-frame' must not fail. 268 (Introducing 'delete-frame-after-functions' would not help either 269 because 'delete-frame' may not fail at that time either.) 270 271 Currently 'fancy-splash-screens' installs a 272 'delete-frame-functions' hook that sets up a timer to exit the 273 recursive edit. This is an adequate solution, but it would perhaps 274 be better to have something like a 'frame-deleted' event that could 275 be bound in the normal way. 276 277** Trouble: 'setenv' doesn't actually set environment variables in the 278 Emacs process. This defeats the purpose of the elaborate 279 'server-with-environment' magic around the 'tgetent' call in 280 'init_tty'. D'oh. 281 282** (Possibly) create hooks in struct device for creating frames on a 283 specific terminal, and eliminate the hackish terminal-related frame 284 parameters (display, tty, tty-type). 285 286 make_terminal_frame 287 create_tty_output 288 289** Decide whether to keep the C implementation of terminal parameters, 290 or revert to the previous, purely Lisp code. It turned out that 291 local environments do not need terminal parameters after all. 292 293** Move Fsend_string_to_terminal to term.c, and declare get_named_tty 294 as static, removing it from dispextern.h. 295 Move fatal to emacs.c and declare it somewhere. 296 297** Search for 'suspend-emacs' references and replace them with 298 'suspend-frame', if necessary. Ditto for 'save-buffers-kill-emacs' 299 vs. 'save-buffers-kill-display'. 300 301** Emacs crashes when a tty frame is resized so that there is no space 302 for all its windows. (Tom Schutzer-Weissmann) 303 304** Report GTK multi-display problems to GTK maintainers. For extra 305 credit, fix them. 306 307 Currently you can not connect to new X displays when you compile 308 Emacs with GTK support. If you want to play around with GTK 309 multidisplay (and don't mind core dumps), you can edit src/config.h 310 and define HAVE_GTK_MULTIDISPLAY there by hand. 311 312 https://gitlab.gnome.org/GNOME/gtk/issues/221 313 314 Update: Han reports that GTK+ version 2.8.9 almost gets display 315 disconnects right. GTK will probably be fully fixed by the time 316 multi-tty gets into the trunk. 317 318 Update: I am still having problems with GTK+ 2.8.10. I have the 319 impression that the various multidisplay fixes will only get 320 released in GTK+ 2.10. 321 322** Audit 'face-valid-attribute-values' usage in customize and 323 elsewhere. Its return value depends on the current window system. 324 Replace static initializers using it with runtime functions. For 325 example, custom's buttons are broken on non-initial device types. 326 327** Possibly turn off the double C-g feature when there is an X frame. 328 C.f. (emacs)Emergency Escape. 329 330** frames-on-display-list should also accept frames. 331 332** Consider the 'tty-type' frame parameter and the 'display-tty-type' 333 function. They serve the exact same purpose. I think it may be 334 a good idea to eliminate one of them, preferably 'tty-type'. 335 336** The handling of lisp/term/*.el, and frame creation in general, is a 337 big, big mess. How come the terminal-specific file is loaded by 338 tty-create-frame-with-faces? I don't think it is necessary to load 339 these files for each frame; once per terminal should be enough. 340 Update: lisp/term/*.el is not loaded repeatedly anymore, but 341 faces.el still needs to be cleaned up. 342 343** Fix frame-set-background-mode in this branch. It was recently 344 changed in CVS, and frame.el in multi-tty has not yet been adapted 345 for the changes. (It needs to look at 346 default-frame-background-mode.) (Update: maybe it is fixed now; 347 needs testing.) 348 349** I think '(set-)terminal-local-value' and the terminal parameter 350 mechanism should be integrated into a single framework. 351 352 (Update: '(set-)terminal-local-value' is now eliminated, but the 353 terminal-local variables should still be accessible as terminal 354 parameters. This also applies to 'display-name' and similar 355 functions.) 356 357** Add the following hooks: after-delete-frame-hook (for server.el, 358 instead of delete-frame-functions), 359 after-delete-terminal-functions, after-create-terminal-functions. 360 361** BULK RENAME: The 'display-' prefix of new Lisp-level functions 362 conflicts with stuff like 'display-time-mode'. Use 'device-' 363 or 'terminal-' instead. I think I prefer 'terminal-'. 364 365 It turns out that most of the offending Lisp functions were defined 366 in the trunk. Therefore, compatibility aliases should be defined 367 for the following names: 368 369 display-color-cells terminal-color-cells 370 display-color-p terminal-color-p 371 display-graphic-p terminal-graphic-p 372 display-grayscale-p terminal-grayscale-p 373 display-images-p terminal-images-p 374 display-mm-height terminal-mm-height 375 display-mm-width terminal-mm-width 376 display-mouse-p terminal-mouse-p 377 display-multi-font-p terminal-multi-font-p 378 display-multi-frame-p terminal-multi-frame-p 379 display-pixel-height terminal-pixel-height 380 display-pixel-width terminal-pixel-width 381 display-pixels-per-inch terminal-pixels-per-inch 382 display-planes terminal-planes 383 display-popup-menus-p terminal-popup-menus-p 384 display-save-under terminal-save-under 385 display-screens terminal-screens 386 display-supports-face-attributes-p terminal-supports-face-attributes-p 387 display-visual-class terminal-visual-class 388 framep-on-display framep-on-terminal 389 frames-on-display-list frames-on-terminal-list 390 391 The following functions were introduced in the multi-tty branch, and 392 were renamed without aliases: 393 394 delete-display delete-terminal 395 display-controlling-tty-p controlling-tty-p 396 display-list terminal-list 397 display-live-p terminal-live-p 398 display-name terminal-name 399 display-tty-type tty-type 400 frame-display frame-terminal 401 selected-display selected-terminal 402 403** The single-keyboard mode of MULTI_KBOARD is extremely confusing 404 sometimes; Emacs does not respond to stimuli from other keyboards. 405 At least a beep or a message would be important, if the single-mode 406 is still required to prevent interference. (Reported by Dan 407 Nicolaescu.) 408 409 Update: selecting a region with the mouse enables single_kboard 410 under X. This is very confusing. 411 412 Update: After discussions with Richard Stallman, this will be 413 resolved by having locked displays warn the user to wait, and 414 introducing a complex protocol to remotely bail out of 415 single-kboard mode by pressing C-g. 416 417 Update: Warning the user is not trivial to implement, as Emacs has 418 only one echo area, shared by all frames. Ideally the warning 419 should not be displayed on the display that is locking the others. 420 Perhaps the high probability of user confusion caused by 421 single_kboard mode deserves a special case in the display code. 422 Alternatively, it might be good enough to signal single_kboard mode 423 by changing the modelines or some other frame-local display element 424 on the locked out displays. 425 426 Update: In fact struct kboard does have an echo_string slot. 427 428** The session management module is prone to crashes when the X 429 connection is closed and then later I try to connect to a new X 430 session: 431 432 #0 0xb7ebc806 in SmcGetIceConnection () from /usr/X11R6/lib/libSM.so.6 433 #1 0x080e6641 in x_session_check_input (bufp=0xbf86c9c0) at xsmfns.c:144 434 #2 0x080d3bbc in XTread_socket (device=0xa722ff8, expected=1, hold_quit=0xbf86ca90) at xterm.c:7037 435 #3 0x080fa404 in read_avail_input (expected=1) at keyboard.c:6696 436 #4 0x080fa4ca in handle_async_input () at keyboard.c:6900 437 #5 0x080d51fa in x_term_init (display_name=162628899, xrm_option=0x0, resource_name=0x857068c "emacs") at xterm.c:10622 438 #6 0x080d920e in x_display_info_for_name (name=162628899) at xfns.c:3975 439 #7 0x080d92f9 in check_x_display_info (object=1) at xfns.c:274 440 #8 0x080d97b8 in Fx_create_frame (parms=151221485) at xfns.c:3016 441 #9 0x0815bf72 in Ffuncall (nargs=2, args=0xbf86ceec) at eval.c:2851 442 443 I installed a workaround to prevent this. The X session manager is 444 only contacted when the very first display in the Emacs session is 445 an X display. Also, x_delete_display() on this display aborts 446 session management, and XTread_socket only calls 447 x_session_check_input when it is called for the display that the 448 session was opened on. While this does not really fix the bug, it 449 makes it much less frequent, because session manager support will 450 not normally be enabled when Emacs can survive the shutdown of the 451 X server. 452 453 See if xsmfns.c should be updated. 454 455** Hunt down display-related functions in frame.el and extend them all 456 to accept display ids. 457 458** rif->flush_display_optional (NULL) calls should be replaced by a 459 new global function. 460 461** The set-locale-environment hack (adding the DISPLAY option) should 462 be replaced with a clean design. 463 464** standard-display-table should be display-local. 465 standard-display-european should be display-local. 466 467** With iswitchb-default-method set to 'always-frame, only frames on 468 the current display should be considered. This might involve 469 extending 'get-buffer-window'. 470 471** Have a look at Vlocale_coding_system. Seems like it would be a 472 tedious job to localize it, although most references use it for 473 interfacing with libc and are therefore OK with the global 474 definition. 475 476 Exceptions found so far: x-select-text and 477 x-selection-value (old name: x-cut-buffer-or-selection-value). 478 479** Have a look at fatal_error_hook. 480 481** Have a look at set_frame_matrix_frame. 482 483** Check if we got term-setup-hook right. 484 485** I think tip_frame should be display-local. 486 487** Check display reference count handling in x_create_tip_frame. 488 489** make-frame does not correctly handle extra parameters in its 490 argument: 491 492 (frame-parameter (make-frame (list (cons 'foobar 42))) 'foobar) 493 => nil 494 495 (This is likely an error in the CVS trunk.) 496 497** Gergely Nagy suggests that C-x # should only kill the current 498 frame, not any other emacsclient frame that may have the same file 499 opened for editing. I think I agree with him. 500 501** Very strange bug: visible-bell does not work on secondary 502 terminals in xterm and konsole. The screen does flicker a bit, 503 but it's so quick it isn't noticeable. 504 505 (Update: This is probably some problem with padding or whatnot on 506 the secondary terminals.) 507 508** Move baud_rate to struct display. 509 510** Implement support for starting an interactive Emacs session without 511 an initial frame. (The user would connect to it and open frames 512 later, with emacsclient.) 513 514** Implement Mac/Windows/DOS support. Many XXX comments mark things 515 that probably need updating, ChangeLogs will help in spotting 516 changes to X specific files that may need porting. 517 518** Do a grep on XXX and ?? for more issues. 519 520** flow-ctrl.el must be updated. 521 522** Fix stuff_char for multi-tty. Doesn't seem to be of high priority. 523 524DIARY OF CHANGES 525---------------- 526 527(ex-TODO items with explanations.) 528 529-- Introduce a new struct for terminal devices. 530 531 (Done, see struct tty_output. The list of members is not yet 532 complete.) 533 534-- Change the bootstrap procedure to initialize tty_list. 535 536 (Done, but needs review.) 537 538-- Change make-terminal-frame to support specifying another tty. 539 540 (Done, new frame parameters: 'tty' and 'tty-type'.) 541 542-- Implement support for reading from multiple terminals. 543 544 (Done, read_avail_input tries to read from each terminal, until one 545 succeeds. MULTI_KBOARD is not used. Secondary terminals don't send 546 SIGIO!) 547 548 (Update: They do, now.) 549 550 (Update2: After enabling X, they don't.) 551 552-- other-frame should cycle through the frames on the 'current' 553 terminal only. 554 555 (Done, by trivially modifying next_frame and prev_frame.) 556 557-- Support different terminal sizes. 558 559 (Done, no problem.) 560 561-- Make sure terminal resizes are handled gracefully. (Could be 562 problematic.) 563 564 (Done. We don't get automatic SIGWINCH for additional ttys, 565 though.) 566 567-- Extend emacsclient to automatically open a new tty when it connects 568 to Emacs. 569 570 (Done. It's an ugly hack, needs more work.) 571 572-- Redisplay must refresh the topmost frame on *all* terminals, not 573 just the initial terminal. 574 575 (Done, but introduced an ugly redisplay problems. Ugh.) 576 577-- Fix redisplay problems. 578 579 (Done; it turned out that the entire Wcm structure must be moved 580 inside tty_output. Why didn't I catch this earlier?) 581 582-- Provide a way for emacsclient to tell Emacs that the tty has been 583 resized. 584 585 (Done, simply forward the SIGWINCH signal.) 586 587-- Each keypress should automatically select the frame corresponding 588 to the terminal that it was coming from. This means that Emacs 589 must know from which terminal the last keyboard event came from. 590 591 (Done, it was quite simple, the input event system already 592 supported multiple frames.) 593 594-- Fix SIGIO issue with secondary terminals. 595 596 (Done, emacsclient signals Emacs after writing to the proxy pseudo 597 terminal. Note that this means that multi-tty does not work with 598 raw ttys!) 599 600 (Update: This is bullshit. There is a read_input_waiting function, 601 extend that somehow.) 602 603 (Update of update: The first update was not right either, extending 604 read_input_waiting was not necessary. Secondary ttys do seem to 605 send signals on input.) 606 607 (Update^3: Not any more.) 608 609-- Make make-terminal-frame look up the 'tty' and 'tty-type' frame 610 parameters from the currently selected terminal before the global 611 default. 612 613 (Done.) 614 615-- Put all cached terminal escape sequences into struct tty_output. 616 Currently, they are still stored in global variables, so we don't 617 really support multiple terminal types. 618 619 (Done. It was not fun.) 620 621-- Implement sane error handling after initialization. (Currently 622 emacs exits if you specify a bad terminal type.) The helpful error 623 messages must still be provided when Emacs starts. 624 625 (Done.) 626 627-- Implement terminal deletion, i.e., deleting local frames, closing 628 the tty device and restoring its previous state without exiting 629 Emacs. 630 631 (Done, but at the moment only called when an error happens during 632 initialization. There is a memory corruption error around this 633 somewhere.) (Update: now it is fully enabled.) 634 635-- Implement automatic deletion of terminals when the last frame on 636 that terminal is closed. 637 638 (Done.) 639 640-- Restore tty screen after closing the terminal. 641 642 (Done, we do the same as Emacs 21.2 for all terminals.) 643 644-- 'TERM=dumb src/emacs' does not restore the terminal state. 645 646 (Done.) 647 648-- C-g should work on secondary terminals. 649 650 (Done, but the binding is not configurable.) 651 652-- Deal with SIGHUP in Emacs and in emacsclient. (After this, the 653 server-frames may be removed from server.el.) 654 655 (Done, nothing to do. It seems that Emacs does not receive SIGHUP 656 from secondary ttys, which is actually a good thing.) (Update: I 657 think it would be a bad idea to remove server-frames.) 658 659-- Change emacsclient/server.el to support the -t argument better, 660 i.e. automatically close the socket when the frame is closed. 661 662 (Seems to be working OK.) 663 664-- Fix mysterious memory corruption error with tty deletion. To 665 trigger it, try the following shell command: 666 667 while true; do TERM=no-such-terminal-definition emacsclient -h; done 668 669 Emacs usually dumps core after a few dozen iterations. (The bug 670 seems to be related to the xfreeing or bzeroing of 671 tty_output.Wcm. Maybe there are outside references to struct Wcm? 672 Why were these vars collected into a struct before multi-tty 673 support?) 674 675 (Done. Whew. It turned out that the problem had nothing to do 676 with hypothetical external references to Wcm, or any other 677 tty_output component; it was simply that delete_tty closed the 678 filehandles of secondary ttys twice, resulting in fclose doubly 679 freeing memory. Utterly trivial matter. I love the C's memory 680 management, it puts hair on your chest.) 681 682-- Support raw secondary terminals. (Note that SIGIO works only on 683 the controlling terminal.) Hint: extend read_input_waiting for 684 multiple ttys and hopefully this will be fixed. 685 686 (Done, it seems to have been working already for some time. It 687 seems F_SETOWN does work, after all. Not sure what made it fail 688 earlier, but it seems to be fixed (there were several changes 689 around request_sigio, maybe one of them did it). 690 read_input_waiting is only used in sys_select, don't change 691 it.) (Update: After adding X support, it's broken again.) 692 (Update^2: No it isn't.) :-) 693 694-- Find out why does Emacs abort when it wants to close its 695 controlling tty. Hint: chan_process[] array. Hey, maybe 696 noninterrupt-IO would work, too? Update: no, there is no process 697 for stdin/out. 698 699 (Done. Added add/delete_keyboard_wait_descriptor to 700 term_init/delete_tty. The hint was right, in a way.) 701 702-- Issue with SIGIO: it needs to be disabled during redisplay. See if 703 fcntl kernel behavior could be emulated by emacsclient. 704 705 (Done. Simply disabled the SIGIO emulation hack in emacsclient.) 706 (Update: it was added back.) (Update^2: and removed again.) 707 708-- server.el: There are issues with saving files in buffers of closed 709 clients. Try editing a file with emacsclient -f, and (without 710 saving it) do a delete-frame. The frame is closed without 711 question, and a surprising confirmation prompt appears in another 712 frame. 713 714 (Done. delete-frame now asks for confirmation if it still has 715 pending buffers, and modified buffers don't seem to be deleted.) 716 717-- emacsclient.el, server.el: Handle eval or file open errors when 718 doing -t. 719 720 (Done.) 721 722-- Make parts of struct tty_output accessible from Lisp. The device 723 name and the type is sufficient. 724 725 (Done, see frame-tty-name and frame-tty-type.) 726 727-- Export delete_tty to the Lisp environment, for emacsclient. 728 729 (Done, see delete-tty.) 730 731-- Get rid of the accessor macros in termchar.h, or define macros for 732 all members. 733 734 (Done.) 735 736-- Move device-specific parameters (like costs) commonly used by 737 device backends to a common, device-dependent structure. 738 739 (Done. See struct display_method in termhooks.h.) 740 741-- Fix X support. 742 743 (Done. Well, it seems to be working.) 744 745-- Allow simultaneous X and tty frames. (Handling input could be 746 tricky. Or maybe not.) 747 748 (Done. Allowed, that is. It is currently extremely unstable, to 749 the point of being unusable. The rif variable causes constant 750 core dumps. Handling input is indeed tricky.) 751 752-- Rewrite multi-tty input in terms of MULTI_KBOARD. 753 754 (Done. In fact, there was no need to rewrite anything, I just 755 added a kboard member to tty_display_info, and initialized the 756 frame's kboard from there.) 757 758-- Fix rif issue with X-tty combo sessions. IMHO the best thing to do 759 is to get rid of that global variable (and use the value in 760 display_method, which is guaranteed to be correct). 761 762 (Done, did exactly that. Core dumps during combo sessions became 763 much rarer. In fact, I have not yet met a single one.) 764 765-- Add multi-tty support to talk.el. 766 767 (Done.) 768 769-- Clean up the source of emacsclient. It is a mess. 770 771 (Done, eliminated stupid proxy-pty kludge.) 772 773-- Fix faces on tty frames during X-tty combo sessions. There is an 774 init_frame_faces call in init_sys_modes, see if there is a problem 775 with it. 776 777 (Done, there was a stupid mistake in 778 Ftty_supports_face_attributes_p. Colors are broken, though.) 779 780-- C-x 5 2, C-x 5 o, C-x 5 0 on an emacsclient frame unexpectedly 781 exits emacsclient. This is a result of trying to be clever with 782 delete-frame-functions. 783 784 (Fixed, added delete-tty-after-functions, and changed server.el to 785 use it.) 786 787-- Something with (maybe) multi-keyboard support broke function keys 788 and arrows on ttys during X+tty combo sessions. Debug this. 789 790 (I can't reproduce it, maybe the terminal type was wrong.) 791 792-- Fix input from raw ttys (again). 793 794 (Now it seems to work all right.) 795 796-- During an X-tty combo session, a (message "Hello") from a tty frame 797 goes to the X frame. Fix this. 798 799 (Done. There was a safeguard against writing to the initial 800 terminal frame during bootstrap which prevented echo_area_display 801 from working correctly on a tty frame during a combo session.) 802 803-- If there are no frames on its controlling terminal, Emacs should 804 exit if the user presses C-c there. 805 806 (Done, as far as possible. See the SIGTERM comment in 807 interrupt_signal on why this seems to be impossible to solve this 808 in general.) 809 810-- During an X session, Emacs seems to read from stdin. Also, Emacs 811 fails to start without a controlling tty. 812 813 (Fixed by replacing the troublesome termcap display with a dummy 814 bootstrap display during bootstrap. 815 816-- Do tty output through struct display, like graphical display 817 backends. 818 819 (Done.) 820 821-- Define an output_initial value for output_method for the initial 822 frame that is dumped with Emacs. Checking for this frame (e.g. in 823 cmd_error_internal) is ugly. 824 825 (Done, breaking interactive temacs.) 826 827-- The command "emacsclient -t -e '(delete-frame)'" fails to exit. 828 829 (Fixed.) 830 831-- frame-creation-function should always create a frame that is on the 832 same display as the selected frame. Maybe frame-creation-function 833 should simply be removed and make-frame changed to do the right 834 thing. 835 836 (Done, with a nice hack. frame-creation-function is now frame-local.) 837 838-- Fix C-g on raw ttys. 839 840 (Done. I disabled the interrupt/quit keys on all secondary 841 terminals, so Emacs sees C-g as normal input. This looks like an 842 overkill, because emacsclient has extra code to pass SIGINT to 843 Emacs, so C-g should remain the interrupt/quit key on emacsclient 844 frames. See the next entry why implementing this distinction would 845 be a bad idea.) 846 847-- Make sure C-g goes to the right frame with ttys. This is hard, as 848 SIGINT doesn't have a tty parameter. :-( 849 850 (Done, the previous change fixes this as a pleasant side effect.) 851 852-- I have seen a case when Emacs with multiple ttys fell into a loop 853 eating 100% of CPU time. Strace showed this loop: 854 855 getpid() = 30284 856 kill(30284, SIGIO) = 0 857 --- SIGIO (I/O possible) @ 0 (0) --- 858 ioctl(6, FIONREAD, [0]) = -1 EIO (Input/output error) 859 ioctl(5, FIONREAD, [0]) = -1 EIO (Input/output error) 860 ioctl(0, FIONREAD, [0]) = 0 861 sigreturn() = ? (mask now []) 862 gettimeofday({1072842297, 747760}, NULL) = 0 863 gettimeofday({1072842297, 747806}, NULL) = 0 864 select(9, [0 3 5 6], NULL, NULL, {0, 0}) = 2 (in [5 6], left {0, 0}) 865 select(9, [0 3 5 6], NULL, NULL, {0, 0}) = 2 (in [5 6], left {0, 0}) 866 gettimeofday({1072842297, 748245}, NULL) = 0 867 868 I have seen something similar with a single X frame, but have not 869 been able to reproduce it for debugging. 870 871 Update: This may have been caused by checking for nread != 0 872 instead of nread > 0 after calling read_socket_hook in 873 read_avail_input. 874 875 (Fixed. This was caused by unconditionally including stdin in 876 input_wait_mask in init_process_emacs. The select call in 877 wait_reading_process_input always returned immediately, indicating 878 that there is pending input from stdin, which nobody read. 879 880 Note that the above strace output seems to be an unrelated but 881 similar bug. I think that is now fixed.) 882 883-- Exiting Emacs while there are emacsclient frames doesn't restore the 884 ttys to their default states. 885 886 (This seems to be fixed by some previous change.) 887 888-- Allow opening an X session after -nw. 889 890 (Done.) 891 892-- Fix color handling during tty+X combo sessions. (It seems that tty 893 sessions automatically convert the face colors to terminal colors 894 when the face is loaded. This conversion must happen instead on 895 the fly in write_glyphs, which might be problematic, as color 896 approximation is currently done in lisp (term/tty-colors.el).) 897 (Update: hm, colors seem to work fine if I start emacs with -nw and 898 then create an X frame. Maybe it's just a small buglet somewhere.) 899 900 (Seems to be fixed. The problem was in startup.el, it did not 901 initialize tty colors when the initial window system was 902 graphical.) 903 904-- emacs -nw --eval '(y-or-n-p "Foobar")' segfaults. (Reported by 905 Romain Francoise) 906 907 (Fixed, there was a keyboard initialization problem.) 908 909-- Fix interactive use of temacs. There are face-related SEGVs, most 910 likely because of changes in realize_default_face, realize_face. 911 912 (Fixed.) 913 914-- Don't exit Emacs when the last X connection fails during a 915 multi-display session. 916 917 (Fixed.) 918 919-- Dan Nicolaescu noticed that starting emacsclient on the same 920 terminal device that is the controlling tty of the Emacs process 921 gives unexpected results. 922 923 (Fixed.) 924 925-- Istvan Marko reported that Emacs hang on ttys if it was started 926 from a shell script. 927 928 (Fixed. There was a bug in the multi-tty version of 929 narrow_foreground_group. tcsetpgrp blocks if it is called from a 930 process that is not in the same process group as the tty.) 931 932-- emacsclient -t from an Emacs term buffer does not work, complains 933 about face problems. This can even lock up Emacs (if the recursive 934 frame sets single_kboard). Update: the face problems are caused by 935 bugs in term.el, not in multi-tty. The lockup is caused by 936 single_kboard mode, and is not easily resolvable. The best thing to 937 do is to simply refuse to create a tty frame of type 'eterm'. 938 939 (Fixed, changed emacsclient to check for TERM=eterm. The face 940 complaints seem to be caused by bugs in term.el; they are not 941 related to multi-tty.) 942 943-- Find out the best way to support suspending Emacs with multiple 944 ttys. My guess: disable it on the controlling tty, but from other 945 ttys pass it on to emacsclient somehow. (It is (I hope) trivial to 946 extend emacsclient to handle suspend/resume. A 'kill -STOP' almost 947 works right now.) 948 949 (Done. I needed to play with signal handling and the server 950 protocol a bit to make emacsclient behave as a normal UNIX program 951 wrt foreground/background process groups.) 952 953-- There is a flicker during the startup of 'emacs -nw'; it's as if 954 the terminal is initialized, reset and then initialized again. 955 Debug this. (Hint: narrow_foreground_group is called twice during 956 startup.) 957 958 (This is gone.) 959 960-- Robert Chassell has found serious copy-paste bugs with the 961 multi-tty branch. There seem to be redisplay bugs while copying 962 from X to a terminal frame. Copying accented characters do not 963 work for me. 964 965 (Patch-124 should fix this, by changing the interprogram-*-function 966 variables to be frame-local, as suggested by Mark Plaksin 967 (thanks!). I think that the redisplay bugs are in fact not bugs, 968 but delays caused by single_kboard --> perhaps MULTI_KBOARD should 969 be removed.) 970 971-- frame-creation-function was removed, which might be a bad idea. 972 Think up a compatible solution. 973 974 (It was an internal interface that may be changed when necessary.) 975 976-- Change Lisp code not to (getenv "TERM"); use the 'tty-type' frame 977 parameter or the frame-tty-type function instead. (M-x tags-search 978 "TERM" helps with this.) Update: Actually, all getenv invocations 979 should be checked for multi-tty compatibility, and an interface 980 must be implemented to get the remote client's environment. 981 982 (Done. Only getenv calls in lisp/term/*.el were changed; other 983 calls should be mostly left as they are.) 984 985-- Add an elaborate mechanism for display-local variables. (There are 986 already a few of these; search for 'terminal-local' in the Elisp 987 manual.) 988 989 (Not needed. Display-local variables could be emulated by 990 frame-local variables.) 991 992-- Emacs assumes that all terminal frames have the same locale 993 settings as Emacs itself. This may lead to bogus results in a 994 multi-locale setup. (E.g., while logging in from a remote client 995 with a different locale.) 996 (Update after new bugreport by Friedrich Delgado Friedrichs: 997 (at least) the structs terminal_coding and keyboard_coding in 998 coding.c must be moved to struct display, and the Lisp interface 999 [set-]keyboard-coding-system must be adapted for the change.) 1000 1001 (Fixed. Emacs now uses the locale settings as seen by the 1002 emacsclient process for server tty frames.) 1003 (Update: Not really; Vlocale_coding_system is still global.) 1004 1005-- Make 'struct display' accessible to Lisp programs. Accessor functions: 1006 1007 (displayp OBJECT): Returns t if OBJECT is a display. 1008 => Implemented as display-live-p. 1009 1010 (display-list): Returns list of currently active displays. 1011 => Implemented. 1012 1013 (selected-display): Returns the display object of the selected frame. 1014 => Not strictly necessary, but implemented anyway. 1015 1016 (frame-display FRAME): Returns the display object of FRAME. 1017 => Implemented. 1018 1019 (display-frames DISPLAY): Returns a list of frames on DISPLAY. 1020 => Already implemented, see frames-on-display-list. 1021 1022 (display-type DISPLAY): Returns the type of DISPLAY, as a 1023 symbol. (See 'framep'.) 1024 => Implemented as display-live-p. 1025 1026 (display-device DISPLAY): Returns the name of the device that 1027 DISPLAY uses, as a string. (E.g: "/dev/pts/16", or 1028 ":0.0") 1029 => Implemented as display-name. 1030 1031 etc. 1032 1033 See next issue why this is necessary. 1034 1035 (Update: The consensus on emacs-devel seems to be to do this via 1036 integer identifiers. That's fine by me.) 1037 1038 (Done.) 1039 1040-- The following needs to be supported: 1041 1042 $ emacsclient -t 1043 C-z 1044 $ emacsclient -t 1045 (This fails now.) 1046 1047 The cleanest way to solve this is to allow multiple displays on the 1048 same terminal device; each new emacsclient process should create 1049 its own display. As displays are currently identified by their 1050 device names, this is not possible until struct display becomes 1051 accessible as a Lisp-level object. 1052 1053 (Done.) 1054 1055-- Support multiple character locales. A version of 1056 'set-locale-environment' needs to be written for setting up 1057 display-local settings on ttys. I think calling 1058 set-display-table-and-terminal-coding-system and 1059 set-keyboard-coding-system would be enough. The language 1060 environment itself should remain a global setting. 1061 1062 (Done, by an ugly hack.) 1063 1064-- The terminal customization files in term/*.el tend to change global 1065 parameters, which may confuse Emacs with multiple displays. Change 1066 them to tweak only frame-local settings, if possible. (They tend 1067 to call define-key to set function key sequences a lot.) 1068 1069 (Done, by making 'function-key-map' terminal-local (i.e., part of 1070 struct kboard). This has probably covered all the remaining problems.) 1071 1072-- xt-mouse.el needs to be adapted for multi-tty. It currently 1073 signals an error on kill-emacs under X, which prevents the user 1074 from exiting Emacs. (Reported by Mnemonikk on freenode.) 1075 1076 (Done, I hope.) 1077 1078 1079-- Having {reset,init}_all_sys_modes in set-input-mode breaks arrow 1080 keys on non-selected terminals under screen, and sometimes on other 1081 terminal types as well. The other function keys continue to work 1082 fine. Sometimes faces on these screens become garbled. 1083 1084 This only seems to affect displays that are of the same terminfo 1085 type as the selected one. Interestingly, in screen Emacs normally 1086 reports the up arrow key as 'M-o A', but after the above SNAFU, it 1087 complains about 'M-[ a'. UNIX ttys are a complete mystery to me, 1088 but it seems the reset-reinitialize cycle somehow leaves the 1089 non-selected terminals in a different state than usual. I have no 1090 idea how this could happen. 1091 1092 Currently set-input-mode resets only the currently selected 1093 terminal, which seems to somehow work around the problem. 1094 1095 Update: 1096 1097 Dan Nicolaescu <dann@ics.uci.edu> writes: 1098 > Some terminals have 2 modes for cursor keys: Application Mode where 1099 > the cursor keys transmit the codes defined in the terminfo entry, and 1100 > Cursor mode. Applications have to send the smkx and rmkx terminfo 1101 > strings to switch between the 2 modes. So Emacs (and emacsclient) have 1102 > to send smkx when initializing and rmkx when quitting (or on 1103 > suspend). 1104 1105 (I think patch-370 fixed this.) 1106 1107-- This long-standing bug (first reported by Han Boetes) seems to come 1108 and go all the time. It is time to track it down and fix it. 1109 1110 emacs 1111 M-x server-start 1112 1113 # From another xterm: 1114 emacsclient -e '(y-or-n-p "Do you want me to crash? ")' 1115 # Notice how the answer ends up in the *scratch* buffer 1116 M-x garbage-collect 1117 SIGSEGV 1118 1119 (Fixed in patch-414 after detailed analysis by Kalle Olavi Niemitalo.) 1120 1121-- normal-erase-is-backspace-mode in simple.el needs to be updated for 1122 multi-tty (rep. by Dan Waber). (The Delete key is broken on X 1123 because of this.) 1124 1125 (Fixed in patch-427.) 1126 1127-- I think keyboard-translate-table should be made terminal-local. 1128 1129 (Done in patch-431.) 1130 1131-- The semantics of terminal-local variables are confusing; it is not 1132 clear what binding is in effect in any given time. See if 1133 current_kboard (or at least the terminal-local bindings exported to 1134 Lisp) might be changed to be tied to the selected frame instead. 1135 Currently, 'function-key-map' and 'key-translation-map' may be 1136 accessed reliably only using the hackish 1137 '(set-)terminal-local-value' functions. 1138 1139 Perhaps there should be a difference between 'last-command' &co. 1140 and these more conventional configuration variables. 1141 (E.g. 'symbol-value' would use current_kboard to access 1142 'last-command', but SELECTED_FRAME()->display->kboard to get the 1143 value of 'function-key-map'. 1144 1145 (Fixed in patch-434.) 1146 1147-- If the first key pressed on a new tty terminal is a function key, 1148 it is not recognized correctly. May be related to the bug below. 1149 1150 (Seems to have been fixed as a side effect of patch-434. "The bug 1151 below" was the set-input-mode madness.) 1152 1153 (Update: this bug was fixed for good in patch-449. It was tracked 1154 down to a bug in 'read_key_sequence': it failed to reinitialize its 1155 local function-key-map/key-translation-map references when it 1156 switched keyboards. I don't understand why did this bug only 1157 appear on brand new frames, though!) 1158 1159-- Disable connecting to a new X display when we use the GTK toolkit. 1160 1161 (Disabled in patch-450.) 1162 1163-- Implement automatic forwarding of client environment variables to 1164 forked processes, as discussed on the multi-tty list. Terminal 1165 parameters are now accessible in C code, so the biggest obstacle is 1166 gone. The 'getenv_internal' and 'child_setup' functions in 1167 callproc.c must be changed to support the following variable: 1168 1169 terminal-local-environment-variables is a variable defined in ... 1170 1171 Enable or disable terminal-local environment variables. 1172 1173 If set to t, 'getenv', 'setenv' and subprocess creation 1174 functions use the environment variables of the emacsclient 1175 process that created the selected frame, ignoring 1176 'process-environment'. 1177 1178 If set to nil, Emacs uses 'process-environment' and ignores 1179 the client environment. 1180 1181 Otherwise, 'terminal-local-environment-variables' should be a 1182 list of variable names (represented by Lisp strings) to look 1183 up in the client environment. The rest will come from 1184 'process-environment'. 1185 1186 (Implemented in patch-461; 'terminal-getenv', 'terminal-setenv' and 1187 'with-terminal-environment' are now replaced by extensions to 1188 'getenv' and 'setenv', and the new 'local-environment-variables' 1189 facility. Yay!) 1190 1191 (Updated in patch-465 to fix the semantics of let-binding 1192 'process-environment'. 'process-environment' was changed to 1193 override all local/global environment variables, and a new variable 1194 'global-environment' was introduced to have 'process-environment's 1195 old meaning.) 1196 1197 (Updated in patch-466 to fix the case when two emacsclient sessions 1198 share the same terminal, but have different environment. The local 1199 environment lists are now stored as frame parameters, so the 1200 C-level terminal parameters are not strictly necessary any more.) 1201 1202-- 'Fdelete_frame' is called from various critical places where it is 1203 not acceptable for the frame deletion to fail, e.g. from 1204 x_connection_closed after an X error. 'Fdelete_frame' now protects 1205 against 'delete-frame-functions' throwing an error and preventing a 1206 frame delete. (patch-475) 1207 1208-- Fix set-input-mode for multi-tty. It's a truly horrible interface; 1209 what if we'd blow it up into several separate functions (with a 1210 compatibility definition)? 1211 1212 (Done. See 'set-input-interrupt-mode', 'set-output-flow-control', 1213 'set-input-meta-mode' and 'set-quit-char'.) (patch-457) 1214 1215-- Let-binding 'overriding-terminal-local-map' on a brand new frame 1216 does not seem to work correctly. (See 'fancy-splash-screens'.) 1217 The keymap seems to be set up right, but events go to another 1218 terminal. Or is it 'unread-command-events' that gets Emacs 1219 confused? Investigate. 1220 1221 (Emacs was confused because a process filter entered 1222 'recursive-edit' while Emacs was reading input. I added support 1223 for this in the input system.) (patch-489) 1224 1225-- I smell something funny around pop_kboard's "deleted kboard" case. 1226 Determine what are the circumstances of this case, and fix any 1227 bug that comes to light. 1228 1229 (It happens simply because single_kboard's terminal is sometimes 1230 deleted while executing a command on it, for example the one that 1231 kills the terminal. There was no bug here, but I rewrote the whole 1232 single_kboard mess anyway.) (patch-489) 1233 1234-- Understand Emacs's low-level input system (it's black magic) :-) 1235 What exactly does interrupt_input do? I tried to disable it for 1236 raw secondary tty support, but it does not seem to do anything 1237 useful. (Update: Look again. X unconditionally enables this, maybe 1238 that's why raw terminal support is broken again. I really do need 1239 to understand input.) 1240 (Update: I am starting to understand the read_key_sequence->read-char 1241 ->kbd_buffer_get_event->read_avail_input->read_socket_hook path. Yay!) 1242 1243 (Update: OK, it all seems so easy now (NOT). Input could be done 1244 synchronously (with wait_reading_process_input), or asynchronously 1245 by SIGIO or polling (SIGALRM). C-g either sets the Vquit_flag, 1246 signals a 'quit condition, or throws to 'getcjmp' when Emacs was 1247 waiting for input when the C-g event arrived.) 1248 1249-- Replace wrong_kboard_jmpbuf with a special return value of 1250 read_char. It is absurd that we use setjmp/longjmp just to return 1251 to the immediate caller. 1252 1253 (Done in patch-500.) 1254 1255-- 'tool-bar-mode', 'scroll-bar-mode', 'menu-bar-mode' and 1256 'fringe-mode' are modes global to the entire Emacs session, not 1257 just a single frame or a single terminal. This means that their 1258 status sometimes differs from what's actually displayed on the 1259 screen. As a consequence, the Options | Show/Hide menu sometimes 1260 shows incorrect status, and you have to select an option twice for 1261 it to have any visible effect on the current frame. 1262 1263 Change Emacs so that the status of the items in the Options | 1264 Show/Hide menu correspond to the current frame. 1265 1266 (Done in patch-537.) 1267 1268-- The 'default-directory' variable should somehow be set to the 1269 cwd of the emacsclient process when the user runs emacsclient 1270 without file arguments. Perhaps it is OK to just override the 1271 directory of the *scratch* buffer. 1272 1273 (Done in patch-539.) 1274 1275-- The borders on tooltip frames on X are messed up. More 1276 specifically, the frame's internal border (internal-border-width 1277 frame parameter) is not filled with the correct background color. 1278 1279 It seems the border contents are drawn onto by the 1280 update_single_window call in 'x-show-tip'. After some debugging, I 1281 think the window's background color is not set up 1282 correctly---calling 'x_clear_area' fills the specified area with 1283 black, not light yellow. 1284 1285 (Done in patch-544. A background_pixel field was defined both in 1286 struct frame and struct x_output, and Emacs got confused between 1287 them.) 1288 1289 1290This file is part of GNU Emacs. 1291 1292GNU Emacs is free software: you can redistribute it and/or modify 1293it under the terms of the GNU General Public License as published by 1294the Free Software Foundation, either version 3 of the License, or 1295(at your option) any later version. 1296 1297GNU Emacs is distributed in the hope that it will be useful, 1298but WITHOUT ANY WARRANTY; without even the implied warranty of 1299MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1300GNU General Public License for more details. 1301 1302You should have received a copy of the GNU General Public License 1303along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. 1304