Mercurial > emacs
changeset 55795:1e94f291a19c
(run_exit_minibuf_hook): New function.
(read_minibuf_unwind): Don't run exit-minibuffer-hook any more.
(read_minibuf): Use separate unwind handler to run exit-minibuf-hook.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Fri, 28 May 2004 20:52:05 +0000 |
parents | 4cceb6e8bee6 |
children | 97fe0ef6c077 |
files | src/minibuf.c |
diffstat | 1 files changed, 19 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/minibuf.c Fri May 28 19:59:23 2004 +0000 +++ b/src/minibuf.c Fri May 28 20:52:05 2004 +0000 @@ -1,5 +1,5 @@ /* Minibuffer input and completion. - Copyright (C) 1985,86,93,94,95,96,97,98,99,2000,01,03 + Copyright (C) 1985,86,93,94,95,96,97,98,99,2000,01,03,04 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -209,6 +209,7 @@ /* Actual minibuffer invocation. */ static Lisp_Object read_minibuf_unwind P_ ((Lisp_Object)); +static Lisp_Object run_exit_minibuf_hook P_ ((Lisp_Object)); static Lisp_Object read_minibuf P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, int, Lisp_Object, @@ -563,6 +564,12 @@ record_unwind_protect (read_minibuf_unwind, Qnil); minibuf_level++; + /* We are exiting the minibuffer one way or the other, so run the hook. + It should be run before unwinding the minibuf settings. Do it + separately from read_minibuf_unwind because we need to make sure that + read_minibuf_unwind is fully executed even if exit-minibuffer-hook + signals an error. --Stef */ + record_unwind_protect (run_exit_minibuf_hook, Qnil); /* Now that we can restore all those variables, start changing them. */ @@ -822,6 +829,17 @@ return buf; } +static Lisp_Object +run_exit_minibuf_hook (data) + Lisp_Object data; +{ + if (!NILP (Vminibuffer_exit_hook) && !EQ (Vminibuffer_exit_hook, Qunbound) + && !NILP (Vrun_hooks)) + safe_run_hooks (Qminibuffer_exit_hook); + + return Qnil; +} + /* This function is called on exiting minibuffer, whether normally or not, and it restores the current window, buffer, etc. */ @@ -832,12 +850,6 @@ Lisp_Object old_deactivate_mark; Lisp_Object window; - /* We are exiting the minibuffer one way or the other, - so run the hook. */ - if (!NILP (Vminibuffer_exit_hook) && !EQ (Vminibuffer_exit_hook, Qunbound) - && !NILP (Vrun_hooks)) - safe_run_hooks (Qminibuffer_exit_hook); - /* If this was a recursive minibuffer, tie the minibuffer window back to the outer level minibuffer buffer. */ minibuf_level--;