aboutsummaryrefslogtreecommitdiffstats
path: root/src/window.h
diff options
context:
space:
mode:
authorAlan Mackenzie2021-02-11 21:37:45 +0000
committerAlan Mackenzie2021-02-11 21:37:45 +0000
commit203e61ff837128b397eb313a5bb1b703f0eae0ec (patch)
treefa2a96312dd4ec237bcf2a2baa7439ed83f351d2 /src/window.h
parent4f63b4bfc6c16abeaf9d8a9e9de76cc42d772567 (diff)
downloademacs-203e61ff837128b397eb313a5bb1b703f0eae0ec.tar.gz
emacs-203e61ff837128b397eb313a5bb1b703f0eae0ec.zip
Make recursive minibuffers and recursive edits work together
* lisp/minibuffer.el (exit-minibuffer): When in a minibuffer, throw an error should the command loop nesting level be wrong. * src/lisp.h (minibuffer_quit_level): declare as an extern. (command_loop_level): Move definition from src/window.h * src/window.h (command_loop_level): move definition to src/lisp.h. * src/eval.c (minibuffer_quit_level): Move this variable to file level from being a static inside internal_catch. (internal_catch): Simplify the logic. * src/minibuf.c (Vcommand_loop_level_list): New variable. (move_minibuffer_onto_frame): Set the major mode of *Minibuf-0*. (Fminibuffer_innermost_command_loop_p): New primitive. (Fabort_minibuffers): Check the command loop level before throwing t to 'exit, and set minibuffer_quit_level too. (read_minibuf): New variable calling_window. Before stacking up minibuffers on the current mini-window, check that the mini-window is not the current one. Do not call choose_minibuf_frame from read_minibuf's unwinding process. Bind calling_frame and calling_window over the recursive edit. Set the new minibuffer's major mode directly. Remove the switching away from the minibuffer after the recursive edit. (get_minibuffer): Record the command loop level in new variable Vcommand_loop_level_list. No longer set the major mode of a returned minibuffer. (minibuf_c_loop_level): New function. (read_minibuf_unwind): New variables calling_frame, calling_window are unbound from the binding stack. Remove old variable `window', which could not be set reliably to the expired mini-window. The expired minibuffer is determined as the nth in the list, rather than the contents of the current or previous mini-window. Switch the current window away from the mini-window here (moved from read_minibuf).
Diffstat (limited to 'src/window.h')
-rw-r--r--src/window.h4
1 files changed, 0 insertions, 4 deletions
diff --git a/src/window.h b/src/window.h
index 79eb44e7a38..b6f88e8f55f 100644
--- a/src/window.h
+++ b/src/window.h
@@ -1120,10 +1120,6 @@ void set_window_buffer (Lisp_Object window, Lisp_Object buffer,
1120 1120
1121extern Lisp_Object echo_area_window; 1121extern Lisp_Object echo_area_window;
1122 1122
1123/* Depth in recursive edits. */
1124
1125extern EMACS_INT command_loop_level;
1126
1127/* Non-zero if we should redraw the mode lines on the next redisplay. 1123/* Non-zero if we should redraw the mode lines on the next redisplay.
1128 Usually set to a unique small integer so we can track the main causes of 1124 Usually set to a unique small integer so we can track the main causes of
1129 full redisplays in `redisplay--mode-lines-cause'. */ 1125 full redisplays in `redisplay--mode-lines-cause'. */