From 7b31de4d107302ed91ce7519cd778b340a9880ee Mon Sep 17 00:00:00 2001 From: Phillip Lord Date: Sat, 5 Jan 2019 20:31:15 +0100 Subject: [PATCH] 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 --- etc/NEWS | 4 +++- lisp/subr.el | 6 ++++++ src/keyboard.c | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/etc/NEWS b/etc/NEWS index 21187474a28..b0bbaeb6b0f 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -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. diff --git a/lisp/subr.el b/lisp/subr.el index 2f2ea5e6c77..122a0d8da4c 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -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." diff --git a/src/keyboard.c b/src/keyboard.c index 2d6fa91a16c..838dc242dd9 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -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"); -- 2.39.2