]> git.eshelyaron.com Git - emacs.git/commitdiff
Add a new recursively bound `current-minibuffer-command' variable
authorLars Ingebrigtsen <larsi@gnus.org>
Mon, 14 Dec 2020 15:44:00 +0000 (16:44 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Mon, 14 Dec 2020 15:44:00 +0000 (16:44 +0100)
* doc/lispref/commands.texi (Command Loop Info): Document it
(bug#45177).

* src/callint.c (Fcall_interactively): Bind it.

* src/keyboard.c (syms_of_keyboard): Define
current-minibuffer-command.

doc/lispref/commands.texi
etc/NEWS
src/callint.c
src/keyboard.c

index ebfda01671e64a6b48905921d5649a8b3dd17759..15d7e4e3a7170b372126f5e864a6b413e927ac41 100644 (file)
@@ -928,6 +928,13 @@ remapping), and @code{this-original-command} gives the command that
 was specified to run but remapped into another command.
 @end defvar
 
+@defvar current-minibuffer-command
+This has the same value as @code{this-command}, but is bound
+recursively when entering a minibuffer.  This variable can be used
+from minibuffer hooks and the like to determine what command opened
+the current minibuffer session.
+@end defvar
+
 @defun this-command-keys
 This function returns a string or vector containing the key sequence
 that invoked the present command.  Any events read by the command
index 635da2d84abe2060959653398ac6284b2d509225..a5e2c9cf26aede40b2757834c95927d827f71a90 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1437,6 +1437,12 @@ that makes it a valid button.
 
 ** Miscellaneous
 
++++
+
+*** New variable 'current-minibuffer-command'.
+This is like 'this-command', but is bound recursively when entering
+the minibuffer.
+
 +++
 *** New function 'object-intervals'.
 This function returns a copy of the list of intervals (i.e., text
index f80436f3d91710b8da2ff8ba4a8d9dca1013d9ec..a221705f6764da7ff22b9bfcdac433ad98a52a5a 100644 (file)
@@ -283,6 +283,11 @@ invoke it (via an `interactive' spec that contains, for instance, an
   Lisp_Object save_real_this_command = Vreal_this_command;
   Lisp_Object save_last_command = KVAR (current_kboard, Vlast_command);
 
+  /* Bound recursively so that code can check the current command from
+     code running from minibuffer hooks (and the like), without being
+     overwritten by subsequent minibuffer calls.  */
+  specbind (Qcurrent_minibuffer_command, Vreal_this_command);
+
   if (NILP (keys))
     keys = this_command_keys, key_count = this_command_key_count;
   else
index dbca5be91e428cdb73ae361c7d95679713cb240a..54232aaea1eefb562e652bdfd77a90497ea0abed 100644 (file)
@@ -11830,6 +11830,13 @@ will be in `last-command' during the following command.  */);
               doc: /* This is like `this-command', except that commands should never modify it.  */);
   Vreal_this_command = Qnil;
 
+  DEFSYM (Qcurrent_minibuffer_command, "current-minibuffer-command");
+  DEFVAR_LISP ("current-minibuffer-command", Vcurrent_minibuffer_command,
+              doc: /* This is like `this-command', but bound recursively.
+Code running from (for instance) a minibuffer hook can check this variable
+to see what command invoked the current minibuffer.  */);
+  Vcurrent_minibuffer_command = Qnil;
+
   DEFVAR_LISP ("this-command-keys-shift-translated",
               Vthis_command_keys_shift_translated,
               doc: /* Non-nil if the key sequence activating this command was shift-translated.