From f52da5065a5b79a4ff36f11916006f3ed26fa689 Mon Sep 17 00:00:00 2001 From: Stefan Dorn Date: Tue, 14 Jun 2016 09:39:45 +0100 Subject: [PATCH] explicit modifiers --- generate_layout.rb | 80 ++- src/keyboard/keyboard.h | 24 + src/keyboard/layout.c | 1136 +++++++++++++++++++-------------------- src/main.c | 162 ++---- src/main.h | 15 +- 5 files changed, 710 insertions(+), 707 deletions(-) diff --git a/generate_layout.rb b/generate_layout.rb index 4e2ad07..8475dc3 100755 --- a/generate_layout.rb +++ b/generate_layout.rb @@ -30,16 +30,19 @@ class Key Layers = [ :basic, :punc, :nav, :func ] Functions = { - # down up - "basic" => [ "&kbfun_press_release", ], - "media" => [ "&kbfun_mediakey_press_release", ], - # down up - "layer" => [ "&kbfun_layer_enable", "&kbfun_layer_disable" ], - "latch" => [ "&kbfun_layer_sticky", ], - # down up - "shifted" => [ "&kbfun_shift_press_release", ], - "ctrled" => [ "&kbfun_control_press_release", ], - "capslock" => [ "&kbfun_2_keys_capslock_press_release", ], + # down up + "basic" => [ "&kbfun_normal_press_release", ], + "media" => [ "&kbfun_mediakey_press_release", ], + # down up + "mod" => [ "&kbfun_modifier_press_release", ], + "sticky_mod" => [ "&kbfun_modifier_sticky", ], + # down up + "layer" => [ "&kbfun_layer_enable", "&kbfun_layer_disable" ], + "sticky" => [ "&kbfun_layer_sticky", ], + # down up + "shifted" => [ "&kbfun_shift_press_release", ], + "ctrled" => [ "&kbfun_control_press_release", ], + "capslock" => [ "&kbfun_capslock_press_release", ], } Keys = { @@ -157,15 +160,15 @@ class Key "insert" => "KEY_Insert", "menu" => "KEY_Application", # - "alt" => "KEY_LeftAlt", - "alt_gr" => "KEY_RightAlt", - "umlaut" => "KEY_RightAlt", - "control" => "KEY_LeftControl", - "control_l" => "KEY_LeftControl", - "control_r" => "KEY_RightControl", - "win" => "KEY_LeftGUI", - "shift_l" => "KEY_LeftShift", - "shift_r" => "KEY_RightShift", + "alt" => "MOD_KEY_LeftAlt", + "alt_gr" => "MOD_KEY_RightAlt", + "umlaut" => "MOD_KEY_RightAlt", + "control" => "MOD_KEY_LeftControl", + "control_l" => "MOD_KEY_LeftControl", + "control_r" => "MOD_KEY_RightControl", + "win" => "MOD_KEY_LeftGUI", + "shift_l" => "MOD_KEY_LeftShift", + "shift_r" => "MOD_KEY_RightShift", "scroll_lock" => "KEY_ScrollLock", # "NULL" => "KEY_NULL", @@ -206,13 +209,32 @@ class Key next end + # FIXME better defaults + type ||= "basic" + keycode = Keys[key] - up, down = Functions[type] || Functions["basic"] + up, down = Functions[type] down ||= up raise "key not found: #{key}" if keycode.nil? raise "type not found: #{type}" if up.nil? or down.nil? + case type + when "layer", "stitcky" + raise "invalid layer: #{key}" unless key.to_i < Key::Layers.size + when "mod", "sticky_mod" + raise "invalid modifier: #{key}" unless keycode.start_with? "MOD_KEY" + end + + case keycode + when /^MOD_KEY/ + case type + when "mod", "sticky_mod", "capslock"; # pass + else + raise "invalid modifier keyfunc: #{key}, #{type}" + end + end + @layers[i] = Layer.new(keycode, down, up) end @@ -281,7 +303,7 @@ keys = [ %w{ tab }, %w{ }, %w{ }, %w{ }, # 1.5 # home # letter type punc type nav type func type - %w{ umlaut }, %w{ }, %w{ }, %w{ }, # 1.5 + %w{ umlaut mod }, %w{ }, %w{ }, %w{ }, # 1.5 %w{ u }, %w{ , }, %w{ left }, %w{ audio_mute media }, %w{ i }, %w{ \{ shifted }, %w{ up }, %w{ audio_vol_up media }, %w{ a }, %w{ ? shifted }, %w{ down }, %w{ audio_vol_down media }, @@ -302,7 +324,7 @@ keys = [ %w{ up }, %w{ }, %w{ }, %w{ }, %w{ down }, %w{ }, %w{ }, %w{ }, %w{ right }, %w{ }, %w{ }, %w{ }, - %w{ win }, %w{ }, %w{ }, %w{ }, + %w{ win mod }, %w{ }, %w{ }, %w{ }, # thumb-top # letter type punc type nav type func type %w{ scroll_lock }, %w{ }, %w{ }, %w{ }, @@ -310,13 +332,13 @@ keys = [ # thumb-double # letter type punc type nav type func type %w{ space }, %w{ }, %w{ }, %w{ }, - %w{ control }, %w{ }, %w{ }, %w{ }, - %w{ alt }, %w{ }, %w{ }, %w{ }, + %w{ control mod }, %w{ }, %w{ }, %w{ }, + %w{ alt mod }, %w{ }, %w{ }, %w{ }, # thumb-home # letter type punc type nav type func type %w{ space }, %w{ }, %w{ }, %w{ }, - %w{ control }, %w{ }, %w{ }, %w{ }, - %w{ alt }, %w{ }, %w{ }, %w{ }, + %w{ control mod }, %w{ }, %w{ }, %w{ }, + %w{ alt mod }, %w{ }, %w{ }, %w{ }, # # right hand # @@ -345,7 +367,7 @@ keys = [ %w{ r }, %w{ / }, %w{ 2 }, %w{ f2 }, %w{ t }, %w{ \} shifted }, %w{ 3 }, %w{ f3 }, %w{ d }, %w{ . }, %w{ 4 }, %w{ f4 }, - %w{ umlaut }, %w{ }, %w{ }, %w{ }, # 1.5 + %w{ umlaut mod }, %w{ }, %w{ }, %w{ }, # 1.5 # bottom # letter type punc type nav type func type %w{ enter }, %w{ }, %w{ }, %w{ }, # 1.5 @@ -370,12 +392,12 @@ keys = [ # letter type punc type nav type func type %w{ menu }, %w{ }, %w{ }, %w{ }, %w{ func layer }, %w{ }, %w{ }, %w{ }, - %w{ punc latch }, %w{ punc layer }, %w{ NULL }, %w{ NULL }, + %w{ punc sticky }, %w{ punc layer }, %w{ NULL }, %w{ NULL }, # thumb-home # letter type punc type nav type func type %w{ menu }, %w{ }, %w{ }, %w{ }, %w{ func layer }, %w{ }, %w{ }, %w{ }, - %w{ punc latch }, %w{ punc layer }, %w{ NULL }, %w{ NULL }, + %w{ punc sticky }, %w{ punc layer }, %w{ NULL }, %w{ NULL }, ].each_slice(Key::Layers.size).map do |layers| Key.new layers diff --git a/src/keyboard/keyboard.h b/src/keyboard/keyboard.h index 5f85b52..0b92315 100644 --- a/src/keyboard/keyboard.h +++ b/src/keyboard/keyboard.h @@ -352,3 +352,27 @@ static const uint16_t PROGMEM _media_code_lookup_table[] = { AC_REFRESH, // MEDIAKEY_BROWSER_REFRESH AC_BOOKMARKS, // MEDIAKEY_BROWSER_BOOKMARKS }; + +// modifiers + +#define MOD_KEY_LeftControl 0 +#define MOD_KEY_LeftShift 1 +#define MOD_KEY_LeftAlt 2 +#define MOD_KEY_LeftGUI 3 +#define MOD_KEY_RightControl 4 +#define MOD_KEY_RightShift 5 +#define MOD_KEY_RightAlt 6 +#define MOD_KEY_RightGUI 7 + +static const uint8_t PROGMEM _modifier_lookup_table[] = { + KEY_LeftControl, + KEY_LeftShift, + KEY_LeftAlt, + KEY_LeftGUI, + KEY_RightControl, + KEY_RightShift, + KEY_RightAlt, + KEY_RightGUI, +}; + +#define MODIFIERS sizeof(_modifier_lookup_table) diff --git a/src/keyboard/layout.c b/src/keyboard/layout.c index adc525a..f77fc1d 100644 --- a/src/keyboard/layout.c +++ b/src/keyboard/layout.c @@ -19,13 +19,13 @@ static const keycode PROGMEM _kb_layout[KB_LAYERS][KB_ROWS][KB_COLUMNS] (keycode) KEY_c_C, (keycode) KEY_w_W, (keycode) KEY_Tab, -(keycode) KEY_RightAlt, +(keycode) MOD_KEY_RightAlt, (keycode) KEY_u_U, (keycode) KEY_i_I, (keycode) KEY_a_A, (keycode) KEY_e_E, (keycode) KEY_o_O, -(keycode) KEY_LeftShift, +(keycode) MOD_KEY_LeftShift, (keycode) KEY_5_Percent, (keycode) KEY_8_Asterisk, (keycode) KEY_Semicolon_Colon, @@ -36,15 +36,15 @@ static const keycode PROGMEM _kb_layout[KB_LAYERS][KB_ROWS][KB_COLUMNS] (keycode) KEY_UpArrow, (keycode) KEY_DownArrow, (keycode) KEY_RightArrow, -(keycode) KEY_LeftGUI, +(keycode) MOD_KEY_LeftGUI, (keycode) KEY_ScrollLock, (keycode) 3, (keycode) KEY_Spacebar, -(keycode) KEY_LeftControl, -(keycode) KEY_LeftAlt, +(keycode) MOD_KEY_LeftControl, +(keycode) MOD_KEY_LeftAlt, (keycode) KEY_Spacebar, -(keycode) KEY_LeftControl, -(keycode) KEY_LeftAlt, +(keycode) MOD_KEY_LeftControl, +(keycode) MOD_KEY_LeftAlt, (keycode) KEY_5_Percent, (keycode) KEY_6_Caret, (keycode) KEY_7_Ampersand, @@ -64,14 +64,14 @@ static const keycode PROGMEM _kb_layout[KB_LAYERS][KB_ROWS][KB_COLUMNS] (keycode) KEY_r_R, (keycode) KEY_t_T, (keycode) KEY_d_D, -(keycode) KEY_RightAlt, +(keycode) MOD_KEY_RightAlt, (keycode) KEY_ReturnEnter, (keycode) KEY_b_B, (keycode) KEY_m_M, (keycode) KEY_j_J, (keycode) KEY_y_Y, (keycode) KEY_Semicolon_Colon, -(keycode) KEY_RightShift, +(keycode) MOD_KEY_RightShift, (keycode) 2, (keycode) KEY_LeftArrow, (keycode) KEY_UpArrow, @@ -102,13 +102,13 @@ KB_MATRIX_LAYER( (keycode) KEY_Comma_LessThan, (keycode) KEY_Backslash_Pipe, (keycode) KEY_Tab, -(keycode) KEY_RightAlt, +(keycode) MOD_KEY_RightAlt, (keycode) KEY_Comma_LessThan, (keycode) KEY_LeftBracket_LeftBrace, (keycode) KEY_Slash_Question, (keycode) KEY_1_Exclamation, (keycode) KEY_9_LeftParenthesis, -(keycode) KEY_LeftShift, +(keycode) MOD_KEY_LeftShift, (keycode) KEY_GraveAccent_Tilde, (keycode) KEY_6_Caret, (keycode) KEY_Backslash_Pipe, @@ -119,15 +119,15 @@ KB_MATRIX_LAYER( (keycode) KEY_UpArrow, (keycode) KEY_DownArrow, (keycode) KEY_RightArrow, -(keycode) KEY_LeftGUI, +(keycode) MOD_KEY_LeftGUI, (keycode) KEY_ScrollLock, (keycode) 3, (keycode) KEY_Spacebar, -(keycode) KEY_LeftControl, -(keycode) KEY_LeftAlt, +(keycode) MOD_KEY_LeftControl, +(keycode) MOD_KEY_LeftAlt, (keycode) KEY_Spacebar, -(keycode) KEY_LeftControl, -(keycode) KEY_LeftAlt, +(keycode) MOD_KEY_LeftControl, +(keycode) MOD_KEY_LeftAlt, (keycode) KEY_F5, (keycode) KEY_F6, (keycode) KEY_F7, @@ -147,14 +147,14 @@ KB_MATRIX_LAYER( (keycode) KEY_Slash_Question, (keycode) KEY_RightBracket_RightBrace, (keycode) KEY_Period_GreaterThan, -(keycode) KEY_RightAlt, +(keycode) MOD_KEY_RightAlt, (keycode) KEY_ReturnEnter, (keycode) KEY_Equal_Plus, (keycode) KEY_4_Dollar, (keycode) KEY_7_Ampersand, (keycode) KEY_3_Pound, (keycode) KEY_6_Caret, -(keycode) KEY_RightShift, +(keycode) MOD_KEY_RightShift, (keycode) 2, (keycode) KEY_LeftArrow, (keycode) KEY_UpArrow, @@ -185,13 +185,13 @@ KB_MATRIX_LAYER( (keycode) KEY_DeleteForward, (keycode) KEY_Insert, (keycode) KEY_Tab, -(keycode) KEY_RightAlt, +(keycode) MOD_KEY_RightAlt, (keycode) KEY_LeftArrow, (keycode) KEY_UpArrow, (keycode) KEY_DownArrow, (keycode) KEY_RightArrow, (keycode) KEY_Tab, -(keycode) KEY_LeftShift, +(keycode) MOD_KEY_LeftShift, (keycode) KEY_Home, (keycode) KEY_PageUp, (keycode) KEY_PageDown, @@ -202,15 +202,15 @@ KB_MATRIX_LAYER( (keycode) KEY_UpArrow, (keycode) KEY_DownArrow, (keycode) KEY_RightArrow, -(keycode) KEY_LeftGUI, +(keycode) MOD_KEY_LeftGUI, (keycode) KEY_ScrollLock, (keycode) 3, (keycode) KEY_Spacebar, -(keycode) KEY_LeftControl, -(keycode) KEY_LeftAlt, +(keycode) MOD_KEY_LeftControl, +(keycode) MOD_KEY_LeftAlt, (keycode) KEY_Spacebar, -(keycode) KEY_LeftControl, -(keycode) KEY_LeftAlt, +(keycode) MOD_KEY_LeftControl, +(keycode) MOD_KEY_LeftAlt, (keycode) KEY_F5, (keycode) KEY_F6, (keycode) KEY_F7, @@ -230,14 +230,14 @@ KB_MATRIX_LAYER( (keycode) KEY_2_At, (keycode) KEY_3_Pound, (keycode) KEY_4_Dollar, -(keycode) KEY_RightAlt, +(keycode) MOD_KEY_RightAlt, (keycode) KEY_ReturnEnter, (keycode) KEY_9_LeftParenthesis, (keycode) KEY_5_Percent, (keycode) KEY_6_Caret, (keycode) KEY_7_Ampersand, (keycode) KEY_8_Asterisk, -(keycode) KEY_RightShift, +(keycode) MOD_KEY_RightShift, (keycode) 2, (keycode) KEY_LeftArrow, (keycode) KEY_UpArrow, @@ -268,13 +268,13 @@ KB_MATRIX_LAYER( (keycode) KEY_DeleteForward, (keycode) KEY_Insert, (keycode) KEY_Tab, -(keycode) KEY_RightAlt, +(keycode) MOD_KEY_RightAlt, (keycode) MEDIAKEY_AUDIO_MUTE, (keycode) MEDIAKEY_AUDIO_VOL_UP, (keycode) MEDIAKEY_AUDIO_VOL_DOWN, (keycode) MEDIAKEY_NEXT_TRACK, (keycode) MEDIAKEY_PREV_TRACK, -(keycode) KEY_LeftShift, +(keycode) MOD_KEY_LeftShift, (keycode) KEY_Home, (keycode) KEY_PageUp, (keycode) KEY_PageDown, @@ -285,15 +285,15 @@ KB_MATRIX_LAYER( (keycode) KEY_UpArrow, (keycode) KEY_DownArrow, (keycode) KEY_RightArrow, -(keycode) KEY_LeftGUI, +(keycode) MOD_KEY_LeftGUI, (keycode) KEY_ScrollLock, (keycode) 3, (keycode) KEY_Spacebar, -(keycode) KEY_LeftControl, -(keycode) KEY_LeftAlt, +(keycode) MOD_KEY_LeftControl, +(keycode) MOD_KEY_LeftAlt, (keycode) KEY_Spacebar, -(keycode) KEY_LeftControl, -(keycode) KEY_LeftAlt, +(keycode) MOD_KEY_LeftControl, +(keycode) MOD_KEY_LeftAlt, (keycode) KEY_F5, (keycode) KEY_F6, (keycode) KEY_F7, @@ -313,14 +313,14 @@ KB_MATRIX_LAYER( (keycode) KEY_F2, (keycode) KEY_F3, (keycode) KEY_F4, -(keycode) KEY_RightAlt, +(keycode) MOD_KEY_RightAlt, (keycode) KEY_ReturnEnter, (keycode) KEY_F9, (keycode) KEY_F5, (keycode) KEY_F6, (keycode) KEY_F7, (keycode) KEY_F8, -(keycode) KEY_RightShift, +(keycode) MOD_KEY_RightShift, (keycode) 2, (keycode) KEY_LeftArrow, (keycode) KEY_UpArrow, @@ -336,666 +336,666 @@ KB_MATRIX_LAYER( (keycode) KEY_NULL), }; static const keyfunc PROGMEM _kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { KB_MATRIX_LAYER( -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_capslock_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_capslock_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_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_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, (keyfunc) &kbfun_layer_sticky, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, (keyfunc) &kbfun_layer_sticky), KB_MATRIX_LAYER( -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, +(keyfunc) &kbfun_capslock_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_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_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, (keyfunc) &kbfun_layer_enable), KB_MATRIX_LAYER( -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_capslock_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_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_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release), +(keyfunc) &kbfun_normal_press_release), KB_MATRIX_LAYER( -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_mediakey_press_release, (keyfunc) &kbfun_mediakey_press_release, (keyfunc) &kbfun_mediakey_press_release, (keyfunc) &kbfun_mediakey_press_release, (keyfunc) &kbfun_mediakey_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_capslock_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_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_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_enable, -(keyfunc) &kbfun_press_release), +(keyfunc) &kbfun_normal_press_release), }; static const keyfunc PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { KB_MATRIX_LAYER( -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_capslock_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_capslock_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_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_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, (keyfunc) &kbfun_layer_sticky, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, (keyfunc) &kbfun_layer_sticky), KB_MATRIX_LAYER( -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, +(keyfunc) &kbfun_capslock_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_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_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, (keyfunc) &kbfun_layer_disable), KB_MATRIX_LAYER( -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_capslock_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_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_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release), +(keyfunc) &kbfun_normal_press_release), KB_MATRIX_LAYER( -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, (keyfunc) &kbfun_mediakey_press_release, (keyfunc) &kbfun_mediakey_press_release, (keyfunc) &kbfun_mediakey_press_release, (keyfunc) &kbfun_mediakey_press_release, (keyfunc) &kbfun_mediakey_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_shift_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_2_keys_capslock_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_modifier_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_capslock_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_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_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release, -(keyfunc) &kbfun_press_release, +(keyfunc) &kbfun_normal_press_release, +(keyfunc) &kbfun_normal_press_release, (keyfunc) &kbfun_layer_disable, -(keyfunc) &kbfun_press_release), +(keyfunc) &kbfun_normal_press_release), }; diff --git a/src/main.c b/src/main.c index 9901531..35ad0e8 100644 --- a/src/main.c +++ b/src/main.c @@ -254,75 +254,47 @@ keyfunc kb_keyfunc_release (layer l, u8 row, u8 col) { return (keyfunc) pgm_read // ---------------------------------------------------------------------------- // basic keypresses -void _kbfun_press_release(bool press, keycode key) { - // no-op - if (key == 0) { return; } +void _kbfun_normal_press_release(bool press, keycode key) { + if (key == 0) { return; } // noop if (press) { - _kbfun_press(key); + for (u8 i=0; i < sizeof(keyboard_keys); i++) { + if (keyboard_keys[i] == 0) { + keyboard_keys[i] = key; + return; + } + } } else { - _kbfun_release(key); - } -} - -void _kbfun_press(keycode key) { - // modifier keys - switch (key) { - case KEY_LeftControl: keyboard_modifier_keys |= (1<<0); return; - case KEY_LeftShift: keyboard_modifier_keys |= (1<<1); return; - case KEY_LeftAlt: keyboard_modifier_keys |= (1<<2); return; - case KEY_LeftGUI: keyboard_modifier_keys |= (1<<3); return; - case KEY_RightControl: keyboard_modifier_keys |= (1<<4); return; - case KEY_RightShift: keyboard_modifier_keys |= (1<<5); return; - case KEY_RightAlt: keyboard_modifier_keys |= (1<<6); return; - case KEY_RightGUI: keyboard_modifier_keys |= (1<<7); return; - } - -// all others - for (u8 i=0; i < sizeof(keyboard_keys); i++) { - if (keyboard_keys[i] == 0) { - keyboard_keys[i] = key; - return; + for (u8 i=0; i < sizeof(keyboard_keys); i++) { + if (keyboard_keys[i] == key) { + keyboard_keys[i] = 0; + return; + } } } } -void _kbfun_release(keycode key) { - // modifier keys - switch (key) { - case KEY_LeftControl: keyboard_modifier_keys &= ~(1<<0); return; - case KEY_LeftShift: keyboard_modifier_keys &= ~(1<<1); return; - case KEY_LeftAlt: keyboard_modifier_keys &= ~(1<<2); return; - case KEY_LeftGUI: keyboard_modifier_keys &= ~(1<<3); return; - case KEY_RightControl: keyboard_modifier_keys &= ~(1<<4); return; - case KEY_RightShift: keyboard_modifier_keys &= ~(1<<5); return; - case KEY_RightAlt: keyboard_modifier_keys &= ~(1<<6); return; - case KEY_RightGUI: keyboard_modifier_keys &= ~(1<<7); return; - } - - // all others - for (u8 i=0; i < sizeof(keyboard_keys); i++) { - if (keyboard_keys[i] == key) { - keyboard_keys[i] = 0; - return; +void _kbfun_mediakey_press_release(bool press, keycode key) { + media_keycode media_key = _media_code_lookup_table[key]; + if (press) { + consumer_key = media_key; + } else { + // only one media key can be pressed at a time, so only clear most recent one + if (media_key == consumer_key) { + consumer_key = 0; } } } -bool _kbfun_is_pressed(keycode key) { - // modifier keys - switch (key) { - case KEY_LeftControl: return (keyboard_modifier_keys & (1<<0)); - case KEY_LeftShift: return (keyboard_modifier_keys & (1<<1)); - case KEY_LeftAlt: return (keyboard_modifier_keys & (1<<2)); - case KEY_LeftGUI: return (keyboard_modifier_keys & (1<<3)); - case KEY_RightControl: return (keyboard_modifier_keys & (1<<4)); - case KEY_RightShift: return (keyboard_modifier_keys & (1<<5)); - case KEY_RightAlt: return (keyboard_modifier_keys & (1<<6)); - case KEY_RightGUI: return (keyboard_modifier_keys & (1<<7)); +void _kbfun_modifier_press_release(bool press, keycode key) { + if (press) { + keyboard_modifier_keys |= (1<