Mercurial > emacs
diff src/term.c @ 82995:039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
lib-src/emacsclient.c: Removed tty proxy kludge. Emacs should just
use the same terminal as emacsclient.
(ec_get_tty, ec_set_tty, master, pty_name, old_tty, tty, old_tty_valid)
(tty_erase_char, quit_char, flow_control, meta_key, _sobuf, init_tty)
(window_change, reset_tty, init_pty, copy_from_to)
(pty_conversation): Removed.
(window_change_signal): Just forward the signal to Emacs, don't do
anything else.
(init_signals): Don't set handlers for SIGHUP & SIGINT.
(strprefix): New function.
(main): Don't touch the terminal, simply tell its name to Emacs.
lisp/server.el (server-frames): Changed name and semantics to server-ttys.
(server-tty-live-p): New function.
(server-sentinel): Delete the whole tty, not just the frame.
(server-handle-delete-frame): Removed.
(server-handle-delete-tty): New function. Close the client connection if
the tty is deleted.
(server-start): Clean up server-ttys, not server-frames. Set up
delete-tty-after-functions.
(server-process-filter): Set up server-ttys, not server-frames.
Updated protocol for sending our pid to emacsclient.
(server-buffer-done): Don't delete the client process directly, delete
the tty instead, and rely on the delete-tty hook to close the
connection. Otherwise the terminal could be left in a bad state.
src/cm.c (cmputc): Don't abort on write errors.
src/indent.c: #include <stdio.h>, for termchar.h.
src/window.c: Ditto.
src/xfaces.c: Ditto.
src/sysdep.c (init_sigio, reset_sigio, request_sigio)[!SIGIO]
(unrequest_sigio)[!SIGIO]: If SIGIO is not supported, don't do
anything. (For Solaris.)
(init_sys_modes): Moved tty_set_terminal_modes call back to here,
disable window system check.
(reset_sys_modes): Reset the terminal even if X is running.
src/term.c (Vdelete_tty_after_functions): New variable.
(syms_of_term): Initialize it.
(Fdelete_tty): Updated docs.
(delete_tty): Run delete-tty-after-functions.
(term_init): Removed tty_set_terminal_modes call.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-35
| author | Karoly Lorentey <lorentey@elte.hu> |
|---|---|
| date | Sat, 03 Jan 2004 08:31:14 +0000 |
| parents | 5de4189e659d |
| children | 7900111db01c |
line wrap: on
line diff
--- a/src/term.c Fri Jan 02 13:03:12 2004 +0000 +++ b/src/term.c Sat Jan 03 08:31:14 2004 +0000 @@ -100,6 +100,9 @@ Lisp_Object Vring_bell_function; +/* Functions to call after a tty was deleted. */ +Lisp_Object Vdelete_tty_after_functions; + /* Terminal characteristics that higher levels want to look at. */ struct tty_display_info *tty_list; @@ -2751,8 +2754,6 @@ /* Init system terminal modes (RAW or CBREAK, etc.). */ init_sys_modes (tty); - tty_set_terminal_modes (tty); - return tty; #endif /* not WINDOWSNT */ } @@ -2772,7 +2773,11 @@ DEFUN ("delete-tty", Fdelete_tty, Sdelete_tty, 0, 1, 0, - doc: /* Delete all frames on the terminal named TTY, and close the device. */) + doc: /* Delete all frames on the terminal named TTY, and close the device. +If omitted, TTY defaults to the controlling terminal. + +This function runs `delete-tty-after-functions' after closing the +tty. The functions are run with one arg, the frame to be deleted. */) (tty) Lisp_Object tty; { @@ -2802,7 +2807,8 @@ delete_tty (struct tty_display_info *tty) { Lisp_Object tail, frame; - + char *tty_name; + if (deleting_tty) /* We get a recursive call when we delete the last frame on this tty. */ @@ -2838,8 +2844,7 @@ reset_sys_modes (tty); - if (tty->name) - xfree (tty->name); + tty_name = tty->name; if (tty->type) xfree (tty->type); @@ -2873,6 +2878,21 @@ bzero (tty, sizeof (struct tty_display_info)); xfree (tty); deleting_tty = 0; + + /* Run `delete-tty-after-functions'. */ + if (!NILP (Vrun_hooks)) + { + Lisp_Object args[2]; + args[0] = intern ("delete-tty-after-functions"); + if (tty_name) + { + args[1] = build_string (tty_name); + xfree (tty_name); + } + else + args[1] = Qnil; + Frun_hook_with_args (2, args); + } } @@ -2911,6 +2931,12 @@ The function should accept no arguments. */); Vring_bell_function = Qnil; + DEFVAR_LISP ("delete-tty-after-functions", &Vdelete_tty_after_functions, + doc: /* Functions to be run after deleting a tty. +The functions are run with one argument, the name of the tty to be deleted. +See `delete-tty'. */); + Vdelete_tty_after_functions = Qnil; + Qframe_tty_name = intern ("frame-tty-name"); staticpro (&Qframe_tty_name);
