Commit dcdffbf6 authored by Richard M. Stallman's avatar Richard M. Stallman

(Fkill_buffer): Call the Vkill_buffer_query_functions.

(syms_of_buffer): Make Lisp var for kill-buffer-query-functions.
parent 88902b35
......@@ -117,6 +117,10 @@ Lisp_Object Vtransient_mark_mode;
Any non-nil value means ignore buffer-read-only. */
Lisp_Object Vinhibit_read_only;
/* List of functions to call that can query about killing a buffer.
If any of these functions returns nil, we don't kill it. */
Lisp_Object Vkill_buffer_query_functions;
/* List of functions to call before changing an unmodified buffer. */
Lisp_Object Vfirst_change_hook;
Lisp_Object Qfirst_change_hook;
......@@ -729,13 +733,25 @@ with `delete-process'.")
return Qnil;
}
/* Run kill-buffer hook with the buffer to be killed the current buffer. */
/* Run hooks with the buffer to be killed the current buffer. */
{
register Lisp_Object val;
int count = specpdl_ptr - specpdl;
Lisp_Object list;
record_unwind_protect (save_excursion_restore, save_excursion_save ());
set_buffer_internal (b);
/* First run the query functions; if any query is answered no,
don't kill the buffer. */
for (list = Vkill_buffer_query_functions; !NILP (list); list = Fcdr (list))
{
tem = call0 (Fcar (list));
if (NILP (tem))
return unbind_to (count, Qnil);
}
/* Then run the hooks. */
call1 (Vrun_hooks, Qkill_buffer_hook);
unbind_to (count, Qnil);
}
......@@ -2615,6 +2631,10 @@ and disregard a `read-only' text property if the property value\n\
is a member of the list.");
Vinhibit_read_only = Qnil;
DEFVAR_LISP ("kill-buffer-query-functions", &Vkill_buffer_query_functions,
"List of functions called with no args to query before killing a buffer.");
Vkill_buffer_query_functions = Qnil;
defsubr (&Sbuffer_list);
defsubr (&Sget_buffer);
defsubr (&Sget_file_buffer);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment