summaryrefslogtreecommitdiff
path: root/src/keyboard.c
diff options
context:
space:
mode:
authorGerd Moellmann <gerd@gnu.org>2000-10-05 19:27:17 +0000
committerGerd Moellmann <gerd@gnu.org>2000-10-05 19:27:17 +0000
commit1db0076e78b71009e98fc30cf02019c502da96b2 (patch)
tree2a4c38ca51f21d4147e63ed0cd5e78c6bc20f6dd /src/keyboard.c
parenta18c0a477e917eee64654a043b595258174e9d88 (diff)
downloademacs-1db0076e78b71009e98fc30cf02019c502da96b2.tar.gz
(Frecursive_edit): Make sure redisplay can happen.
(show_help_echo): Use safe_call instead of call_function; use safe_eval instead of eval_form.
Diffstat (limited to 'src/keyboard.c')
-rw-r--r--src/keyboard.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index 754a80fe74b..16df84b80f5 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -939,6 +939,18 @@ This function is called by the editor initialization to begin editing.")
command_loop_level++;
update_mode_lines = 1;
+ /* This function may have been called from a debugger called from
+ within redisplay, for instance by Edebugging a function called
+ from fontification-functions. We want to allow redisplay in
+ the debugging session.
+
+ The recursive edit is left with a `(throw exit ...)'. The `exit'
+ tag is not caught anywhere in redisplay, i.e. when we leave the
+ recursive edit, the original redisplay leading to the recursive
+ edit will be unwound. The outcome should therefore be safe. */
+ specbind (Qinhibit_redisplay, Qnil);
+ redisplaying_p = 0;
+
record_unwind_protect (recursive_edit_unwind,
(command_loop_level
&& current_buffer != XBUFFER (XWINDOW (selected_window)->buffer))
@@ -1960,10 +1972,10 @@ show_help_echo (help, window, object, pos, ok_to_overwrite_keystroke_echo)
args[1] = window;
args[2] = object;
args[3] = pos;
- help = call_function (4, args);
+ help = safe_call (4, args);
}
else
- help = eval_form (help);
+ help = safe_eval (help);
if (!STRINGP (help))
return;