diff --git a/generate_layout.rb b/generate_layout.rb index ff450a1..07e7625 100755 --- a/generate_layout.rb +++ b/generate_layout.rb @@ -31,18 +31,18 @@ class Key Functions = { # down up - "basic" => [ "&kbfun_normal_press_release", ], - "media" => [ "&kbfun_mediakey_press_release", ], + "basic" => [ "&kbfun_normal_press_release", ], + "media" => [ "&kbfun_mediakey_press_release", ], # down up - "mod" => [ "&kbfun_modifier_press_release", ], - "sticky_mod" => [ "&kbfun_modifier_sticky", ], + "mod" => [ "&kbfun_modifier_press_release", ], + "sticky_mod" => [ "&kbfun_modifier_sticky", ], # down up - "layer" => [ "&kbfun_layer_enable", "&kbfun_layer_disable" ], - "sticky" => [ "&kbfun_layer_sticky", ], + "layer" => [ "&kbfun_layer_press_release", ], + "sticky" => [ "&kbfun_layer_sticky", ], # down up - "shifted" => [ "&kbfun_shift_press_release", ], - "ctrled" => [ "&kbfun_control_press_release", ], - "capslock" => [ "&kbfun_capslock_press_release", ], + "shifted" => [ "&kbfun_shift_press_release", ], + "ctrled" => [ "&kbfun_control_press_release", ], + "capslock" => [ "&kbfun_capslock_press_release", ], } Keys = { diff --git a/src/keyboard/layout.c b/src/keyboard/layout.c index fa36538..4be5d04 100644 --- a/src/keyboard/layout.c +++ b/src/keyboard/layout.c @@ -370,7 +370,7 @@ static const keyfunc PROGMEM _kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS] (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_modifier_press_release, @@ -404,18 +404,18 @@ static const keyfunc PROGMEM _kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS] (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_capslock_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_layer_sticky, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_layer_sticky), KB_MATRIX_LAYER( @@ -453,7 +453,7 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_modifier_press_release, @@ -487,19 +487,19 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_capslock_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_layer_enable), +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release), KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, @@ -536,7 +536,7 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_modifier_press_release, @@ -570,18 +570,18 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_capslock_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release), KB_MATRIX_LAYER( @@ -619,7 +619,7 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_modifier_press_release, @@ -653,18 +653,18 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_capslock_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_enable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release), }; static const keyfunc PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { KB_MATRIX_LAYER( @@ -702,7 +702,7 @@ static const keyfunc PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_modifier_press_release, @@ -736,18 +736,18 @@ static const keyfunc PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_capslock_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_layer_sticky, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_layer_sticky), KB_MATRIX_LAYER( @@ -785,7 +785,7 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_modifier_press_release, @@ -819,19 +819,19 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_capslock_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_layer_disable), +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release), KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, @@ -868,7 +868,7 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_modifier_press_release, @@ -902,18 +902,18 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_capslock_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release), KB_MATRIX_LAYER( @@ -951,7 +951,7 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_modifier_press_release, @@ -985,17 +985,17 @@ KB_MATRIX_LAYER( (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_capslock_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_normal_press_release, -(keyfunc) &kbfun_layer_disable, +(keyfunc) &kbfun_layer_press_release, (keyfunc) &kbfun_normal_press_release), }; diff --git a/src/main.c b/src/main.c index 86ed799..88ea59d 100644 --- a/src/main.c +++ b/src/main.c @@ -214,25 +214,8 @@ void layer_disable(layer l) { } } -// disable the highest active layer -void layer_disable_top() { - layer_disable(layers_top); -} - -// return layer offset elements below the top -layer layer_peek(layer offset) { - return highest_active_layer(offset); -} - -bool is_layer_enable(keyfunc f) { - if (f == &kbfun_layer_enable || f == &kbfun_layer_sticky) { - return true; - } - return false; -} - -bool is_layer_disable(keyfunc f) { - if (f == &kbfun_layer_disable || f == &kbfun_layer_sticky) { +bool is_layer_keyfunc(keyfunc f) { + if (f == &kbfun_layer_press_release || f == &kbfun_layer_sticky) { return true; } return false; @@ -245,7 +228,7 @@ void layer_enable_upto(layer max_layer) { for (layer l=0; l <= KB_LAYERS; l++) { void (*key_function)(void) = kb_keyfunc_press(l, current_row, current_col); - if (is_layer_enable(key_function)) { + if (is_layer_keyfunc(key_function)) { layer enable_layer = (layer) kb_keycode(l, current_row, current_col); if (enable_layer <= max_layer) { layer_enable(enable_layer); @@ -361,25 +344,22 @@ void kbfun_modifier_press_release() { _kbfun_modifier_press_release(current_is_pressed, current_keycode); } -// enable layer -void kbfun_layer_enable() { +// layer key +void kbfun_layer_press_release() { layer_sticky_done = true; // don't disable sticky mods! - layer l = (layer) current_keycode; - layer_enable_upto(l); -} + if (current_is_pressed) { + layer l = (layer) current_keycode; + layer_enable_upto(l); + } else { + // letting go off a key releases *all* layers on that key + for (layer l=0; l <= KB_LAYERS; l++) { + void (*key_function)(void) = kb_keyfunc_release(l, current_row, current_col); -// disable layer -void kbfun_layer_disable() { - layer_sticky_done = true; // don't disable sticky mods! - - // letting go off a key releases *all* layers on that key - for (layer l=0; l <= KB_LAYERS; l++) { - void (*key_function)(void) = kb_keyfunc_release(l, current_row, current_col); - - if (is_layer_disable(key_function)) { - layer disable_layer = (layer) kb_keycode(l, current_row, current_col); - layer_disable(disable_layer); + if (is_layer_keyfunc(key_function)) { + layer disable_layer = (layer) kb_keycode(l, current_row, current_col); + layer_disable(disable_layer); + } } } } diff --git a/src/main.h b/src/main.h index a3d5e12..e8f4e3d 100644 --- a/src/main.h +++ b/src/main.h @@ -19,13 +19,9 @@ void _kbfun_normal_press_release(bool press,keycode key); keyfunc kb_keyfunc_release(layer l,u8 row,u8 col); keyfunc kb_keyfunc_press(layer l,u8 row,u8 col); void layer_enable_upto(layer max_layer); -void kbfun_layer_disable(); -bool is_layer_disable(keyfunc f); void kbfun_layer_sticky(); -void kbfun_layer_enable(); -bool is_layer_enable(keyfunc f); -layer layer_peek(layer offset); -void layer_disable_top(); +void kbfun_layer_press_release(); +bool is_layer_keyfunc(keyfunc f); void layer_enable(layer l); layer highest_active_layer(layer offset); void layer_disable(layer l);