From 2181be029e01d9cf46ae3cadcdf25f5bca02c631 Mon Sep 17 00:00:00 2001
From: Damien Pollet <damien.pollet@gmail.com>
Date: Mon, 28 Mar 2016 16:13:37 +0200
Subject: [PATCH] Add action-preprocessing hook to keyboard template

---
 quantum/template/template.c | 20 ++++++++++++++++----
 quantum/template/template.h |  5 +++--
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/quantum/template/template.c b/quantum/template/template.c
index 58e73cb09f..cc52e496ff 100644
--- a/quantum/template/template.c
+++ b/quantum/template/template.c
@@ -10,6 +10,11 @@ void matrix_scan_user(void) {
 	// leave this function blank - it can be defined in a keymap file
 }
 
+__attribute__ ((weak))
+void process_action_user(keyrecord_t *record) {
+	// leave this function blank - it can be defined in a keymap file
+}
+
 __attribute__ ((weak))
 void led_set_user(uint8_t usb_led) {
 	// leave this function blank - it can be defined in a keymap file
@@ -18,19 +23,26 @@ void led_set_user(uint8_t usb_led) {
 void matrix_init_kb(void) {
 	// put your keyboard start-up code here
 	// runs once when the firmware starts up
-	
+
 	matrix_init_user();
 }
 
 void matrix_scan_kb(void) {
-    // put your looping keyboard code here
-    // runs every cycle (a lot)
+	// put your looping keyboard code here
+	// runs every cycle (a lot)
 
 	matrix_scan_user();
 }
 
+void process_action_kb(keyrecord_t *record) {
+	// put your per-action keyboard code here
+	// runs for every action, just before processing by the firmware
+
+	process_action_user(record);
+}
+
 void led_set_kb(uint8_t usb_led) {
 	// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
 
 	led_set_user(usb_led);
-}
\ No newline at end of file
+}
diff --git a/quantum/template/template.h b/quantum/template/template.h
index ba91abac3e..b1c34d3cbe 100644
--- a/quantum/template/template.h
+++ b/quantum/template/template.h
@@ -17,10 +17,11 @@
 { \
     { k00, k01,   k02 }, \
     { k10, KC_NO, k11 }, \
-} 
+}
 
 void matrix_init_user(void);
 void matrix_scan_user(void);
+void process_action_user(keyrecord_t *record);
 void led_set_user(uint8_t usb_led);
 
-#endif
\ No newline at end of file
+#endif