]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
core: Add hook_process_action()
authortmk <hasu@tmk-kbd.com>
Wed, 29 May 2019 05:08:03 +0000 (14:08 +0900)
committertmk <hasu@tmk-kbd.com>
Wed, 29 May 2019 14:57:51 +0000 (23:57 +0900)
tmk_core/common/action.c
tmk_core/common/hook.c
tmk_core/common/hook.h
tmk_core/doc/hook.md [moved from tmk_core/doc/hook.txt with 54% similarity]

index 9b139d48b155828b0aa9845f9e564c92d04d0b7e..c256892ce22588f59a58363dba54dd24c5a6e5e3 100644 (file)
@@ -58,6 +58,8 @@ void action_exec(keyevent_t event)
 
 void process_action(keyrecord_t *record)
 {
+    if (hook_process_action(record)) return;
+
     keyevent_t event = record->event;
 #ifndef NO_ACTION_TAPPING
     uint8_t tap_count = record->tap.count;
index 4ed2403cf4e86410e68fc693c00453db3973fdc8..22be9a308a89de833b527582249bbadddec98b2a 100644 (file)
@@ -47,3 +47,8 @@ void hook_keyboard_leds_change(uint8_t led_status) {
 
 __attribute__((weak))
 void hook_bootmagic(void) {}
+
+__attribute__((weak))
+bool hook_process_action(keyrecord_t *record) {
+    return false;
+}
index 140e2779af701a4d3721491c757078b5260c625e..ddd05c6fcb1e32cb64bc3c089f9105e003b7cd12 100644 (file)
@@ -20,6 +20,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "keyboard.h"
 #include "led.h"
+#include "action.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -84,6 +85,10 @@ void hook_keyboard_leds_change(uint8_t led_status);
 /* Default behaviour: do nothing. */
 void hook_bootmagic(void);
 
+/* Called on before processing key event */
+/* returns true if the event is consumed and default action is not needed. */
+bool hook_process_action(keyrecord_t *record);
+
 #ifdef __cplusplus
 }
 #endif
similarity index 54%
rename from tmk_core/doc/hook.txt
rename to tmk_core/doc/hook.md
index acd77ccebd7423fedc81ce806264d4963cb3cff8..0cebf8589d83f222f4a577940b219db5ae49b272 100644 (file)
@@ -6,19 +6,19 @@ The following hooks are available available:
 
 Hook function                   | Timing
 --------------------------------|-----------------------------------------------
-`hook_early_init(void)`         | Early in the boot process, before the matrix is initialized and before a connection is made with the host. Thus, this hook has access to very few parameters, but it is a good place to define any custom parameters needed by other early processes.
-`hook_late_init(void)`          | Near the end of the boot process, after Boot Magic has run and LEDs have been initialized.
-`hook_bootmagic(void)`          | During the Boot Magic window, after EEPROM and Bootloader checks are made, but before any other built-in Boot Magic checks are made.
-`hook_usb_startup_wait_loop(void)` | Continuously, until the device gets ready and into USB configured state.
-
-`hook_usb_wakeup(void)`         | When the device wakes up from USB suspend state.
-`hook_usb_suspend_entry(void)`  | When the device enters USB suspend state.
-`hook_usb_suspend_loop(void)`   | Continuously, while the device is in USB suspend state. *Default action:* power down and periodically check the matrix, causing wakeup if needed.
-`hook_keyboard_loop(void)`      | Continuously, during the main loop, after the matrix is checked.
-`hook_matrix_change(keyevent_t event)`      | When a matrix state change is detected, before any other actions are processed.
-`hook_layer_change(uint32_t layer_state)`   | When any layer is changed.
-`hook_default_layer_change(uint32_t default_layer_state)`   | When any default layer is changed.
-`hook_keyboard_leds_change(uint8_t led_status)`             | Whenever a change in the LED status is performed. *Default action:* call `keyboard_set_leds(led_status)`
+`void hook_early_init(void)`         | Early in the boot process, before the matrix is initialized and before a connection is made with the host. Thus, this hook has access to very few parameters, but it is a good place to define any custom parameters needed by other early processes.
+`void hook_late_init(void)`          | Near the end of the boot process, after Boot Magic has run and LEDs have been initialized.
+`void hook_bootmagic(void)`          | During the Boot Magic window, after EEPROM and Bootloader checks are made, but before any other built-in Boot Magic checks are made.
+`void hook_usb_startup_wait_loop(void)` | Continuously, until the device gets ready and into USB configured state.
+`void hook_usb_wakeup(void)`         | When the device wakes up from USB suspend state.
+`void hook_usb_suspend_entry(void)`  | When the device enters USB suspend state.
+`void hook_usb_suspend_loop(void)`   | Continuously, while the device is in USB suspend state. *Default action:* power down and periodically check the matrix, causing wakeup if needed.
+`void hook_keyboard_loop(void)`      | Continuously, during the main loop, after the matrix is checked.
+`void hook_matrix_change(keyevent_t event)`      | When a matrix state change is detected, before any other actions are processed.
+`void hook_layer_change(uint32_t layer_state)`   | When any layer is changed.
+`void hook_default_layer_change(uint32_t default_layer_state)`   | When any default layer is changed.
+`void hook_keyboard_leds_change(uint8_t led_status)`             | Whenever a change in the LED status is performed. *Default action:* call `keyboard_set_leds(led_status)`
+`bool hook_process_action(keyrecord_t *record)`                  | Before key event is processed by tmk_core. Return true if the event is consumed and default action is not needed.