diff --git a/src/buffer.c b/src/buffer.c index 0c46b201586..ca81db21894 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -5360,6 +5360,10 @@ syms_of_buffer (void) these names start with `/' or `~' and end with `/'. To interactively change the default directory, use command `cd'. */); + DEFVAR_LISP ("next-default-directory", Vnext_default_directory, + doc: /* Default directory for the next command. */); + Vnext_default_directory = Qnil; + DEFVAR_PER_BUFFER ("auto-fill-function", &BVAR (current_buffer, auto_fill_function), Qnil, doc: /* Function called (if non-nil) to perform auto-fill. diff --git a/src/keyboard.c b/src/keyboard.c index 14c55666768..dfe939750c9 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -1500,7 +1500,19 @@ command_loop_1 (void) update_redisplay_ticks (0, NULL); display_working_on_window_p = false; + Lisp_Object next_dir = Vnext_default_directory; + specpdl_ref count = SPECPDL_INDEX (); + if (!NILP (next_dir)) + specbind (Qdefault_directory, next_dir); + call1 (Qcommand_execute, Vthis_command); + + if (!NILP (next_dir)) + { + unbind_to (count, Qnil); + Vnext_default_directory = Qnil; + } + display_working_on_window_p = false; #ifdef HAVE_WINDOW_SYSTEM