unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Dan Nicolaescu <dann@ics.uci.edu>
To: rms@gnu.org
Cc: emacs-devel@gnu.org
Subject: Re: start emacs without creating frames and connect with emacsclient later
Date: Thu, 21 Aug 2008 10:20:28 -0700	[thread overview]
Message-ID: <200808211720.m7LHKSne001960@sallyv1.ics.uci.edu> (raw)
In-Reply-To: <E1KTVEn-0003Zq-SQ@fencepost.gnu.org> (Richard M. Stallman's message of "Thu, 14 Aug 2008 01:19:05 -0400")

"Richard M. Stallman" <rms@gnu.org> writes:

  >     Should something like this go in?  We do have a feature freeze, but this
  >     is quite simple, and it completes the multi-tty functionality, which is
  >     one of the major features of 23.1.
  > 
  > I think it should go in
  > provided you write the text for etc/NEWS AND all the relevant manuals.

I'll update the all the docs whenever it gets checked in. 

Here's a new version of the patch, now it has code to detach from the
terminal, so it is a real daemon (how scary, emacs is haunted by daemons
now).

Index: lisp/startup.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/startup.el,v
retrieving revision 1.502
diff -u -3 -p -r1.502 startup.el
--- lisp/startup.el	7 Aug 2008 03:10:08 -0000	1.502
+++ lisp/startup.el	21 Aug 2008 16:55:54 -0000
@@ -877,9 +877,11 @@ opening the first frame (e.g. open a con
 
   (run-hooks 'before-init-hook)
 
-  ;; Under X Window, this creates the X frame and deletes the terminal frame.
-  (when (fboundp 'frame-initialize)
-    (frame-initialize))
+  (if (daemonp)
+      (server-start)
+    ;; Under X Window, this creates the X frame and deletes the terminal frame.
+    (when (and (fboundp 'frame-initialize))
+      (frame-initialize)))
 
   ;; Turn off blinking cursor if so specified in X resources.  This is here
   ;; only because all other settings of no-blinking-cursor are here.
Index: src/emacs.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/emacs.c,v
retrieving revision 1.442
diff -u -3 -p -r1.442 emacs.c
--- src/emacs.c	5 Aug 2008 17:33:05 -0000	1.442
+++ src/emacs.c	21 Aug 2008 16:55:54 -0000
@@ -232,6 +232,9 @@ int noninteractive;
 
 int noninteractive1;
 
+/* Nonzero means Emacs was started as a daemon.  */
+int is_daemon = 0;
+
 /* Save argv and argc.  */
 char **initial_argv;
 int initial_argc;
@@ -1068,6 +1070,25 @@ main (int argc, char **argv)
       exit (0);
     }
 
+  if (argmatch (argv, argc, "-daemon", "--daemon", 5, NULL, &skip_args))
+    {
+      pid_t f = fork();
+      if (f > 0)
+	exit(0);
+      if (f < 0)
+	{
+	  fprintf (stderr, "Cannot fork!\n");
+	  exit(1);
+	}
+      close(0);
+      close(1);
+      close(2);
+      is_daemon = 1;
+#ifdef HAVE_SETSID
+      setsid();
+#endif
+    }
+
   if (! noninteractive)
     {
 #ifdef BSD_PGRPS
@@ -1715,6 +1736,7 @@ struct standard_args standard_args[] =
   { "-nw", "--no-windows", 110, 0 },
   { "-batch", "--batch", 100, 0 },
   { "-script", "--script", 100, 1 },
+  { "-daemon", "--daemon", 99, 0 },
   { "-help", "--help", 90, 0 },
   { "-no-unibyte", "--no-unibyte", 83, 0 },
   { "-multibyte", "--multibyte", 82, 0 },
@@ -2346,6 +2368,13 @@ decode_env_path (evarname, defalt)
   return Fnreverse (lpath);
 }
 
+DEFUN ("daemonp", Fdaemonp, Sdaemonp, 0, 0, 0,
+       doc: /* Make the current emacs process a daemon.*/)
+  (void)
+{
+  return is_daemon ? Qt : Qnil;
+}
+
 void
 syms_of_emacs ()
 {
@@ -2364,6 +2393,7 @@ syms_of_emacs ()
 
   defsubr (&Sinvocation_name);
   defsubr (&Sinvocation_directory);
+  defsubr (&Sdaemonp);
 
   DEFVAR_LISP ("command-line-args", &Vcommand_line_args,
 	       doc: /* Args passed by shell to Emacs, as a list of strings.




  parent reply	other threads:[~2008-08-21 17:20 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-13 16:10 start emacs without creating frames and connect with emacsclient later Dan Nicolaescu
2008-08-13 16:40 ` Johannes Weiner
2008-08-13 20:49 ` Stefan Monnier
2008-08-14  5:19 ` Richard M. Stallman
2008-08-14 17:21   ` Stefan Monnier
2008-08-15 12:44     ` Richard M. Stallman
2008-08-15 15:25       ` Dan Nicolaescu
2008-08-21 17:20   ` Dan Nicolaescu [this message]
2008-08-21 22:55     ` David De La Harpe Golden
2008-08-21 23:55       ` Dan Nicolaescu
2008-08-22  5:59         ` tomas
2008-08-22  7:24       ` Paul R
2008-08-22 11:58     ` David Hansen
2008-09-01 14:03       ` Dan Nicolaescu
2008-09-01 14:02   ` Dan Nicolaescu
2008-09-01 18:29     ` Stefan Monnier
2008-09-01 23:11       ` Dan Nicolaescu
2008-09-02 19:53         ` Stefan Monnier
2008-09-03  6:43           ` Dan Nicolaescu
2008-09-03  6:50             ` martin rudalics
2008-09-03 11:53               ` Dan Nicolaescu
2008-09-03 12:38                 ` martin rudalics
2008-09-03 20:14                   ` Dan Nicolaescu
     [not found]             ` <jwv7i9tyzk5.fsf-monnier+emacs@gnu.org>
     [not found]               ` <200809211007.m8LA7TLQ014367@mothra.ics.uci.edu>
     [not found]                 ` <87k5d5u359.fsf@cyd.mit.edu>
     [not found]                   ` <jwvabe14o4w.fsf-monnier+emacs@gnu.org>
     [not found]                     ` <200809211826.m8LIQBbq016320@mothra.ics.uci.edu>
     [not found]                       ` <jwvskrt2tbz.fsf-monnier+emacs@gnu.org>
2008-09-21 23:36                         ` Dan Nicolaescu
2008-08-15 15:36 ` Phil Jackson

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200808211720.m7LHKSne001960@sallyv1.ics.uci.edu \
    --to=dann@ics.uci.edu \
    --cc=emacs-devel@gnu.org \
    --cc=rms@gnu.org \
    /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 public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).