simplify layer functions by using the keycode again

master
Stefan Dorn 2016-02-04 15:28:11 +00:00
parent c88a558e8c
commit 8b78e8b3a4
5 changed files with 183 additions and 210 deletions

View File

@ -24,12 +24,8 @@ class Key
"toggle" => [ "&kbfun_toggle", ],
"transparent" => [ "&kbfun_transparent", ],
# down up
"punc" => [ "&kbfun_layer_enable_1", "&kbfun_layer_disable_1" ],
"nav" => [ "&kbfun_layer_enable_2", "&kbfun_layer_disable_2" ],
"func" => [ "&kbfun_layer_enable_3", "&kbfun_layer_disable_3" ],
"latch_punc" => [ "&kbfun_layer_sticky_1", ],
"latch_nav" => [ "&kbfun_layer_sticky_2", ],
"latch_func" => [ "&kbfun_layer_sticky_3", ],
"layer" => [ "&kbfun_layer_enable", "&kbfun_layer_disable" ],
"latch" => [ "&kbfun_layer_sticky", ],
# down up
"shifted" => [ "&kbfun_shift_press_release", ],
"ctrled" => [ "&kbfun_control_press_release", ],
@ -162,8 +158,6 @@ class Key
"shift_r" => "KEY_RightShift",
"scroll_lock" => "KEY_ScrollLock",
#
"MOD" => "NULL",
#
"NULL" => "NULL",
#
"audio_mute" => "MEDIAKEY_AUDIO_MUTE",
@ -187,9 +181,12 @@ class Key
"browser_stop" => "MEDIAKEY_BROWSER_STOP",
"browser_refresh" => "MEDIAKEY_BROWSER_REFRESH",
"browser_bookmarks" => "MEDIAKEY_BROWSER_BOOKMARKS",
}
Layers.each.with_index do |layer, i|
Keys["#{layer}"] = "#{i}"
end
def initialize layers
@layers = layers.map do |key, type|
raise "key not found: #{key}" if not Keys.include? key and not key.nil?
@ -300,7 +297,7 @@ keys = [
# thumb-top
# letter type punc type nav type func type
%w{ scroll_lock }, %w{ }, %w{ }, %w{ },
%w{ MOD func }, %w{ }, %w{ }, %w{ },
%w{ func layer }, %w{ }, %w{ }, %w{ },
# thumb-double
# letter type punc type nav type func type
%w{ space }, %w{ }, %w{ }, %w{ },
@ -351,25 +348,25 @@ keys = [
%w{ shift_r capslock }, %w{ }, %w{ }, %w{ }, # 1.5
# underbottom
# letter type punc type nav type func type
%w{ MOD nav }, %w{ }, %w{ }, %w{ },
%w{ nav layer }, %w{ }, %w{ }, %w{ },
%w{ left }, %w{ }, %w{ }, %w{ },
%w{ up }, %w{ }, %w{ }, %w{ },
%w{ down }, %w{ }, %w{ }, %w{ },
%w{ right }, %w{ }, %w{ }, %w{ },
# thumb-top
# letter type punc type nav type func type
%w{ MOD punc }, %w{ }, %w{ MOD func }, %w{ },
%w{ MOD nav }, %w{ MOD func }, %w{ }, %w{ },
%w{ punc layer }, %w{ }, %w{ func layer }, %w{ },
%w{ nav layer }, %w{ func layer }, %w{ }, %w{ },
# thumb-double
# letter type punc type nav type func type
%w{ menu }, %w{ }, %w{ }, %w{ },
%w{ alt }, %w{ }, %w{ }, %w{ },
%w{ MOD latch_punc }, %w{ MOD punc }, %w{ NULL }, %w{ NULL },
%w{ punc latch }, %w{ punc layer }, %w{ NULL }, %w{ NULL },
# thumb-home
# letter type punc type nav type func type
%w{ menu }, %w{ }, %w{ }, %w{ },
%w{ alt }, %w{ }, %w{ }, %w{ },
%w{ MOD latch_punc }, %w{ MOD punc }, %w{ NULL }, %w{ NULL },
%w{ punc latch }, %w{ punc layer }, %w{ NULL }, %w{ NULL },
].each_slice(Key::Layers.size).map do |layers|
Key.new layers

View File

@ -46,7 +46,7 @@ KEY_DownArrow,
KEY_RightArrow,
KEY_LeftGUI,
KEY_ScrollLock,
NULL,
3,
KEY_Spacebar,
KEY_LeftControl,
KEY_LeftAlt,
@ -80,19 +80,19 @@ KEY_j_J,
KEY_y_Y,
KEY_Semicolon_Colon,
KEY_RightShift,
NULL,
2,
KEY_LeftArrow,
KEY_UpArrow,
KEY_DownArrow,
KEY_RightArrow,
NULL,
NULL,
1,
2,
KEY_Application,
KEY_LeftAlt,
NULL,
1,
KEY_Application,
KEY_LeftAlt,
NULL),
1),
KB_MATRIX_LAYER(
NULL,
@ -169,13 +169,13 @@ NULL,
NULL,
NULL,
NULL,
3,
NULL,
NULL,
1,
NULL,
NULL,
NULL,
NULL,
NULL),
1),
KB_MATRIX_LAYER(
NULL,
@ -251,7 +251,7 @@ NULL,
NULL,
NULL,
NULL,
NULL,
3,
NULL,
NULL,
NULL,
@ -378,7 +378,7 @@ const void_funptr_t PROGMEM _kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS] =
&kbfun_press_release,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_layer_enable_3,
&kbfun_layer_enable,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_press_release,
@ -412,19 +412,19 @@ const void_funptr_t PROGMEM _kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS] =
&kbfun_press_release,
&kbfun_press_release,
&kbfun_2_keys_capslock_press_release,
&kbfun_layer_enable_2,
&kbfun_layer_enable,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_layer_enable_1,
&kbfun_layer_enable_2,
&kbfun_layer_enable,
&kbfun_layer_enable,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_layer_sticky_1,
&kbfun_layer_sticky,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_layer_sticky_1),
&kbfun_layer_sticky),
KB_MATRIX_LAYER(
&kbfun_transparent,
@ -501,13 +501,13 @@ KB_MATRIX_LAYER(
&kbfun_transparent,
&kbfun_transparent,
&kbfun_transparent,
&kbfun_layer_enable_3,
&kbfun_layer_enable,
&kbfun_transparent,
&kbfun_transparent,
&kbfun_layer_enable_1,
&kbfun_layer_enable,
&kbfun_transparent,
&kbfun_transparent,
&kbfun_layer_enable_1),
&kbfun_layer_enable),
KB_MATRIX_LAYER(
&kbfun_transparent,
@ -583,7 +583,7 @@ KB_MATRIX_LAYER(
&kbfun_transparent,
&kbfun_transparent,
&kbfun_transparent,
&kbfun_layer_enable_3,
&kbfun_layer_enable,
&kbfun_transparent,
&kbfun_transparent,
&kbfun_transparent,
@ -710,7 +710,7 @@ const void_funptr_t PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] =
&kbfun_press_release,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_layer_disable_3,
&kbfun_layer_disable,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_press_release,
@ -744,19 +744,19 @@ const void_funptr_t PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] =
&kbfun_press_release,
&kbfun_press_release,
&kbfun_2_keys_capslock_press_release,
&kbfun_layer_disable_2,
&kbfun_layer_disable,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_layer_disable_1,
&kbfun_layer_disable_2,
&kbfun_layer_disable,
&kbfun_layer_disable,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_layer_sticky_1,
&kbfun_layer_sticky,
&kbfun_press_release,
&kbfun_press_release,
&kbfun_layer_sticky_1),
&kbfun_layer_sticky),
KB_MATRIX_LAYER(
&kbfun_transparent,
@ -833,13 +833,13 @@ KB_MATRIX_LAYER(
&kbfun_transparent,
&kbfun_transparent,
&kbfun_transparent,
&kbfun_layer_disable_3,
&kbfun_layer_disable,
&kbfun_transparent,
&kbfun_transparent,
&kbfun_layer_disable_1,
&kbfun_layer_disable,
&kbfun_transparent,
&kbfun_transparent,
&kbfun_layer_disable_1),
&kbfun_layer_disable),
KB_MATRIX_LAYER(
&kbfun_transparent,
@ -915,7 +915,7 @@ KB_MATRIX_LAYER(
&kbfun_transparent,
&kbfun_transparent,
&kbfun_transparent,
&kbfun_layer_disable_3,
&kbfun_layer_disable,
&kbfun_transparent,
&kbfun_transparent,
&kbfun_transparent,

View File

@ -21,22 +21,10 @@ void kbfun_press_release_preserve_sticky (void);
void kbfun_toggle (void);
void kbfun_transparent (void);
// layer push/pop functions
#define define_layer(n) \
void kbfun_layer_enable_##n (void); \
void kbfun_layer_sticky_##n (void); \
void kbfun_layer_disable_##n (void);
define_layer(1);
define_layer(2);
define_layer(3);
define_layer(4);
define_layer(5);
define_layer(6);
define_layer(7);
define_layer(8);
define_layer(9);
define_layer(10);
// layer functions
void kbfun_layer_enable (void);
void kbfun_layer_sticky (void);
void kbfun_layer_disable (void);
// device
void kbfun_jump_to_bootloader (void);

View File

@ -65,17 +65,6 @@ void kbfun_transparent(void) {
* layer functions
* ------------------------------------------------------------------------- */
// all lower layers on a key should be secretly set/unset to enable proper layer stacking
static void layers_enable_downwards(uint8_t layer) {
// TODO
main_layers_enable(layer, eStickyNone);
}
static void layers_disable_downwards(uint8_t layer) {
// TODO
main_layers_disable(layer);
}
// enable given layer
static void layer_enable(uint8_t layer) {
// Only the topmost layer on the stack should be in sticky once state, pop
@ -85,12 +74,12 @@ static void layer_enable(uint8_t layer) {
main_layers_disable_top();
}
layers_enable_downwards(layer);
main_layers_enable(layer, eStickyNone);
}
// disable given layer
static void layer_disable(uint8_t layer) {
layers_disable_downwards(layer);
main_layers_disable(layer);
}
/*
@ -159,20 +148,18 @@ static void layer_sticky(uint8_t layer) {
}
}
// functions for all layers
// actual functions
#define define_layer(n) \
void kbfun_layer_enable_##n (void) { layer_enable(n); } \
void kbfun_layer_sticky_##n (void) { layer_sticky(n); } \
void kbfun_layer_disable_##n (void) { layer_disable(n); }
void kbfun_layer_enable(void) {
uint8_t keycode = _kbfun_get_keycode();
layer_enable(keycode);
}
define_layer(1);
define_layer(2);
define_layer(3);
define_layer(4);
define_layer(5);
define_layer(6);
define_layer(7);
define_layer(8);
define_layer(9);
define_layer(10);
void kbfun_layer_sticky(void) {
uint8_t keycode = _kbfun_get_keycode();
layer_sticky(keycode);
}
void kbfun_layer_disable(void) {
uint8_t keycode = _kbfun_get_keycode();
layer_disable(keycode);
}

View File

@ -167,7 +167,8 @@ void main_layers_enable(uint8_t layer, uint8_t sticky) {
void main_layers_disable(uint8_t layer) {
if (layer >= KB_LAYERS) { return; }
layers[layer].active = false;
// base layer stays always on
if (layer > 0) { layers[layer].active = false; }
if (layer >= layers_top) {
layers_top = _highest_active_layer(1);
}