From f9a4c2551d9b7af5c52319b9a72671d08dcbf65b Mon Sep 17 00:00:00 2001 From: Stefan Dorn Date: Tue, 14 Jun 2016 11:57:20 +0100 Subject: [PATCH] default keyfuncs for keys --- generate_layout.rb | 351 +++++++++++++++++++++++---------------------- 1 file changed, 177 insertions(+), 174 deletions(-) diff --git a/generate_layout.rb b/generate_layout.rb index 5b2169d..c58911d 100755 --- a/generate_layout.rb +++ b/generate_layout.rb @@ -110,8 +110,8 @@ class Key "f24" => "KEY_F24", # "\\" => "KEY_Backslash_Pipe", - "{" => "KEY_LeftBracket_LeftBrace", - "}" => "KEY_RightBracket_RightBrace", + "{" => ["KEY_LeftBracket_LeftBrace", "shifted"], + "}" => ["KEY_RightBracket_RightBrace", "shifted"], "[" => "KEY_LeftBracket_LeftBrace", "]" => "KEY_RightBracket_RightBrace", "," => "KEY_Comma_LessThan", @@ -122,25 +122,25 @@ class Key "\'" => "KEY_SingleQuote_DoubleQuote", ";" => "KEY_Semicolon_Colon", "/" => "KEY_Slash_Question", - "~" => "KEY_GraveAccent_Tilde", - "%" => "KEY_5_Percent", - "*" => "KEY_8_Asterisk", - ":" => "KEY_Semicolon_Colon", - "^" => "KEY_6_Caret", - "<" => "KEY_Comma_LessThan", - ">" => "KEY_Period_GreaterThan", - "?" => "KEY_Slash_Question", - "!" => "KEY_1_Exclamation", - "(" => "KEY_9_LeftParenthesis", - ")" => "KEY_0_RightParenthesis", - "|" => "KEY_Backslash_Pipe", - "@" => "KEY_2_At", - "\"" => "KEY_SingleQuote_DoubleQuote", - "_" => "KEY_Dash_Underscore", - "+" => "KEY_Equal_Plus", - "$" => "KEY_4_Dollar", - "&" => "KEY_7_Ampersand", - "#" => "KEY_3_Pound", + "~" => ["KEY_GraveAccent_Tilde", "shifted"], + "%" => ["KEY_5_Percent", "shifted"], + "*" => ["KEY_8_Asterisk", "shifted"], + ":" => ["KEY_Semicolon_Colon", "shifted"], + "^" => ["KEY_6_Caret", "shifted"], + "<" => ["KEY_Comma_LessThan", "shifted"], + ">" => ["KEY_Period_GreaterThan", "shifted"], + "?" => ["KEY_Slash_Question", "shifted"], + "!" => ["KEY_1_Exclamation", "shifted"], + "(" => ["KEY_9_LeftParenthesis", "shifted"], + ")" => ["KEY_0_RightParenthesis", "shifted"], + "|" => ["KEY_Backslash_Pipe", "shifted"], + "@" => ["KEY_2_At", "shifted"], + "\"" => ["KEY_SingleQuote_DoubleQuote", "shifted"], + "_" => ["KEY_Dash_Underscore", "shifted"], + "+" => ["KEY_Equal_Plus", "shifted"], + "$" => ["KEY_4_Dollar", "shifted"], + "&" => ["KEY_7_Ampersand", "shifted"], + "#" => ["KEY_3_Pound", "shifted"], # "enter" => "KEY_ReturnEnter", "return" => "KEY_ReturnEnter", @@ -160,44 +160,44 @@ class Key "insert" => "KEY_Insert", "menu" => "KEY_Application", # - "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", + "alt" => ["MOD_KEY_LeftAlt", "mod"], + "alt_gr" => ["MOD_KEY_RightAlt", "mod"], + "umlaut" => ["MOD_KEY_RightAlt", "mod"], + "control" => ["MOD_KEY_LeftControl", "mod"], + "control_l" => ["MOD_KEY_LeftControl", "mod"], + "control_r" => ["MOD_KEY_RightControl", "mod"], + "win" => ["MOD_KEY_LeftGUI", "mod"], + "shift_l" => ["MOD_KEY_LeftShift", "mod"], + "shift_r" => ["MOD_KEY_RightShift", "mod"], "scroll_lock" => "KEY_ScrollLock", # "NULL" => "KEY_NULL", # - "audio_mute" => "MEDIAKEY_AUDIO_MUTE", - "audio_vol_up" => "MEDIAKEY_AUDIO_VOL_UP", - "audio_vol_down" => "MEDIAKEY_AUDIO_VOL_DOWN", - "next_track" => "MEDIAKEY_NEXT_TRACK", - "prev_track" => "MEDIAKEY_PREV_TRACK", - "stop" => "MEDIAKEY_STOP", - "play_pause" => "MEDIAKEY_PLAY_PAUSE", - "record" => "MEDIAKEY_RECORD", - "rewind" => "MEDIAKEY_REWIND", - "eject" => "MEDIAKEY_EJECT", - "cc_config" => "MEDIAKEY_CC_CONFIG", - "email" => "MEDIAKEY_EMAIL", - "calculator" => "MEDIAKEY_CALCULATOR", - "local_browser" => "MEDIAKEY_LOCAL_BROWSER", - "browser_search" => "MEDIAKEY_BROWSER_SEARCH", - "browser_home" => "MEDIAKEY_BROWSER_HOME", - "browser_back" => "MEDIAKEY_BROWSER_BACK", - "browser_forward" => "MEDIAKEY_BROWSER_FORWARD", - "browser_stop" => "MEDIAKEY_BROWSER_STOP", - "browser_refresh" => "MEDIAKEY_BROWSER_REFRESH", - "browser_bookmarks" => "MEDIAKEY_BROWSER_BOOKMARKS", + "audio_mute" => ["MEDIAKEY_AUDIO_MUTE", "media"], + "audio_vol_up" => ["MEDIAKEY_AUDIO_VOL_UP", "media"], + "audio_vol_down" => ["MEDIAKEY_AUDIO_VOL_DOWN", "media"], + "next_track" => ["MEDIAKEY_NEXT_TRACK", "media"], + "prev_track" => ["MEDIAKEY_PREV_TRACK", "media"], + "stop" => ["MEDIAKEY_STOP", "media"], + "play_pause" => ["MEDIAKEY_PLAY_PAUSE", "media"], + "record" => ["MEDIAKEY_RECORD", "media"], + "rewind" => ["MEDIAKEY_REWIND", "media"], + "eject" => ["MEDIAKEY_EJECT", "media"], + "cc_config" => ["MEDIAKEY_CC_CONFIG", "media"], + "email" => ["MEDIAKEY_EMAIL", "media"], + "calculator" => ["MEDIAKEY_CALCULATOR", "media"], + "local_browser" => ["MEDIAKEY_LOCAL_BROWSER", "media"], + "browser_search" => ["MEDIAKEY_BROWSER_SEARCH", "media"], + "browser_home" => ["MEDIAKEY_BROWSER_HOME", "media"], + "browser_back" => ["MEDIAKEY_BROWSER_BACK", "media"], + "browser_forward" => ["MEDIAKEY_BROWSER_FORWARD", "media"], + "browser_stop" => ["MEDIAKEY_BROWSER_STOP", "media"], + "browser_refresh" => ["MEDIAKEY_BROWSER_REFRESH", "media"], + "browser_bookmarks" => ["MEDIAKEY_BROWSER_BOOKMARKS", "media"], } Layers.each.with_index do |layer, i| - Keys["#{layer}"] = "#{i}" + Keys["#{layer}"] = ["#{i}", "layer"] end def initialize layers @@ -209,13 +209,16 @@ class Key next end - # FIXME better defaults - type ||= "basic" + # keycode and default keyfunc + keycode, default_type = Keys[key] - keycode = Keys[key] + # keyfunc + type ||= default_type || "basic" up, down = Functions[type] down ||= up + raise "overwriting shifted key: #{key}, #{type}" if default_type == "shifted" and type != default_type + raise "key not found: #{key}" if keycode.nil? raise "type not found: #{type}" if up.nil? or down.nil? @@ -279,125 +282,125 @@ HEADER end keys = [ - # letter type punc type nav type func type - %w{ NULL }, %w{ }, %w{ }, %w{ }, # dummy key - # - # left hand - # number - # letter type punc type nav type func type - %w{ 0 }, %w{ f11 }, %w{ f11 }, %w{ f11 }, # 1.5 - %w{ 1 }, %w{ f1 }, %w{ f1 }, %w{ f1 }, - %w{ 2 }, %w{ f2 }, %w{ f2 }, %w{ f2 }, - %w{ 3 }, %w{ f3 }, %w{ f3 }, %w{ f3 }, - %w{ 4 }, %w{ f4 }, %w{ f4 }, %w{ f4 }, - %w{ 5 }, %w{ f5 }, %w{ f5 }, %w{ f5 }, - %w{ 6 }, %w{ f6 }, %w{ f6 }, %w{ f6 }, - # top - # letter type punc type nav type func type - %w{ x }, %w{ ~ shifted }, %w{ escape }, %w{ }, # 1.5 - %w{ x }, %w{ ~ shifted }, %w{ escape }, %w{ }, - %w{ v }, %w{ [ }, %w{ backspace }, %w{ }, - %w{ l }, %w{ ' }, %w{ enter }, %w{ }, - %w{ c }, %w{ < shifted }, %w{ delete }, %w{ }, - %w{ w }, %w{ \\ }, %w{ insert }, %w{ }, - %w{ tab }, %w{ }, %w{ }, %w{ }, # 1.5 - # home - # letter type punc type nav type func type - %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 }, - %w{ e }, %w{ ! shifted }, %w{ right }, %w{ next_track media }, - %w{ o }, %w{ ( shifted }, %w{ tab }, %w{ prev_track media }, - # bottom - # letter type punc type nav type func type - %w{ shift_l capslock }, %w{ }, %w{ }, %w{ }, # 1.5 - %w{ % shifted }, %w{ ` }, %w{ home }, %w{ }, - %w{ * shifted }, %w{ ^ shifted }, %w{ page_up }, %w{ }, - %w{ : shifted }, %w{ | shifted }, %w{ page_down }, %w{ }, - %w{ p }, %w{ - }, %w{ end }, %w{ }, - %w{ z }, %w{ @ shifted }, %w{ }, %w{ }, - %w{ enter }, %w{ }, %w{ }, %w{ }, # 1.5 - # underbottom - # letter type punc type nav type func type - %w{ left }, %w{ }, %w{ }, %w{ }, - %w{ up }, %w{ }, %w{ }, %w{ }, - %w{ down }, %w{ }, %w{ }, %w{ }, - %w{ right }, %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{ }, - %w{ func layer }, %w{ }, %w{ }, %w{ }, - # thumb-double - # letter type punc type nav type func type - %w{ space }, %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 sticky_mod }, %w{ }, %w{ }, %w{ }, - %w{ alt sticky_mod }, %w{ }, %w{ }, %w{ }, - # - # right hand - # - # number - # letter type punc type nav type func type - %w{ 5 }, %w{ f5 }, %w{ f5 }, %w{ f5 }, # 1.5 - %w{ 6 }, %w{ f6 }, %w{ f6 }, %w{ f6 }, - %w{ 7 }, %w{ f7 }, %w{ f7 }, %w{ f7 }, - %w{ 8 }, %w{ f8 }, %w{ f8 }, %w{ f8 }, - %w{ 9 }, %w{ f9 }, %w{ f9 }, %w{ f9 }, - %w{ 0 }, %w{ f10 }, %w{ f10 }, %w{ f10 }, - %w{ 0 }, %w{ f12 }, %w{ f12 }, %w{ f12 }, - # top - # letter type punc type nav type func type - %w{ NULL }, %w{ }, %w{ }, %w{ }, # 1.5 - %w{ k }, %w{ = }, %w{ 9 }, %w{ f9 }, - %w{ h }, %w{ > shifted }, %w{ 5 }, %w{ f5 }, - %w{ g }, %w{ " shifted }, %w{ 6 }, %w{ f6 }, - %w{ f }, %w{ ] }, %w{ 7 }, %w{ f7 }, - %w{ q }, %w{ ` }, %w{ 8 }, %w{ f8 }, - %w{ q }, %w{ ` }, %w{ 8 }, %w{ f8 }, # 1.5 - # home - # letter type punc type nav type func type - %w{ s }, %w{ ) shifted }, %w{ 0 }, %w{ f10 }, - %w{ n }, %w{ _ shifted }, %w{ 1 }, %w{ f1 }, - %w{ r }, %w{ / }, %w{ 2 }, %w{ f2 }, - %w{ t }, %w{ \} shifted }, %w{ 3 }, %w{ f3 }, - %w{ d }, %w{ . }, %w{ 4 }, %w{ f4 }, - %w{ umlaut mod }, %w{ }, %w{ }, %w{ }, # 1.5 - # bottom - # letter type punc type nav type func type - %w{ enter }, %w{ }, %w{ }, %w{ }, # 1.5 - %w{ b }, %w{ + shifted }, %w{ 9 }, %w{ f9 }, - %w{ m }, %w{ $ shifted }, %w{ 5 }, %w{ f5 }, - %w{ j }, %w{ & shifted }, %w{ 6 }, %w{ f6 }, - %w{ y }, %w{ # shifted }, %w{ 7 }, %w{ f7 }, - %w{ ; }, %w{ ^ shifted }, %w{ 8 }, %w{ f8 }, - %w{ shift_r capslock }, %w{ }, %w{ }, %w{ }, # 1.5 - # underbottom - # letter type punc type nav type func type - %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{ 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{ func layer }, %w{ }, %w{ }, %w{ }, - %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 sticky }, %w{ punc layer }, %w{ NULL }, %w{ NULL }, + # letter type punc type nav type func type + %w{ NULL }, %w{ }, %w{ }, %w{ }, # dummy key + # + # left hand + # number + # letter type punc type nav type func type + %w{ 0 }, %w{ f11 }, %w{ f11 }, %w{ f11 }, # 1.5 + %w{ 1 }, %w{ f1 }, %w{ f1 }, %w{ f1 }, + %w{ 2 }, %w{ f2 }, %w{ f2 }, %w{ f2 }, + %w{ 3 }, %w{ f3 }, %w{ f3 }, %w{ f3 }, + %w{ 4 }, %w{ f4 }, %w{ f4 }, %w{ f4 }, + %w{ 5 }, %w{ f5 }, %w{ f5 }, %w{ f5 }, + %w{ 6 }, %w{ f6 }, %w{ f6 }, %w{ f6 }, + # top + # letter type punc type nav type func type + %w{ x }, %w{ ~ }, %w{ escape }, %w{ }, # 1.5 + %w{ x }, %w{ ~ }, %w{ escape }, %w{ }, + %w{ v }, %w{ [ }, %w{ backspace }, %w{ }, + %w{ l }, %w{ ' }, %w{ enter }, %w{ }, + %w{ c }, %w{ < }, %w{ delete }, %w{ }, + %w{ w }, %w{ \\ }, %w{ insert }, %w{ }, + %w{ tab }, %w{ }, %w{ }, %w{ }, # 1.5 + # home + # letter type punc type nav type func type + %w{ umlaut }, %w{ }, %w{ }, %w{ }, # 1.5 + %w{ u }, %w{ , }, %w{ left }, %w{ audio_mute }, + %w{ i }, %w{ \{ }, %w{ up }, %w{ audio_vol_up }, + %w{ a }, %w{ ? }, %w{ down }, %w{ audio_vol_down }, + %w{ e }, %w{ ! }, %w{ right }, %w{ next_track }, + %w{ o }, %w{ ( }, %w{ tab }, %w{ prev_track }, + # bottom + # letter type punc type nav type func type + %w{ shift_l capslock }, %w{ }, %w{ }, %w{ }, # 1.5 + %w{ % }, %w{ ` }, %w{ home }, %w{ }, + %w{ * }, %w{ ^ }, %w{ page_up }, %w{ }, + %w{ : }, %w{ | }, %w{ page_down }, %w{ }, + %w{ p }, %w{ - }, %w{ end }, %w{ }, + %w{ z }, %w{ @ }, %w{ }, %w{ }, + %w{ enter }, %w{ }, %w{ }, %w{ }, # 1.5 + # underbottom + # letter type punc type nav type func type + %w{ left }, %w{ }, %w{ }, %w{ }, + %w{ up }, %w{ }, %w{ }, %w{ }, + %w{ down }, %w{ }, %w{ }, %w{ }, + %w{ right }, %w{ }, %w{ }, %w{ }, + %w{ win }, %w{ }, %w{ }, %w{ }, + # thumb-top + # letter type punc type nav type func type + %w{ scroll_lock }, %w{ }, %w{ }, %w{ }, + %w{ func }, %w{ }, %w{ }, %w{ }, + # 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{ }, + # thumb-home + # letter type punc type nav type func type + %w{ space }, %w{ }, %w{ }, %w{ }, + %w{ control sticky_mod }, %w{ }, %w{ }, %w{ }, + %w{ alt sticky_mod }, %w{ }, %w{ }, %w{ }, + # + # right hand + # + # number + # letter type punc type nav type func type + %w{ 5 }, %w{ f5 }, %w{ f5 }, %w{ f5 }, # 1.5 + %w{ 6 }, %w{ f6 }, %w{ f6 }, %w{ f6 }, + %w{ 7 }, %w{ f7 }, %w{ f7 }, %w{ f7 }, + %w{ 8 }, %w{ f8 }, %w{ f8 }, %w{ f8 }, + %w{ 9 }, %w{ f9 }, %w{ f9 }, %w{ f9 }, + %w{ 0 }, %w{ f10 }, %w{ f10 }, %w{ f10 }, + %w{ 0 }, %w{ f12 }, %w{ f12 }, %w{ f12 }, + # top + # letter type punc type nav type func type + %w{ NULL }, %w{ }, %w{ }, %w{ }, # 1.5 + %w{ k }, %w{ = }, %w{ 9 }, %w{ f9 }, + %w{ h }, %w{ > }, %w{ 5 }, %w{ f5 }, + %w{ g }, %w{ " }, %w{ 6 }, %w{ f6 }, + %w{ f }, %w{ ] }, %w{ 7 }, %w{ f7 }, + %w{ q }, %w{ ` }, %w{ 8 }, %w{ f8 }, + %w{ q }, %w{ ` }, %w{ 8 }, %w{ f8 }, # 1.5 + # home + # letter type punc type nav type func type + %w{ s }, %w{ ) }, %w{ 0 }, %w{ f10 }, + %w{ n }, %w{ _ }, %w{ 1 }, %w{ f1 }, + %w{ r }, %w{ / }, %w{ 2 }, %w{ f2 }, + %w{ t }, %w{ \} }, %w{ 3 }, %w{ f3 }, + %w{ d }, %w{ . }, %w{ 4 }, %w{ f4 }, + %w{ umlaut }, %w{ }, %w{ }, %w{ }, # 1.5 + # bottom + # letter type punc type nav type func type + %w{ enter }, %w{ }, %w{ }, %w{ }, # 1.5 + %w{ b }, %w{ + }, %w{ 9 }, %w{ f9 }, + %w{ m }, %w{ $ }, %w{ 5 }, %w{ f5 }, + %w{ j }, %w{ & }, %w{ 6 }, %w{ f6 }, + %w{ y }, %w{ # }, %w{ 7 }, %w{ f7 }, + %w{ ; }, %w{ ^ }, %w{ 8 }, %w{ f8 }, + %w{ shift_r capslock }, %w{ }, %w{ }, %w{ }, # 1.5 + # underbottom + # letter type punc type nav type func type + %w{ nav }, %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{ punc }, %w{ }, %w{ func }, %w{ }, + %w{ nav }, %w{ func }, %w{ }, %w{ }, + # thumb-double + # letter type punc type nav type func type + %w{ menu }, %w{ }, %w{ }, %w{ }, + %w{ func }, %w{ }, %w{ }, %w{ }, + %w{ punc sticky }, %w{ punc }, %w{ NULL }, %w{ NULL }, + # thumb-home + # letter type punc type nav type func type + %w{ menu }, %w{ }, %w{ }, %w{ }, + %w{ func }, %w{ }, %w{ }, %w{ }, + %w{ punc sticky }, %w{ punc }, %w{ NULL }, %w{ NULL }, ].each_slice(Key::Layers.size).map do |layers| Key.new layers