Add hook for all events

* lisp/subr.el (input-event-functions): Add input-event-functions
* src/keyboard.c (read_char): Call input-event-functions on all hooks
This commit is contained in:
Phillip Lord 2019-01-05 20:31:15 +01:00
parent fd94312443
commit 7b31de4d10
3 changed files with 13 additions and 1 deletions

View file

@ -1189,11 +1189,13 @@ removed.
* Lisp Changes in Emacs 27.1
+++
** 'self-insert-command' takes the char to insert as (optional) argument.
** 'lookup-key' can take a list of keymaps as argument.
** New hook `input-event-functions` run whenever a user-input is read.
+++
** 'condition-case' now accepts 't' to match any error symbol.

View file

@ -1289,6 +1289,12 @@ See `event-start' for a description of the value returned."
The return value is a positive integer."
(if (and (consp event) (integerp (nth 2 event))) (nth 2 event) 1))
(defvar input-event-functions nil
;; BEWARE: If it looks like this is not run anywhere, it's normal:
;; this is run in keyboard.c.
"Special hook run each time a user-input event is read.
Each function is called with one argument: the event.")
(defsubst event-line-count (event)
"Return the line count of EVENT, a mousewheel event.
The return value is a positive integer."

View file

@ -2919,6 +2919,8 @@ read_char (int commandflag, Lisp_Object map,
if (! NILP (also_record))
record_char (also_record);
Frun_hook_with_args (2, ((Lisp_Object []) {Qinput_event_functions, c}));
/* Wipe the echo area.
But first, if we are about to use an input method,
save the echo area contents for it to refer to. */
@ -11022,6 +11024,8 @@ syms_of_keyboard (void)
DEFSYM (Qundefined, "undefined");
DEFSYM (Qinput_event_functions, "input-event-functions");
/* Hooks to run before and after each command. */
DEFSYM (Qpre_command_hook, "pre-command-hook");
DEFSYM (Qpost_command_hook, "post-command-hook");