diff --git a/custom/4coder_command_map.cpp b/custom/4coder_command_map.cpp index a4076096..7b9d3ad1 100644 --- a/custom/4coder_command_map.cpp +++ b/custom/4coder_command_map.cpp @@ -139,15 +139,6 @@ map__init(Mapping *mapping, Command_Map *map, Command_Map_ID id){ map->cmd_to_binding_trigger = make_table_u64_u64(&mapping->heap_wrapper, 100); } -function Command_Map* -mapping_begin_new_map(Mapping *mapping){ - Command_Map *map = mapping__alloc_map(mapping); - map__init(mapping, map, mapping->id_counter); - mapping->id_counter += 1; - table_insert(&mapping->id_to_map, map->id, (u64)PtrAsInt(map)); - return(map); -} - function Command_Map* mapping_get_map(Mapping *mapping, Command_Map_ID id){ Command_Map *result = 0; @@ -175,7 +166,7 @@ mapping_get_or_make_map(Mapping *mapping, Command_Map_ID id){ if (result == 0){ result = mapping__alloc_map(mapping); map__init(mapping, result, id); - table_insert(&mapping->id_to_map, result->id, (u64)PtrAsInt(result)); + table_insert(&mapping->id_to_map, id, (u64)PtrAsInt(result)); } return(result); } diff --git a/custom/4coder_config.cpp b/custom/4coder_config.cpp index 7d1a7eac..6ebd2ad2 100644 --- a/custom/4coder_config.cpp +++ b/custom/4coder_config.cpp @@ -1617,7 +1617,7 @@ load_config_and_apply(Application_Links *app, Arena *out_arena, Config_Data *con } // Apply config - setup_built_in_mapping(app, config->mapping, &framework_mapping, mapid_global, mapid_file, mapid_code); + //setup_built_in_mapping(app, config->mapping, &framework_mapping, mapid_global, mapid_file, mapid_code); change_mode(app, config->mode); global_set_setting(app, GlobalSetting_LAltLCtrlIsAltGr, config->lalt_lctrl_is_altgr); diff --git a/custom/4coder_default_bindings.cpp b/custom/4coder_default_bindings.cpp index 7bd3edd7..79a04cc4 100644 --- a/custom/4coder_default_bindings.cpp +++ b/custom/4coder_default_bindings.cpp @@ -25,11 +25,15 @@ custom_layer_init(Application_Links *app){ // NOTE(allen): default hooks and command maps set_all_default_hooks(app); mapping_init(tctx, &framework_mapping); + String_ID global_map_id = vars_save_string_lit("keys_global"); + String_ID file_map_id = vars_save_string_lit("keys_file"); + String_ID code_map_id = vars_save_string_lit("keys_code"); #if OS_MAC - setup_mac_mapping(&framework_mapping, mapid_global, mapid_file, mapid_code); + setup_mac_mapping(&framework_mapping, global_map_id, file_map_id, code_map_id); #else - setup_default_mapping(&framework_mapping, mapid_global, mapid_file, mapid_code); + setup_default_mapping(&framework_mapping, global_map_id, file_map_id, code_map_id); #endif + setup_essential_mapping(&framework_mapping, global_map_id, file_map_id, code_map_id); } #endif //FCODER_DEFAULT_BINDINGS diff --git a/custom/4coder_default_framework.cpp b/custom/4coder_default_framework.cpp index 91cba6be..922d7a91 100644 --- a/custom/4coder_default_framework.cpp +++ b/custom/4coder_default_framework.cpp @@ -569,6 +569,31 @@ CUSTOM_DOC("Clear the theme list") //////////////////////////////// +function void +setup_essential_mapping(Mapping *mapping, i64 global_id, i64 file_id, i64 code_id){ + MappingScope(); + SelectMapping(mapping); + + SelectMap(global_id); + BindCore(default_startup, CoreCode_Startup); + BindCore(default_try_exit, CoreCode_TryExit); + BindCore(clipboard_record_clip, CoreCode_NewClipboardContents); + BindMouseWheel(mouse_wheel_scroll); + BindMouseWheel(mouse_wheel_change_face_size, KeyCode_Control); + + SelectMap(file_id); + ParentMap(global_id); + BindTextInput(write_text_input); + BindMouse(click_set_cursor_and_mark, MouseCode_Left); + BindMouseRelease(click_set_cursor, MouseCode_Left); + BindCore(click_set_cursor_and_mark, CoreCode_ClickActivateView); + BindMouseMove(click_set_cursor_if_lbutton); + + SelectMap(code_id); + ParentMap(file_id); + BindTextInput(write_text_and_auto_indent); +} + function void default_4coder_initialize(Application_Links *app, String_Const_u8_Array file_names, i32 override_font_size, b32 override_hinting){ @@ -589,6 +614,26 @@ default_4coder_initialize(Application_Links *app, String_Const_u8_Array file_nam load_config_and_apply(app, &global_config_arena, &global_config, override_font_size, override_hinting); + String_Const_u8 bindings_file_name = string_u8_litexpr("bindings.4coder"); + if (string_match(global_config.mapping, string_u8_litexpr("mac-default"))){ + bindings_file_name = string_u8_litexpr("mac-bindings.4coder"); + } + else if (OS_MAC && string_match(global_config.mapping, string_u8_litexpr("choose"))){ + bindings_file_name = string_u8_litexpr("mac-bindings.4coder"); + } + + // TODO(allen): cleanup + String_ID global_map_id = vars_save_string_lit("keys_global"); + String_ID file_map_id = vars_save_string_lit("keys_file"); + String_ID code_map_id = vars_save_string_lit("keys_code"); + + if (dynamic_binding_load_from_file(app, &framework_mapping, bindings_file_name)){ + setup_essential_mapping(&framework_mapping, global_map_id, file_map_id, code_map_id); + } + else{ + setup_built_in_mapping(app, global_config.mapping, &framework_mapping, global_map_id, file_map_id, code_map_id); + } + // open command line files Scratch_Block scratch(app); String_Const_u8 hot_directory = push_hot_directory(app, scratch); @@ -987,7 +1032,7 @@ default_input_handler_init(Application_Links *app, Arena *arena){ View_Context ctx = view_current_context(app, view); ctx.mapping = &framework_mapping; - ctx.map_id = mapid_global; + ctx.map_id = vars_save_string_lit("keys_global"); view_alter_context(app, view, &ctx); } @@ -999,12 +1044,12 @@ default_get_map_id(Application_Links *app, View_ID view){ Command_Map_ID *result_ptr = scope_attachment(app, buffer_scope, buffer_map_id, Command_Map_ID); if (result_ptr != 0){ if (*result_ptr == 0){ - *result_ptr = mapid_file; + *result_ptr = vars_save_string_lit("keys_file"); } result = *result_ptr; } else{ - result = mapid_global; + result = vars_save_string_lit("keys_global"); } return(result); } diff --git a/custom/4coder_default_framework_variables.cpp b/custom/4coder_default_framework_variables.cpp index 2ebb9e0c..354cb40a 100644 --- a/custom/4coder_default_framework_variables.cpp +++ b/custom/4coder_default_framework_variables.cpp @@ -28,9 +28,11 @@ CUSTOM_ID(attachment, attachment_tokens); //////////////////////////////// +#if 0 CUSTOM_ID(command_map, mapid_global); CUSTOM_ID(command_map, mapid_file); CUSTOM_ID(command_map, mapid_code); +#endif //////////////////////////////// diff --git a/custom/4coder_default_hooks.cpp b/custom/4coder_default_hooks.cpp index dbdebc2e..cadfbd72 100644 --- a/custom/4coder_default_hooks.cpp +++ b/custom/4coder_default_hooks.cpp @@ -772,7 +772,10 @@ BUFFER_HOOK_SIG(default_begin_buffer){ } } - Command_Map_ID map_id = (treat_as_code)?(mapid_code):(mapid_file); + String_ID file_map_id = vars_save_string_lit("keys_file"); + String_ID code_map_id = vars_save_string_lit("keys_code"); + + Command_Map_ID map_id = (treat_as_code)?(code_map_id):(file_map_id); Managed_Scope scope = buffer_get_managed_scope(app, buffer_id); Command_Map_ID *map_id_ptr = scope_attachment(app, scope, buffer_map_id, Command_Map_ID); *map_id_ptr = map_id; diff --git a/custom/4coder_default_include.cpp b/custom/4coder_default_include.cpp index bb8d0400..dd92cc1a 100644 --- a/custom/4coder_default_include.cpp +++ b/custom/4coder_default_include.cpp @@ -100,6 +100,7 @@ #include "4coder_draw.cpp" #include "4coder_font_helper.cpp" #include "4coder_config.cpp" +#include "4coder_dynamic_bindings.cpp" #include "4coder_default_framework.cpp" #include "4coder_clipboard.cpp" #include "4coder_lister_base.cpp" diff --git a/custom/4coder_default_map.cpp b/custom/4coder_default_map.cpp index a121a0cb..266e01df 100644 --- a/custom/4coder_default_map.cpp +++ b/custom/4coder_default_map.cpp @@ -10,9 +10,6 @@ setup_default_mapping(Mapping *mapping, i64 global_id, i64 file_id, i64 code_id) SelectMapping(mapping); SelectMap(global_id); - BindCore(default_startup, CoreCode_Startup); - BindCore(default_try_exit, CoreCode_TryExit); - BindCore(clipboard_record_clip, CoreCode_NewClipboardContents); Bind(keyboard_macro_start_recording , KeyCode_U, KeyCode_Control); Bind(keyboard_macro_finish_recording, KeyCode_U, KeyCode_Control, KeyCode_Shift); Bind(keyboard_macro_replay, KeyCode_U, KeyCode_Alt); @@ -56,16 +53,8 @@ setup_default_mapping(Mapping *mapping, i64 global_id, i64 file_id, i64 code_id) Bind(project_fkey_command, KeyCode_F14); Bind(project_fkey_command, KeyCode_F15); Bind(project_fkey_command, KeyCode_F16); - BindMouseWheel(mouse_wheel_scroll); - BindMouseWheel(mouse_wheel_change_face_size, KeyCode_Control); SelectMap(file_id); - ParentMap(global_id); - BindTextInput(write_text_input); - BindMouse(click_set_cursor_and_mark, MouseCode_Left); - BindMouseRelease(click_set_cursor, MouseCode_Left); - BindCore(click_set_cursor_and_mark, CoreCode_ClickActivateView); - BindMouseMove(click_set_cursor_if_lbutton); Bind(delete_char, KeyCode_Delete); Bind(backspace_char, KeyCode_Backspace); Bind(move_up, KeyCode_Up); @@ -126,7 +115,6 @@ setup_default_mapping(Mapping *mapping, i64 global_id, i64 file_id, i64 code_id) SelectMap(code_id); ParentMap(file_id); - BindTextInput(write_text_and_auto_indent); Bind(move_left_alpha_numeric_boundary, KeyCode_Left, KeyCode_Control); Bind(move_right_alpha_numeric_boundary, KeyCode_Right, KeyCode_Control); Bind(move_left_alpha_numeric_or_camel_boundary, KeyCode_Left, KeyCode_Alt); diff --git a/custom/4coder_dynamic_bindings.cpp b/custom/4coder_dynamic_bindings.cpp new file mode 100644 index 00000000..5f351f6b --- /dev/null +++ b/custom/4coder_dynamic_bindings.cpp @@ -0,0 +1,129 @@ +/* +4coder_dynamic_bindings.cpp - Dynamic Bindings +*/ + +// TOP + +function Key_Code +dynamic_binding_key_code_from_string(String_Const_u8 key_string){ + Key_Code result = 0; + for (i32 i = 1; i < KeyCode_COUNT; i += 1){ + String_Const_u8 str = SCu8(key_code_name[i]); + if (string_match(str, key_string)){ + result = i; + break; + } + } + return result; +} + +function b32 +dynamic_binding_load_from_file(Application_Links *app, Mapping *mapping, String_Const_u8 filename){ + b32 result = false; + + Scratch_Block scratch(app); + + String_Const_u8 filename_copied = push_string_copy(scratch, filename); + FILE *file = open_file_try_current_path_then_binary_path(app, (char*)filename_copied.str); + if (file != 0){ + Data data = dump_file_handle(scratch, file); + Config *parsed = config_from_text(app, scratch, filename, SCu8(data)); + fclose(file); + + if (parsed != 0){ + result = true; + + Thread_Context* tctx = get_thread_context(app); + mapping_release(tctx, mapping); + mapping_init(tctx, mapping); + MappingScope(); + SelectMapping(mapping); + + for (Config_Assignment *assignment = parsed->first; + assignment != 0; + assignment = assignment->next){ + Config_LValue *l = assignment->l; + if (l != 0 && l->index == 0){ + Config_Get_Result rvalue = config_evaluate_rvalue(parsed, assignment, assignment->r); + if (rvalue.type == ConfigRValueType_Compound){ + String_Const_u8 map_name = l->identifier; + String_ID map_name_id = vars_save_string(map_name); + + SelectMap(map_name_id); + + + Config_Compound *compound = rvalue.compound; + + Config_Get_Result_List list = typed_compound_array_reference_list(scratch, parsed, compound); + for (Config_Get_Result_Node *node = list.first; node != 0; node = node->next){ + Config_Compound *src = node->result.compound; + String_Const_u8 cmd_string = {0}; + String_Const_u8 key_string = {0}; + String_Const_u8 mod_string[9] = {0}; + + if (!config_compound_string_member(parsed, src, "cmd", 0, &cmd_string)){ + config_add_error(scratch, parsed, node->result.pos, "Command string is required in binding"); + goto finish_map; + } + + if (!config_compound_string_member(parsed, src, "key", 1, &key_string)){ + config_add_error(scratch, parsed, node->result.pos, "Key string is required in binding"); + goto finish_map; + } + + for (i32 mod_idx = 0; mod_idx < ArrayCount(mod_string); mod_idx += 1){ + String_Const_u8 str = push_stringf(scratch, "mod_%i", mod_idx); + if (config_compound_string_member(parsed, src, str, 2 + mod_idx, &mod_string[mod_idx])){ + // NOTE(rjf): No-Op + } + } + + // NOTE(rjf): Map read in successfully. + { + // NOTE(rjf): Find command. + Command_Metadata *command = get_command_metadata_from_name(cmd_string); + + // NOTE(rjf): Find keycode. + Key_Code keycode = dynamic_binding_key_code_from_string(key_string); + + // NOTE(rjf): Find mods. + i32 mod_count = 0; + Key_Code mods[ArrayCount(mod_string)] = {0}; + for (i32 i = 0; i < ArrayCount(mod_string); i += 1){ + if (mod_string[i].str){ + mods[mod_count] = dynamic_binding_key_code_from_string(mod_string[i]); + mod_count += 1; + } + } + + if (keycode != 0 && command != 0){ + Input_Modifier_Set mods_set = { mods, mod_count, }; + map_set_binding(mapping, map, command->proc, InputEventKind_KeyStroke, keycode, &mods_set); + } + else{ + config_add_error(scratch, parsed, node->result.pos, + (keycode != 0) ? "Invalid command" : + (command != 0) ? "Invalid key": + "Invalid command and key"); + } + } + + finish_map:; + } + + + if (parsed->errors.first != 0){ + String_Const_u8 error_text = config_stringize_errors(app, scratch, parsed); + print_message(app, error_text); + } + } + } + } + } + } + + return(result); +} + +// BOTTOM + diff --git a/custom/4coder_helper.cpp b/custom/4coder_helper.cpp index 9a8df595..19b42753 100644 --- a/custom/4coder_helper.cpp +++ b/custom/4coder_helper.cpp @@ -31,6 +31,19 @@ get_command_metadata(Custom_Command_Function *func){ return(result); } +function Command_Metadata* +get_command_metadata_from_name(String_Const_u8 name){ + Command_Metadata *result = 0; + Command_Metadata *candidate = fcoder_metacmd_table; + for (i32 i = 0; i < ArrayCount(fcoder_metacmd_table); i += 1, candidate += 1){ + if (string_match(SCu8(candidate->name, candidate->name_len), name)){ + result = candidate; + break; + } + } + return(result); +} + //////////////////////////////// function Token_Array diff --git a/custom/4coder_mac_map.cpp b/custom/4coder_mac_map.cpp index 909a55ee..c2e837a5 100644 --- a/custom/4coder_mac_map.cpp +++ b/custom/4coder_mac_map.cpp @@ -10,9 +10,6 @@ setup_mac_mapping(Mapping *mapping, i64 global_id, i64 file_id, i64 code_id){ SelectMapping(mapping); SelectMap(global_id); - BindCore(default_startup, CoreCode_Startup); - BindCore(default_try_exit, CoreCode_TryExit); - BindCore(clipboard_record_clip, CoreCode_NewClipboardContents); Bind(keyboard_macro_start_recording , KeyCode_U, KeyCode_Command); Bind(keyboard_macro_finish_recording, KeyCode_U, KeyCode_Command, KeyCode_Shift); Bind(keyboard_macro_replay, KeyCode_U, KeyCode_Control); @@ -56,16 +53,8 @@ setup_mac_mapping(Mapping *mapping, i64 global_id, i64 file_id, i64 code_id){ Bind(project_fkey_command, KeyCode_F15); Bind(project_fkey_command, KeyCode_F16); Bind(exit_4coder, KeyCode_F4, KeyCode_Alt); - BindMouseWheel(mouse_wheel_scroll); - BindMouseWheel(mouse_wheel_change_face_size, KeyCode_Command); SelectMap(file_id); - ParentMap(global_id); - BindTextInput(write_text_input); - BindMouse(click_set_cursor_and_mark, MouseCode_Left); - BindMouseRelease(click_set_cursor, MouseCode_Left); - BindCore(click_set_cursor_and_mark, CoreCode_ClickActivateView); - BindMouseMove(click_set_cursor_if_lbutton); Bind(delete_char, KeyCode_Delete); Bind(backspace_char, KeyCode_Backspace); Bind(move_up, KeyCode_Up); @@ -126,8 +115,6 @@ setup_mac_mapping(Mapping *mapping, i64 global_id, i64 file_id, i64 code_id){ Bind(view_jump_list_with_lister, KeyCode_Period, KeyCode_Command, KeyCode_Shift); SelectMap(code_id); - ParentMap(file_id); - BindTextInput(write_text_and_auto_indent); Bind(move_left_alpha_numeric_boundary, KeyCode_Left, KeyCode_Command); Bind(move_right_alpha_numeric_boundary, KeyCode_Right, KeyCode_Command); Bind(move_left_alpha_numeric_or_camel_boundary, KeyCode_Left, KeyCode_Control); diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index 067070d0..56d90925 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -322,8 +322,8 @@ static Command_Metadata fcoder_metacmd_table[248] = { { PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "W:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 22 }, { PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "W:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 7 }, { PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 844 }, -{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2248 }, -{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2256 }, +{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2261 }, +{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2269 }, { PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 525 }, { PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 542 }, { PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 348 }, @@ -452,10 +452,10 @@ static Command_Metadata fcoder_metacmd_table[248] = { { PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1425 }, { PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1107 }, { PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1119 }, -{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2236 }, -{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2224 }, -{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2242 }, -{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2230 }, +{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2249 }, +{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2237 }, +{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2255 }, +{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2243 }, { PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 541 }, { PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 57 }, { PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 66 }, diff --git a/custom/generated/managed_id_metadata.cpp b/custom/generated/managed_id_metadata.cpp index 5f95ac6c..a8a9047a 100644 --- a/custom/generated/managed_id_metadata.cpp +++ b/custom/generated/managed_id_metadata.cpp @@ -56,7 +56,4 @@ buffer_lex_task = managed_id_declare(app, string_u8_litexpr("attachment"), strin buffer_wrap_lines = managed_id_declare(app, string_u8_litexpr("attachment"), string_u8_litexpr("buffer_wrap_lines")); sticky_jump_marker_handle = managed_id_declare(app, string_u8_litexpr("attachment"), string_u8_litexpr("sticky_jump_marker_handle")); attachment_tokens = managed_id_declare(app, string_u8_litexpr("attachment"), string_u8_litexpr("attachment_tokens")); -mapid_global = managed_id_declare(app, string_u8_litexpr("command_map"), string_u8_litexpr("mapid_global")); -mapid_file = managed_id_declare(app, string_u8_litexpr("command_map"), string_u8_litexpr("mapid_file")); -mapid_code = managed_id_declare(app, string_u8_litexpr("command_map"), string_u8_litexpr("mapid_code")); } diff --git a/ship_files/bindings.4coder b/ship_files/bindings.4coder new file mode 100644 index 00000000..d07a2c84 --- /dev/null +++ b/ship_files/bindings.4coder @@ -0,0 +1,140 @@ + +keys_global = { + { "keyboard_macro_start_recording", "U", "Control" }, + { "keyboard_macro_finish_recording", "U", "Control", "Shift" }, + { "keyboard_macro_replay", "U", "Alt" }, + { "change_active_panel", "Comma", "Control" }, + { "change_active_panel_backwards", "Comma", "Control", "Shift" }, + { "interactive_new", "N", "Control" }, + { "interactive_open_or_new", "O", "Control" }, + { "open_in_other", "O", "Alt" }, + { "interactive_kill_buffer", "K", "Control" }, + { "interactive_switch_buffer", "I", "Control" }, + { "project_go_to_root_directory", "H", "Control" }, + { "save_all_dirty_buffers", "S", "Control", "Shift" }, + { "change_to_build_panel", "Period", "Alt" }, + { "close_build_panel", "Comma", "Alt" }, + { "goto_next_jump", "N", "Alt" }, + { "goto_prev_jump", "N", "Alt", "Shift" }, + { "build_in_build_panel", "M", "Alt" }, + { "goto_first_jump", "M", "Alt", "Shift" }, + { "toggle_filebar", "B", "Alt" }, + { "execute_any_cli", "Z", "Alt" }, + { "execute_previous_cli", "Z", "Alt", "Shift" }, + { "command_lister", "X", "Alt" }, + { "project_command_lister", "X", "Alt", "Shift" }, + { "quick_swap_buffer", "BackwardSlash", "Alt" }, + { "jump_to_last_point", "P", "Control" }, + { "list_all_functions_current_buffer_lister", "I", "Control", "Shift" }, + { "exit_4coder", "F4", "Alt" }, + { "project_fkey_command", "F1" }, + { "project_fkey_command", "F2" }, + { "project_fkey_command", "F3" }, + { "project_fkey_command", "F4" }, + { "project_fkey_command", "F5" }, + { "project_fkey_command", "F6" }, + { "project_fkey_command", "F7" }, + { "project_fkey_command", "F8" }, + { "project_fkey_command", "F9" }, + { "project_fkey_command", "F10" }, + { "project_fkey_command", "F11" }, + { "project_fkey_command", "F12" }, + { "project_fkey_command", "F13" }, + { "project_fkey_command", "F14" }, + { "project_fkey_command", "F15" }, + { "project_fkey_command", "F16" }, +}; + +keys_file = { + { "delete_char", "Delete" }, + { "backspace_char", "Backspace" }, + { "move_up", "Up" }, + { "move_down", "Down" }, + { "move_left", "Left" }, + { "move_right", "Right" }, + { "seek_end_of_line", "End" }, + { "seek_beginning_of_line", "Home" }, + { "page_up", "PageUp" }, + { "page_down", "PageDown" }, + { "goto_beginning_of_file", "PageUp", "Control" }, + { "goto_end_of_file", "PageDown", "Control" }, + { "move_up_to_blank_line_end", "Up", "Control" }, + { "move_down_to_blank_line_end", "Down", "Control" }, + { "move_left_whitespace_boundary", "Left", "Control" }, + { "move_right_whitespace_boundary", "Right", "Control" }, + { "move_line_up", "Up", "Alt" }, + { "move_line_down", "Down", "Alt" }, + { "backspace_alpha_numeric_boundary", "Backspace", "Control" }, + { "delete_alpha_numeric_boundary", "Delete", "Control" }, + { "snipe_backward_whitespace_or_token_boundary", "Backspace", "Alt" }, + { "snipe_forward_whitespace_or_token_boundary", "Delete", "Alt" }, + { "set_mark", "Space", "Control" }, + { "replace_in_range", "A", "Control" }, + { "copy", "C", "Control" }, + { "delete_range", "D", "Control" }, + { "delete_line", "D", "Control", "Shift" }, + { "center_view", "E", "Control" }, + { "left_adjust_view", "E", "Control", "Shift" }, + { "search", "F", "Control" }, + { "list_all_locations", "F", "Control", "Shift" }, + { "list_all_substring_locations_case_insensitive", "F", "Alt" }, + { "goto_line", "G", "Control" }, + { "list_all_locations_of_selection", "G", "Control", "Shift" }, + { "snippet_lister", "J", "Control" }, + { "kill_buffer", "K", "Control", "Shift" }, + { "duplicate_line", "L", "Control" }, + { "cursor_mark_swap", "M", "Control" }, + { "reopen", "O", "Control", "Shift" }, + { "query_replace", "Q", "Control" }, + { "query_replace_identifier", "Q", "Control", "Shift" }, + { "query_replace_selection", "Q", "Alt" }, + { "reverse_search", "R", "Control" }, + { "save", "S", "Control" }, + { "save_all_dirty_buffers", "S", "Control", "Shift" }, + { "search_identifier", "T", "Control" }, + { "list_all_locations_of_identifier", "T", "Control", "Shift" }, + { "paste_and_indent", "V", "Control" }, + { "paste_next_and_indent", "V", "Control", "Shift" }, + { "cut", "X", "Control" }, + { "redo", "Y", "Control" }, + { "undo", "Z", "Control" }, + { "view_buffer_other_panel", "1", "Control" }, + { "swap_panels", "2", "Control" }, + { "if_read_only_goto_position", "Return" }, + { "if_read_only_goto_position_same_panel", "Return", "Shift" }, + { "view_jump_list_with_lister", "Period", "Control", "Shift" }, +}; + +keys_code = { + { "move_left_alpha_numeric_boundary", "Left", "Control" }, + { "move_right_alpha_numeric_boundary", "Right", "Control" }, + { "move_left_alpha_numeric_or_camel_boundary", "Left", "Alt" }, + { "move_right_alpha_numeric_or_camel_boundary", "Right", "Alt" }, + { "comment_line_toggle", "Semicolon", "Control" }, + { "word_complete", "Tab" }, + { "auto_indent_range", "Tab", "Control" }, + { "auto_indent_line_at_cursor", "Tab", "Shift" }, + { "word_complete_drop_down", "Tab", "Shift", "Control" }, + { "write_block", "R", "Alt" }, + { "write_todo", "T", "Alt" }, + { "write_note", "Y", "Alt" }, + { "list_all_locations_of_type_definition", "D", "Alt" }, + { "list_all_locations_of_type_definition_of_identifier", "T", "Alt", "Shift" }, + { "open_long_braces", "LeftBracket", "Control" }, + { "open_long_braces_semicolon", "LeftBracket", "Control", "Shift" }, + { "open_long_braces_break", "RightBracket", "Control", "Shift" }, + { "select_surrounding_scope", "LeftBracket", "Alt" }, + { "select_surrounding_scope_maximal", "LeftBracket", "Alt", "Shift" }, + { "select_prev_scope_absolute", "RightBracket", "Alt" }, + { "select_prev_top_most_scope", "RightBracket", "Alt", "Shift" }, + { "select_next_scope_absolute", "Quote", "Alt" }, + { "select_next_scope_after_current", "Quote", "Alt", "Shift" }, + { "place_in_scope", "ForwardSlash", "Alt" }, + { "delete_current_scope", "Minus", "Alt" }, + { "if0_off", "I", "Alt" }, + { "open_file_in_quotes", "1", "Alt" }, + { "open_matching_file_cpp", "2", "Alt" }, + { "write_zero_struct", "0", "Control" }, + { "jump_to_definition_at_cursor", "W", "Control" }, +}; + diff --git a/ship_files/mac-bindings.4coder b/ship_files/mac-bindings.4coder new file mode 100644 index 00000000..87203509 --- /dev/null +++ b/ship_files/mac-bindings.4coder @@ -0,0 +1,139 @@ + +keys_global = { + { "keyboard_macro_start_recording", "U", "Command" }, + { "keyboard_macro_finish_recording", "U", "Command", "Shift" }, + { "keyboard_macro_replay", "U", "Control" }, + { "change_active_panel", "Comma", "Command" }, + { "change_active_panel_backwards", "Comma", "Command", "Shift" }, + { "interactive_new", "N", "Command" }, + { "interactive_open_or_new", "O", "Command" }, + { "open_in_other", "O", "Control" }, + { "interactive_kill_buffer", "K", "Command" }, + { "interactive_switch_buffer", "I", "Command" }, + { "project_go_to_root_directory", "H", "Command" }, + { "save_all_dirty_buffers", "S", "Command", "Shift" }, + { "change_to_build_panel", "Period", "Control" }, + { "close_build_panel", "Comma", "Control" }, + { "goto_next_jump", "N", "Control" }, + { "goto_prev_jump", "N", "Control", "Shift" }, + { "build_in_build_panel", "M", "Control" }, + { "goto_first_jump", "M", "Control", "Shift" }, + { "toggle_filebar", "B", "Control" }, + { "execute_any_cli", "Z", "Control" }, + { "execute_previous_cli", "Z", "Control", "Shift" }, + { "command_lister", "X", "Control" }, + { "project_command_lister", "X", "Control", "Shift" }, + { "quick_swap_buffer", "BackwardSlash", "Control" }, + { "jump_to_last_point", "P", "Command" }, + { "list_all_functions_current_buffer_lister", "I", "Command", "Shift" }, + { "exit_4coder", "F4", "Alt" }, + { "project_fkey_command", "F1" }, + { "project_fkey_command", "F2" }, + { "project_fkey_command", "F3" }, + { "project_fkey_command", "F4" }, + { "project_fkey_command", "F5" }, + { "project_fkey_command", "F6" }, + { "project_fkey_command", "F7" }, + { "project_fkey_command", "F8" }, + { "project_fkey_command", "F9" }, + { "project_fkey_command", "F10" }, + { "project_fkey_command", "F11" }, + { "project_fkey_command", "F12" }, + { "project_fkey_command", "F13" }, + { "project_fkey_command", "F14" }, + { "project_fkey_command", "F15" }, + { "project_fkey_command", "F16" }, +}; + +keys_file = { + { "delete_char", "Delete" }, + { "backspace_char", "Backspace" }, + { "move_up", "Up" }, + { "move_down", "Down" }, + { "move_left", "Left" }, + { "move_right", "Right" }, + { "seek_end_of_line", "End" }, + { "seek_beginning_of_line", "Home" }, + { "page_up", "PageUp" }, + { "page_down", "PageDown" }, + { "goto_beginning_of_file", "PageUp", "Command" }, + { "goto_end_of_file", "PageDown", "Command" }, + { "move_up_to_blank_line_end", "Up", "Command" }, + { "move_down_to_blank_line_end", "Down", "Command" }, + { "move_left_whitespace_boundary", "Left", "Command" }, + { "move_right_whitespace_boundary", "Right", "Command" }, + { "move_line_up", "Up", "Alt" }, + { "move_line_down", "Down", "Alt" }, + { "backspace_alpha_numeric_boundary", "Backspace", "Command" }, + { "delete_alpha_numeric_boundary", "Delete", "Command" }, + { "snipe_backward_whitespace_or_token_boundary", "Backspace", "Control" }, + { "snipe_forward_whitespace_or_token_boundary", "Delete", "Control" }, + { "set_mark", "Space", "Command" }, + { "replace_in_range", "A", "Command" }, + { "copy", "C", "Command" }, + { "delete_range", "D", "Command" }, + { "delete_line", "D", "Command", "Shift" }, + { "center_view", "E", "Command" }, + { "left_adjust_view", "E", "Command", "Shift" }, + { "search", "F", "Command" }, + { "list_all_locations", "F", "Command", "Shift" }, + { "list_all_substring_locations_case_insensitive", "F", "Control" }, + { "goto_line", "G", "Command" }, + { "list_all_locations_of_selection", "G", "Command", "Shift" }, + { "snippet_lister", "J", "Command" }, + { "kill_buffer", "K", "Command", "Shift" }, + { "duplicate_line", "L", "Command" }, + { "cursor_mark_swap", "M", "Command" }, + { "reopen", "O", "Command", "Shift" }, + { "query_replace", "Q", "Command" }, + { "query_replace_identifier", "Q", "Command", "Shift" }, + { "query_replace_selection", "Q", "Control" }, + { "reverse_search", "R", "Command" }, + { "save", "S", "Command" }, + { "save_all_dirty_buffers", "S", "Command", "Shift" }, + { "search_identifier", "T", "Command" }, + { "list_all_locations_of_identifier", "T", "Command", "Shift" }, + { "paste_and_indent", "V", "Command" }, + { "paste_next_and_indent", "V", "Command", "Shift" }, + { "cut", "X", "Command" }, + { "redo", "Y", "Command" }, + { "undo", "Z", "Command" }, + { "view_buffer_other_panel", "1", "Command" }, + { "swap_panels", "2", "Command" }, + { "if_read_only_goto_position", "Return" }, + { "if_read_only_goto_position_same_panel", "Return", "Shift" }, + { "view_jump_list_with_lister", "Period", "Command", "Shift" }, +}; + +keys_code = { + { "move_left_alpha_numeric_boundary", "Left", "Command" }, + { "move_right_alpha_numeric_boundary", "Right", "Command" }, + { "move_left_alpha_numeric_or_camel_boundary", "Left", "Control" }, + { "move_right_alpha_numeric_or_camel_boundary", "Right", "Control" }, + { "comment_line_toggle", "Semicolon", "Command" }, + { "word_complete", "Tab" }, + { "auto_indent_range", "Tab", "Command" }, + { "auto_indent_line_at_cursor", "Tab", "Shift" }, + { "word_complete_drop_down", "Tab", "Shift", "Command" }, + { "write_block", "R", "Control" }, + { "write_todo", "T", "Control" }, + { "write_note", "Y", "Control" }, + { "list_all_locations_of_type_definition", "D", "Control" }, + { "list_all_locations_of_type_definition_of_identifier", "T", "Control", "Shift" }, + { "open_long_braces", "LeftBracket", "Command" }, + { "open_long_braces_semicolon", "LeftBracket", "Command", "Shift" }, + { "open_long_braces_break", "RightBracket", "Command", "Shift" }, + { "select_surrounding_scope", "LeftBracket", "Control" }, + { "select_surrounding_scope_maximal", "LeftBracket", "Control", "Shift" }, + { "select_prev_scope_absolute", "RightBracket", "Control" }, + { "select_prev_top_most_scope", "RightBracket", "Control", "Shift" }, + { "select_next_scope_absolute", "Quote", "Control" }, + { "select_next_scope_after_current", "Quote", "Control", "Shift" }, + { "place_in_scope", "ForwardSlash", "Control" }, + { "delete_current_scope", "Minus", "Control" }, + { "if0_off", "I", "Control" }, + { "open_file_in_quotes", "1", "Control" }, + { "open_matching_file_cpp", "2", "Control" }, + { "write_zero_struct", "0", "Command" }, + { "jump_to_definition_at_cursor", "W", "Command" }, +};