]> code.delx.au - gnu-emacs/blobdiff - src/emacs.c
Mention setsid after vfork.
[gnu-emacs] / src / emacs.c
index af6b00bf2444f392f01d8048857d885128832488..7cb53a4e26aa125a584123b8893a16e7d00db5a3 100644 (file)
@@ -1,12 +1,13 @@
 /* Fully extensible Emacs, running on Unix, intended for GNU.
    Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1998, 1999,
-                 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+                 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+                 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
 GNU Emacs is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
 any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
@@ -303,7 +304,7 @@ Display options:\n\
                                   used for debugging Emacs\n\
 --border-color, -bd COLOR       main border color\n\
 --border-width, -bw WIDTH       width of main border\n\
---color, --color=MODE           color mode for character terminals;\n\
+--color, --color=MODE           override color mode for character terminals;\n\
                                   MODE defaults to `auto', and can also\n\
                                   be `never', `auto', `always',\n\
                                   or a mode name like `ansi8'\n\
@@ -352,48 +353,15 @@ int fatal_error_in_progress;
 
 void (*fatal_error_signal_hook) P_ ((void));
 
-#ifdef HAVE_GTK_AND_PTHREAD
-/* When compiled with GTK and running under Gnome, multiple threads meay be
-   created.  Keep track of our main thread to make sure signals are delivered
-   to it (see syssignal.h).  */
+#ifdef FORWARD_SIGNAL_TO_MAIN_THREAD
+/* When compiled with GTK and running under Gnome, or Carbon under Mac
+   OS X, multiple threads may be created.  Keep track of our main
+   thread to make sure signals are delivered to it (see syssignal.h).  */
 
 pthread_t main_thread;
 #endif
 
 
-#ifdef SIGUSR1
-SIGTYPE
-handle_USR1_signal (sig)
-     int sig;
-{
-  struct input_event buf;
-
-  SIGNAL_THREAD_CHECK (sig);
-  bzero (&buf, sizeof buf);
-  buf.kind = USER_SIGNAL_EVENT;
-  buf.frame_or_window = selected_frame;
-
-  kbd_buffer_store_event (&buf);
-}
-#endif /* SIGUSR1 */
-
-#ifdef SIGUSR2
-SIGTYPE
-handle_USR2_signal (sig)
-     int sig;
-{
-  struct input_event buf;
-
-  SIGNAL_THREAD_CHECK (sig);
-  bzero (&buf, sizeof buf);
-  buf.kind = USER_SIGNAL_EVENT;
-  buf.code = 1;
-  buf.frame_or_window = selected_frame;
-
-  kbd_buffer_store_event (&buf);
-}
-#endif /* SIGUSR2 */
-
 /* Handle bus errors, invalid instruction, etc.  */
 SIGTYPE
 fatal_error_signal (sig)
