From 9a864fa27d1bdc85c3542d34e6a2fc02fe03c718 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 15 Apr 2012 16:49:24 +0800 Subject: [PATCH] Move "emacsclient -t -n" handling from emacsclient.c to server.el. Fix its buggy logic for the Windows case (regression from 23.4). * lib-src/emacsclient.c (decode_options): Move -t -n corner case handling into server.el. * lisp/server.el (server-process-filter): Handle corner case where both tty and nowait options are present. Fixes: debbugs:11102 --- lib-src/ChangeLog | 5 +++++ lib-src/emacsclient.c | 33 ++++++++++++--------------------- lisp/ChangeLog | 5 +++++ lisp/server.el | 7 +++++++ 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index dd10026447f..e58b291ec89 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-15 Chong Yidong + + * emacsclient.c (decode_options): Move -t -n corner case handling + into server.el (Bug#11102). + 2012-04-12 Juanma Barranquero * emacsclient.c (decode_options) [WINDOWSNT]: diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 05fd0f3515e..48b4384d487 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -638,32 +638,23 @@ decode_options (int argc, char **argv) if (display && strlen (display) == 0) display = NULL; -#ifdef WINDOWSNT - /* Emacs on Windows does not support GUI and console frames in the same - instance. So, it makes sense to treat the -t and -c options as - equivalent, and open a new frame regardless of whether the running - instance is GUI or console. Ideally, we would only set tty = 1 when - the instance is running in a console, but alas we don't know that. - The simplest workaround is to always ask for a tty frame, and let - server.el check whether it makes sense. */ - if (tty || !current_frame) - { - display = (const char *) ttyname (0); /* Arg is ignored. */ - current_frame = 0; - tty = 1; - } -#endif - /* If no display is available, new frames are tty frames. */ if (!current_frame && !display) tty = 1; - /* --no-wait implies --current-frame on ttys when there are file - arguments or expressions given. */ - if (nowait && tty && argc - optind > 0) - current_frame = 1; - #ifdef WINDOWSNT + /* Emacs on Windows does not support graphical and text terminal + frames in the same instance. So, treat the -t and -c options as + equivalent, and open a new frame on the server's terminal. + Ideally, we would only set tty = 1 when the serve is running in a + console, but alas we don't know that. As a workaround, always + ask for a tty frame, and let server.el figure it out. */ + if (!current_frame) + { + display = NULL; + tty = 1; + } + if (alternate_editor && alternate_editor[0] == '\0') { message (TRUE, "--alternate-editor argument or ALTERNATE_EDITOR variable cannot be\n\ diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8c9f5b9f035..db559581ec2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-15 Chong Yidong + + * server.el (server-process-filter): Handle corner case where both + tty and nowait options are present (Bug#11102). + 2012-04-15 Glenn Morris * simple.el (process-file-side-effects): Doc fix. diff --git a/lisp/server.el b/lisp/server.el index 404bebc4747..ced07714dcf 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -1133,6 +1133,13 @@ The following commands are accepted by the client: ;; Unknown command. (arg (error "Unknown command: %s" arg)))) + ;; If both -no-wait and -tty are given with file or sexp + ;; arguments, use an existing frame. + (and nowait + (not (eq tty-name 'window-system)) + (or files commands) + (setq use-current-frame t)) + (setq frame (cond ((and use-current-frame -- 2.11.4.GIT