mirror of
https://github.com/qmk/qmk_firmware.git
synced 2024-11-24 20:32:58 +00:00
Merge b0fbc8a5a3
into 9c86583981
This commit is contained in:
commit
23aa2bd176
@ -33,11 +33,12 @@ For the details about the internals of the dynamic macros, please read the comme
|
||||
There are a number of options added that should allow some additional degree of customization
|
||||
|
||||
|Define |Default |Description |
|
||||
|----------------------------|----------------|-----------------------------------------------------------------------------------------------------------------|
|
||||
|------------------------------------------|----------------|-----------------------------------------------------------------------------------------------------------------|
|
||||
|`DYNAMIC_MACRO_SIZE` |128 |Sets the amount of memory that Dynamic Macros can use. This is a limited resource, dependent on the controller. |
|
||||
|`DYNAMIC_MACRO_USER_CALL` |*Not defined* |Defining this falls back to using the user `keymap.c` file to trigger the macro behavior. |
|
||||
|`DYNAMIC_MACRO_NO_NESTING` |*Not Defined* |Defining this disables the ability to call a macro from another macro (nested macros). |
|
||||
|`DYNAMIC_MACRO_DELAY` |*Not Defined* |Sets the waiting time (ms unit) when sending each key. |
|
||||
|`DYNAMIC_MACRO_KEEP_ORIGINAL_LAYER_STATE` |*Not Defined* |Defining this keeps the layer state when starting to record a macro |
|
||||
|
||||
|
||||
If the LEDs start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by adding the `DYNAMIC_MACRO_SIZE` define in your `config.h` (default value: 128; please read the comments for it in the header).
|
||||
|
@ -89,6 +89,11 @@ __attribute__((weak)) bool dynamic_macro_valid_key_user(uint16_t keycode, keyrec
|
||||
#define DYNAMIC_MACRO_CURRENT_LENGTH(BEGIN, POINTER) ((int)(direction * ((POINTER) - (BEGIN))))
|
||||
#define DYNAMIC_MACRO_CURRENT_CAPACITY(BEGIN, END2) ((int)(direction * ((END2) - (BEGIN)) + 1))
|
||||
|
||||
#ifdef DYNAMIC_MACRO_KEEP_ORIGINAL_LAYER_STATE
|
||||
static layer_state_t dm1_layer_state;
|
||||
static layer_state_t dm2_layer_state;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Start recording of the dynamic macro.
|
||||
*
|
||||
@ -100,8 +105,16 @@ void dynamic_macro_record_start(keyrecord_t **macro_pointer, keyrecord_t *macro_
|
||||
|
||||
dynamic_macro_record_start_kb(direction);
|
||||
|
||||
clear_keyboard();
|
||||
#ifdef DYNAMIC_MACRO_KEEP_ORIGINAL_LAYER_STATE
|
||||
if (direction == 1) {
|
||||
dm1_layer_state = layer_state;
|
||||
} else if (direction == -1) {
|
||||
dm2_layer_state = layer_state;
|
||||
}
|
||||
#else
|
||||
layer_clear();
|
||||
#endif
|
||||
clear_keyboard();
|
||||
*macro_pointer = macro_buffer;
|
||||
}
|
||||
|
||||
@ -118,7 +131,15 @@ void dynamic_macro_play(keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_
|
||||
layer_state_t saved_layer_state = layer_state;
|
||||
|
||||
clear_keyboard();
|
||||
#ifdef DYNAMIC_MACRO_KEEP_ORIGINAL_LAYER_STATE
|
||||
if (direction == 1) {
|
||||
layer_state_set(dm1_layer_state);
|
||||
} else if (direction == -1) {
|
||||
layer_state_set(dm2_layer_state);
|
||||
}
|
||||
#else
|
||||
layer_clear();
|
||||
#endif
|
||||
|
||||
while (macro_buffer != macro_end) {
|
||||
process_record(macro_buffer);
|
||||
|
Loading…
Reference in New Issue
Block a user