@@ -899,7 +867,7 @@ main (argc, argv
       else
        {
          printf ("GNU Emacs %s\n", SDATA (tem));
-         printf ("Copyright (C) 2006 Free Software Foundation, Inc.\n");
+         printf ("Copyright (C) 2008 Free Software Foundation, Inc.\n");
          printf ("GNU Emacs comes with ABSOLUTELY NO WARRANTY.\n");
          printf ("You may redistribute copies of Emacs\n");
          printf ("under the terms of the GNU General Public License.\n");
@@ -1063,9 +1031,9 @@ main (argc, argv
 # endif /* not SYNC_INPUT */
 #endif /* not SYSTEM_MALLOC */
 
-#ifdef HAVE_GTK_AND_PTHREAD
+#ifdef FORWARD_SIGNAL_TO_MAIN_THREAD
   main_thread = pthread_self ();
-#endif /* HAVE_GTK_AND_PTHREAD */
+#endif /* FORWARD_SIGNAL_TO_MAIN_THREAD */
 
 #if defined (MSDOS) || defined (WINDOWSNT)
   /* We do all file input/output as binary files.  When we need to translate
@@ -1190,6 +1158,13 @@ main (argc, argv
 #if defined (USG5) && defined (INTERRUPT_INPUT)
       setpgrp ();
 #endif
+#endif
+#if defined (HAVE_GTK_AND_PTHREAD) && !defined (SYSTEM_MALLOC) && !defined (DOUG_LEA_MALLOC)
+      {
+       extern void malloc_enable_thread P_ ((void));
+
+       malloc_enable_thread ();
+      }
 #endif
     }
 
@@ -1226,10 +1201,10 @@ main (argc, argv
       signal (SIGILL, fatal_error_signal);
       signal (SIGTRAP, fatal_error_signal);
 #ifdef SIGUSR1
-      signal (SIGUSR1, handle_USR1_signal);
-#ifdef SIGUSR2
-      signal (SIGUSR2, handle_USR2_signal);
+      add_user_signal (SIGUSR1, "sigusr1");
 #endif
+#ifdef SIGUSR2
+      add_user_signal (SIGUSR2, "sigusr2");
 #endif
 #ifdef SIGABRT
       signal (SIGABRT, fatal_error_signal);
@@ -1752,8 +1727,9 @@ main (argc, argv
   /* Set up for profiling.  This is known to work on FreeBSD,
      GNU/Linux and MinGW.  It might work on some other systems too.
      Give it a try and tell us if it works on your system.  To compile
-     for profiling use something like:
-       `make CFLAGS="-pg -g -O -DPROFILING=1'.  */
+     for profiling, add -pg to the switches your platform uses in
+     CFLAGS and LDFLAGS.  For example:
+       `make CFLAGS="-pg -g -O -DPROFILING=1" LDFLAGS="-pg -g"'.  */
 #if defined (__FreeBSD__) || defined (GNU_LINUX) || defined(__MINGW32__)
 #ifdef PROFILING
   if (initialized)
@@ -1838,7 +1814,6 @@ struct standard_args standard_args[] =
   { "-q", "--no-init-file", 50, 0 },
   { "-no-init-file", 0, 50, 0 },
   { "-no-site-file", "--no-site-file", 40, 0 },
-  { "-no-splash", "--no-splash", 40, 0 },
   { "-u", "--user", 30, 1 },
   { "-user", 0, 30, 1 },
   { "-debug-init", "--debug-init", 20, 0 },
@@ -1873,6 +1848,8 @@ struct standard_args standard_args[] =
   { "-hb", "--horizontal-scroll-bars", 5, 0 },
   { "-vb", "--vertical-scroll-bars", 5, 0 },
   { "-color", "--color", 5, 0},
+  { "-no-splash", "--no-splash", 3, 0 },
+  { "-no-desktop", "--no-desktop", 3, 0 },
   /* These have the same priority as ordinary file name args,
      so they are not reordered with respect to those.  */
   { "-L", "--directory", 0, 1 },
@@ -2051,7 +2028,7 @@ sort_args (argc, argv)
 DEFUN ("kill-emacs", Fkill_emacs, Skill_emacs, 0, 1, "P",
        doc: /* Exit the Emacs job and kill it.
 If ARG is an integer, return ARG as the exit program code.
-If ARG is a  string, stuff it as keyboard input.
+If ARG is a string, stuff it as keyboard input.
 
 The value of `kill-emacs-hook', if not void,
 is a list of functions (of no args),
@@ -2472,7 +2449,8 @@ Special values:
   `ms-dos'      compiled as an MS-DOS application.
   `windows-nt'  compiled as a native W32 application.
   `cygwin'      compiled using the Cygwin library.
-  `vax-vms' or `axp-vms': compiled for a (Open)VMS system.
+  `vax-vms' or
+  `axp-vms'     compiled for a (Open)VMS system.
 Anything else indicates some sort of Unix system.  */);
   Vsystem_type = intern (SYSTEM_TYPE);
 
@@ -2490,7 +2468,7 @@ Emacs is running.  */);
               doc: /* Non-nil means Emacs is running without interactive terminal.  */);
 
   DEFVAR_LISP ("kill-emacs-hook", &Vkill_emacs_hook,
-              doc: /* Hook to be run when kill-emacs is called.
+              doc: /* Hook to be run when `kill-emacs' is called.
 Since `kill-emacs' may be invoked when the terminal is disconnected (or
 in other similar situations), functions placed on this hook should not
 expect to be able to interact with the user.  To ask for confirmation,
@@ -2512,7 +2490,8 @@ before you compile Emacs, to enable the code for this feature.  */);
   emacs_priority = 0;
 
   DEFVAR_LISP ("path-separator", &Vpath_separator,
-              doc: /* The directory separator in search paths, as a string.  */);
+              doc: /* String containing the character that separates directories in
+search paths, such as PATH and other similar environment variables.  */);
   {
     char c = SEPCHAR;
     Vpath_separator = make_string (&c, 1);
@@ -2529,8 +2508,8 @@ The value is nil if that directory's name is not known.  */);
   DEFVAR_LISP ("installation-directory", &Vinstallation_directory,
               doc: /* A directory within which to look for the `lib-src' and `etc' directories.
 This is non-nil when we can't find those directories in their standard
-installed locations, but we can find them
-near where the Emacs executable was found.  */);
+installed locations, but we can find them near where the Emacs executable
+was found.  */);
   Vinstallation_directory = Qnil;
 
   DEFVAR_LISP ("system-messages-locale", &Vsystem_messages_locale,