diff --git a/docs/feature_layers.md b/docs/feature_layers.md index fe9932fadbe6..30ab71322262 100644 --- a/docs/feature_layers.md +++ b/docs/feature_layers.md @@ -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. | diff --git a/docs/ref_functions.md b/docs/ref_functions.md index 3304981ef565..599515ebc1e1 100644 --- a/docs/ref_functions.md +++ b/docs/ref_functions.md @@ -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. @@ -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. diff --git a/quantum/quantum.c b/quantum/quantum.c index db323e31c988..892beee1be90 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -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 diff --git a/quantum/quantum.h b/quantum/quantum.h index 5446ab1ad719..b60d8a86bf7a 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -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)