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