@@ -32,6 +32,10 @@ struct caps_word_continue_item {
32
32
33
33
struct behavior_caps_word_config {
34
34
zmk_mod_flags_t mods ;
35
+ int8_t layers ;
36
+ bool ignore_alphas ;
37
+ bool ignore_numbers ;
38
+ bool ignore_modifiers ;
35
39
uint8_t index ;
36
40
uint8_t continuations_count ;
37
41
struct caps_word_continue_item continuations [];
@@ -44,12 +48,22 @@ struct behavior_caps_word_data {
44
48
static void activate_caps_word (const struct device * dev ) {
45
49
struct behavior_caps_word_data * data = dev -> data ;
46
50
51
+ const struct behavior_caps_word_config * config = dev -> config ;
52
+
53
+ if (config -> layers > -1 ) {
54
+ zmk_keymap_layer_activate (config -> layers );
55
+ }
47
56
data -> active = true;
48
57
}
49
58
50
59
static void deactivate_caps_word (const struct device * dev ) {
51
60
struct behavior_caps_word_data * data = dev -> data ;
52
61
62
+ const struct behavior_caps_word_config * config = dev -> config ;
63
+
64
+ if (config -> layers > -1 ) {
65
+ zmk_keymap_layer_deactivate (config -> layers );
66
+ }
53
67
data -> active = false;
54
68
}
55
69
@@ -120,8 +134,10 @@ static void caps_word_enhance_usage(const struct behavior_caps_word_config *conf
120
134
return ;
121
135
}
122
136
123
- LOG_DBG ("Enhancing usage 0x%02X with modifiers: 0x%02X" , ev -> keycode , config -> mods );
124
- ev -> implicit_modifiers |= config -> mods ;
137
+ if (config -> mods != 0 ) {
138
+ LOG_DBG ("Enhancing usage 0x%02X with modifiers: 0x%02X" , ev -> keycode , config -> mods );
139
+ ev -> implicit_modifiers |= config -> mods ;
140
+ }
125
141
}
126
142
127
143
static int caps_word_keycode_state_changed_listener (const zmk_event_t * eh ) {
@@ -145,8 +161,9 @@ static int caps_word_keycode_state_changed_listener(const zmk_event_t *eh) {
145
161
146
162
caps_word_enhance_usage (config , ev );
147
163
148
- if (!caps_word_is_alpha (ev -> keycode ) && !caps_word_is_numeric (ev -> keycode ) &&
149
- !is_mod (ev -> usage_page , ev -> keycode ) &&
164
+ if ((!caps_word_is_alpha (ev -> keycode ) || !config -> ignore_alphas ) &&
165
+ (!caps_word_is_numeric (ev -> keycode ) || !config -> ignore_numbers ) &&
166
+ (!is_mod (ev -> usage_page , ev -> keycode ) || !config -> ignore_modifiers ) &&
150
167
!caps_word_is_caps_includelist (config , ev -> usage_page , ev -> keycode ,
151
168
ev -> implicit_modifiers )) {
152
169
LOG_DBG ("Deactivating caps_word for 0x%02X - 0x%02X" , ev -> usage_page , ev -> keycode );
@@ -177,7 +194,11 @@ static int behavior_caps_word_init(const struct device *dev) {
177
194
static struct behavior_caps_word_data behavior_caps_word_data_##n = {.active = false}; \
178
195
static struct behavior_caps_word_config behavior_caps_word_config_##n = { \
179
196
.index = n, \
180
- .mods = DT_INST_PROP_OR(n, mods, MOD_LSFT), \
197
+ .mods = DT_INST_PROP_OR(n, mods, 0), \
198
+ .layers = DT_INST_PROP_OR(n, layers, -1), \
199
+ .ignore_alphas = DT_INST_PROP(n, ignore_alphas), \
200
+ .ignore_numbers = DT_INST_PROP(n, ignore_numbers), \
201
+ .ignore_modifiers = DT_INST_PROP(n, ignore_modifiers), \
181
202
.continuations = {LISTIFY(DT_INST_PROP_LEN(n, continue_list), BREAK_ITEM, (, ), n)}, \
182
203
.continuations_count = DT_INST_PROP_LEN(n, continue_list), \
183
204
}; \
0 commit comments