diff options
author | koekeishiya <aasvi93@hotmail.com> | 2017-10-07 23:31:15 +0200 |
---|---|---|
committer | koekeishiya <aasvi93@hotmail.com> | 2017-10-07 23:31:15 +0200 |
commit | 94c26f456f095ec8334d9c313943c2747d27c0c2 (patch) | |
tree | 248a10b142f0a59192c931da57643b90ad3b9d4a /src/skhd.c | |
parent | 679ae51b23bd936485e1c5c1e868e4dec4995e97 (diff) | |
download | skhd-94c26f456f095ec8334d9c313943c2747d27c0c2.tar.gz skhd-94c26f456f095ec8334d9c313943c2747d27c0c2.zip |
#15 modal support
Diffstat (limited to 'src/skhd.c')
-rw-r--r-- | src/skhd.c | 21 |
1 files changed, 13 insertions, 8 deletions
@@ -42,7 +42,8 @@ extern bool CGSIsSecureEventInputSet(); internal unsigned major_version = 0; internal unsigned minor_version = 0; internal unsigned patch_version = 10; -internal struct table hotkey_map; +internal struct mode *current_mode; +internal struct table mode_map; internal char *config_file; internal void @@ -69,16 +70,19 @@ parse_config_helper(char *absolutepath) { struct parser parser; if (parser_init(&parser, absolutepath)) { - parse_config(&parser, &hotkey_map); + parser.mode_map = &mode_map; + parse_config(&parser); parser_destroy(&parser); + current_mode = table_find(&mode_map, "default"); } else { + current_mode = NULL; warn("skhd: could not open file '%s'\n", absolutepath); } } internal HOTLOADER_CALLBACK(config_handler) { - free_hotkeys(&hotkey_map); + free_mode_map(&mode_map); parse_config_helper(absolutepath); } @@ -92,11 +96,12 @@ internal EVENT_TAP_CALLBACK(key_handler) CGEventTapEnable(event_tap->handle, 1); } break; case kCGEventKeyDown: { + if (!current_mode) return event; uint32_t flags = CGEventGetFlags(event); uint32_t key = CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode); struct hotkey eventkey = { .flags = 0, .key = key }; cgeventflags_to_hotkeyflags(flags, &eventkey); - bool result = find_and_exec_hotkey(&eventkey, &hotkey_map); + bool result = find_and_exec_hotkey(&eventkey, &mode_map, ¤t_mode); if (result) { return NULL; } @@ -186,10 +191,10 @@ int main(int argc, char **argv) set_config_path(); } - table_init(&hotkey_map, - 131, - (table_hash_func) hash_hotkey, - (table_compare_func) same_hotkey); + table_init(&mode_map, + 13, + (table_hash_func) hash_mode, + (table_compare_func) same_mode); printf("skhd: using config '%s'\n", config_file); parse_config_helper(config_file); |