Add a new recursively bound `current-minibuffer-command' variable

* 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.
This commit is contained in:
Lars Ingebrigtsen 2020-12-14 16:44:00 +01:00
parent f6454ad6cd
commit 252366866b
4 changed files with 25 additions and 0 deletions

View 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

View file

@ -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

View 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

View 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.