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