Commit | Line | Data |
---|---|---|
3224dac1 | 1 | -*- coding: utf-8; mode: text; -*- |
28d440ab KL |
2 | GOAL |
3 | ---- | |
4 | ||
856dd475 KL |
5 | This branch implements support for opening multiple, different tty |
6 | devices and simultaneous X and tty frames from a single Emacs session. | |
28d440ab | 7 | |
7b00d185 | 8 | Some use cases: |
7b00d185 KL |
9 | Emacs is notoriously slow at startup, so most people use another |
10 | editor or emacsclient for quick editing jobs from the console. | |
11 | Unfortunately, emacsclient was very awkward to use, because it did not | |
12 | support opening a new Emacs frame on the current virtual console. | |
13 | Now, with multi-tty support, it can do that. (Emacsclient starts up | |
14 | faster than vi!) | |
15 | ||
16 | Some Gnus users (including me) run Gnus in an X frame in its own Emacs | |
17 | instance, which they typically leave running for weeks. It would be | |
18 | nice if they could connect to this instance from a remote ssh session | |
19 | and check their messages without opening a remote X frame or resorting | |
20 | to gnus-slave. | |
21 | ||
28d440ab KL |
22 | WHO IS DOING IT |
23 | --------------- | |
24 | ||
25 | I'm Károly Lőrentey. My address: lorentey@elte.hu. | |
26 | ||
422f68e0 KL |
27 | Comments, bug reports, suggestions and patches are welcome; send them |
28 | to multi-tty@lists.fnord.hu. | |
29 | ||
856dd475 KL |
30 | The following is a (sadly incomplete) list of people who have |
31 | contributed to the project by testing, submitting patches, bug | |
32 | reports, and suggestions. Thanks! | |
33 | ||
34 | ARISAWA Akihiro <ari at mbf dot ocn dot ne dot jp> | |
1a27213c | 35 | Vincent Bernat <bernat at luffy dot cx> |
856dd475 KL |
36 | Han Boetes <han at mijncomputer dot nl> |
37 | Robert J. Chassell <bob at rattlesnake dot com> | |
38 | Romain Francoise <romain at orebokech dot com> | |
39 | Ami Fischman <ami at fischman dot org> | |
40 | Friedrich Delgado Friedrichs <friedel at nomaden dot org> | |
41 | IRIE Tetsuya <irie at t dot email dot ne dot jp> | |
42 | Yoshiaki Kasahara <kasahara at nc dot kyushu-u dot ac dot jp> | |
43 | Jurej Kubelka <Juraj dot Kubelka at email dot cz> | |
44 | David Lichteblau <david at lichteblau dot com> | |
44d7460c | 45 | Xavier Mallard <zedek at gnu-rox dot org> |
856dd475 KL |
46 | Istvan Marko <mi-mtty at kismala dot com> |
47 | Ted Morse <morse at ciholas dot com> | |
48 | Dan Nicolaescu <dann at ics dot uci dot edu> | |
49 | Gergely Nagy <algernon at debian dot org> | |
50 | Mark Plaksin <happy at mcplaksin dot org> | |
51 | Francisco Borges <borges at let dot rug dot nl> | |
52 | Frank Ruell <stoerte at dreamwarrior dot net> | |
53 | Dan Waber <dwaber at logolalia dot com> | |
54 | and many others. | |
55 | ||
56 | Richard Stallman was kind enough to review an earlier version of my | |
57 | patches. | |
58 | ||
59 | ||
422f68e0 KL |
60 | MAILING LISTS |
61 | ------------- | |
62 | ||
63 | The multi-tty mailing list (discussion & bug reports): | |
64 | ||
65 | Address: multi-tty@lists.fnord.hu | |
66 | Signup: http://lists.fnord.hu/mailman/listinfo/multi-tty | |
67 | Archive: http://news.gmane.org/gmane.emacs.multi-tty/ | |
68 | ||
69 | Commit notifications (read-only): | |
70 | ||
71 | Address: multi-tty-commits@lists.fnord.hu | |
72 | Signup: http://lists.fnord.hu/mailman/listinfo/multi-tty-commits | |
73 | ||
74 | ||
75 | STATUS | |
76 | ------ | |
77 | ||
78 | The branch is now very stable and almost full-featured. All of the | |
79 | major problems have been fixed, only a few minor issues remain. (It | |
80 | still needs to be ported to Windows/Mac/DOS, though.) Both multiple | |
81 | tty device support and simultaneous X and tty frame support works | |
82 | fine. Emacsclient has been extended to support opening new tty and X | |
83 | frames. It has been changed open new Emacs frames by default. | |
84 | ||
85 | The multi-tty branch has been scheduled for inclusion in the next | |
779d7de9 | 86 | major release of Emacs (version 23). I expect the merge into the |
422f68e0 KL |
87 | development trunk to occur sometime during next year (2005), after the |
88 | merge of the Unicode branch. | |
89 | ||
90e06c2e KL |
90 | Tested on GNU/Linux, Solaris 8, FreeBSD and OpenBSD. Please let me |
91 | know if you succeed or fail to use it on other platforms---I'll have a | |
92 | few tricky test cases for you. | |
422f68e0 KL |
93 | |
94 | Known problems: | |
95 | ||
779d7de9 KL |
96 | * GTK support. If you compile your Emacs with the GTK |
97 | toolkit, some functionality of multi-tty will be lost. | |
98 | Current releases of GTK have limitations and bugs that | |
99 | prevent full-blown multi-display support in Emacs. Use the | |
100 | Lucid toolkit if you want to see a complete feature set. | |
101 | ||
856dd475 KL |
102 | * The single-kboard mode. |
103 | ||
104 | If your multi-tty Emacs session seems to be frozen, you | |
105 | probably have a recursive editing session or a pending | |
106 | minibuffer prompt (which is a kind of recursive editing) on | |
107 | another display. To unfreeze your session, switch to that | |
108 | display and complete the recursive edit, for example by | |
109 | pressing C-] (`abort-recursive-edit'). | |
110 | ||
111 | I am sorry to say that currently there is no way to break | |
112 | out of this "single-kboard mode" from a frozen display. If | |
113 | you are unable to switch to the display that locks the | |
114 | others (for example because it is on a remote computer), | |
115 | then you can use emacsclient to break out of all recursive | |
116 | editing sessions: | |
117 | ||
118 | emacsclient -e '(top-level)' | |
119 | ||
120 | Note that this (perhaps) unintuitive behaviour is by design. | |
121 | Single-kboard mode is required because of an intrinsic Emacs | |
122 | limitation that is very hard to eliminate. (This limitation | |
123 | is related to the single-threaded nature of Emacs.) | |
124 | ||
125 | I plan to implement better user notification and support for | |
126 | breaking out of single-kboard mode from locked displays. | |
127 | ||
128 | * Mac, Windows and DOS support is broken, doesn't even | |
129 | compile. Multiple display support will probably not provide | |
130 | new Emacs features on these systems, but the multi-tty | |
131 | branch changed a few low-level interfaces, and the | |
132 | system-dependent source files need to be adapted | |
133 | accordingly. The changes are mostly trivial, so almost | |
134 | anyone can help, if only by compiling the branch and | |
135 | reporting the compiler errors. (It is not worth to do this | |
136 | yet, though.) | |
137 | ||
422f68e0 | 138 | |
422f68e0 KL |
139 | HOW TO GET THE BRANCH |
140 | --------------------- | |
141 | ||
142 | The branch uses GNU Arch (http://www.gnuarch.org) for version control. | |
28d440ab | 143 | |
6548cf00 | 144 | Retrieving the latest version of the branch: |
4f0359de | 145 | |
44d7460c | 146 | tla register-archive -f http://lorentey.hu/arch/2004/ |
be0f4123 KL |
147 | tla get lorentey@elte.hu--2004/emacs--multi-tty <directory> |
148 | ||
149 | This incantation uses my private archive mirror that is hosted on a | |
150 | relatively low-bandwidth site; if you are outside Hungary, you will | |
779d7de9 KL |
151 | probably want to you use my secondary mirror: (Note that the -f option |
152 | will overwrite the archive location if you have previously registered | |
153 | the Hungarian one.) | |
154 | ||
155 | tla register-archive -f http://aszt.inf.elte.hu/~lorentey/mirror/arch/2004 | |
156 | tla get lorentey@elte.hu--2004/emacs--multi-tty <directory> | |
157 | ||
158 | http://aszt.inf.elte.hu/~lorentey/mirror/arch/2004 | |
159 | ||
160 | The Arch supermirror provides mirroring services for all public Arch | |
161 | repositories. We have a mirror there, too, if you prefer. | |
be0f4123 | 162 | |
779d7de9 | 163 | tla register-archive -f http://mirrors.sourcecontrol.net/lorentey%40elte.hu--2004 |
daf01701 | 164 | tla get lorentey@elte.hu--2004/emacs--multi-tty <directory> |
4f0359de | 165 | |
44d7460c KL |
166 | My GPG key id is 0FB27A3F; it is available from |
167 | hkp://wwwkeys.eu.pgp.net/, or from my homepage at | |
422f68e0 | 168 | http://lorentey.hu/rolam/gpg.html) |
7b00d185 | 169 | |
856dd475 KL |
170 | Don't worry if the above checkout takes a few minutes to complete; |
171 | once you have a source tree, updating it to the latest revision will | |
172 | be _much_ faster. Use the following command for the update: | |
6ad9aaa9 | 173 | |
856dd475 | 174 | tla replay |
6ad9aaa9 | 175 | |
856dd475 KL |
176 | You can find more information about Arch on http://wiki.gnuarch.org/. |
177 | It's a wonderful source control system, I highly recommend it. | |
6ad9aaa9 | 178 | |
422f68e0 | 179 | If you don't have tla, the branch has a homepage from which you can |
7b00d185 | 180 | download conventional patches against Emacs CVS HEAD: |
4f0359de | 181 | |
be0f4123 | 182 | http://lorentey.hu/project/emacs.html |
28d440ab | 183 | |
779d7de9 KL |
184 | DEBIAN PACKAGES |
185 | --------------- | |
186 | ||
187 | If you run Debian, or a distribution based on Debian, you are welcome | |
188 | to use our binary packages; put these lines in your /etc/apt/sources.list: | |
189 | ||
190 | # Multi-tty Emacs | |
191 | deb http://aszt.inf.elte.hu/~lorentey/mirror/apt ./ | |
192 | deb-src http://aszt.inf.elte.hu/~lorentey/mirror/apt ./ | |
193 | ||
194 | Note that these packages are intended solely to provide an easy way to | |
195 | test the new multi-tty features. They are not to be taken as Emacs | |
196 | releases, and it's a mistake to expect robust operation or any kind of | |
197 | timely support for them. Do not install them, unless you'd like to | |
198 | have your editor crash on you. | |
199 | ||
28d440ab | 200 | |
90e06c2e KL |
201 | COMPILATION |
202 | ----------- | |
0c72d684 | 203 | |
d03a8fe4 | 204 | The multi-tty branch is compiled the same way as Emacs itself: |
bc279d67 | 205 | |
90e06c2e KL |
206 | make maintainer-clean # (If you have compiled Emacs before) |
207 | ||
d03a8fe4 | 208 | ./configure <your favourite options> |
bc279d67 | 209 | make bootstrap |
d03a8fe4 KL |
210 | make install |
211 | ||
90e06c2e KL |
212 | If you have strange compilation errors, they may be caused by old |
213 | *.elc files that are left over from an earlier bootstrap. The `make | |
214 | maintainer-clean' target deletes them, so it is a good idea to run | |
215 | that before reporting a bug. (Emacs requires a clean recompilation | |
216 | after certain kinds of source code changes.) | |
d03a8fe4 | 217 | |
90e06c2e KL |
218 | TESTING |
219 | ------- | |
220 | ||
221 | To test the multi-tty branch, start up the Emacs server with the | |
d03a8fe4 KL |
222 | following commands: |
223 | ||
224 | emacs | |
7b00d185 | 225 | M-x server-start |
bc279d67 | 226 | |
7b00d185 KL |
227 | and then (from a shell prompt on another terminal) start emacsclient |
228 | with | |
d03a8fe4 KL |
229 | emacsclient -t /optional/file/names... (for a tty frame) |
230 | emacsclient /optional/file/names... (for an X frame) | |
28d440ab | 231 | |
d03a8fe4 | 232 | (Make sure both emacs and emacsclient are multi-tty versions.) |
04c3243c | 233 | You'll hopefully have two fully working, independent frames on |
7b00d185 | 234 | separate terminals. The new frame is closed automatically when you |
2a0c7b06 KL |
235 | finish editing the specified files (C-x #), but delete-frame (C-x 5 0) |
236 | also works. Of course, you can create frames on more than two tty | |
237 | devices. | |
52c2ee2a | 238 | |
7b00d185 KL |
239 | Creating new frames on the same tty with C-x 5 2 works, and they |
240 | behave the same way as in previous Emacs versions. If you exit emacs, | |
241 | all terminals should be restored to their previous states. | |
daf01701 | 242 | |
856dd475 KL |
243 | This is work in progress, and probably full of bugs. It is a good |
244 | idea to run emacs from gdb, so that you'll have a live instance to | |
245 | debug if something goes wrong. Please send me your bug reports on our | |
246 | mailing list: multi-tty@lists.fnord.hu | |
04c3243c | 247 | |
422f68e0 KL |
248 | TIPS & TRICKS |
249 | ------------- | |
250 | ||
bacb6689 KL |
251 | I think the best way to use the new Emacs is to have it running inside |
252 | a disconnected GNU screen session, and always use emacsclient for | |
422f68e0 KL |
253 | normal work. One advantage of this is that not a single keystroke of |
254 | your work will be lost if the display device that you are using | |
255 | crashes, or the network connection times out, or whatever. (I had an | |
256 | extremely unstable X server for some time while I was developing these | |
257 | patches, and running Emacs this way has saved me a number of M-x | |
258 | recover-session invocations.) | |
259 | ||
260 | I use the following two bash functions to handle my Emacs sessions: | |
261 | ||
262 | ,----[ ~/.bash_profile | |
ea4c170a | 263 | | # Usage: preload_emacs <name> [<waitp>] |
422f68e0 KL |
264 | | # |
265 | | # Preloads the Emacs instance called NAME in a detached screen | |
266 | | # session. Does nothing if the instance is already running. If WAITP | |
267 | | # is non-empty, the function waits until the server starts up and | |
268 | | # creates its socket; otherwise it returns immediately. | |
ea4c170a | 269 | | function preload_emacs { |
422f68e0 KL |
270 | | local name="$1" |
271 | | local waitp="$2" | |
272 | | local screendir="/var/run/screen/S-$USER" | |
273 | | local serverdir="/tmp/emacs$UID" | |
274 | | local emacs=emacs # Or wherever you installed your multi-tty Emacs | |
275 | | | |
276 | | if [ -z "$name" ]; then | |
ea4c170a | 277 | | echo "Usage: preload_emacs <name> [<waitp>]" >&2 |
422f68e0 KL |
278 | | return 1 |
279 | | fi | |
280 | | | |
281 | | if [ ! -e "$screendir"/*."$name" ]; then | |
282 | | if [ -e "$serverdir/$name" ]; then | |
ccc84c24 | 283 | | # Delete leftover socket (for the wait option) |
422f68e0 KL |
284 | | rm "$serverdir/$name" |
285 | | fi | |
286 | | screen -dmS "$name" "$emacs" -nw --eval "(setq server-name \"$name\")" -f server-start | |
287 | | fi | |
288 | | if [ ! -z "$waitp" ]; then | |
289 | | while [ ! -e "$serverdir/$name" ]; do sleep 0.1; done | |
290 | | fi | |
291 | | return 0 | |
292 | | } | |
293 | | | |
ea4c170a | 294 | | # Usage: connect_emacs <name> <args>... |
422f68e0 KL |
295 | | # |
296 | | # Connects to the Emacs instance called NAME. Starts up the instance | |
297 | | # if it is not already running. The rest of the arguments are passed | |
298 | | # to emacsclient. | |
ea4c170a | 299 | | function connect_emacs { |
422f68e0 KL |
300 | | local name="$1" |
301 | | shift | |
302 | | | |
303 | | if [ -z "$name" ]; then | |
ea4c170a | 304 | | echo "Usage: connect_emacs <name> <args>..." >&2 |
422f68e0 | 305 | | fi |
ea4c170a | 306 | | preload_emacs "$name" wait |
422f68e0 KL |
307 | | emacsclient -s "$name" "$@" |
308 | | } | |
309 | | | |
ea4c170a | 310 | | export -f preload_emacs connect_emacs |
422f68e0 KL |
311 | | |
312 | | # Preload editor and gnus sessions for speedy initial connects. | |
ea4c170a KL |
313 | | preload_emacs editor |
314 | | preload_emacs gnus | |
422f68e0 KL |
315 | `---- |
316 | ||
317 | ,----[ ~/.bashrc | |
ea4c170a KL |
318 | | alias gnus="connect_emacs gnus" |
319 | | alias edit="connect_emacs editor" | |
320 | | alias et="connect_emacs editor -t" | |
422f68e0 KL |
321 | | alias e=edit |
322 | `---- | |
323 | ||
28d440ab KL |
324 | |
325 | NEWS | |
326 | ---- | |
327 | ||
2cd1371d | 328 | For the NEWS file: (Needs work) |
28d440ab | 329 | |
2246281f | 330 | ** Support for multiple terminal devices has been added. |
6548cf00 | 331 | |
2246281f KL |
332 | *** You can specify a terminal device (`tty' parameter) and a terminal |
333 | type (`tty-type' parameter) to `make-terminal-frame'. | |
6548cf00 | 334 | |
2246281f KL |
335 | *** You can test for the presence of multiple terminal support by |
336 | testing for the `multi-tty' feature. | |
28d440ab | 337 | |
2246281f | 338 | *** Emacsclient has been extended to support opening a new terminal |
aaaf7fe1 KL |
339 | frame. Its behaviour has been changed to open a new Emacs frame by |
340 | default. Use the -c option to get the old behavior of opening | |
341 | files in the currently selected Emacs frame. | |
e5299d8d | 342 | |
2246281f KL |
343 | *** A make-frame-on-tty function has been added to make it easier to |
344 | create frames on new terminals. | |
345 | ||
346 | *** New functions: frame-tty-name, frame-tty-type for accessing | |
347 | terminal parameters, and delete-tty for closing the terminal | |
348 | device. | |
349 | ||
350 | *** talk.el has been extended for multiple tty support. | |
351 | ||
352 | ||
353 | ** Support for simultaneous graphical and terminal frames has been | |
354 | added. | |
355 | ||
356 | *** The function `make-frame-on-display' now works during a terminal | |
357 | session, and `make-frame-on-tty' works during a graphical session. | |
358 | ||
359 | *** The `window-system' variable has been made frame-local. | |
360 | ||
361 | *** The new `initial-window-system' variable contains the | |
362 | `window-system' value for the first frame. | |
819b8f00 | 363 | |
28d440ab KL |
364 | CHANGELOG |
365 | --------- | |
366 | ||
367 | See arch logs. | |
368 | ||
90e06c2e KL |
369 | * * * |
370 | ||
371 | (The rest of this file consists of my development notes and as such it | |
372 | is probably not very interesting for anyone else.) | |
373 | ||
7b00d185 KL |
374 | THINGS TO DO |
375 | ------------ | |
4edd8a5c | 376 | |
856dd475 KL |
377 | ** The single-keyboard mode of MULTI_KBOARD is extremely confusing |
378 | sometimes; Emacs does not respond to stimuli from other keyboards. | |
379 | At least a beep or a message would be important, if the single-mode | |
380 | is still required to prevent interference. (Reported by Dan | |
381 | Nicolaescu.) | |
382 | ||
383 | Update: selecting a region with the mouse enables single_kboard | |
384 | under X. This is very confusing. | |
385 | ||
386 | Update: After discussions with Richard, this will be resolved by | |
387 | having locked displays warn the user to wait, and introducing a | |
388 | complex protocol to remotely bail out of single-kboard mode by | |
389 | pressing C-g. | |
390 | ||
391 | Update: Warning the user is not trivial to implement, as Emacs has | |
392 | only one echo area. Ideally the warning should not be displayed on | |
393 | the display that is locking the others. Perhaps the high | |
394 | probability of user confusion caused by single_kboard mode deserves | |
395 | a special case in the display code. Alternatively, it might be | |
396 | good enough to signal single_kboard mode by changing the modelines | |
397 | or some other frame-local display element on the locked out displays. | |
398 | ||
399 | ** normal-erase-is-backspace-mode in simple.el needs to be updated for | |
400 | multi-tty (rep. by Dan Waber). | |
ec160444 | 401 | |
b6660415 KL |
402 | ** Hunt down display-related functions in frame.el and extend them all |
403 | to accept display ids. | |
404 | ||
856dd475 KL |
405 | ** rif->flush_display_optional (NULL) calls should be replaced by a |
406 | new global function. | |
407 | ||
6ea444cf KL |
408 | ** Have a look at fatal_error_hook. |
409 | ||
97b977db KL |
410 | ** Have a look at set_frame_matrix_frame. |
411 | ||
7d1a6b33 KL |
412 | ** Check if we got term-setup-hook right. |
413 | ||
9d3d44ba KL |
414 | ** I think tip_frame should be display-local. |
415 | ||
416 | ** Check display reference count handling in x_create_tip_frame. | |
417 | ||
54021676 KL |
418 | ** make-frame does not correctly handle extra parameters in its |
419 | argument: | |
420 | ||
421 | (frame-parameter (make-frame (list (cons 'foobar 42))) 'foobar) | |
422 | => nil | |
423 | ||
424 | (This is likely an error in the CVS trunk.) | |
425 | ||
d3c554a0 KL |
426 | ** Fix set-input-mode for multi-tty. It's a truly horrible interface; |
427 | what if we'd blow it up into several separate functions (with a | |
428 | compatibility definition)? | |
429 | ||
2666355c KL |
430 | ** The terminal customization files in term/*.el tend to change global |
431 | parameters, which may confuse Emacs with multiple displays. Change | |
432 | them to tweak only frame-local settings, if possible. | |
433 | ||
01d81f75 KL |
434 | ** Dan Nicolaescu suggests that -nw should be added as an alias for -t |
435 | in emacsclient. Good idea. (Alas, implementing this is not | |
436 | trivial, getopt_long does not seem to support two-letter ``short'' | |
d3c554a0 | 437 | options. Patches are welcome.) :-) |
01d81f75 KL |
438 | |
439 | ** Mark Plaksin suggests that emacsclient should accept the same | |
440 | X-related command-line arguments as Emacs. Most of the X-related | |
441 | argument-handling is done in Lisp, so this should be quite easy to | |
442 | implement. | |
d448e982 | 443 | |
cd5355f9 KL |
444 | ** Gergely Nagy suggests that C-x # should only kill the current |
445 | frame, not any other emacsclient frame that may have the same file | |
446 | opened for editing. I think I agree with him. | |
447 | ||
0b0d3e0b KL |
448 | ** Very strange bug: visible-bell does not work on secondary |
449 | terminals in xterm and konsole. The screen does flicker a bit, | |
450 | but it's so quick it isn't noticable. | |
451 | ||
452 | ** Clean up the frame-local variable system. I think it's ugly and | |
453 | error-prone. But maybe I just haven't yet fully understood it. | |
454 | ||
428a555e | 455 | ** Move baud_rate to struct display. |
7b00d185 | 456 | |
7b00d185 KL |
457 | ** Implement support for starting an interactive Emacs session without |
458 | an initial frame. (The user would connect to it and open frames | |
f70dd009 | 459 | later, with emacsclient.) |
7b00d185 | 460 | |
2cd1371d KL |
461 | ** Fix Mac support (I can't do this entirely myself). Note that the |
462 | current state of Mac-specific source files in the multi-tty tree | |
463 | are not useful; before starting work on Mac support, revert to | |
464 | pristine, pre-multi-tty versions. | |
7b00d185 | 465 | |
2cd1371d KL |
466 | ** Fix W32 support (I can't do this entirely myself). Note that the |
467 | current state of W32-specific source files in the multi-tty tree | |
468 | are not useful; before starting work on W32 support, revert to | |
469 | pristine, pre-multi-tty versions. | |
7b00d185 | 470 | |
2cd1371d KL |
471 | ** Fix DOS support (I can't do this entirely myself). Note that the |
472 | current state of DOS-specific source files in the multi-tty tree | |
473 | are not useful; before starting work on DOS support, revert to | |
474 | pristine, pre-multi-tty versions. | |
7b00d185 KL |
475 | |
476 | ** Do a grep on XXX and ?? for more issues. | |
477 | ||
d3c554a0 KL |
478 | ** Understand Emacs's low-level input system (it's black magic) :-) |
479 | What exactly does interrupt_input do? I tried to disable it for | |
480 | raw secondary tty support, but it does not seem to do anything | |
481 | useful. (Update: Look again. X unconditionally enables this, maybe | |
482 | that's why raw terminal support is broken again. I really do need | |
483 | to understand input.) | |
7b00d185 | 484 | |
2246281f KL |
485 | ** Maybe standard-display-table should be display-local. |
486 | ||
6548cf00 KL |
487 | DIARY OF CHANGES |
488 | ---------------- | |
489 | ||
490 | (ex-TODO items with explanations.) | |
28d440ab | 491 | |
114a8b8c | 492 | -- Introduce a new struct for terminal devices. |
28d440ab | 493 | |
daf01701 | 494 | (Done, see struct tty_output. The list of members is not yet |
28d440ab KL |
495 | complete.) |
496 | ||
28d440ab KL |
497 | -- Change the bootstrap procedure to initialize tty_list. |
498 | ||
499 | (Done, but needs review.) | |
500 | ||
28d440ab KL |
501 | -- Change make-terminal-frame to support specifying another tty. |
502 | ||
503 | (Done, new frame parameters: `tty' and `tty-type'.) | |
504 | ||
9628b887 KL |
505 | -- Implement support for reading from multiple terminals. |
506 | ||
507 | (Done, read_avail_input tries to read from each terminal, until one | |
28d7d09f | 508 | succeeds. MULTI_KBOARD is not used. Secondary terminals don't send |
6548cf00 | 509 | SIGIO!) |
9628b887 | 510 | |
819b8f00 KL |
511 | (Update: They do, now.) |
512 | ||
daf01701 KL |
513 | (Update2: After enabling X, they don't.) |
514 | ||
9628b887 | 515 | -- other-frame should cycle through the frames on the `current' |
114a8b8c | 516 | terminal only. |
9628b887 | 517 | |
6548cf00 | 518 | (Done, by trivially modifiying next_frame and prev_frame.) |
9628b887 KL |
519 | |
520 | -- Support different terminal sizes. | |
114a8b8c | 521 | |
9628b887 KL |
522 | (Done, no problem.) |
523 | ||
524 | -- Make sure terminal resizes are handled gracefully. (Could be | |
525 | problematic.) | |
526 | ||
6548cf00 KL |
527 | (Done. We don't get automatic SIGWINCH for additional ttys, |
528 | though.) | |
9628b887 KL |
529 | |
530 | -- Extend emacsclient to automatically open a new tty when it connects | |
531 | to Emacs. | |
114a8b8c | 532 | |
9628b887 KL |
533 | (Done. It's an ugly hack, needs more work.) |
534 | ||
52c2ee2a KL |
535 | -- Redisplay must refresh the topmost frame on *all* terminals, not |
536 | just the initial terminal. | |
114a8b8c | 537 | |
52c2ee2a | 538 | (Done, but introduced an ugly redisplay problems. Ugh.) |
9628b887 | 539 | |
6548cf00 KL |
540 | -- Fix redisplay problems. |
541 | ||
52c2ee2a KL |
542 | (Done; it turned out that the entire Wcm structure must be moved |
543 | inside tty_output. Why didn't I catch this earlier?) | |
6548cf00 KL |
544 | |
545 | -- Provide a way for emacsclient to tell Emacs that the tty has been | |
546 | resized. | |
547 | ||
548 | (Done, simply forward the SIGWINCH signal.) | |
549 | ||
550 | -- Each keypress should automatically select the frame corresponding | |
551 | to the terminal that it was coming from. This means that Emacs | |
552 | must know from which terminal the last keyboard event came from. | |
6548cf00 | 553 | |
52c2ee2a KL |
554 | (Done, it was quite simple, the input event system already |
555 | supported multiple frames.) | |
6548cf00 KL |
556 | |
557 | -- Fix SIGIO issue with secondary terminals. | |
558 | ||
559 | (Done, emacsclient signals Emacs after writing to the proxy pseudo | |
52c2ee2a KL |
560 | terminal. Note that this means that multi-tty does not work with |
561 | raw ttys!) | |
28d440ab | 562 | |
0a125897 KL |
563 | (Update: This is bullshit. There is a read_input_waiting function, |
564 | extend that somehow.) | |
565 | ||
819b8f00 KL |
566 | (Update of update: The first update was not right either, extending |
567 | read_input_waiting was not necessary. Secondary ttys do seem to | |
568 | send signals on input.) | |
569 | ||
daf01701 KL |
570 | (Update^3: Not any more.) |
571 | ||
fca177d4 KL |
572 | -- Make make-terminal-frame look up the `tty' and `tty-type' frame |
573 | parameters from the currently selected terminal before the global | |
574 | default. | |
575 | ||
576 | (Done.) | |
577 | ||
578 | -- Put all cached terminal escape sequences into struct tty_output. | |
579 | Currently, they are still stored in global variables, so we don't | |
580 | really support multiple terminal types. | |
581 | ||
52c2ee2a | 582 | (Done. It was not fun.) |
fca177d4 KL |
583 | |
584 | -- Implement sane error handling after initialization. (Currently | |
6548cf00 KL |
585 | emacs exits if you specify a bad terminal type.) The helpful error |
586 | messages must still be provided when Emacs starts. | |
587 | ||
fca177d4 KL |
588 | (Done.) |
589 | ||
590 | -- Implement terminal deletion, i.e., deleting local frames, closing | |
591 | the tty device and restoring its previous state without exiting | |
592 | Emacs. | |
9628b887 | 593 | |
fca177d4 KL |
594 | (Done, but at the moment only called when an error happens during |
595 | initialization. There is a memory corruption error around this | |
daf01701 | 596 | somewhere.) (Update: now it is fully enabled.) |
fca177d4 | 597 | |
8303ba32 KL |
598 | -- Implement automatic deletion of terminals when the last frame on |
599 | that terminal is closed. | |
600 | ||
601 | (Done.) | |
602 | ||
0a125897 KL |
603 | -- Restore tty screen after closing the terminal. |
604 | ||
605 | (Done, we do the same as Emacs 21.2 for all terminals.) | |
606 | ||
607 | -- 'TERM=dumb src/emacs' does not restore the terminal state. | |
114a8b8c | 608 | |
0a125897 | 609 | (Done.) |
fca177d4 | 610 | |
b2af72d2 KL |
611 | -- C-g should work on secondary terminals. |
612 | ||
613 | (Done, but the binding is not configurable.) | |
614 | ||
615 | -- Deal with SIGHUP in Emacs and in emacsclient. (After this, the | |
616 | server-frames may be removed from server.el.) | |
617 | ||
618 | (Done, nothing to do. It seems that Emacs does not receive SIGHUP | |
daf01701 | 619 | from secondary ttys, which is actually a good thing.) (Update: I |
7b00d185 | 620 | think it would be a bad idea to remove server-frames.) |
b2af72d2 | 621 | |
daf01701 | 622 | -- Change emacsclient/server.el to support the -t argument better, |
b2af72d2 KL |
623 | i.e. automatically close the socket when the frame is closed. |
624 | ||
625 | (Seems to be working OK.) | |
626 | ||
16c290d8 | 627 | -- Fix mysterious memory corruption error with tty deletion. To |
fca177d4 KL |
628 | trigger it, try the following shell command: |
629 | ||
630 | while true; do TERM=no-such-terminal-definition emacsclient -h; done | |
631 | ||
632 | Emacs usually dumps core after a few dozen iterations. (The bug | |
3224dac1 | 633 | seems to be related to the xfreeing or bzeroing of |
9d9f1812 KL |
634 | tty_output.Wcm. Maybe there are outside references to struct Wcm? |
635 | Why were these vars collected into a struct before multi-tty | |
636 | support?) | |
fca177d4 | 637 | |
16c290d8 KL |
638 | (Done. Whew. It turned out that the problem had nothing to do |
639 | with hypothetical external references to Wcm, or any other | |
640 | tty_output component; it was simply that delete_tty closed the | |
641 | filehandles of secondary ttys twice, resulting in fclose doubly | |
3224dac1 | 642 | freeing memory. Utterly trivial matter. I love the C's memory |
16c290d8 KL |
643 | management, it puts hair on your chest.) |
644 | ||
819b8f00 | 645 | -- Support raw secondary terminals. (Note that SIGIO works only on |
3224dac1 | 646 | the controlling terminal.) Hint: extend read_input_waiting for |
819b8f00 | 647 | multiple ttys and hopefully this will be fixed. |
fca177d4 | 648 | |
819b8f00 KL |
649 | (Done, it seems to have been working already for some time. It |
650 | seems F_SETOWN does work, after all. Not sure what made it fail | |
651 | earlier, but it seems to be fixed (there were several changes | |
652 | around request_sigio, maybe one of them did it). | |
3224dac1 | 653 | read_input_waiting is only used in sys_select, don't change |
daf01701 | 654 | it.) (Update: After adding X support, it's broken again.) |
d3c554a0 | 655 | (Update^2: No it isn't.) :-) |
c1c63edb | 656 | |
819b8f00 | 657 | -- Find out why does Emacs abort when it wants to close its |
0a125897 | 658 | controlling tty. Hint: chan_process[] array. Hey, maybe |
16c290d8 KL |
659 | noninterrupt-IO would work, too? Update: no, there is no process |
660 | for stdin/out. | |
c33d2d42 | 661 | |
819b8f00 KL |
662 | (Done. Added add/delete_keyboard_wait_descriptor to |
663 | term_init/delete_tty. The hint was right, in a way.) | |
6548cf00 | 664 | |
819b8f00 | 665 | -- Issue with SIGIO: it needs to be disabled during redisplay. See if |
3224dac1 | 666 | fcntl kernel behaviour could be emulated by emacsclient. |
0a125897 | 667 | |
819b8f00 | 668 | (Done. Simply disabled the SIGIO emulation hack in emacsclient.) |
d3c554a0 | 669 | (Update: it was added back.) (Update^2: and removed again.) |
22de1e79 | 670 | |
819b8f00 | 671 | -- server.el: There are issues with saving files in buffers of closed |
16c290d8 KL |
672 | clients. Try editing a file with emacsclient -f, and (without |
673 | saving it) do a delete-frame. The frame is closed without | |
674 | question, and a surprising confirmation prompt appears in another | |
675 | frame. | |
676 | ||
819b8f00 KL |
677 | (Done. delete-frame now asks for confirmation if it still has |
678 | pending buffers, and modified buffers don't seem to be deleted.) | |
679 | ||
680 | -- emacsclient.el, server.el: Handle eval or file open errors when | |
daf01701 | 681 | doing -t. |
16c290d8 | 682 | |
819b8f00 | 683 | (Done.) |
22de1e79 | 684 | |
819b8f00 KL |
685 | -- Make parts of struct tty_output accessible from Lisp. The device |
686 | name and the type is sufficient. | |
22de1e79 | 687 | |
819b8f00 KL |
688 | (Done, see frame-tty-name and frame-tty-type.) |
689 | ||
690 | -- Export delete_tty to the Lisp environment, for emacsclient. | |
22de1e79 | 691 | |
819b8f00 KL |
692 | (Done, see delete-tty.) |
693 | ||
daf01701 KL |
694 | -- Get rid of the accessor macros in termchar.h, or define macros for |
695 | all members. | |
696 | ||
697 | (Done.) | |
698 | ||
699 | -- Move device-specific parameters (like costs) commonly used by | |
700 | device backends to a common, device-dependent structure. | |
701 | ||
702 | (Done. See struct display_method in termhooks.h.) | |
703 | ||
704 | -- Fix X support. | |
705 | ||
706 | (Done. Well, it seems to be working.) | |
707 | ||
708 | -- Allow simultaneous X and tty frames. (Handling input could be | |
709 | tricky. Or maybe not.) | |
710 | ||
711 | (Done. Allowed, that is. It is currently extremely unstable, to | |
712 | the point of being unusable. The rif variable causes constant | |
713 | core dumps. Handling input is indeed tricky.) | |
819b8f00 | 714 | |
7b00d185 | 715 | -- Rewrite multi-tty input in terms of MULTI_KBOARD. |
28d440ab | 716 | |
7b00d185 KL |
717 | (Done. In fact, there was no need to rewrite anything, I just |
718 | added a kboard member to tty_display_info, and initialized the | |
719 | frame's kboard from there.) | |
819b8f00 | 720 | |
fa971ac3 KL |
721 | -- Fix rif issue with X-tty combo sessions. IMHO the best thing to do |
722 | is to get rid of that global variable (and use the value value in | |
723 | display_method, which is guaranteed to be correct). | |
724 | ||
725 | (Done, did exactly that. Core dumps during combo sessions became | |
726 | much rarer. In fact, I have not yet met a single one.) | |
727 | ||
17086732 KL |
728 | -- Add multi-tty support to talk.el. |
729 | ||
730 | (Done.) | |
731 | ||
428a555e KL |
732 | -- Clean up the source of emacsclient. It is a mess. |
733 | ||
734 | (Done, eliminated stupid proxy-pty kludge.) | |
735 | ||
736 | -- Fix faces on tty frames during X-tty combo sessions. There is an | |
737 | init_frame_faces call in init_sys_modes, see if there is a problem | |
738 | with it. | |
739 | ||
740 | (Done, there was a stupid mistake in | |
741 | Ftty_supports_face_attributes_p. Colors are broken, though.) | |
742 | ||
743 | -- C-x 5 2, C-x 5 o, C-x 5 0 on an emacsclient frame unexpectedly | |
744 | exits emacsclient. This is a result of trying to be clever with | |
745 | delete-frame-functions. | |
746 | ||
747 | (Fixed, added delete-tty-after-functions, and changed server.el to | |
748 | use it.) | |
749 | ||
750 | -- Something with (maybe) multi-keyboard support broke function keys | |
751 | and arrows on ttys during X+tty combo sessions. Debug this. | |
752 | ||
753 | (I can't reproduce it, maybe the terminal type was wrong.) | |
754 | ||
755 | -- Fix input from raw ttys (again). | |
756 | ||
757 | (Now it seems to work all right.) | |
758 | ||
759 | -- During an X-tty combo session, a (message "Hello") from a tty frame | |
760 | goes to the X frame. Fix this. | |
761 | ||
762 | (Done. There was a safeguard against writing to the initial | |
763 | terminal frame during bootstrap which prevented echo_area_display | |
764 | from working correctly on a tty frame during a combo session.) | |
765 | ||
114a8b8c | 766 | -- If there are no frames on its controlling terminal, Emacs should |
d3c554a0 | 767 | exit if the user presses C-c there. |
114a8b8c KL |
768 | |
769 | (Done, as far as possible. See the SIGTERM comment in | |
770 | interrupt_signal on why this seems to be impossible to solve this | |
771 | in general.) | |
772 | ||
773 | -- During an X session, Emacs seems to read from stdin. Also, Emacs | |
774 | fails to start without a controlling tty. | |
775 | ||
776 | (Fixed by replacing the troublesome termcap display with a dummy | |
777 | bootstrap display during bootstrap. | |
778 | ||
779 | -- Do tty output through struct display, like graphical display | |
780 | backends. | |
781 | ||
782 | (Done.) | |
783 | ||
784 | -- Define an output_initial value for output_method for the initial | |
785 | frame that is dumped with Emacs. Checking for this frame (e.g. in | |
786 | cmd_error_internal) is ugly. | |
787 | ||
788 | (Done, broking interactive temacs.) | |
789 | ||
790 | -- The command `emacsclient -t -e '(delete-frame)'' fails to exit. | |
791 | ||
792 | (Fixed.) | |
793 | ||
4ca927b4 KL |
794 | -- frame-creation-function should always create a frame that is on the |
795 | same display as the selected frame. Maybe frame-creation-function | |
796 | should simply be removed and make-frame changed to do the right | |
797 | thing. | |
798 | ||
799 | (Done, with a nice hack. frame-creation-function is now frame-local.) | |
800 | ||
801 | -- Fix C-g on raw ttys. | |
802 | ||
803 | (Done. I disabled the interrupt/quit keys on all secondary | |
804 | terminals, so Emacs sees C-g as normal input. This looks like an | |
805 | overkill, because emacsclient has extra code to pass SIGINT to | |
806 | Emacs, so C-g should remain the interrupt/quit key on emacsclient | |
807 | frames. See the next entry why implementing this distinction would | |
808 | be a bad idea.) | |
809 | ||
810 | -- Make sure C-g goes to the right frame with ttys. This is hard, as | |
811 | SIGINT doesn't have a tty parameter. :-( | |
812 | ||
813 | (Done, the previous change fixes this as a pleasant side effect.) | |
814 | ||
c0707982 KL |
815 | -- I have seen a case when Emacs with multiple ttys fell into a loop |
816 | eating 100% of CPU time. Strace showed this loop: | |
817 | ||
818 | getpid() = 30284 | |
819 | kill(30284, SIGIO) = 0 | |
820 | --- SIGIO (I/O possible) @ 0 (0) --- | |
821 | ioctl(6, FIONREAD, [0]) = -1 EIO (Input/output error) | |
822 | ioctl(5, FIONREAD, [0]) = -1 EIO (Input/output error) | |
823 | ioctl(0, FIONREAD, [0]) = 0 | |
824 | sigreturn() = ? (mask now []) | |
825 | gettimeofday({1072842297, 747760}, NULL) = 0 | |
826 | gettimeofday({1072842297, 747806}, NULL) = 0 | |
827 | select(9, [0 3 5 6], NULL, NULL, {0, 0}) = 2 (in [5 6], left {0, 0}) | |
828 | select(9, [0 3 5 6], NULL, NULL, {0, 0}) = 2 (in [5 6], left {0, 0}) | |
829 | gettimeofday({1072842297, 748245}, NULL) = 0 | |
830 | ||
831 | I have seen something similar with a single X frame, but have not | |
832 | been able to reproduce it for debugging. | |
833 | ||
834 | Update: This may have been caused by checking for nread != 0 | |
835 | instead of nread > 0 after calling read_socket_hook in | |
836 | read_avail_input. | |
837 | ||
838 | (Fixed. This was caused by unconditionally including stdin in | |
839 | input_wait_mask in init_process. The select call in | |
840 | wait_reading_process_input always returned immediately, indicating | |
841 | that there is pending input from stdin, which nobody read. | |
842 | ||
843 | Note that the above strace output seems to be an unrelated but | |
844 | similar bug. I think that is now fixed.) | |
4ca927b4 | 845 | |
2246281f KL |
846 | -- Exiting Emacs while there are emacsclient frames doesn't restore the |
847 | ttys to their default states. | |
848 | ||
849 | (This seems to be fixed by some previous change.) | |
850 | ||
851 | -- Allow opening an X session after -nw. | |
852 | ||
853 | (Done.) | |
854 | ||
d448e982 KL |
855 | -- Fix color handling during tty+X combo sessions. (It seems that tty |
856 | sessions automatically convert the face colors to terminal colors | |
857 | when the face is loaded. This conversion must happen instead on | |
858 | the fly in write_glyphs, which might be problematic, as color | |
859 | approximation is currently done in lisp (term/tty-colors.el).) | |
860 | (Update: hm, colors seem to work fine if I start emacs with -nw and | |
861 | then create an X frame. Maybe it's just a small buglet somewhere.) | |
862 | ||
863 | (Seems to be fixed. The problem was in startup.el, it did not | |
864 | initialize tty colors when the initial window system was | |
865 | graphical.) | |
2246281f | 866 | |
2441679b KL |
867 | -- emacs -nw --eval '(y-or-n-p "Foobar")' segfaults. (Reported by |
868 | Romain Francoise) | |
869 | ||
870 | (Fixed, there was a keyboard initialization problem.) | |
871 | ||
3bbdbec9 KL |
872 | -- Fix interactive use of temacs. There are face-related SEGVs, most |
873 | likely because of changes in realize_default_face, realize_face. | |
874 | ||
875 | (Fixed.) | |
876 | ||
bacb6689 KL |
877 | -- Don't exit Emacs when the last X connection fails during a |
878 | multi-display session. | |
879 | ||
880 | (Fixed.) | |
881 | ||
0c72d684 KL |
882 | -- Dan Nicolaescu noticed that starting emacsclient on the same |
883 | terminal device that is the controlling tty of the Emacs process | |
884 | gives unexpected results. | |
885 | ||
886 | (Fixed.) | |
887 | ||
4edd8a5c KL |
888 | -- Istvan Marko reported that Emacs hang on ttys if it was started |
889 | from a shell script. | |
890 | ||
891 | (Fixed. There was a bug in the multi-tty version of | |
892 | narrow_foreground_group. tcsetpgrp blocks if it is called from a | |
893 | process that is not in the same process group as the tty.) | |
894 | ||
2fc0cf2a KL |
895 | -- emacsclient -t from an Emacs term buffer does not work, complains |
896 | about face problems. This can even lock up Emacs (if the recursive | |
897 | frame sets single_kboard). Update: the face problems are caused by | |
898 | bugs in term.el, not in multi-tty. The lockup is caused by | |
d3c554a0 | 899 | single_kboard mode, and is not easily resolvable. The best thing to |
2fc0cf2a KL |
900 | do is to simply refuse to create a tty frame of type `eterm'. |
901 | ||
902 | (Fixed, changed emacsclient to check for TERM=eterm. The face | |
903 | complaints seem to be caused by bugs in term.el; they are not | |
904 | related to multi-tty.) | |
905 | ||
0b0d3e0b KL |
906 | -- Find out the best way to support suspending Emacs with multiple |
907 | ttys. My guess: disable it on the controlling tty, but from other | |
908 | ttys pass it on to emacsclient somehow. (It is (I hope) trivial to | |
909 | extend emacsclient to handle suspend/resume. A `kill -STOP' almost | |
910 | works right now.) | |
911 | ||
912 | (Done. I needed to play with signal handling and the server | |
913 | protocol a bit to make emacsclient behave as a normal UNIX program | |
914 | wrt foreground/background process groups.) | |
915 | ||
eb1f46c9 KL |
916 | -- There is a flicker during the startup of `emacs -nw'; it's as if |
917 | the terminal is initialized, reset and then initialialized again. | |
918 | Debug this. (Hint: narrow_foreground_group is called twice during | |
919 | startup.) | |
920 | ||
921 | (This is gone.) | |
922 | ||
026ad6ba KL |
923 | -- Robert Chassell has found serious copy-paste bugs with the |
924 | multi-tty branch. There seem to be redisplay bugs while copying | |
925 | from X to a terminal frame. Copying accented characters do not | |
926 | work for me. | |
927 | ||
928 | (Patch-124 should fix this, by changing the interprogram-*-function | |
929 | variables to be frame-local, as suggested by Mark Plaksin | |
930 | (thanks!). I think that the redisplay bugs are in fact not bugs, | |
931 | but delays caused by single_kboard --> perhaps MULTI_KBOARD should | |
932 | be removed.) | |
933 | ||
2cd1371d KL |
934 | -- frame-creation-function was removed, which might be a bad idea. |
935 | Think up a compatible solution. | |
936 | ||
937 | (It was an internal interface that may be changed when necessary.) | |
938 | ||
939 | -- Change Lisp code not to (getenv "TERM"); use the `tty-type' frame | |
940 | parameter or the frame-tty-type function instead. (M-x tags-search | |
941 | "TERM" helps with this.) Update: Actually, all getenv invocations | |
942 | should be checked for multi-tty compatibility, and an interface | |
943 | must be implemented to get the remote client's environment. | |
944 | ||
945 | (Done. Only getenv calls in lisp/term/*.el were changed; other | |
946 | calls should be mostly left as they are.) | |
947 | ||
948 | -- Add an elaborate mechanism for display-local variables. (There are | |
949 | already a few of these; search for `terminal-local' in the Elisp | |
950 | manual.) | |
951 | ||
952 | (Not needed. Display-local variables could be emulated by | |
953 | frame-local variables.) | |
026ad6ba | 954 | |
d4d89d37 KL |
955 | -- Emacs assumes that all terminal frames have the same locale |
956 | settings as Emacs itself. This may lead to bogus results in a | |
957 | multi-locale setup. (E.g., while logging in from a remote client | |
958 | with a different locale.) | |
959 | (Update after new bugreport by Friedrich Delgado Friedrichs: | |
960 | (at least) the structs terminal_coding and keyboard_coding in | |
961 | coding.c must be moved to struct display, and the Lisp interface | |
962 | [set-]keyboard-coding-system must be adapted for the change.) | |
963 | ||
964 | (Fixed. Emacs now uses the locale settings as seen by the | |
965 | emacsclient process for server tty frames.) | |
0b0d3e0b | 966 | |
b6660415 KL |
967 | |
968 | -- Make `struct display' accessible to Lisp programs. Accessor functions: | |
969 | ||
970 | (displayp OBJECT): Returns t if OBJECT is a display. | |
971 | => Implemented as display-live-p. | |
972 | ||
973 | (display-list): Returns list of currently active displays. | |
974 | => Implemented. | |
975 | ||
976 | (selected-display): Returns the display object of the selected frame. | |
977 | => Not strictly necessary, but implemented anyway. | |
978 | ||
979 | (frame-display FRAME): Returns the display object of FRAME. | |
980 | => Implemented. | |
981 | ||
982 | (display-frames DISPLAY): Returns a list of frames on DISPLAY. | |
983 | => Already implemented, see frames-on-display-list. | |
984 | ||
985 | (display-type DISPLAY): Returns the type of DISPLAY, as a | |
986 | symbol. (See `framep'.) | |
987 | => Implemented as display-live-p. | |
988 | ||
989 | (display-device DISPLAY): Returns the name of the device that | |
990 | DISPLAY uses, as a string. (E.g: "/dev/pts/16", or | |
991 | ":0.0") | |
992 | => Implemented as display-name. | |
993 | ||
994 | etc. | |
995 | ||
996 | See next issue why this is necessary. | |
997 | ||
998 | (Update: The consensus on emacs-devel seems to be to do this via | |
999 | integer identifiers. That's fine by me.) | |
1000 | ||
1001 | (Done.) | |
1002 | ||
1003 | -- The following needs to be supported: | |
1004 | ||
1005 | $ emacsclient -t | |
1006 | C-z | |
1007 | $ emacsclient -t | |
1008 | (This fails now.) | |
1009 | ||
1010 | The cleanest way to solve this is to allow multiple displays on the | |
1011 | same terminal device; each new emacsclient process should create | |
1012 | its own display. As displays are currently identified by their | |
1013 | device names, this is not possible until struct display becomes | |
1014 | accessible as a Lisp-level object. | |
1015 | ||
1016 | (Done.) | |
1017 | ||
856dd475 KL |
1018 | -- Miles Bader suggests that C-x C-c on an emacsclient frame should |
1019 | only close the frame, not exit the entire Emacs session. Update: | |
1020 | see above for a function that does this. Maybe this should be the | |
1021 | new default? | |
1022 | ||
1023 | (Done. This is the new default. No complaints so far.) | |
1024 | ||
1025 | ||
28d440ab | 1026 | ;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d |