macro_t macro = END;
uint8_t interval = 0;
+ uint8_t mod_storage;
+
if (!macro_p) return;
while (true) {
switch (MACRO_READ()) {
interval = MACRO_READ();
dprintf("INTERVAL(%u)\n", interval);
break;
+ case MOD_STORE:
+ mod_storage = get_mods();
+ break;
+ case MOD_RESTORE:
+ set_mods(mod_storage);
+ send_keyboard_report();
+ break;
+ case MOD_CLEAR:
+ clear_mods();
+ send_keyboard_report();
+ break;
case 0x04 ... 0x73:
dprintf("DOWN(%02X)\n", macro);
register_code(macro);
/* 0x74 - 0x83 */
WAIT = 0x74,
INTERVAL,
+ MOD_STORE,
+ MOD_RESTORE,
+ MOD_CLEAR,
/* 0x84 - 0xf3 (reserved for keycode up) */
#define TYPE(key) DOWN(key), UP(key)
#define WAIT(ms) WAIT, (ms)
#define INTERVAL(ms) INTERVAL, (ms)
+#define STORE() MOD_STORE
+#define RESTORE() MOD_RESTORE
+#define CLEAR() MOD_CLEAR
/* key down */
#define D(key) DOWN(KC_##key)
#define W(ms) WAIT(ms)
/* interval */
#define I(ms) INTERVAL(ms)
+/* store modifier(s) */
+#define SM() STORE()
+/* restore modifier(s) */
+#define RM() RESTORE()
+/* clear modifier(s) */
+#define CM() CLEAR()
/* for backward comaptibility */
#define MD(key) DOWN(KC_##key)