3cf94cb3083a8c7de632153bf33e569ea9f90526

Author
Andre Brait <andrebrait@gmail.com>
Committer
GitHub <noreply@github.com>
Date

Message

Add easier way to set default single layer (#24376)

* Add set_single_default_layer to match set_single_persistent_default_layer
* Implements exactly the same behavior, except the write to EEPROM

Diff

 1diff --git a/docs/feature_layers.md b/docs/feature_layers.md
 2index fe9932fadbe6e5959c6c4456af709dfdf74b1bdb..30ab7132226201b5f5bcb749be0a2003d617a27c 100644
 3--- a/docs/feature_layers.md
 4+++ b/docs/feature_layers.md
 5@@ -74,6 +74,7 @@ There are a number of functions (and variables) related to how you can use or ma
 6 | `default_layer_and(layer_mask)`              | Turns on layers based on matching enabled bits between specifed layer and existing default layer state. |
 7 | `default_layer_xor(layer_mask)`              | Turns on layers based on non-matching bits between specifed layer and existing default layer state.     |
 8 | `default_layer_debug(layer_mask)`            | Prints out the current bit mask and highest active default layer to debugger console.                   |
 9+| [`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). | 
10 | [`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).  |
11 | [`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). |
12 | [`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. |
13diff --git a/docs/ref_functions.md b/docs/ref_functions.md
14index 3304981ef5652090fd591c3a1a4a1f17f1119a07..599515ebc1e1237c3ab8aec1e412fd3898a23238 100644
15--- a/docs/ref_functions.md
16+++ b/docs/ref_functions.md
17@@ -69,7 +69,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
18 
19 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.
20 
21-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).
22+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).
23 
24 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.
25 
26@@ -82,6 +82,8 @@ To configure the default layer sounds, you would want to define this in your `co
27                             }
28 ```
29 
30+If you do not require it to be retained after you unplug the board, use `set_single_default_layer(layer)` instead.
31+
32 
33 ::: tip
34 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.
35diff --git a/quantum/quantum.c b/quantum/quantum.c
36index db323e31c9883686868fe9e3b920f12ce07ea3aa..892beee1be90fbcb26bed5b38ff3baa6dc41440d 100644
37--- a/quantum/quantum.c
38+++ b/quantum/quantum.c
39@@ -477,14 +477,18 @@ bool process_record_quantum(keyrecord_t *record) {
40     return process_action_kb(record);
41 }
42 
43-void set_single_persistent_default_layer(uint8_t default_layer) {
44+void set_single_default_layer(uint8_t default_layer) {
45 #if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS)
46     PLAY_SONG(default_layer_songs[default_layer]);
47 #endif
48-    eeconfig_update_default_layer((layer_state_t)1 << default_layer);
49     default_layer_set((layer_state_t)1 << default_layer);
50 }
51 
52+void set_single_persistent_default_layer(uint8_t default_layer) {
53+    eeconfig_update_default_layer((layer_state_t)1 << default_layer);
54+    set_single_default_layer(default_layer);
55+}
56+
57 //------------------------------------------------------------------------------
58 // Override these functions in your keymap file to play different tunes on
59 // different events such as startup and bootloader jump
60diff --git a/quantum/quantum.h b/quantum/quantum.h
61index 5446ab1ad71957e4c9b954554a9ae5d2757ce1da..b60d8a86bf7aaa7e72f79ce2ffa2cd174d9f9c73 100644
62--- a/quantum/quantum.h
63+++ b/quantum/quantum.h
64@@ -240,6 +240,7 @@ extern layer_state_t layer_state;
65 #    include "os_detection.h"
66 #endif
67 
68+void set_single_default_layer(uint8_t default_layer);
69 void set_single_persistent_default_layer(uint8_t default_layer);
70 
71 #define IS_LAYER_ON(layer) layer_state_is(layer)