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: Mon, 01 Sep 2008 07:02:21 -0700 [thread overview]
Message-ID: <200809011402.m81E2LSf020327@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 got a lot of private emails from people very happy to use this
feature.
And some people actually want to distribute the patch. So here's an
updated version including documentation.
Index: doc/emacs/cmdargs.texi
===================================================================
RCS file: /cvsroot/emacs/emacs/doc/emacs/cmdargs.texi,v
retrieving revision 1.3
diff -u -3 -p -r1.3 cmdargs.texi
--- doc/emacs/cmdargs.texi 22 Jan 2008 23:53:34 -0000 1.3
+++ doc/emacs/cmdargs.texi 1 Sep 2008 13:56:17 -0000
@@ -277,6 +277,15 @@ option and @samp{-Q} are the only option
Start emacs with minimum customizations. This is like using @samp{-q}
and @samp{--no-site-file}, but also disables the startup screen.
+@item -daemon
+@opindex -daemon
+@itemx --daemon
+@opindex --daemon
+Start emacs in background as a daemon (i.e. it will disconnect from the
+terminal), do not open any frames and start the server. Clients can
+connect and create graphical or terminal frames using
+@code{emacsclient}.
+
@item --no-splash
@opindex --no-splash
@vindex inhibit-splash-screen
Index: etc/NEWS
===================================================================
RCS file: /cvsroot/emacs/emacs/etc/NEWS,v
retrieving revision 1.1843
diff -u -3 -p -r1.1843 NEWS
--- etc/NEWS 31 Aug 2008 02:13:38 -0000 1.1843
+++ etc/NEWS 1 Sep 2008 13:56:17 -0000
@@ -130,6 +130,11 @@ Now, the default behavior is to open a n
Use the -c option to get the old behavior of opening files in the
currently selected Emacs frame.
+*** Emacs can now start in background, as a daemon when using the
+--daemon command line argument. It disconnects from the terminal and
+starts the server. Clients can connect and create graphical or
+terminal frames using emacsclient.
+
*** The new command close-display-connection closes a connection to a
remote display.
Index: lisp/startup.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/startup.el,v
retrieving revision 1.503
diff -u -3 -p -r1.503 startup.el
--- lisp/startup.el 23 Aug 2008 16:59:19 -0000 1.503
+++ lisp/startup.el 1 Sep 2008 13:56:17 -0000
@@ -881,9 +881,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.443
diff -u -3 -p -r1.443 emacs.c
--- src/emacs.c 23 Aug 2008 16:45:13 -0000 1.443
+++ src/emacs.c 1 Sep 2008 13:56:18 -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 +1071,34 @@ main (int argc, char **argv)
exit (0);
}
+#ifndef DOS_NT
+ if (argmatch (argv, argc, "-daemon", "--daemon", 5, NULL, &skip_args))
+ {
+ pid_t f = fork();
+ int nfd;
+ if (f > 0)
+ exit(0);
+ if (f < 0)
+ {
+ fprintf (stderr, "Cannot fork!\n");
+ exit(1);
+ }
+
+ nfd = open("/dev/null", O_RDWR);
+ dup2(nfd, 0);
+ dup2(nfd, 1);
+ dup2(nfd, 2);
+ close (nfd);
+ is_daemon = 1;
+#ifdef HAVE_SETSID
+ setsid();
+#endif
+ }
+#else /* DOS_NT */
+ fprintf (stderr, "This platform does not support the -daemon flag.\n");
+ exit (1);
+#endif /* DOS_NT */
+
if (! noninteractive)
{
#ifdef BSD_PGRPS
@@ -1719,6 +1750,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 },
@@ -2350,6 +2382,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 ()
{
@@ -2368,6 +2407,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.
next prev parent reply other threads:[~2008-09-01 14:02 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
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 [this message]
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200809011402.m81E2LSf020327@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 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.