diff options
author | koekeishiya <aasvi93@hotmail.com> | 2017-10-01 16:10:53 +0200 |
---|---|---|
committer | koekeishiya <aasvi93@hotmail.com> | 2017-10-01 16:10:53 +0200 |
commit | 2d3f1dbc6785fb276c801259faf8b0c3ddc8c233 (patch) | |
tree | af6cd29abcda20dc3681484d56a800dd84d02a27 /src | |
parent | e1e8a631ad6e312ba6e446b0f8adcf815c0fab70 (diff) | |
download | skhd-2d3f1dbc6785fb276c801259faf8b0c3ddc8c233.tar.gz skhd-2d3f1dbc6785fb276c801259faf8b0c3ddc8c233.zip |
#10 fn flag is set implicitly by some key-literals
Diffstat (limited to 'src')
-rw-r--r-- | src/parse.c | 23 | ||||
-rw-r--r-- | src/tokenize.h | 4 |
2 files changed, 10 insertions, 17 deletions
diff --git a/src/parse.c b/src/parse.c index e399ca6..54154c5 100644 --- a/src/parse.c +++ b/src/parse.c @@ -79,10 +79,11 @@ parse_key(struct parser *parser) return keycode; } +#define KEY_HAS_IMPLICIT_FN_MOD 4 internal uint32_t literal_keycode_value[] = { kVK_Return, kVK_Tab, kVK_Space, - kVK_Delete, kVK_ForwardDelete, kVK_Escape, + kVK_Delete, kVK_Escape, kVK_ForwardDelete, kVK_Home, kVK_End, kVK_PageUp, kVK_PageDown, kVK_Help, kVK_LeftArrow, kVK_RightArrow, kVK_UpArrow, kVK_DownArrow, @@ -95,27 +96,19 @@ internal uint32_t literal_keycode_value[] = kVK_F19, kVK_F20, }; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wsometimes-uninitialized" -// NOTE(koekeishiya): shut up compiler !!! -// if we get to this point, we already KNOW that the input is valid.. -internal uint32_t -parse_key_literal(struct parser *parser) +internal void +parse_key_literal(struct parser *parser, struct hotkey *hotkey) { - uint32_t keycode; struct token key = parser_previous(parser); - for (int i = 0; i < array_count(literal_keycode_str); ++i) { if (token_equals(key, literal_keycode_str[i])) { - keycode = literal_keycode_value[i]; - printf("\tkey: '%.*s' (0x%02x)\n", key.length, key.text, keycode); + if (i > KEY_HAS_IMPLICIT_FN_MOD) hotkey->flags |= Hotkey_Flag_Fn; + hotkey->key = literal_keycode_value[i]; + printf("\tkey: '%.*s' (0x%02x)\n", key.length, key.text, hotkey->key); break; } } - - return keycode; } -#pragma clang diagnostic pop internal enum hotkey_flag modifier_flags_value[] = { @@ -187,7 +180,7 @@ parse_hotkey(struct parser *parser) } else if (parser_match(parser, Token_Key_Hex)) { hotkey->key = parse_key_hex(parser); } else if (parser_match(parser, Token_Literal)) { - hotkey->key = parse_key_literal(parser); + parse_key_literal(parser, hotkey); } else { fprintf(stderr, "(#%d:%d) expected key-literal, but got '%.*s'\n", parser->current_token.line, parser->current_token.cursor, diff --git a/src/tokenize.h b/src/tokenize.h index a6e35bd..36b4350 100644 --- a/src/tokenize.h +++ b/src/tokenize.h @@ -13,9 +13,9 @@ static const char *modifier_flags_str[] = static const char *literal_keycode_str[] = { "return", "tab", "space", - "backspace", "delete", "escape", + "backspace", "escape", "delete", "home", "end", "pageup", - "pagedown", "help", "left", + "pagedown", "insert", "left", "right", "up", "down", "f1", "f2", "f3", "f4", "f5", "f6", |