Eli Zaretskii writes: >> Cc: Alan Mackenzie >> Date: Fri, 23 Jul 2021 01:05:41 +0200 >> From: miha--- via "Bug reports for GNU Emacs, >> the Swiss army knife of text editors" >> >> The attached patch removes special handling of the 'exit tag from >> internal_catch. This special handling was introduced by Alan in commit >> Sun Jan 10 20:32:40 2021 +0000 >> (c7c154bb5756e0ae71d342c5d8aabf725877f186), hence me CC-ing him. >> >> It also exposes Vminibuffer_list to lisp through the new function >> Fminibuffer_alist. > > Thanks, but could you please explain the rationale and the motivation > for these changes? Refactoring to have cleaner code. Right now, without applying this patch, quitting multiple recursive edits (in minibuffer-exit) is achieved by extra special handling in internal_catch. In my opinion, it's cleaner to avoid adding such code into a core function like internal_catch if possible. This patch moves this code into the function minibuffer-exit, and by using closures, it achieves the same effect without a global variable (minibuffer_quit_level). In other words, without this patch, Fminibuffer_exit cooperates with internal_catch through a global variable. And with this patch, Fminibuffer_exit cooperates with command_loop by passing it a closure. Fminibuffer_exit was moved to lisp because its easier to make closures in lisp. minibuffer-alist was introduced because it's needed by minibuffer-exit. I also think that it's nice to expose the list of minibuffers to lisp. The two minibuffer-innermost-[command-loop]-p functions were removed because minibuffer-alist can be used instead.