1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-01 08:17:38 +00:00

(Fdo_auto_save): Catch error making directory.

Only call push_message if we need to.
At the same time, make an unwind-protect to pop it.
Rename local message_p to old_message_p.
(do_auto_save_make_dir, do_auto_save_eh): New functions.
(do_auto_save_unwind): Don't call pop_message.
This commit is contained in:
Richard M. Stallman 2002-09-11 02:03:24 +00:00
parent 37d6609558
commit 5794dd61a0

View File

@ -5566,7 +5566,6 @@ do_auto_save_unwind (stream) /* used as unwind-protect function */
if (!NILP (stream))
fclose ((FILE *) (XFASTINT (XCAR (stream)) << 16
| XFASTINT (XCDR (stream))));
pop_message ();
return Qnil;
}
@ -5578,6 +5577,20 @@ do_auto_save_unwind_1 (value) /* used as unwind-protect function */
return Qnil;
}
static Lisp_Object
do_auto_save_make_dir (dir)
Lisp_Object dir;
{
return call2 (Qmake_directory, dir, Qt);
}
static Lisp_Object
do_auto_save_eh (ignore)
Lisp_Object ignore;
{
return Qnil;
}
DEFUN ("do-auto-save", Fdo_auto_save, Sdo_auto_save, 0, 2, "",
doc: /* Auto-save all buffers that need it.
This is all buffers that have auto-saving enabled
@ -5601,7 +5614,7 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */)
Lisp_Object lispstream;
int count = SPECPDL_INDEX ();
int orig_minibuffer_auto_raise = minibuffer_auto_raise;
int message_p = 0;
int old_message_p = 0;
if (max_specpdl_size < specpdl_size + 40)
max_specpdl_size = specpdl_size + 40;
@ -5609,8 +5622,11 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */)
if (minibuf_level)
no_message = Qt;
if (NILP (no_message));
message_p = push_message ();
if (NILP (no_message))
{
old_message_p = push_message ();
record_unwind_protect (pop_message_unwind, Qnil);
}
/* Ordinarily don't quit within this function,
but don't make it impossible to quit (in case we get hung in I/O). */
@ -5637,7 +5653,9 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */)
Lisp_Object dir;
dir = Ffile_name_directory (listfile);
if (NILP (Ffile_directory_p (dir)))
call2 (Qmake_directory, dir, Qt);
internal_condition_case_1 (do_auto_save_make_dir,
dir, Fcons (Fcons (Qfile_error, Qnil), Qnil),
do_auto_save_eh);
}
stream = fopen (SDATA (listfile), "w");
@ -5765,17 +5783,22 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */)
if (auto_saved && NILP (no_message))
{
if (message_p)
if (old_message_p)
{
/* If we are going to restore an old message,
give time to read ours. */
sit_for (1, 0, 0, 0, 0);
restore_message ();
}
else
/* If we displayed a message and then restored a state
with no message, leave a "done" message on the screen. */
message1 ("Auto-saving...done");
}
Vquit_flag = oquit;
/* This restores the message-stack status. */
unbind_to (count, Qnil);
return Qnil;
}