[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: start emacs without creating frames and connect with emacsclient lat
From: |
Dan Nicolaescu |
Subject: |
Re: start emacs without creating frames and connect with emacsclient later |
Date: |
Thu, 21 Aug 2008 10:20:28 -0700 |
"Richard M. Stallman" <address@hidden> 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.
Re: start emacs without creating frames and connect with emacsclient later, Phil Jackson, 2008/08/15