diff --git a/README.multi-tty b/README.multi-tty index dc5211cc2b1..68cae7a2060 100644 --- a/README.multi-tty +++ b/README.multi-tty @@ -246,13 +246,6 @@ THINGS TO DO why raw terminal support is broken again. I really do need to understand input.) -** emacsclient -t from an Emacs term buffer does not work, complains - about face problems. This can even lock up Emacs (if the recursive - frame sets single_kboard). Update: the face problems are caused by - bugs in term.el, not in multi-tty. The lockup is caused by - single_kboard mode, and is not easily solvable. The best thing to - do is to simply refuse to create a tty frame of type `eterm'. - ** Maybe standard-display-table should be display-local. DIARY OF CHANGES @@ -663,4 +656,15 @@ DIARY OF CHANGES narrow_foreground_group. tcsetpgrp blocks if it is called from a process that is not in the same process group as the tty.) +-- emacsclient -t from an Emacs term buffer does not work, complains + about face problems. This can even lock up Emacs (if the recursive + frame sets single_kboard). Update: the face problems are caused by + bugs in term.el, not in multi-tty. The lockup is caused by + single_kboard mode, and is not easily solvable. The best thing to + do is to simply refuse to create a tty frame of type `eterm'. + + (Fixed, changed emacsclient to check for TERM=eterm. The face + complaints seem to be caused by bugs in term.el; they are not + related to multi-tty.) + ;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index f41315b1248..c1c8ee8f160 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -588,15 +588,35 @@ To start the server in Emacs, type \"M-x server-start\".\n", if (tty) { char *tty_name = ttyname (fileno (stdin)); + char *type = getenv ("TERM"); + if (! tty_name) - fail (); + { + fprintf (stderr, "%s: could not get terminal name\n", progname); + fail (); + } + + if (! type) + { + fprintf (stderr, "%s: please set the TERM variable to your terminal type\n", + progname); + fail (); + } + + if (! strcmp (type, "eterm")) + { + /* This causes nasty, MULTI_KBOARD-related input lockouts. */ + fprintf (stderr, "%s: opening a frame in an Emacs term buffer" + " is not supported\n", progname); + fail (); + } init_signals (); fprintf (out, "-tty "); quote_file_name (tty_name, out); fprintf (out, " "); - quote_file_name (getenv("TERM"), out); + quote_file_name (type, out); fprintf (out, " "); }