diff options
| author | Alan Mackenzie | 2021-02-11 21:37:45 +0000 |
|---|---|---|
| committer | Alan Mackenzie | 2021-02-11 21:37:45 +0000 |
| commit | 203e61ff837128b397eb313a5bb1b703f0eae0ec (patch) | |
| tree | fa2a96312dd4ec237bcf2a2baa7439ed83f351d2 /src/window.h | |
| parent | 4f63b4bfc6c16abeaf9d8a9e9de76cc42d772567 (diff) | |
| download | emacs-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.h | 4 |
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 | ||
| 1121 | extern Lisp_Object echo_area_window; | 1121 | extern Lisp_Object echo_area_window; |
| 1122 | 1122 | ||
| 1123 | /* Depth in recursive edits. */ | ||
| 1124 | |||
| 1125 | extern 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'. */ |