Skip to content

Commit

Permalink
Add easier way to set default single layer (#24376)
Browse files Browse the repository at this point in the history
* Add set_single_default_layer to match set_single_persistent_default_layer
* Implements exactly the same behavior, except the write to EEPROM
  • Loading branch information
andrebrait authored Oct 6, 2024
1 parent 208ebf5 commit 3cf94cb
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 3 deletions.
1 change: 1 addition & 0 deletions docs/feature_layers.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ There are a number of functions (and variables) related to how you can use or ma
| `default_layer_and(layer_mask)` | Turns on layers based on matching enabled bits between specifed layer and existing default layer state. |
| `default_layer_xor(layer_mask)` | Turns on layers based on non-matching bits between specifed layer and existing default layer state. |
| `default_layer_debug(layer_mask)` | Prints out the current bit mask and highest active default layer to debugger console. |
| [`set_single_default_layer(layer)`](ref_functions.md#setting-the-persistent-default-layer) | Sets the default layer, but does _not_ write it to persistent memory (EEPROM). |
| [`set_single_persistent_default_layer(layer)`](ref_functions.md#setting-the-persistent-default-layer) | Sets the default layer and writes it to persistent memory (EEPROM). |
| [`update_tri_layer(x, y, z)`](ref_functions.md#update_tri_layerx-y-z) | Checks if layers `x` and `y` are both on, and sets `z` based on that (on if both on, otherwise off). |
| [`update_tri_layer_state(state, x, y, z)`](ref_functions.md#update_tri_layer_statestate-x-y-z) | Does the same as `update_tri_layer(x, y, z)`, but from `layer_state_set_*` functions. |
Expand Down
4 changes: 3 additions & 1 deletion docs/ref_functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
Do you want to set the default layer, so that it's retained even after you unplug the board? If so, this is the function for you.
To use this, you would use `set_single_persistent_default_layer(layer)`. If you have a name defined for your layer, you can use that instead (such as _QWERTY, _DVORAK or _COLEMAK).
To do this, you would use `set_single_persistent_default_layer(layer)`. If you have a name defined for your layer, you can use that instead (such as _QWERTY, _DVORAK or _COLEMAK).
This will set the default layer, update the persistent settings, and play a tune if you have [Audio](features/audio) enabled on your board, and the default layer sounds set.
Expand All @@ -82,6 +82,8 @@ To configure the default layer sounds, you would want to define this in your `co
}
```

If you do not require it to be retained after you unplug the board, use `set_single_default_layer(layer)` instead.


::: tip
There are a large number of predefined songs in [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h) that you can use.
Expand Down
8 changes: 6 additions & 2 deletions quantum/quantum.c
Original file line number Diff line number Diff line change
Expand Up @@ -477,14 +477,18 @@ bool process_record_quantum(keyrecord_t *record) {
return process_action_kb(record);
}

void set_single_persistent_default_layer(uint8_t default_layer) {
void set_single_default_layer(uint8_t default_layer) {
#if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS)
PLAY_SONG(default_layer_songs[default_layer]);
#endif
eeconfig_update_default_layer((layer_state_t)1 << default_layer);
default_layer_set((layer_state_t)1 << default_layer);
}

void set_single_persistent_default_layer(uint8_t default_layer) {
eeconfig_update_default_layer((layer_state_t)1 << default_layer);
set_single_default_layer(default_layer);
}

//------------------------------------------------------------------------------
// Override these functions in your keymap file to play different tunes on
// different events such as startup and bootloader jump
Expand Down
1 change: 1 addition & 0 deletions quantum/quantum.h
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ extern layer_state_t layer_state;
# include "os_detection.h"
#endif

void set_single_default_layer(uint8_t default_layer);
void set_single_persistent_default_layer(uint8_t default_layer);

#define IS_LAYER_ON(layer) layer_state_is(layer)
Expand Down

0 comments on commit 3cf94cb

Please sign in to comment.