From: Dan Nicolaescu <dann@ics.uci.edu>
To: Stefan Monnier <monnier@IRO.UMontreal.CA>
Cc: 1298@emacsbugs.donarmstrong.com
Subject: bug#1298: allow 'emacsclient -a "emacs --daemon && emacsclient -c"'
Date: Tue, 9 Dec 2008 10:58:32 -0800 (PST) [thread overview]
Message-ID: <200812091858.mB9IwW8K022220@mothra.ics.uci.edu> (raw)
In-Reply-To: <jwvej0iz6el.fsf-monnier+emacsbugreports@gnu.org> (Stefan Monnier's message of "Mon, 08 Dec 2008 16:48:25 -0500")
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
> >> No need to worry about that: I've already explicitly rejected a tcp-port
> >> option for server.el in the past, so I'll be happy to give other such
> >> rejections in the future.
>
> > Hmm, you said the reverse here:
> > http://article.gmane.org/gmane.emacs.devel/103350
>
> Indeed. Consistency is the hgolm, isn't it?
hgolm?
Updated patch that uses -a "" or --alternate-editor= or
ALTERNATE_EDITOR="":
Index: emacsclient.c
===================================================================
RCS file: /cvsroot/emacs/emacs/lib-src/emacsclient.c,v
retrieving revision 1.142
diff -u -3 -p -u -p -r1.142 emacsclient.c
--- emacsclient.c 3 Dec 2008 04:33:44 -0000 1.142
+++ emacsclient.c 9 Dec 2008 18:53:51 -0000
@@ -1294,7 +1294,7 @@ To start the server in Emacs, type \"M-x
#endif /* ! NO_SOCKETS_IN_FILE_SYSTEM */
HSOCKET
-set_socket ()
+set_socket (int no_exit_if_error)
{
HSOCKET s;
@@ -1305,7 +1305,7 @@ set_socket ()
if (socket_name)
{
s = set_local_socket ();
- if ((s != INVALID_SOCKET) || alternate_editor)
+ if ((s != INVALID_SOCKET) || no_exit_if_error)
return s;
message (TRUE, "%s: error accessing socket \"%s\"\n",
progname, socket_name);
@@ -1320,7 +1320,7 @@ set_socket ()
if (server_file)
{
s = set_tcp_socket ();
- if ((s != INVALID_SOCKET) || alternate_editor)
+ if ((s != INVALID_SOCKET) || no_exit_if_error)
return s;
message (TRUE, "%s: error accessing server file \"%s\"\n",
@@ -1338,7 +1338,7 @@ set_socket ()
/* Implicit server file. */
server_file = "server";
s = set_tcp_socket ();
- if ((s != INVALID_SOCKET) || alternate_editor)
+ if ((s != INVALID_SOCKET) || no_exit_if_error)
return s;
/* No implicit or explicit socket, and no alternate editor. */
@@ -1416,6 +1416,7 @@ main (argc, argv)
int i, rl, needlf = 0;
char *cwd, *str;
char string[BUFSIZ+1];
+ int null_socket_name, null_server_file, start_daemon_if_needed;
main_argv = argv;
progname = argv[0];
@@ -1431,9 +1432,68 @@ main (argc, argv)
exit (EXIT_FAILURE);
}
- if ((emacs_socket = set_socket ()) == INVALID_SOCKET)
- fail ();
-
+ start_daemon_if_needed = (alternate_editor
+ && (alternate_editor[0] == '\0'));
+ if (start_daemon_if_needed)
+ {
+ /* set_socket changes the values for socket_name and
+ server_file, we need to reset them, if they were NULL before
+ for the second call to set_socket. */
+ null_socket_name = (socket_name == NULL);
+ null_server_file = (server_file == NULL);
+ }
+
+ if ((emacs_socket = set_socket (alternate_editor
+ || start_daemon_if_needed)) == INVALID_SOCKET)
+ if (start_daemon_if_needed)
+ {
+ pid_t dpid;
+ int status;
+ pid_t p;
+
+ /* Reset socket_name and server_file if they were NULL
+ before the set_socket call. */
+ if (null_socket_name)
+ socket_name = NULL;
+ if (null_server_file)
+ server_file = NULL;
+
+ dpid = fork ();
+
+ if (dpid > 0)
+ {
+ p = waitpid (dpid, &status, WUNTRACED | WCONTINUED);
+
+ /* Try connecting again, the daemon should have started by
+ now. */
+ message (TRUE, "daemon should have started, trying to connect again\n", dpid);
+ if ((emacs_socket = set_socket (1)) == INVALID_SOCKET)
+ message (TRUE, "Cannot connect even after starting the daemon\n");
+ }
+ else if (dpid < 0)
+ {
+ fprintf (stderr, "Cannot fork!\n");
+ exit (1);
+ }
+ else
+ {
+ char *d_argv[] = {"emacs", "--daemon", 0 };
+ if (!null_socket_name)
+ {
+ /* Pass --daemon=socket_name as argument. */
+ char *deq = "--daemon=";
+ char *daemon_arg = alloca (strlen (deq)
+ + strlen (socket_name) + 1);
+ strcpy (daemon_arg, deq);
+ strcat (daemon_arg, socket_name);
+ d_argv[1] = daemon_arg;
+ }
+ execvp ("emacs", d_argv);
+ message (TRUE, "%s: error starting emacs daemon\n", progname);
+ }
+ }
+ else
+ fail ();
cwd = get_current_dir_name ();
if (cwd == 0)
next prev parent reply other threads:[~2008-12-09 18:58 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200812112123.mBBLNGpI001493@mothra.ics.uci.edu>
2008-11-02 18:18 ` bug#1298: allow 'emacsclient -a "emacs --daemon && emacsclient -c"' Dan Nicolaescu
2008-11-18 8:22 ` Dan Nicolaescu
2008-11-18 16:36 ` Stefan Monnier
2008-11-18 18:17 ` Dan Nicolaescu
2008-11-18 21:34 ` Stefan Monnier
2008-11-18 22:19 ` Dan Nicolaescu
2008-11-18 23:01 ` Stefan Monnier
2008-11-18 23:27 ` Dan Nicolaescu
2008-11-19 2:21 ` Stefan Monnier
2008-12-08 7:54 ` Dan Nicolaescu
2008-12-08 16:44 ` Stefan Monnier
2008-12-08 17:09 ` Dan Nicolaescu
2008-12-08 20:07 ` Stefan Monnier
2008-12-08 20:20 ` Dan Nicolaescu
2008-12-08 21:48 ` Stefan Monnier
2008-12-09 18:58 ` Dan Nicolaescu [this message]
2008-12-09 19:30 ` Juanma Barranquero
2008-12-09 20:07 ` Stefan Monnier
2008-12-10 7:58 ` Dan Nicolaescu
2008-12-10 9:49 ` Juanma Barranquero
2008-12-10 15:03 ` Dan Nicolaescu
2008-12-10 15:10 ` Juanma Barranquero
2008-12-10 15:29 ` Dan Nicolaescu
2008-12-10 15:32 ` Juanma Barranquero
2008-12-10 15:43 ` Dan Nicolaescu
2008-12-10 15:55 ` Juanma Barranquero
2008-12-11 16:37 ` Stefan Monnier
2008-12-11 17:08 ` Dan Nicolaescu
2008-12-11 19:05 ` Juanma Barranquero
2008-12-11 19:06 ` Stefan Monnier
2008-12-11 19:08 ` Juanma Barranquero
2008-12-11 19:28 ` Dan Nicolaescu
2008-12-11 19:58 ` Juanma Barranquero
2008-12-11 20:39 ` Dan Nicolaescu
2008-12-11 20:48 ` Juanma Barranquero
2008-12-11 20:58 ` Stefan Monnier
2008-11-18 23:01 ` Andreas Schwab
2008-11-18 19:43 ` Eli Zaretskii
2008-12-11 21:25 ` bug#1298: marked as done (allow 'emacsclient -a "emacs --daemon && emacsclient -c"') Emacs bug Tracking System
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200812091858.mB9IwW8K022220@mothra.ics.uci.edu \
--to=dann@ics.uci.edu \
--cc=1298@emacsbugs.donarmstrong.com \
--cc=monnier@IRO.UMontreal.CA \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.