Run kill-emacs when exiting for display closed or SIGTERM/HUP.
* xsmfns.c (CHDIR_OPT): New define. (smc_save_yourself_CB): Add CHDIR_OPT to options to use when restarting emacs. * xterm.c (x_connection_closed): Call Fkill_emacs instead of shut_down_emacs. * emacs.c (USAGE1): Mention --chdir. (main): Handle --chdir. (standard_args): Add --chdir. (fatal_error_signal): Call Fkill_emacs for SIGTERM and SIGHUP (Bug #5552). * cmdargs.texi (Initial Options): Mention --chdir.
This commit is contained in:
parent
8f92b8ad07
commit
f63d0028c0
6 changed files with 68 additions and 9 deletions
|
@ -1,3 +1,7 @@
|
|||
2010-05-02 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* cmdargs.texi (Initial Options): Mention --chdir.
|
||||
|
||||
2010-04-21 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* frames.texi (Tool Bars): Add tool-bar-style.
|
||||
|
|
|
@ -193,6 +193,15 @@ Certain options prevent loading of some of these files or substitute
|
|||
other files for them.
|
||||
|
||||
@table @samp
|
||||
@item -chdir @var{directory}
|
||||
@opindex -chdir
|
||||
@itemx --chdir=@var{directory}
|
||||
@opindex --chdir
|
||||
@cindex change Emacs directory
|
||||
Change to @var{directory} before doing anything else. This is mainly used
|
||||
by session management in X so that Emacs starts in the same directory as it
|
||||
stopped. This makes desktop saving and restoring easier.
|
||||
|
||||
@item -t @var{device}
|
||||
@opindex -t
|
||||
@itemx --terminal=@var{device}
|
||||
|
|
|
@ -1,3 +1,18 @@
|
|||
2010-05-02 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* xsmfns.c (CHDIR_OPT): New define.
|
||||
(smc_save_yourself_CB): Add CHDIR_OPT to options to use when
|
||||
restarting emacs.
|
||||
|
||||
* xterm.c (x_connection_closed): Call Fkill_emacs instead of
|
||||
shut_down_emacs.
|
||||
|
||||
* emacs.c (USAGE1): Mention --chdir.
|
||||
(main): Handle --chdir.
|
||||
(standard_args): Add --chdir.
|
||||
(fatal_error_signal): Call Fkill_emacs for SIGTERM and SIGHUP (Bug
|
||||
#5552).
|
||||
|
||||
2010-05-01 Dan Nicolaescu <dann@ics.uci.edu>
|
||||
|
||||
Remove LD_SWITCH_MACHINE.
|
||||
|
|
14
src/emacs.c
14
src/emacs.c
|
@ -268,6 +268,7 @@ read the main documentation for these command-line arguments.\n\
|
|||
Initialization options:\n\
|
||||
\n\
|
||||
--batch do not do interactive display; implies -q\n\
|
||||
--chdir DIR change to directory DIR\n\
|
||||
--daemon start a server in the background\n\
|
||||
--debug-init enable Emacs Lisp debugger for init file\n\
|
||||
--display, -d DISPLAY use X server DISPLAY\n\
|
||||
|
@ -385,6 +386,9 @@ fatal_error_signal (sig)
|
|||
{
|
||||
fatal_error_in_progress = 1;
|
||||
|
||||
if (sig == SIGTERM || sig == SIGHUP)
|
||||
Fkill_emacs (make_number (sig));
|
||||
|
||||
shut_down_emacs (sig, 0, Qnil);
|
||||
}
|
||||
|
||||
|
@ -765,6 +769,7 @@ main (int argc, char **argv)
|
|||
#ifdef NS_IMPL_COCOA
|
||||
char dname_arg2[80];
|
||||
#endif
|
||||
char *ch_to_dir;
|
||||
|
||||
#if GC_MARK_STACK
|
||||
extern Lisp_Object *stack_base;
|
||||
|
@ -832,6 +837,14 @@ main (int argc, char **argv)
|
|||
exit (0);
|
||||
}
|
||||
}
|
||||
if (argmatch (argv, argc, "-chdir", "--chdir", 2, &ch_to_dir, &skip_args))
|
||||
if (chdir (ch_to_dir) == -1)
|
||||
{
|
||||
fprintf (stderr, "%s: Can't chdir to %s: %s\n",
|
||||
argv[0], ch_to_dir, strerror (errno));
|
||||
exit (1);
|
||||
}
|
||||
|
||||
|
||||
#ifdef HAVE_PERSONALITY_LINUX32
|
||||
if (!initialized
|
||||
|
@ -1802,6 +1815,7 @@ struct standard_args
|
|||
const struct standard_args standard_args[] =
|
||||
{
|
||||
{ "-version", "--version", 150, 0 },
|
||||
{ "-chdir", "--chdir", 130, 1 },
|
||||
{ "-t", "--terminal", 120, 1 },
|
||||
{ "-nw", "--no-window-system", 110, 0 },
|
||||
{ "-nw", "--no-windows", 110, 0 },
|
||||
|
|
27
src/xsmfns.c
27
src/xsmfns.c
|
@ -90,6 +90,10 @@ Lisp_Object Vx_session_previous_id;
|
|||
|
||||
#define NOSPLASH_OPT "--no-splash"
|
||||
|
||||
/* The option to make Emacs start in the given directory. */
|
||||
|
||||
#define CHDIR_OPT "--chdir="
|
||||
|
||||
static void
|
||||
ice_connection_closed ()
|
||||
{
|
||||
|
@ -206,7 +210,7 @@ smc_save_yourself_CB (smcConn,
|
|||
int props_idx = 0;
|
||||
|
||||
char *cwd = NULL;
|
||||
char *smid_opt;
|
||||
char *smid_opt, *chdir_opt = NULL;
|
||||
|
||||
/* How to start a new instance of Emacs. */
|
||||
props[props_idx] = &prop_ptr[props_idx];
|
||||
|
@ -228,11 +232,12 @@ smc_save_yourself_CB (smcConn,
|
|||
props[props_idx]->vals[0].value = SDATA (Vinvocation_name);
|
||||
++props_idx;
|
||||
|
||||
/* How to restart Emacs (i.e.: /path/to/emacs --smid=xxxx --no-splash). */
|
||||
/* How to restart Emacs. */
|
||||
props[props_idx] = &prop_ptr[props_idx];
|
||||
props[props_idx]->name = SmRestartCommand;
|
||||
props[props_idx]->type = SmLISTofARRAY8;
|
||||
props[props_idx]->num_vals = 3; /* /path/to/emacs, --smid=xxx --no-splash */
|
||||
/* /path/to/emacs, --smid=xxx --no-splash --chdir=dir */
|
||||
props[props_idx]->num_vals = 4;
|
||||
props[props_idx]->vals = &values[val_idx];
|
||||
props[props_idx]->vals[0].length = strlen (emacs_program);
|
||||
props[props_idx]->vals[0].value = emacs_program;
|
||||
|
@ -246,7 +251,19 @@ smc_save_yourself_CB (smcConn,
|
|||
|
||||
props[props_idx]->vals[2].length = strlen (NOSPLASH_OPT);
|
||||
props[props_idx]->vals[2].value = NOSPLASH_OPT;
|
||||
val_idx += 3;
|
||||
|
||||
cwd = get_current_dir_name ();
|
||||
if (cwd)
|
||||
{
|
||||
chdir_opt = xmalloc (strlen (CHDIR_OPT) + strlen (client_id) + 1);
|
||||
strcpy (chdir_opt, CHDIR_OPT);
|
||||
strcat (chdir_opt, cwd);
|
||||
|
||||
props[props_idx]->vals[3].length = strlen (chdir_opt);
|
||||
props[props_idx]->vals[3].value = chdir_opt;
|
||||
}
|
||||
|
||||
val_idx += cwd ? 4 : 3;
|
||||
++props_idx;
|
||||
|
||||
/* User id. */
|
||||
|
@ -259,7 +276,6 @@ smc_save_yourself_CB (smcConn,
|
|||
props[props_idx]->vals[0].value = SDATA (Vuser_login_name);
|
||||
++props_idx;
|
||||
|
||||
cwd = get_current_dir_name ();
|
||||
|
||||
if (cwd)
|
||||
{
|
||||
|
@ -277,6 +293,7 @@ smc_save_yourself_CB (smcConn,
|
|||
SmcSetProperties (smcConn, props_idx, props);
|
||||
|
||||
xfree (smid_opt);
|
||||
xfree (chdir_opt);
|
||||
|
||||
free (cwd);
|
||||
|
||||
|
|
|
@ -7936,8 +7936,8 @@ x_connection_closed (dpy, error_message)
|
|||
if (terminal_list->next_terminal == NULL)
|
||||
{
|
||||
fprintf (stderr, "%s\n", error_msg);
|
||||
shut_down_emacs (0, 0, Qnil);
|
||||
exit (70);
|
||||
Fkill_emacs (make_number (70));
|
||||
/* NOTREACHED */
|
||||
}
|
||||
xg_display_close (dpyinfo->display);
|
||||
#endif
|
||||
|
@ -7963,8 +7963,8 @@ x_connection_closed (dpy, error_message)
|
|||
if (terminal_list == 0)
|
||||
{
|
||||
fprintf (stderr, "%s\n", error_msg);
|
||||
shut_down_emacs (0, 0, Qnil);
|
||||
exit (70);
|
||||
Fkill_emacs (make_number (70));
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
/* Ordinary stack unwind doesn't deal with these. */
|
||||
|
|
Loading…
Add table
Reference in a new issue