aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkoekeishiya <aasvi93@hotmail.com>2017-10-01 16:10:53 +0200
committerkoekeishiya <aasvi93@hotmail.com>2017-10-01 16:10:53 +0200
commit2d3f1dbc6785fb276c801259faf8b0c3ddc8c233 (patch)
treeaf6cd29abcda20dc3681484d56a800dd84d02a27
parente1e8a631ad6e312ba6e446b0f8adcf815c0fab70 (diff)
downloadskhd-2d3f1dbc6785fb276c801259faf8b0c3ddc8c233.tar.gz
skhd-2d3f1dbc6785fb276c801259faf8b0c3ddc8c233.zip
#10 fn flag is set implicitly by some key-literals
-rw-r--r--src/parse.c23
-rw-r--r--src/tokenize.h4
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",