From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dan Nicolaescu Newsgroups: gmane.emacs.bugs Subject: bug#1058: 23.0.60; emacs --daemon should not return until socket is ready Date: Sun, 12 Oct 2008 19:03:40 -0700 (PDT) Message-ID: <200810130203.m9D23eul000572@mothra.ics.uci.edu> References: <1222782234_2281@mail.internode.on.net> <200810011651.m91GpAZQ010333@mothra.ics.uci.edu> <87k5csds03.fsf@elegiac.orebokech.com> <200810012332.m91NWJ4s014658@mothra.ics.uci.edu> <874p3vediy.fsf@elegiac.orebokech.com> <200810020814.m928Ed1C016380@mothra.ics.uci.edu> <200810021726.m92HQcTQ017644@mothra.ics.uci.edu> <200810022234.m92MYgYp018688@mothra.ics.uci.edu> Reply-To: Dan Nicolaescu , 1058@emacsbugs.donarmstrong.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1223865044 8942 80.91.229.12 (13 Oct 2008 02:30:44 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 13 Oct 2008 02:30:44 +0000 (UTC) Cc: trentbuck@gmail.com, 1058@emacsbugs.donarmstrong.com, Romain Francoise To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Oct 13 04:31:42 2008 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1KpDDe-0001Q9-8h for geb-bug-gnu-emacs@m.gmane.org; Mon, 13 Oct 2008 04:31:39 +0200 Original-Received: from localhost ([127.0.0.1]:35770 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KpDCY-0001VY-Sn for geb-bug-gnu-emacs@m.gmane.org; Sun, 12 Oct 2008 22:30:30 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KpDCB-0001EE-6g for bug-gnu-emacs@gnu.org; Sun, 12 Oct 2008 22:30:07 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KpDC9-0001C9-Mb for bug-gnu-emacs@gnu.org; Sun, 12 Oct 2008 22:30:06 -0400 Original-Received: from [199.232.76.173] (port=47346 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KpDC9-0001C2-Ek for bug-gnu-emacs@gnu.org; Sun, 12 Oct 2008 22:30:05 -0400 Original-Received: from rzlab.ucr.edu ([138.23.92.77]:51990) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KpDC8-0007t2-Of for bug-gnu-emacs@gnu.org; Sun, 12 Oct 2008 22:30:05 -0400 Original-Received: from rzlab.ucr.edu (rzlab.ucr.edu [127.0.0.1]) by rzlab.ucr.edu (8.13.8/8.13.8/Debian-3) with ESMTP id m9D2TwsK028605; Sun, 12 Oct 2008 19:29:59 -0700 Original-Received: (from debbugs@localhost) by rzlab.ucr.edu (8.13.8/8.13.8/Submit) id m9D2A5WY023960; Sun, 12 Oct 2008 19:10:05 -0700 X-Loop: don@donarmstrong.com Resent-From: Dan Nicolaescu Resent-To: bug-submit-list@donarmstrong.com Resent-CC: Emacs Bugs Resent-Date: Mon, 13 Oct 2008 02:10:05 +0000 Resent-Message-ID: Resent-Sender: don@donarmstrong.com X-Emacs-PR-Message: report 1058 X-Emacs-PR-Package: emacs X-Emacs-PR-Keywords: Original-Received: via spool by 1058-submit@emacsbugs.donarmstrong.com id=B1058.122386343521865 (code B ref 1058); Mon, 13 Oct 2008 02:10:05 +0000 Original-Received: (at 1058) by emacsbugs.donarmstrong.com; 13 Oct 2008 02:03:55 +0000 Original-Received: from barrelv2.ics.uci.edu (barrelv2.ics.uci.edu [128.195.1.114]) by rzlab.ucr.edu (8.13.8/8.13.8/Debian-3) with ESMTP id m9D23qUE021857 for <1058@emacsbugs.donarmstrong.com>; Sun, 12 Oct 2008 19:03:53 -0700 Original-Received: from mothra.ics.uci.edu (mothra.ics.uci.edu [128.195.6.93]) by barrelv2.ics.uci.edu (8.13.7+Sun/8.13.7) with ESMTP id m9D23fQV010787; Sun, 12 Oct 2008 19:03:41 -0700 (PDT) Original-Received: (from dann@localhost) by mothra.ics.uci.edu (8.13.8+Sun/8.13.6/Submit) id m9D23eul000572; Sun, 12 Oct 2008 19:03:40 -0700 (PDT) In-Reply-To: (Stefan Monnier's message of "Thu, 02 Oct 2008 21:12:02 -0400") Original-Lines: 113 X-ICS-MailScanner-Information: Please contact the ISP for more information X-ICS-MailScanner-ID: m9D23fQV010787 X-ICS-MailScanner: Found to be clean X-ICS-MailScanner-SpamCheck: not spam, SpamAssassin (score=0.437, required 5, autolearn=disabled, ALL_TRUSTED -1.44, FM_MULTI_ODD2 1.10, FM_MULTI_ODD3 0.70, TW_RG 0.08) X-ICS-MailScanner-From: dann@mothra.ics.uci.edu X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) Resent-Date: Sun, 12 Oct 2008 22:30:06 -0400 X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:21429 Archived-At: Here's a patch that adds support for --daemon=SERVER_NAME Using --daemon=SERVER_NAME for scripts is much nicer than: --daemon --eval '(setq server-name "SERVER_NAME")' So IMVHO something like this could go in now... Index: lisp/server.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/server.el,v retrieving revision 1.168 diff -u -3 -p -r1.168 server.el --- lisp/server.el 24 Sep 2008 20:12:02 -0000 1.168 +++ lisp/server.el 13 Oct 2008 00:15:28 -0000 @@ -446,7 +446,7 @@ Creates the directory if necessary and m (error "The directory %s is unsafe" dir)))) ;;;###autoload -(defun server-start (&optional leave-dead) +(defun server-start (&optional leave-dead server-arg) "Allow this Emacs process to be a server for client processes. This starts a server communications subprocess through which client \"editors\" can send your editing commands to this Emacs @@ -463,6 +463,8 @@ kill any existing server communications (when server-process ;; kill it dead! (ignore-errors (delete-process server-process))) + (when (stringp server-arg) + (setq server-name server-arg)) ;; Delete the socket files made by previous server invocations. (condition-case () (delete-file (expand-file-name server-name server-socket-dir)) Index: lisp/startup.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/startup.el,v retrieving revision 1.513 diff -u -3 -p -r1.513 startup.el --- lisp/startup.el 12 Oct 2008 16:59:01 -0000 1.513 +++ lisp/startup.el 13 Oct 2008 00:15:28 -0000 @@ -1212,8 +1212,8 @@ the `--debug-init' option to view a comp ;; This is done after loading the user's init file and after ;; processing all command line arguments to allow e.g. `server-name' ;; to be changed before the server starts. - (when (daemonp) - (server-start)) + (let ((dn (daemonp))) + (when dn (server-start nil dn))) ;; Run emacs-session-restore (session management) if started by ;; the session manager and we have a session manager connection. Index: src/emacs.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/emacs.c,v retrieving revision 1.448 diff -u -3 -p -r1.448 emacs.c --- src/emacs.c 6 Oct 2008 16:16:56 -0000 1.448 +++ src/emacs.c 13 Oct 2008 00:15:28 -0000 @@ -237,6 +237,8 @@ int noninteractive1; /* Nonzero means Emacs was started as a daemon. */ int is_daemon = 0; +/* Name for the server started by the daemon.*/ +static char *daemon_name; /* Save argv and argc. */ char **initial_argv; @@ -792,6 +794,7 @@ main (int argc, char **argv) #endif int no_loadup = 0; char *junk = 0; + char *dname_arg = 0; #if GC_MARK_STACK extern Lisp_Object *stack_base; @@ -1074,8 +1077,8 @@ main (int argc, char **argv) printf (USAGE4, bug_reporting_address ()); exit (0); } - - if (argmatch (argv, argc, "-daemon", "--daemon", 5, NULL, &skip_args)) + if (argmatch (argv, argc, "-daemon", "--daemon", 5, NULL, &skip_args) + || argmatch (argv, argc, "-daemon", "--daemon", 5, &dname_arg, &skip_args)) { #ifndef DOS_NT pid_t f = fork (); @@ -1088,6 +1091,8 @@ main (int argc, char **argv) exit (1); } + if (dname_arg) + daemon_name = xstrdup (dname_arg); nfd = open ("/dev/null", O_RDWR); dup2 (nfd, 0); dup2 (nfd, 1); @@ -2387,10 +2392,17 @@ decode_env_path (evarname, defalt) } DEFUN ("daemonp", Fdaemonp, Sdaemonp, 0, 0, 0, - doc: /* Return t if the current emacs process is a daemon. */) + doc: /* Return non-nil if the current emacs process is a daemon. +If the daemon was give a name argument, return that name. */) () { - return is_daemon ? Qt : Qnil; + if (is_daemon) + if (daemon_name) + return build_string (daemon_name); + else + return Qt; + else + return Qnil; } void