From a7c5be3e02e68de43cf7f0fdb221ca34b37e894f Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Fri, 12 Jul 2019 17:43:17 -0700 Subject: [PATCH] Deprecated old table and arena code --- 4coder_API/4coder_custom.h | 1 - 4coder_api_transition_30_31_helpers.cpp | 20 - 4coder_base_commands.cpp | 66 +- 4coder_base_types.cpp | 34 +- 4coder_base_types.h | 7 +- 4coder_build_commands.cpp | 2 +- 4coder_config.cpp | 4 +- 4coder_default_include.cpp | 2 - 4coder_experiments.cpp | 78 +-- 4coder_fancy.cpp | 2 +- 4coder_file.h | 3 - 4coder_generated/command_metadata.h | 769 ++++++++++++------------ 4coder_hash_functions.cpp | 10 +- 4coder_helper.cpp | 2 +- 4coder_lib/4coder_arena.cpp | 279 +-------- 4coder_lib/4coder_arena.h | 50 +- 4coder_lib/4coder_table.h | 236 +------- 4coder_lists.cpp | 2 +- 4coder_project_commands.cpp | 42 +- 4coder_search.cpp | 141 ++--- 4coder_search.h | 4 + 4coder_table.cpp | 160 +++++ 4coder_table.h | 62 ++ 4coder_ui_helper.cpp | 10 +- 4ed.cpp | 2 +- 4ed_api_implementation.cpp | 14 +- 4ed_app_target.cpp | 5 +- 4ed_cli.cpp | 4 +- 4ed_file.cpp | 2 +- 4ed_working_set.cpp | 86 +-- 4ed_working_set.h | 9 +- meta/4ed_build.cpp | 2 - meta/4ed_metagen.cpp | 6 +- platform_win32/win32_4ed.cpp | 2 - things_ive_broken.txt | 5 + 35 files changed, 844 insertions(+), 1279 deletions(-) create mode 100644 4coder_table.cpp create mode 100644 4coder_table.h diff --git a/4coder_API/4coder_custom.h b/4coder_API/4coder_custom.h index 124bac28..8e22314c 100644 --- a/4coder_API/4coder_custom.h +++ b/4coder_API/4coder_custom.h @@ -12,7 +12,6 @@ #include #include "4coder_base_types.h" -#include "4coder_lib/4coder_arena.h" #include "4coder_lib/4coder_heap.h" #include "4coder_lib/4coder_string.h" #include "4coder_lib/4cpp_lexer_types.h" diff --git a/4coder_api_transition_30_31_helpers.cpp b/4coder_api_transition_30_31_helpers.cpp index 2ae8adea..fdffed00 100644 --- a/4coder_api_transition_30_31_helpers.cpp +++ b/4coder_api_transition_30_31_helpers.cpp @@ -924,31 +924,11 @@ get_prev_view_looped_primary_panels(Application_Links *app, View_Summary *view_s get_view_summary(app, new_id, AccessAll, view_start); } -static void -list__parameters(Application_Links *app, Heap *heap, String_Const_u8 *strings, i32 count, Search_Range_Flag match_flags, View_Summary default_target_view){ - list__parameters(app, heap, strings, count, match_flags, default_target_view.view_id); -} - -static void -list_query__parameters(Application_Links *app, Heap *heap, b32 substrings, b32 case_insensitive, View_Summary default_target_view){ - list_query__parameters(app, heap, substrings, case_insensitive, default_target_view.view_id); -} - static Buffer_ID create_or_switch_to_buffer_by_name(Application_Links *app, char *name, i32 name_length, View_Summary default_target_view){ return(create_or_switch_to_buffer_and_clear_by_name(app, SCu8(name, name_length), default_target_view.view_id)); } -static void -list_identifier__parameters(Application_Links *app, Heap *heap, b32 substrings, b32 case_insensitive, View_Summary default_target_view){ - list_identifier__parameters(app, heap, substrings, case_insensitive, default_target_view.view_id); -} - -static void -list_type_definition__parameters(Application_Links *app, Heap *heap, String str, View_Summary default_target_view){ - list_type_definition__parameters(app, heap, string_new_u8_from_old(str), default_target_view.view_id); -} - static b32 backspace_utf8(String *str){ b32 result = false; diff --git a/4coder_base_commands.cpp b/4coder_base_commands.cpp index d7b047bd..132de112 100644 --- a/4coder_base_commands.cpp +++ b/4coder_base_commands.cpp @@ -1109,9 +1109,14 @@ CUSTOM_DOC("Begins an incremental search up through the current buffer for the w isearch(app, true, query, true); } -CUSTOM_COMMAND_SIG(replace_in_range) -CUSTOM_DOC("Queries the user for two strings, and replaces all occurences of the first string in the range between the cursor and the mark with the second string.") -{ +struct String_Pair{ + b32 valid; + String_Const_u8 a; + String_Const_u8 b; +}; + +internal String_Pair +query_user_replace_pair(Application_Links *app, Arena *arena){ Query_Bar replace = {}; u8 replace_space[1024]; replace.prompt = string_u8_litexpr("Replace: "); @@ -1124,14 +1129,57 @@ CUSTOM_DOC("Queries the user for two strings, and replaces all occurences of the with.string = SCu8(with_space, (umem)0); with.string_capacity = sizeof(with_space); + String_Pair result = {}; if (query_user_string(app, &replace) && replace.string.size != 0 && query_user_string(app, &with)){ - String_Const_u8 r = replace.string; - String_Const_u8 w = with.string; - View_ID view = get_active_view(app, AccessOpen); - Buffer_ID buffer = view_get_buffer(app, view, AccessOpen); - Range_i64 range = get_view_range(app, view); - replace_in_range(app, buffer, range, r, w); + result.valid = true; + result.a = push_string_copy(arena, replace.string); + result.b = push_string_copy(arena, with.string); } + return(result); +} + +internal void +replace_in_range_query_user(Application_Links *app, Buffer_ID buffer, Range_i64 range){ + Scratch_Block scratch(app); + String_Pair pair = query_user_replace_pair(app, scratch); + if (pair.valid){ + replace_in_range(app, buffer, range, pair.a, pair.b); + } +} + +CUSTOM_COMMAND_SIG(replace_in_range) +CUSTOM_DOC("Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.") +{ + View_ID view = get_active_view(app, AccessOpen); + Buffer_ID buffer = view_get_buffer(app, view, AccessOpen); + Range_i64 range = get_view_range(app, view); + replace_in_range_query_user(app, buffer, range); +} + +CUSTOM_COMMAND_SIG(replace_in_buffer) +CUSTOM_DOC("Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.") +{ + View_ID view = get_active_view(app, AccessOpen); + Buffer_ID buffer = view_get_buffer(app, view, AccessOpen); + Range_i64 range = buffer_range(app, buffer); + replace_in_range_query_user(app, buffer, range); +} + +CUSTOM_COMMAND_SIG(replace_in_all_buffers) +CUSTOM_DOC("Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.") +{ + global_history_edit_group_begin(app); + + Scratch_Block scratch(app); + String_Pair pair = query_user_replace_pair(app, scratch); + for (Buffer_ID buffer = get_buffer_next(app, 0, AccessOpen); + buffer != 0; + buffer = get_buffer_next(app, buffer, AccessOpen)){ + Range_i64 range = buffer_range(app, buffer); + replace_in_range(app, buffer, range, pair.a, pair.b); + } + + global_history_edit_group_end(app); } static void diff --git a/4coder_base_types.cpp b/4coder_base_types.cpp index 26ff6747..94f3aea6 100644 --- a/4coder_base_types.cpp +++ b/4coder_base_types.cpp @@ -2125,8 +2125,6 @@ flip_side(Side side){ //////////////////////////////// -#if defined(Migrating__Arena) - static void* base_reserve__noop(void *user_data, umem size, umem *size_out){ *size_out = 0; @@ -4374,7 +4372,7 @@ string_const_any_push(Arena *arena, umem size, String_Encoding encoding){ } static String_Const_char -string_copy(Arena *arena, String_Const_char src){ +push_string_copy(Arena *arena, String_Const_char src){ String_Const_char string = {}; string.str = push_array(arena, char, src.size + 1); string.size = src.size; @@ -4383,7 +4381,7 @@ string_copy(Arena *arena, String_Const_char src){ return(string); } static String_Const_u8 -string_copy(Arena *arena, String_Const_u8 src){ +push_string_copy(Arena *arena, String_Const_u8 src){ String_Const_u8 string = {}; string.str = push_array(arena, u8, src.size + 1); string.size = src.size; @@ -4392,7 +4390,7 @@ string_copy(Arena *arena, String_Const_u8 src){ return(string); } static String_Const_u16 -string_copy(Arena *arena, String_Const_u16 src){ +push_string_copy(Arena *arena, String_Const_u16 src){ String_Const_u16 string = {}; string.str = push_array(arena, u16, src.size + 1); string.size = src.size; @@ -4401,7 +4399,7 @@ string_copy(Arena *arena, String_Const_u16 src){ return(string); } static String_Const_u32 -string_copy(Arena *arena, String_Const_u32 src){ +push_string_copy(Arena *arena, String_Const_u32 src){ String_Const_u32 string = {}; string.str = push_array(arena, u32, src.size + 1); string.size = src.size; @@ -4411,13 +4409,13 @@ string_copy(Arena *arena, String_Const_u32 src){ } static String_Const_Any -string_copy(Arena *arena, umem size, String_Const_Any src){ +push_string_copy(Arena *arena, umem size, String_Const_Any src){ String_Const_Any string = {}; switch (src.encoding){ - case StringEncoding_ASCII: string.s_char = string_copy(arena, src.s_char); break; - case StringEncoding_UTF8: string.s_u8 = string_copy(arena, src.s_u8 ); break; - case StringEncoding_UTF16: string.s_u16 = string_copy(arena, src.s_u16 ); break; - case StringEncoding_UTF32: string.s_u32 = string_copy(arena, src.s_u32 ); break; + case StringEncoding_ASCII: string.s_char = push_string_copy(arena, src.s_char); break; + case StringEncoding_UTF8: string.s_u8 = push_string_copy(arena, src.s_u8 ); break; + case StringEncoding_UTF16: string.s_u16 = push_string_copy(arena, src.s_u16 ); break; + case StringEncoding_UTF32: string.s_u32 = push_string_copy(arena, src.s_u32 ); break; } return(string); } @@ -4519,7 +4517,7 @@ string_list_push_overlap(Arena *arena, List_String_Const_char *list, char overla } if (tail_has_overlap == string_has_overlap){ if (!tail_has_overlap){ - string_list_push(arena, list, string_copy(arena, SCchar(&overlap, 1))); + string_list_push(arena, list, push_string_copy(arena, SCchar(&overlap, 1))); } else{ string = string_skip(string, 1); @@ -4544,7 +4542,7 @@ string_list_push_overlap(Arena *arena, List_String_Const_u8 *list, u8 overlap, S } if (tail_has_overlap == string_has_overlap){ if (!tail_has_overlap){ - string_list_push(arena, list, string_copy(arena, SCu8(&overlap, 1))); + string_list_push(arena, list, push_string_copy(arena, SCu8(&overlap, 1))); } else{ string = string_skip(string, 1); @@ -4569,7 +4567,7 @@ string_list_push_overlap(Arena *arena, List_String_Const_u16 *list, u16 overlap, } if (tail_has_overlap == string_has_overlap){ if (!tail_has_overlap){ - string_list_push(arena, list, string_copy(arena, SCu16(&overlap, 1))); + string_list_push(arena, list, push_string_copy(arena, SCu16(&overlap, 1))); } else{ string = string_skip(string, 1); @@ -4594,7 +4592,7 @@ string_list_push_overlap(Arena *arena, List_String_Const_u32 *list, u32 overlap, } if (tail_has_overlap == string_has_overlap){ if (!tail_has_overlap){ - string_list_push(arena, list, string_copy(arena, SCu32(&overlap, 1))); + string_list_push(arena, list, push_string_copy(arena, SCu32(&overlap, 1))); } else{ string = string_skip(string, 1); @@ -5959,7 +5957,7 @@ string_from_integer(Arena *arena, u64 x, u32 radix){ String_Const_u8 result = {}; if (radix >= 2 && radix <= 16){ if (x == 0){ - result = string_copy(arena, string_u8_litexpr("0")); + result = push_string_copy(arena, string_u8_litexpr("0")); } else{ u8 string_space[64]; @@ -5974,7 +5972,7 @@ string_from_integer(Arena *arena, u64 x, u32 radix){ j += 1, i -= 1){ Swap(u8, string_space[i], string_space[j]); } - result = string_copy(arena, SCu8(string_space, length)); + result = push_string_copy(arena, SCu8(string_space, length)); } } return(result); @@ -6108,8 +6106,6 @@ data_decode_from_base64(Arena *arena, u8 *str, umem size){ return(data); } -#endif - //////////////////////////////// #if defined(FSTRING_GUARD) diff --git a/4coder_base_types.h b/4coder_base_types.h index b7109562..c77f3004 100644 --- a/4coder_base_types.h +++ b/4coder_base_types.h @@ -7,6 +7,8 @@ #if !defined(FCODER_BASE_TYPES) #define FCODER_BASE_TYPES +//////////////////////////////// + #if defined(_MSC_VER) # define COMPILER_CL 1 @@ -1034,9 +1036,6 @@ enum{ //////////////////////////////// -#define Migrating__Arena -#if defined(Migrating__Arena) - typedef void *Base_Allocator_Reserve_Signature(void *user_data, umem size, umem *size_out); typedef void Base_Allocator_Commit_Signature(void *user_data, void *ptr, umem size); typedef void Base_Allocator_Uncommit_Signature(void *user_data, void *ptr, umem size); @@ -1101,7 +1100,7 @@ struct Scratch_Block{ Temp_Memory temp; }; -#endif +//////////////////////////////// #endif diff --git a/4coder_build_commands.cpp b/4coder_build_commands.cpp index 9f699a3b..a02f47d3 100644 --- a/4coder_build_commands.cpp +++ b/4coder_build_commands.cpp @@ -13,7 +13,7 @@ push_build_directory_at_file(Application_Links *app, Arena *arena, Buffer_ID buf b32 is_match = string_match(file_name, base_name); end_temp(restore_point); if (!is_match){ - result = string_copy(arena, string_remove_last_folder(file_name)); + result = push_string_copy(arena, string_remove_last_folder(file_name)); } return(result); } diff --git a/4coder_config.cpp b/4coder_config.cpp index c0ee9b3f..c3d41073 100644 --- a/4coder_config.cpp +++ b/4coder_config.cpp @@ -23,7 +23,7 @@ parse_extension_line_to_extension_list(Arena *arena, String_Const_u8 str){ umem next_period = string_find_first(str, '.'); String_Const_u8 extension = string_prefix(str, next_period); str = string_skip(str, next_period + 1); - array.strings[i] = string_copy(arena, extension); + array.strings[i] = push_string_copy(arena, extension); } push_align(arena, 8); @@ -205,7 +205,7 @@ config_error_push(Arena *arena, Config_Error_List *list, String_Const_u8 file_na list->count += 1; error->file_name = file_name; error->pos = pos; - error->text = string_copy(arena, SCu8(error_text)); + error->text = push_string_copy(arena, SCu8(error_text)); return(error); } diff --git a/4coder_default_include.cpp b/4coder_default_include.cpp index 6962210b..005ab12c 100644 --- a/4coder_default_include.cpp +++ b/4coder_default_include.cpp @@ -26,12 +26,10 @@ #include "4coder_stringf.cpp" #include "4coder_app_links_allocator.cpp" -#include "4coder_lib/4coder_arena.cpp" #include "4coder_lib/4coder_heap.cpp" #define FSTRING_IMPLEMENTATION #include "4coder_lib/4coder_string.h" -#include "4coder_lib/4coder_table.h" #include "4coder_lib/4coder_utf8.h" #include "4coder_lib/4cpp_lexer.h" diff --git a/4coder_experiments.cpp b/4coder_experiments.cpp index 8fe4b058..b4598c8a 100644 --- a/4coder_experiments.cpp +++ b/4coder_experiments.cpp @@ -712,82 +712,6 @@ struct Replace_Target{ i32 start_pos; }; -static void -replace_all_occurrences_parameters(Application_Links *app, Heap *heap, String_Const_u8 target_string, String_Const_u8 new_string){ - if (target_string.size > 0){ - global_history_edit_group_begin(app); - - // Initialize a generic search all buffers - Search_Set set = {}; - Search_Iter iter = {}; - initialize_generic_search_all_buffers(app, heap, &target_string, 1, SearchFlag_MatchSubstring, 0, 0, &set, &iter); - - // Visit all locations and create replacement list - Arena *scratch = context_get_arena(app); - Temp_Memory temp = begin_temp(scratch); - - Replace_Target *target_first = 0; - Replace_Target *target_last = 0; - i32 target_count = 0; - - for (Search_Match match = search_next_match(app, &set, &iter); - match.found_match; - match = search_next_match(app, &set, &iter)){ - - Replace_Target *new_target = push_array(scratch, Replace_Target, 1); - sll_queue_push(target_first, target_last, new_target); - ++target_count; - new_target->buffer_id = match.buffer; - new_target->start_pos = match.start; - } - - // Use replacement list to do replacements - i64 shift_per_replacement = new_string.size - target_string.size; - i64 current_offset = 0; - Buffer_ID current_buffer_id = 0; - for (Replace_Target *target = target_first; - target != 0; - target = target->next){ - if (target->buffer_id != current_buffer_id){ - current_buffer_id = target->buffer_id; - current_offset = 0; - } - i64 pos = target->start_pos + current_offset; - buffer_replace_range(app, target->buffer_id, Ii64(pos, pos + target_string.size), new_string); - current_offset += shift_per_replacement; - } - - end_temp(temp); - - global_history_edit_group_end(app); - } -} - -CUSTOM_COMMAND_SIG(replace_all_occurrences) -CUSTOM_DOC("Queries the user for two strings, and replaces all occurrences of the first string with the second string in all open buffers.") -{ - u8 replace_space[1024]; - Query_Bar replace = {}; - replace.prompt = string_u8_litexpr("Replace (In All Buffers): "); - replace.string = SCu8(replace_space, (umem)0); - replace.string_capacity = sizeof(replace_space); - - u8 with_space[1024]; - Query_Bar with = {}; - with.prompt = string_u8_litexpr("With: "); - with.string = SCu8(with_space, (umem)0); - with.string_capacity = sizeof(with_space); - - if (!query_user_string(app, &replace)) return; - if (replace.string.size == 0) return; - - if (!query_user_string(app, &with)) return; - - String_Const_u8 r = replace.string; - String_Const_u8 w = with.string; - replace_all_occurrences_parameters(app, &global_heap, r, w); -} - extern "C" i32 get_bindings(void *data, i32 size){ Bind_Helper context_ = begin_bind_helper(data, size); @@ -828,7 +752,7 @@ get_bindings(void *data, i32 size){ bind(context, key_end, MDFR_ALT, miblo_decrement_time_stamp_minute); bind(context, 'b', MDFR_CTRL, multi_paste_interactive_quick); - bind(context, 'A', MDFR_CTRL, replace_all_occurrences); + bind(context, 'A', MDFR_CTRL, replace_in_all_buffers); end_map(context); begin_map(context, default_code_map); diff --git a/4coder_fancy.cpp b/4coder_fancy.cpp index 49a69915..54f7ae78 100644 --- a/4coder_fancy.cpp +++ b/4coder_fancy.cpp @@ -92,7 +92,7 @@ fancy_string_list_push(Fancy_String_List *list, Fancy_String *string){ static Fancy_String * push_fancy_string(Arena *arena, Fancy_String_List *list, Fancy_Color fore, Fancy_Color back, String_Const_u8 value){ Fancy_String *result = push_array_zero(arena, Fancy_String, 1); - result->value = string_copy(arena, value); + result->value = push_string_copy(arena, value); result->fore = fore; result->back = back; if (list != 0){ diff --git a/4coder_file.h b/4coder_file.h index f0e11eb9..431290cf 100644 --- a/4coder_file.h +++ b/4coder_file.h @@ -7,9 +7,6 @@ #if !defined(FCODER_FILE_ENUMERATOR_CPP) #define FCODER_FILE_ENUMERATOR_CPP -#include "4coder_lib/4coder_arena.h" -#include "4coder_lib/4coder_arena.cpp" - #include "4coder_base_types.h" #define FSTRING_IMPLEMENTATION #include "4coder_lib/4coder_string.h" diff --git a/4coder_generated/command_metadata.h b/4coder_generated/command_metadata.h index d3f78605..97c6bbee 100644 --- a/4coder_generated/command_metadata.h +++ b/4coder_generated/command_metadata.h @@ -2,14 +2,14 @@ #define command_id(c) (fcoder_metacmd_ID_##c) #define command_metadata(c) (&fcoder_metacmd_table[command_id(c)]) #define command_metadata_by_id(id) (&fcoder_metacmd_table[id]) -#define command_one_past_last_id 236 +#define command_one_past_last_id 237 #if defined(CUSTOM_COMMAND_SIG) #define PROC_LINKS(x,y) x #else #define PROC_LINKS(x,y) y #endif #if defined(CUSTOM_COMMAND_SIG) -CUSTOM_COMMAND_SIG(replace_all_occurrences); +CUSTOM_COMMAND_SIG(write_explicit_enum_flags); CUSTOM_COMMAND_SIG(seek_beginning_of_textual_line); CUSTOM_COMMAND_SIG(seek_end_of_textual_line); CUSTOM_COMMAND_SIG(seek_beginning_of_line); @@ -103,6 +103,8 @@ CUSTOM_COMMAND_SIG(reverse_search); CUSTOM_COMMAND_SIG(search_identifier); CUSTOM_COMMAND_SIG(reverse_search_identifier); CUSTOM_COMMAND_SIG(replace_in_range); +CUSTOM_COMMAND_SIG(replace_in_buffer); +CUSTOM_COMMAND_SIG(replace_in_all_buffers); CUSTOM_COMMAND_SIG(query_replace); CUSTOM_COMMAND_SIG(query_replace_identifier); CUSTOM_COMMAND_SIG(query_replace_selection); @@ -244,7 +246,6 @@ CUSTOM_COMMAND_SIG(kill_rect); CUSTOM_COMMAND_SIG(multi_line_edit); CUSTOM_COMMAND_SIG(rename_parameter); CUSTOM_COMMAND_SIG(write_explicit_enum_values); -CUSTOM_COMMAND_SIG(write_explicit_enum_flags); #endif struct Command_Metadata{ PROC_LINKS(Custom_Command_Function, void) *proc; @@ -256,245 +257,246 @@ char *source_name; int32_t source_name_len; int32_t line_number; }; -static Command_Metadata fcoder_metacmd_table[236] = { -{ PROC_LINKS(replace_all_occurrences, 0), "replace_all_occurrences", 23, "Queries the user for two strings, and replaces all occurrences of the first string with the second string in all open buffers.", 126, "c:\\4ed\\code\\4coder_experiments.cpp", 34, 766 }, -{ PROC_LINKS(seek_beginning_of_textual_line, 0), "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "c:\\4ed\\code\\4coder_seek.cpp", 27, 28 }, -{ PROC_LINKS(seek_end_of_textual_line, 0), "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "c:\\4ed\\code\\4coder_seek.cpp", 27, 34 }, -{ PROC_LINKS(seek_beginning_of_line, 0), "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "c:\\4ed\\code\\4coder_seek.cpp", 27, 40 }, -{ PROC_LINKS(seek_end_of_line, 0), "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "c:\\4ed\\code\\4coder_seek.cpp", 27, 46 }, -{ PROC_LINKS(goto_beginning_of_file, 0), "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "c:\\4ed\\code\\4coder_seek.cpp", 27, 52 }, -{ PROC_LINKS(goto_end_of_file, 0), "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "c:\\4ed\\code\\4coder_seek.cpp", 27, 60 }, -{ PROC_LINKS(change_active_panel, 0), "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 197 }, -{ PROC_LINKS(change_active_panel_backwards, 0), "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 207 }, -{ PROC_LINKS(open_panel_vsplit, 0), "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 217 }, -{ PROC_LINKS(open_panel_hsplit, 0), "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 227 }, -{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 288 }, -{ PROC_LINKS(allow_mouse, 0), "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 294 }, -{ PROC_LINKS(toggle_mouse, 0), "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 300 }, -{ PROC_LINKS(set_mode_to_original, 0), "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 306 }, -{ PROC_LINKS(set_mode_to_notepad_like, 0), "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 312 }, -{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 318 }, -{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 324 }, -{ PROC_LINKS(toggle_paren_matching_helper, 0), "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 330 }, -{ PROC_LINKS(toggle_fullscreen, 0), "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 336 }, -{ PROC_LINKS(remap_interactive, 0), "remap_interactive", 17, "Switch to a named key binding map.", 34, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 344 }, -{ PROC_LINKS(write_character, 0), "write_character", 15, "Inserts whatever character was used to trigger this command.", 60, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 66 }, -{ PROC_LINKS(write_underscore, 0), "write_underscore", 16, "Inserts an underscore.", 22, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 75 }, -{ PROC_LINKS(delete_char, 0), "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 82 }, -{ PROC_LINKS(backspace_char, 0), "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 99 }, -{ PROC_LINKS(set_mark, 0), "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 118 }, -{ PROC_LINKS(cursor_mark_swap, 0), "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 127 }, -{ PROC_LINKS(delete_range, 0), "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 137 }, -{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 157 }, -{ PROC_LINKS(delete_alpha_numeric_boundary, 0), "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 165 }, -{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 185 }, -{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 193 }, -{ PROC_LINKS(center_view, 0), "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 206 }, -{ PROC_LINKS(left_adjust_view, 0), "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 221 }, -{ PROC_LINKS(click_set_cursor_and_mark, 0), "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 244 }, -{ PROC_LINKS(click_set_cursor, 0), "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 259 }, -{ PROC_LINKS(click_set_cursor_if_lbutton, 0), "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 273 }, -{ PROC_LINKS(click_set_mark, 0), "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 289 }, -{ PROC_LINKS(mouse_wheel_scroll, 0), "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 303 }, -{ PROC_LINKS(move_up, 0), "move_up", 7, "Moves the cursor up one line.", 29, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 364 }, -{ PROC_LINKS(move_down, 0), "move_down", 9, "Moves the cursor down one line.", 31, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 370 }, -{ PROC_LINKS(move_up_10, 0), "move_up_10", 10, "Moves the cursor up ten lines.", 30, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 376 }, -{ PROC_LINKS(move_down_10, 0), "move_down_10", 12, "Moves the cursor down ten lines.", 32, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 382 }, -{ PROC_LINKS(move_down_textual, 0), "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 388 }, -{ PROC_LINKS(page_up, 0), "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 398 }, -{ PROC_LINKS(page_down, 0), "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 406 }, -{ PROC_LINKS(move_up_to_blank_line, 0), "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 435 }, -{ PROC_LINKS(move_down_to_blank_line, 0), "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 441 }, -{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 447 }, -{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 453 }, -{ PROC_LINKS(move_up_to_blank_line_end, 0), "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 459 }, -{ PROC_LINKS(move_down_to_blank_line_end, 0), "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 465 }, -{ PROC_LINKS(move_left, 0), "move_left", 9, "Moves the cursor one character to the left.", 43, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 476 }, -{ PROC_LINKS(move_right, 0), "move_right", 10, "Moves the cursor one character to the right.", 44, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 487 }, -{ PROC_LINKS(move_right_whitespace_boundary, 0), "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 508 }, -{ PROC_LINKS(move_left_whitespace_boundary, 0), "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 516 }, -{ PROC_LINKS(move_right_token_boundary, 0), "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 524 }, -{ PROC_LINKS(move_left_token_boundary, 0), "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 532 }, -{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 540 }, -{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 548 }, -{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 556 }, -{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 564 }, -{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 572 }, -{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 580 }, -{ PROC_LINKS(select_all, 0), "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 601 }, -{ PROC_LINKS(to_uppercase, 0), "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 614 }, -{ PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 627 }, -{ PROC_LINKS(clean_all_lines, 0), "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 640 }, -{ PROC_LINKS(basic_change_active_panel, 0), "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 678 }, -{ PROC_LINKS(close_panel, 0), "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 686 }, -{ PROC_LINKS(show_scrollbar, 0), "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 695 }, -{ PROC_LINKS(hide_scrollbar, 0), "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 702 }, -{ PROC_LINKS(show_filebar, 0), "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 709 }, -{ PROC_LINKS(hide_filebar, 0), "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 716 }, -{ PROC_LINKS(toggle_filebar, 0), "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 723 }, -{ PROC_LINKS(toggle_line_wrap, 0), "toggle_line_wrap", 16, "Toggles the current buffer's line wrapping status.", 50, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 732 }, -{ PROC_LINKS(toggle_fps_meter, 0), "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 742 }, -{ PROC_LINKS(increase_line_wrap, 0), "increase_line_wrap", 18, "Increases the current buffer's width for line wrapping.", 55, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 748 }, -{ PROC_LINKS(decrease_line_wrap, 0), "decrease_line_wrap", 18, "Decrases the current buffer's width for line wrapping.", 54, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 758 }, -{ PROC_LINKS(increase_face_size, 0), "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 768 }, -{ PROC_LINKS(decrease_face_size, 0), "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 779 }, -{ PROC_LINKS(mouse_wheel_change_face_size, 0), "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 790 }, -{ PROC_LINKS(toggle_virtual_whitespace, 0), "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 807 }, -{ PROC_LINKS(toggle_show_whitespace, 0), "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 817 }, -{ PROC_LINKS(toggle_line_numbers, 0), "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 826 }, -{ PROC_LINKS(eol_dosify, 0), "eol_dosify", 10, "Puts the buffer in DOS line ending mode.", 40, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 832 }, -{ PROC_LINKS(eol_nixify, 0), "eol_nixify", 10, "Puts the buffer in NIX line ending mode.", 40, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 840 }, -{ PROC_LINKS(exit_4coder, 0), "exit_4coder", 11, "Attempts to close 4coder.", 25, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 848 }, -{ PROC_LINKS(goto_line, 0), "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 856 }, -{ PROC_LINKS(search, 0), "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1078 }, -{ PROC_LINKS(reverse_search, 0), "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1084 }, -{ PROC_LINKS(search_identifier, 0), "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1090 }, -{ PROC_LINKS(reverse_search_identifier, 0), "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1101 }, -{ PROC_LINKS(replace_in_range, 0), "replace_in_range", 16, "Queries the user for two strings, and replaces all occurences of the first string in the range between the cursor and the mark with the second string.", 150, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1112 }, -{ PROC_LINKS(query_replace, 0), "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1213 }, -{ PROC_LINKS(query_replace_identifier, 0), "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1233 }, -{ PROC_LINKS(query_replace_selection, 0), "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1249 }, -{ PROC_LINKS(save_all_dirty_buffers, 0), "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1284 }, -{ PROC_LINKS(delete_file_query, 0), "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1309 }, -{ PROC_LINKS(save_to_query, 0), "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, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1347 }, -{ PROC_LINKS(rename_file_query, 0), "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1382 }, -{ PROC_LINKS(make_directory_query, 0), "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1422 }, -{ PROC_LINKS(move_line_up, 0), "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1455 }, -{ PROC_LINKS(move_line_down, 0), "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1461 }, -{ PROC_LINKS(duplicate_line, 0), "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1467 }, -{ PROC_LINKS(delete_line, 0), "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1481 }, -{ PROC_LINKS(open_file_in_quotes, 0), "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1546 }, -{ PROC_LINKS(open_matching_file_cpp, 0), "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1578 }, -{ PROC_LINKS(view_buffer_other_panel, 0), "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1591 }, -{ PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1603 }, -{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1637 }, -{ PROC_LINKS(save, 0), "save", 4, "Saves the current buffer.", 25, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1645 }, -{ PROC_LINKS(reopen, 0), "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1657 }, -{ PROC_LINKS(undo, 0), "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1715 }, -{ PROC_LINKS(redo, 0), "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1728 }, -{ PROC_LINKS(undo_all_buffers, 0), "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1742 }, -{ PROC_LINKS(redo_all_buffers, 0), "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1816 }, -{ PROC_LINKS(open_in_other, 0), "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1919 }, -{ PROC_LINKS(lister__quit, 0), "lister__quit", 12, "A lister mode command that quits the list without executing any actions.", 72, "c:\\4ed\\code\\4coder_lists.cpp", 28, 8 }, -{ PROC_LINKS(lister__activate, 0), "lister__activate", 16, "A lister mode command that activates the list's action on the highlighted item.", 79, "c:\\4ed\\code\\4coder_lists.cpp", 28, 15 }, -{ PROC_LINKS(lister__write_character, 0), "lister__write_character", 23, "A lister mode command that dispatches to the lister's write character handler.", 78, "c:\\4ed\\code\\4coder_lists.cpp", 28, 30 }, -{ PROC_LINKS(lister__backspace_text_field, 0), "lister__backspace_text_field", 28, "A lister mode command that dispatches to the lister's backspace text field handler.", 83, "c:\\4ed\\code\\4coder_lists.cpp", 28, 40 }, -{ PROC_LINKS(lister__move_up, 0), "lister__move_up", 15, "A lister mode command that dispatches to the lister's navigate up handler.", 74, "c:\\4ed\\code\\4coder_lists.cpp", 28, 50 }, -{ PROC_LINKS(lister__move_down, 0), "lister__move_down", 17, "A lister mode command that dispatches to the lister's navigate down handler.", 76, "c:\\4ed\\code\\4coder_lists.cpp", 28, 60 }, -{ PROC_LINKS(lister__wheel_scroll, 0), "lister__wheel_scroll", 20, "A lister mode command that scrolls the list in response to the mouse wheel.", 75, "c:\\4ed\\code\\4coder_lists.cpp", 28, 70 }, -{ PROC_LINKS(lister__mouse_press, 0), "lister__mouse_press", 19, "A lister mode command that beings a click interaction with a list item under the mouse.", 87, "c:\\4ed\\code\\4coder_lists.cpp", 28, 84 }, -{ PROC_LINKS(lister__mouse_release, 0), "lister__mouse_release", 21, "A lister mode command that ends a click interaction with a list item under the mouse, possibly activating it.", 109, "c:\\4ed\\code\\4coder_lists.cpp", 28, 95 }, -{ PROC_LINKS(lister__repaint, 0), "lister__repaint", 15, "A lister mode command that updates the lists UI data.", 53, "c:\\4ed\\code\\4coder_lists.cpp", 28, 110 }, -{ PROC_LINKS(lister__write_character__default, 0), "lister__write_character__default", 32, "A lister mode command that inserts a new character to the text field.", 69, "c:\\4ed\\code\\4coder_lists.cpp", 28, 120 }, -{ PROC_LINKS(lister__backspace_text_field__default, 0), "lister__backspace_text_field__default", 37, "A lister mode command that backspaces one character from the text field.", 72, "c:\\4ed\\code\\4coder_lists.cpp", 28, 139 }, -{ PROC_LINKS(lister__move_up__default, 0), "lister__move_up__default", 24, "A lister mode command that moves the highlighted item one up in the list.", 73, "c:\\4ed\\code\\4coder_lists.cpp", 28, 153 }, -{ PROC_LINKS(lister__move_down__default, 0), "lister__move_down__default", 26, "A lister mode command that moves the highlighted item one down in the list.", 75, "c:\\4ed\\code\\4coder_lists.cpp", 28, 168 }, -{ PROC_LINKS(lister__write_character__file_path, 0), "lister__write_character__file_path", 34, "A lister mode command that inserts a character into the text field of a file system list.", 89, "c:\\4ed\\code\\4coder_lists.cpp", 28, 183 }, -{ PROC_LINKS(lister__backspace_text_field__file_path, 0), "lister__backspace_text_field__file_path", 39, "A lister mode command that backspaces one character from the text field of a file system list.", 94, "c:\\4ed\\code\\4coder_lists.cpp", 28, 208 }, -{ PROC_LINKS(lister__write_character__fixed_list, 0), "lister__write_character__fixed_list", 35, "A lister mode command that handles input for the fixed sure to kill list.", 73, "c:\\4ed\\code\\4coder_lists.cpp", 28, 249 }, -{ PROC_LINKS(interactive_switch_buffer, 0), "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "c:\\4ed\\code\\4coder_lists.cpp", 28, 725 }, -{ PROC_LINKS(interactive_kill_buffer, 0), "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "c:\\4ed\\code\\4coder_lists.cpp", 28, 744 }, -{ PROC_LINKS(interactive_open_or_new, 0), "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "c:\\4ed\\code\\4coder_lists.cpp", 28, 817 }, -{ PROC_LINKS(interactive_new, 0), "interactive_new", 15, "Interactively creates a new file.", 33, "c:\\4ed\\code\\4coder_lists.cpp", 28, 856 }, -{ PROC_LINKS(interactive_open, 0), "interactive_open", 16, "Interactively opens a file.", 27, "c:\\4ed\\code\\4coder_lists.cpp", 28, 889 }, -{ PROC_LINKS(command_lister, 0), "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "c:\\4ed\\code\\4coder_lists.cpp", 28, 971 }, -{ PROC_LINKS(auto_tab_whole_file, 0), "auto_tab_whole_file", 19, "Audo-indents the entire current buffer.", 39, "c:\\4ed\\code\\4coder_auto_indent.cpp", 34, 546 }, -{ PROC_LINKS(auto_tab_line_at_cursor, 0), "auto_tab_line_at_cursor", 23, "Auto-indents the line on which the cursor sits.", 47, "c:\\4ed\\code\\4coder_auto_indent.cpp", 34, 555 }, -{ PROC_LINKS(auto_tab_range, 0), "auto_tab_range", 14, "Auto-indents the range between the cursor and the mark.", 55, "c:\\4ed\\code\\4coder_auto_indent.cpp", 34, 565 }, -{ PROC_LINKS(write_and_auto_tab, 0), "write_and_auto_tab", 18, "Inserts a character and auto-indents the line on which the cursor sits.", 71, "c:\\4ed\\code\\4coder_auto_indent.cpp", 34, 575 }, -{ PROC_LINKS(list_all_locations, 0), "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "c:\\4ed\\code\\4coder_search.cpp", 29, 696 }, -{ PROC_LINKS(list_all_substring_locations, 0), "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "c:\\4ed\\code\\4coder_search.cpp", 29, 703 }, -{ PROC_LINKS(list_all_locations_case_insensitive, 0), "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "c:\\4ed\\code\\4coder_search.cpp", 29, 710 }, -{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "c:\\4ed\\code\\4coder_search.cpp", 29, 717 }, -{ PROC_LINKS(list_all_locations_of_identifier, 0), "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "c:\\4ed\\code\\4coder_search.cpp", 29, 724 }, -{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "c:\\4ed\\code\\4coder_search.cpp", 29, 731 }, -{ PROC_LINKS(list_all_locations_of_selection, 0), "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "c:\\4ed\\code\\4coder_search.cpp", 29, 738 }, -{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "c:\\4ed\\code\\4coder_search.cpp", 29, 745 }, -{ PROC_LINKS(list_all_locations_of_type_definition, 0), "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "c:\\4ed\\code\\4coder_search.cpp", 29, 752 }, -{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "c:\\4ed\\code\\4coder_search.cpp", 29, 763 }, -{ PROC_LINKS(word_complete, 0), "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "c:\\4ed\\code\\4coder_search.cpp", 29, 836 }, -{ PROC_LINKS(goto_jump_at_cursor_direct, 0), "goto_jump_at_cursor_direct", 26, "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, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 8 }, -{ PROC_LINKS(goto_jump_at_cursor_same_panel_direct, 0), "goto_jump_at_cursor_same_panel_direct", 37, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list..", 168, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 31 }, -{ PROC_LINKS(goto_next_jump_direct, 0), "goto_next_jump_direct", 21, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 52 }, -{ PROC_LINKS(goto_prev_jump_direct, 0), "goto_prev_jump_direct", 21, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 61 }, -{ PROC_LINKS(goto_next_jump_no_skips_direct, 0), "goto_next_jump_no_skips_direct", 30, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 70 }, -{ PROC_LINKS(goto_prev_jump_no_skips_direct, 0), "goto_prev_jump_no_skips_direct", 30, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 79 }, -{ PROC_LINKS(goto_first_jump_direct, 0), "goto_first_jump_direct", 22, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 88 }, -{ PROC_LINKS(newline_or_goto_position_direct, 0), "newline_or_goto_position_direct", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 103 }, -{ PROC_LINKS(newline_or_goto_position_same_panel_direct, 0), "newline_or_goto_position_same_panel_direct", 42, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 120 }, -{ PROC_LINKS(goto_jump_at_cursor_sticky, 0), "goto_jump_at_cursor_sticky", 26, "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, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 365 }, -{ PROC_LINKS(goto_jump_at_cursor_same_panel_sticky, 0), "goto_jump_at_cursor_same_panel_sticky", 37, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 392 }, -{ PROC_LINKS(goto_next_jump_sticky, 0), "goto_next_jump_sticky", 21, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 491 }, -{ PROC_LINKS(goto_prev_jump_sticky, 0), "goto_prev_jump_sticky", 21, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 508 }, -{ PROC_LINKS(goto_next_jump_no_skips_sticky, 0), "goto_next_jump_no_skips_sticky", 30, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 521 }, -{ PROC_LINKS(goto_prev_jump_no_skips_sticky, 0), "goto_prev_jump_no_skips_sticky", 30, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 538 }, -{ PROC_LINKS(goto_first_jump_sticky, 0), "goto_first_jump_sticky", 22, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 552 }, -{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), "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, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 569 }, -{ PROC_LINKS(newline_or_goto_position_sticky, 0), "newline_or_goto_position_sticky", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 591 }, -{ PROC_LINKS(newline_or_goto_position_same_panel_sticky, 0), "newline_or_goto_position_same_panel_sticky", 42, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 608 }, -{ PROC_LINKS(view_jump_list_with_lister, 0), "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "c:\\4ed\\code\\4coder_jump_lister.cpp", 34, 104 }, -{ PROC_LINKS(copy, 0), "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 19 }, -{ PROC_LINKS(cut, 0), "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 28 }, -{ PROC_LINKS(paste, 0), "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 39 }, -{ PROC_LINKS(paste_next, 0), "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 72 }, -{ PROC_LINKS(paste_and_indent, 0), "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 114 }, -{ PROC_LINKS(paste_next_and_indent, 0), "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 121 }, -{ PROC_LINKS(execute_previous_cli, 0), "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, "c:\\4ed\\code\\4coder_system_command.cpp", 37, 7 }, -{ PROC_LINKS(execute_any_cli, 0), "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, "c:\\4ed\\code\\4coder_system_command.cpp", 37, 22 }, -{ PROC_LINKS(build_search, 0), "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "c:\\4ed\\code\\4coder_build_commands.cpp", 37, 128 }, -{ PROC_LINKS(build_in_build_panel, 0), "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "c:\\4ed\\code\\4coder_build_commands.cpp", 37, 162 }, -{ PROC_LINKS(close_build_panel, 0), "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "c:\\4ed\\code\\4coder_build_commands.cpp", 37, 177 }, -{ PROC_LINKS(change_to_build_panel, 0), "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "c:\\4ed\\code\\4coder_build_commands.cpp", 37, 183 }, -{ PROC_LINKS(close_all_code, 0), "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 928 }, -{ PROC_LINKS(open_all_code, 0), "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 934 }, -{ PROC_LINKS(open_all_code_recursive, 0), "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 940 }, -{ PROC_LINKS(load_project, 0), "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 948 }, -{ PROC_LINKS(project_fkey_command, 0), "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 955 }, -{ PROC_LINKS(project_go_to_root_directory, 0), "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 978 }, -{ PROC_LINKS(setup_new_project, 0), "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 1313 }, -{ PROC_LINKS(setup_build_bat, 0), "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 1320 }, -{ PROC_LINKS(setup_build_sh, 0), "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 1326 }, -{ PROC_LINKS(setup_build_bat_and_sh, 0), "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 1332 }, -{ PROC_LINKS(project_command_lister, 0), "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 1347 }, -{ PROC_LINKS(list_all_functions_current_buffer, 0), "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "c:\\4ed\\code\\4coder_function_list.cpp", 36, 268 }, -{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "c:\\4ed\\code\\4coder_function_list.cpp", 36, 278 }, -{ PROC_LINKS(list_all_functions_all_buffers, 0), "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "c:\\4ed\\code\\4coder_function_list.cpp", 36, 290 }, -{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "c:\\4ed\\code\\4coder_function_list.cpp", 36, 296 }, -{ PROC_LINKS(select_surrounding_scope, 0), "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 337 }, -{ PROC_LINKS(select_next_scope_absolute, 0), "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 352 }, -{ PROC_LINKS(select_prev_scope_absolute, 0), "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 371 }, -{ PROC_LINKS(place_in_scope, 0), "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 445 }, -{ PROC_LINKS(delete_current_scope, 0), "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 451 }, -{ PROC_LINKS(scope_absorb_down, 0), "scope_absorb_down", 17, "If a scope is currently selected, and a statement or block statement is present below the current scope, the statement is moved into the scope.", 143, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 670 }, -{ PROC_LINKS(open_long_braces, 0), "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 46 }, -{ PROC_LINKS(open_long_braces_semicolon, 0), "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 54 }, -{ PROC_LINKS(open_long_braces_break, 0), "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 62 }, -{ PROC_LINKS(if0_off, 0), "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 70 }, -{ PROC_LINKS(write_todo, 0), "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 76 }, -{ PROC_LINKS(write_hack, 0), "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 82 }, -{ PROC_LINKS(write_note, 0), "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 88 }, -{ PROC_LINKS(write_block, 0), "write_block", 11, "At the cursor, insert a block comment.", 38, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 94 }, -{ PROC_LINKS(write_zero_struct, 0), "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 100 }, -{ PROC_LINKS(comment_line, 0), "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 126 }, -{ PROC_LINKS(uncomment_line, 0), "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 138 }, -{ PROC_LINKS(comment_line_toggle, 0), "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 150 }, -{ PROC_LINKS(snippet_lister, 0), "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 234 }, -{ PROC_LINKS(set_bindings_choose, 0), "set_bindings_choose", 19, "Remap keybindings using the 'choose' mapping rule.", 50, "c:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 39 }, -{ PROC_LINKS(set_bindings_default, 0), "set_bindings_default", 20, "Remap keybindings using the 'default' mapping rule.", 51, "c:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 49 }, -{ PROC_LINKS(set_bindings_mac_default, 0), "set_bindings_mac_default", 24, "Remap keybindings using the 'mac-default' mapping rule.", 55, "c:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 64 }, -{ PROC_LINKS(miblo_increment_basic, 0), "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 29 }, -{ PROC_LINKS(miblo_decrement_basic, 0), "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 44 }, -{ PROC_LINKS(miblo_increment_time_stamp, 0), "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 231 }, -{ PROC_LINKS(miblo_decrement_time_stamp, 0), "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 237 }, -{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 243 }, -{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 249 }, -{ PROC_LINKS(kill_rect, 0), "kill_rect", 9, "Delete characters in a rectangular region. Range testing is done by unwrapped-xy coordinates.", 93, "c:\\4ed\\code\\4coder_experiments.cpp", 34, 44 }, -{ PROC_LINKS(multi_line_edit, 0), "multi_line_edit", 15, "Begin multi-line mode. In multi-line mode characters are inserted at every line between the mark and cursor. All characters are inserted at the same character offset into the line. This mode uses line_char coordinates.", 221, "c:\\4ed\\code\\4coder_experiments.cpp", 34, 125 }, -{ PROC_LINKS(rename_parameter, 0), "rename_parameter", 16, "If the cursor is found to be on the name of a function parameter in the signature of a function definition, all occurences within the scope of the function will be replaced with a new provided string.", 200, "c:\\4ed\\code\\4coder_experiments.cpp", 34, 386 }, -{ PROC_LINKS(write_explicit_enum_values, 0), "write_explicit_enum_values", 26, "If the cursor is found to be on the '{' of an enum definition, the values of the enum will be filled in sequentially starting from zero. Existing values are overwritten.", 170, "c:\\4ed\\code\\4coder_experiments.cpp", 34, 693 }, -{ PROC_LINKS(write_explicit_enum_flags, 0), "write_explicit_enum_flags", 25, "If the cursor is found to be on the '{' of an enum definition, the values of the enum will be filled in to give each a unique power of 2 value, starting from 1. Existing values are overwritten.", 194, "c:\\4ed\\code\\4coder_experiments.cpp", 34, 699 }, +static Command_Metadata fcoder_metacmd_table[237] = { +{ PROC_LINKS(write_explicit_enum_flags, 0), "write_explicit_enum_flags", 25, "If the cursor is found to be on the '{' of an enum definition, the values of the enum will be filled in to give each a unique power of 2 value, starting from 1. Existing values are overwritten.", 194, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 699 }, +{ PROC_LINKS(seek_beginning_of_textual_line, 0), "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "w:\\4ed\\code\\4coder_seek.cpp", 27, 28 }, +{ PROC_LINKS(seek_end_of_textual_line, 0), "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "w:\\4ed\\code\\4coder_seek.cpp", 27, 34 }, +{ PROC_LINKS(seek_beginning_of_line, 0), "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "w:\\4ed\\code\\4coder_seek.cpp", 27, 40 }, +{ PROC_LINKS(seek_end_of_line, 0), "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "w:\\4ed\\code\\4coder_seek.cpp", 27, 46 }, +{ PROC_LINKS(goto_beginning_of_file, 0), "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "w:\\4ed\\code\\4coder_seek.cpp", 27, 52 }, +{ PROC_LINKS(goto_end_of_file, 0), "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "w:\\4ed\\code\\4coder_seek.cpp", 27, 60 }, +{ PROC_LINKS(change_active_panel, 0), "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 197 }, +{ PROC_LINKS(change_active_panel_backwards, 0), "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 207 }, +{ PROC_LINKS(open_panel_vsplit, 0), "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 217 }, +{ PROC_LINKS(open_panel_hsplit, 0), "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 227 }, +{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 288 }, +{ PROC_LINKS(allow_mouse, 0), "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 294 }, +{ PROC_LINKS(toggle_mouse, 0), "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 300 }, +{ PROC_LINKS(set_mode_to_original, 0), "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 306 }, +{ PROC_LINKS(set_mode_to_notepad_like, 0), "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 312 }, +{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 318 }, +{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 324 }, +{ PROC_LINKS(toggle_paren_matching_helper, 0), "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 330 }, +{ PROC_LINKS(toggle_fullscreen, 0), "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 336 }, +{ PROC_LINKS(remap_interactive, 0), "remap_interactive", 17, "Switch to a named key binding map.", 34, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 344 }, +{ PROC_LINKS(write_character, 0), "write_character", 15, "Inserts whatever character was used to trigger this command.", 60, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 66 }, +{ PROC_LINKS(write_underscore, 0), "write_underscore", 16, "Inserts an underscore.", 22, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 75 }, +{ PROC_LINKS(delete_char, 0), "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 82 }, +{ PROC_LINKS(backspace_char, 0), "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 99 }, +{ PROC_LINKS(set_mark, 0), "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 118 }, +{ PROC_LINKS(cursor_mark_swap, 0), "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 127 }, +{ PROC_LINKS(delete_range, 0), "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 137 }, +{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 157 }, +{ PROC_LINKS(delete_alpha_numeric_boundary, 0), "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 165 }, +{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 185 }, +{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 193 }, +{ PROC_LINKS(center_view, 0), "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 206 }, +{ PROC_LINKS(left_adjust_view, 0), "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 221 }, +{ PROC_LINKS(click_set_cursor_and_mark, 0), "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 244 }, +{ PROC_LINKS(click_set_cursor, 0), "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 259 }, +{ PROC_LINKS(click_set_cursor_if_lbutton, 0), "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 273 }, +{ PROC_LINKS(click_set_mark, 0), "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 289 }, +{ PROC_LINKS(mouse_wheel_scroll, 0), "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 303 }, +{ PROC_LINKS(move_up, 0), "move_up", 7, "Moves the cursor up one line.", 29, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 364 }, +{ PROC_LINKS(move_down, 0), "move_down", 9, "Moves the cursor down one line.", 31, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 370 }, +{ PROC_LINKS(move_up_10, 0), "move_up_10", 10, "Moves the cursor up ten lines.", 30, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 376 }, +{ PROC_LINKS(move_down_10, 0), "move_down_10", 12, "Moves the cursor down ten lines.", 32, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 382 }, +{ PROC_LINKS(move_down_textual, 0), "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 388 }, +{ PROC_LINKS(page_up, 0), "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 398 }, +{ PROC_LINKS(page_down, 0), "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 406 }, +{ PROC_LINKS(move_up_to_blank_line, 0), "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 435 }, +{ PROC_LINKS(move_down_to_blank_line, 0), "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 441 }, +{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 447 }, +{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 453 }, +{ PROC_LINKS(move_up_to_blank_line_end, 0), "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 459 }, +{ PROC_LINKS(move_down_to_blank_line_end, 0), "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 465 }, +{ PROC_LINKS(move_left, 0), "move_left", 9, "Moves the cursor one character to the left.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 476 }, +{ PROC_LINKS(move_right, 0), "move_right", 10, "Moves the cursor one character to the right.", 44, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 487 }, +{ PROC_LINKS(move_right_whitespace_boundary, 0), "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 508 }, +{ PROC_LINKS(move_left_whitespace_boundary, 0), "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 516 }, +{ PROC_LINKS(move_right_token_boundary, 0), "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 524 }, +{ PROC_LINKS(move_left_token_boundary, 0), "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 532 }, +{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 540 }, +{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 548 }, +{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 556 }, +{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 564 }, +{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 572 }, +{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 580 }, +{ PROC_LINKS(select_all, 0), "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\\4coder_base_commands.cpp", 36, 601 }, +{ PROC_LINKS(to_uppercase, 0), "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 614 }, +{ PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 627 }, +{ PROC_LINKS(clean_all_lines, 0), "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 640 }, +{ PROC_LINKS(basic_change_active_panel, 0), "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 678 }, +{ PROC_LINKS(close_panel, 0), "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 686 }, +{ PROC_LINKS(show_scrollbar, 0), "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 695 }, +{ PROC_LINKS(hide_scrollbar, 0), "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 702 }, +{ PROC_LINKS(show_filebar, 0), "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 709 }, +{ PROC_LINKS(hide_filebar, 0), "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 716 }, +{ PROC_LINKS(toggle_filebar, 0), "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 723 }, +{ PROC_LINKS(toggle_line_wrap, 0), "toggle_line_wrap", 16, "Toggles the current buffer's line wrapping status.", 50, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 732 }, +{ PROC_LINKS(toggle_fps_meter, 0), "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 742 }, +{ PROC_LINKS(increase_line_wrap, 0), "increase_line_wrap", 18, "Increases the current buffer's width for line wrapping.", 55, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 748 }, +{ PROC_LINKS(decrease_line_wrap, 0), "decrease_line_wrap", 18, "Decrases the current buffer's width for line wrapping.", 54, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 758 }, +{ PROC_LINKS(increase_face_size, 0), "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 768 }, +{ PROC_LINKS(decrease_face_size, 0), "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 779 }, +{ PROC_LINKS(mouse_wheel_change_face_size, 0), "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 790 }, +{ PROC_LINKS(toggle_virtual_whitespace, 0), "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 807 }, +{ PROC_LINKS(toggle_show_whitespace, 0), "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 817 }, +{ PROC_LINKS(toggle_line_numbers, 0), "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 826 }, +{ PROC_LINKS(eol_dosify, 0), "eol_dosify", 10, "Puts the buffer in DOS line ending mode.", 40, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 832 }, +{ PROC_LINKS(eol_nixify, 0), "eol_nixify", 10, "Puts the buffer in NIX line ending mode.", 40, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 840 }, +{ PROC_LINKS(exit_4coder, 0), "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 848 }, +{ PROC_LINKS(goto_line, 0), "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 856 }, +{ PROC_LINKS(search, 0), "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1078 }, +{ PROC_LINKS(reverse_search, 0), "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1084 }, +{ PROC_LINKS(search_identifier, 0), "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1090 }, +{ PROC_LINKS(reverse_search_identifier, 0), "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1101 }, +{ PROC_LINKS(replace_in_range, 0), "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1150 }, +{ PROC_LINKS(replace_in_buffer, 0), "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1159 }, +{ PROC_LINKS(replace_in_all_buffers, 0), "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1168 }, +{ PROC_LINKS(query_replace, 0), "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1261 }, +{ PROC_LINKS(query_replace_identifier, 0), "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1281 }, +{ PROC_LINKS(query_replace_selection, 0), "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1297 }, +{ PROC_LINKS(save_all_dirty_buffers, 0), "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1332 }, +{ PROC_LINKS(delete_file_query, 0), "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1357 }, +{ PROC_LINKS(save_to_query, 0), "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\\4coder_base_commands.cpp", 36, 1395 }, +{ PROC_LINKS(rename_file_query, 0), "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1430 }, +{ PROC_LINKS(make_directory_query, 0), "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1470 }, +{ PROC_LINKS(move_line_up, 0), "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1503 }, +{ PROC_LINKS(move_line_down, 0), "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1509 }, +{ PROC_LINKS(duplicate_line, 0), "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1515 }, +{ PROC_LINKS(delete_line, 0), "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1529 }, +{ PROC_LINKS(open_file_in_quotes, 0), "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1594 }, +{ PROC_LINKS(open_matching_file_cpp, 0), "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1626 }, +{ PROC_LINKS(view_buffer_other_panel, 0), "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1639 }, +{ PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1651 }, +{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1685 }, +{ PROC_LINKS(save, 0), "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1693 }, +{ PROC_LINKS(reopen, 0), "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1705 }, +{ PROC_LINKS(undo, 0), "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1763 }, +{ PROC_LINKS(redo, 0), "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1776 }, +{ PROC_LINKS(undo_all_buffers, 0), "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1790 }, +{ PROC_LINKS(redo_all_buffers, 0), "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1864 }, +{ PROC_LINKS(open_in_other, 0), "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1967 }, +{ PROC_LINKS(lister__quit, 0), "lister__quit", 12, "A lister mode command that quits the list without executing any actions.", 72, "w:\\4ed\\code\\4coder_lists.cpp", 28, 8 }, +{ PROC_LINKS(lister__activate, 0), "lister__activate", 16, "A lister mode command that activates the list's action on the highlighted item.", 79, "w:\\4ed\\code\\4coder_lists.cpp", 28, 15 }, +{ PROC_LINKS(lister__write_character, 0), "lister__write_character", 23, "A lister mode command that dispatches to the lister's write character handler.", 78, "w:\\4ed\\code\\4coder_lists.cpp", 28, 30 }, +{ PROC_LINKS(lister__backspace_text_field, 0), "lister__backspace_text_field", 28, "A lister mode command that dispatches to the lister's backspace text field handler.", 83, "w:\\4ed\\code\\4coder_lists.cpp", 28, 40 }, +{ PROC_LINKS(lister__move_up, 0), "lister__move_up", 15, "A lister mode command that dispatches to the lister's navigate up handler.", 74, "w:\\4ed\\code\\4coder_lists.cpp", 28, 50 }, +{ PROC_LINKS(lister__move_down, 0), "lister__move_down", 17, "A lister mode command that dispatches to the lister's navigate down handler.", 76, "w:\\4ed\\code\\4coder_lists.cpp", 28, 60 }, +{ PROC_LINKS(lister__wheel_scroll, 0), "lister__wheel_scroll", 20, "A lister mode command that scrolls the list in response to the mouse wheel.", 75, "w:\\4ed\\code\\4coder_lists.cpp", 28, 70 }, +{ PROC_LINKS(lister__mouse_press, 0), "lister__mouse_press", 19, "A lister mode command that beings a click interaction with a list item under the mouse.", 87, "w:\\4ed\\code\\4coder_lists.cpp", 28, 84 }, +{ PROC_LINKS(lister__mouse_release, 0), "lister__mouse_release", 21, "A lister mode command that ends a click interaction with a list item under the mouse, possibly activating it.", 109, "w:\\4ed\\code\\4coder_lists.cpp", 28, 95 }, +{ PROC_LINKS(lister__repaint, 0), "lister__repaint", 15, "A lister mode command that updates the lists UI data.", 53, "w:\\4ed\\code\\4coder_lists.cpp", 28, 110 }, +{ PROC_LINKS(lister__write_character__default, 0), "lister__write_character__default", 32, "A lister mode command that inserts a new character to the text field.", 69, "w:\\4ed\\code\\4coder_lists.cpp", 28, 120 }, +{ PROC_LINKS(lister__backspace_text_field__default, 0), "lister__backspace_text_field__default", 37, "A lister mode command that backspaces one character from the text field.", 72, "w:\\4ed\\code\\4coder_lists.cpp", 28, 139 }, +{ PROC_LINKS(lister__move_up__default, 0), "lister__move_up__default", 24, "A lister mode command that moves the highlighted item one up in the list.", 73, "w:\\4ed\\code\\4coder_lists.cpp", 28, 153 }, +{ PROC_LINKS(lister__move_down__default, 0), "lister__move_down__default", 26, "A lister mode command that moves the highlighted item one down in the list.", 75, "w:\\4ed\\code\\4coder_lists.cpp", 28, 168 }, +{ PROC_LINKS(lister__write_character__file_path, 0), "lister__write_character__file_path", 34, "A lister mode command that inserts a character into the text field of a file system list.", 89, "w:\\4ed\\code\\4coder_lists.cpp", 28, 183 }, +{ PROC_LINKS(lister__backspace_text_field__file_path, 0), "lister__backspace_text_field__file_path", 39, "A lister mode command that backspaces one character from the text field of a file system list.", 94, "w:\\4ed\\code\\4coder_lists.cpp", 28, 208 }, +{ PROC_LINKS(lister__write_character__fixed_list, 0), "lister__write_character__fixed_list", 35, "A lister mode command that handles input for the fixed sure to kill list.", 73, "w:\\4ed\\code\\4coder_lists.cpp", 28, 249 }, +{ PROC_LINKS(interactive_switch_buffer, 0), "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "w:\\4ed\\code\\4coder_lists.cpp", 28, 725 }, +{ PROC_LINKS(interactive_kill_buffer, 0), "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "w:\\4ed\\code\\4coder_lists.cpp", 28, 744 }, +{ PROC_LINKS(interactive_open_or_new, 0), "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "w:\\4ed\\code\\4coder_lists.cpp", 28, 817 }, +{ PROC_LINKS(interactive_new, 0), "interactive_new", 15, "Interactively creates a new file.", 33, "w:\\4ed\\code\\4coder_lists.cpp", 28, 856 }, +{ PROC_LINKS(interactive_open, 0), "interactive_open", 16, "Interactively opens a file.", 27, "w:\\4ed\\code\\4coder_lists.cpp", 28, 889 }, +{ PROC_LINKS(command_lister, 0), "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "w:\\4ed\\code\\4coder_lists.cpp", 28, 971 }, +{ PROC_LINKS(auto_tab_whole_file, 0), "auto_tab_whole_file", 19, "Audo-indents the entire current buffer.", 39, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 546 }, +{ PROC_LINKS(auto_tab_line_at_cursor, 0), "auto_tab_line_at_cursor", 23, "Auto-indents the line on which the cursor sits.", 47, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 555 }, +{ PROC_LINKS(auto_tab_range, 0), "auto_tab_range", 14, "Auto-indents the range between the cursor and the mark.", 55, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 565 }, +{ PROC_LINKS(write_and_auto_tab, 0), "write_and_auto_tab", 18, "Inserts a character and auto-indents the line on which the cursor sits.", 71, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 575 }, +{ PROC_LINKS(list_all_locations, 0), "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "w:\\4ed\\code\\4coder_search.cpp", 29, 15 }, +{ PROC_LINKS(list_all_substring_locations, 0), "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "w:\\4ed\\code\\4coder_search.cpp", 29, 21 }, +{ PROC_LINKS(list_all_locations_case_insensitive, 0), "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "w:\\4ed\\code\\4coder_search.cpp", 29, 27 }, +{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "w:\\4ed\\code\\4coder_search.cpp", 29, 33 }, +{ PROC_LINKS(list_all_locations_of_identifier, 0), "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 39 }, +{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "w:\\4ed\\code\\4coder_search.cpp", 29, 45 }, +{ PROC_LINKS(list_all_locations_of_selection, 0), "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 51 }, +{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "w:\\4ed\\code\\4coder_search.cpp", 29, 57 }, +{ PROC_LINKS(list_all_locations_of_type_definition, 0), "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "w:\\4ed\\code\\4coder_search.cpp", 29, 63 }, +{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "w:\\4ed\\code\\4coder_search.cpp", 29, 69 }, +{ PROC_LINKS(word_complete, 0), "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "w:\\4ed\\code\\4coder_search.cpp", 29, 75 }, +{ PROC_LINKS(goto_jump_at_cursor_direct, 0), "goto_jump_at_cursor_direct", 26, "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\\4coder_jump_direct.cpp", 34, 8 }, +{ PROC_LINKS(goto_jump_at_cursor_same_panel_direct, 0), "goto_jump_at_cursor_same_panel_direct", 37, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list..", 168, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 31 }, +{ PROC_LINKS(goto_next_jump_direct, 0), "goto_next_jump_direct", 21, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 52 }, +{ PROC_LINKS(goto_prev_jump_direct, 0), "goto_prev_jump_direct", 21, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 61 }, +{ PROC_LINKS(goto_next_jump_no_skips_direct, 0), "goto_next_jump_no_skips_direct", 30, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 70 }, +{ PROC_LINKS(goto_prev_jump_no_skips_direct, 0), "goto_prev_jump_no_skips_direct", 30, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 79 }, +{ PROC_LINKS(goto_first_jump_direct, 0), "goto_first_jump_direct", 22, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 88 }, +{ PROC_LINKS(newline_or_goto_position_direct, 0), "newline_or_goto_position_direct", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 103 }, +{ PROC_LINKS(newline_or_goto_position_same_panel_direct, 0), "newline_or_goto_position_same_panel_direct", 42, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 120 }, +{ PROC_LINKS(goto_jump_at_cursor_sticky, 0), "goto_jump_at_cursor_sticky", 26, "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\\4coder_jump_sticky.cpp", 34, 365 }, +{ PROC_LINKS(goto_jump_at_cursor_same_panel_sticky, 0), "goto_jump_at_cursor_same_panel_sticky", 37, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 392 }, +{ PROC_LINKS(goto_next_jump_sticky, 0), "goto_next_jump_sticky", 21, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 491 }, +{ PROC_LINKS(goto_prev_jump_sticky, 0), "goto_prev_jump_sticky", 21, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 508 }, +{ PROC_LINKS(goto_next_jump_no_skips_sticky, 0), "goto_next_jump_no_skips_sticky", 30, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 521 }, +{ PROC_LINKS(goto_prev_jump_no_skips_sticky, 0), "goto_prev_jump_no_skips_sticky", 30, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 538 }, +{ PROC_LINKS(goto_first_jump_sticky, 0), "goto_first_jump_sticky", 22, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 552 }, +{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), "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\\4coder_jump_sticky.cpp", 34, 569 }, +{ PROC_LINKS(newline_or_goto_position_sticky, 0), "newline_or_goto_position_sticky", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 591 }, +{ PROC_LINKS(newline_or_goto_position_same_panel_sticky, 0), "newline_or_goto_position_same_panel_sticky", 42, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 608 }, +{ PROC_LINKS(view_jump_list_with_lister, 0), "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "w:\\4ed\\code\\4coder_jump_lister.cpp", 34, 104 }, +{ PROC_LINKS(copy, 0), "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 19 }, +{ PROC_LINKS(cut, 0), "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 28 }, +{ PROC_LINKS(paste, 0), "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 39 }, +{ PROC_LINKS(paste_next, 0), "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 72 }, +{ PROC_LINKS(paste_and_indent, 0), "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 114 }, +{ PROC_LINKS(paste_next_and_indent, 0), "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 121 }, +{ PROC_LINKS(execute_previous_cli, 0), "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\\4coder_system_command.cpp", 37, 7 }, +{ PROC_LINKS(execute_any_cli, 0), "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\\4coder_system_command.cpp", 37, 22 }, +{ PROC_LINKS(build_search, 0), "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "w:\\4ed\\code\\4coder_build_commands.cpp", 37, 128 }, +{ PROC_LINKS(build_in_build_panel, 0), "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "w:\\4ed\\code\\4coder_build_commands.cpp", 37, 162 }, +{ PROC_LINKS(close_build_panel, 0), "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "w:\\4ed\\code\\4coder_build_commands.cpp", 37, 177 }, +{ PROC_LINKS(change_to_build_panel, 0), "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "w:\\4ed\\code\\4coder_build_commands.cpp", 37, 183 }, +{ PROC_LINKS(close_all_code, 0), "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 928 }, +{ PROC_LINKS(open_all_code, 0), "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 934 }, +{ PROC_LINKS(open_all_code_recursive, 0), "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 940 }, +{ PROC_LINKS(load_project, 0), "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 948 }, +{ PROC_LINKS(project_fkey_command, 0), "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 955 }, +{ PROC_LINKS(project_go_to_root_directory, 0), "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 978 }, +{ PROC_LINKS(setup_new_project, 0), "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1313 }, +{ PROC_LINKS(setup_build_bat, 0), "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1320 }, +{ PROC_LINKS(setup_build_sh, 0), "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1326 }, +{ PROC_LINKS(setup_build_bat_and_sh, 0), "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1332 }, +{ PROC_LINKS(project_command_lister, 0), "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1347 }, +{ PROC_LINKS(list_all_functions_current_buffer, 0), "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 268 }, +{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 278 }, +{ PROC_LINKS(list_all_functions_all_buffers, 0), "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 290 }, +{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 296 }, +{ PROC_LINKS(select_surrounding_scope, 0), "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "w:\\4ed\\code\\4coder_scope_commands.cpp", 37, 337 }, +{ PROC_LINKS(select_next_scope_absolute, 0), "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\\4coder_scope_commands.cpp", 37, 352 }, +{ PROC_LINKS(select_prev_scope_absolute, 0), "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "w:\\4ed\\code\\4coder_scope_commands.cpp", 37, 371 }, +{ PROC_LINKS(place_in_scope, 0), "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "w:\\4ed\\code\\4coder_scope_commands.cpp", 37, 445 }, +{ PROC_LINKS(delete_current_scope, 0), "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "w:\\4ed\\code\\4coder_scope_commands.cpp", 37, 451 }, +{ PROC_LINKS(scope_absorb_down, 0), "scope_absorb_down", 17, "If a scope is currently selected, and a statement or block statement is present below the current scope, the statement is moved into the scope.", 143, "w:\\4ed\\code\\4coder_scope_commands.cpp", 37, 670 }, +{ PROC_LINKS(open_long_braces, 0), "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 46 }, +{ PROC_LINKS(open_long_braces_semicolon, 0), "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 54 }, +{ PROC_LINKS(open_long_braces_break, 0), "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 62 }, +{ PROC_LINKS(if0_off, 0), "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 70 }, +{ PROC_LINKS(write_todo, 0), "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 76 }, +{ PROC_LINKS(write_hack, 0), "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 82 }, +{ PROC_LINKS(write_note, 0), "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 88 }, +{ PROC_LINKS(write_block, 0), "write_block", 11, "At the cursor, insert a block comment.", 38, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 94 }, +{ PROC_LINKS(write_zero_struct, 0), "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 100 }, +{ PROC_LINKS(comment_line, 0), "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 126 }, +{ PROC_LINKS(uncomment_line, 0), "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 138 }, +{ PROC_LINKS(comment_line_toggle, 0), "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 150 }, +{ PROC_LINKS(snippet_lister, 0), "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 234 }, +{ PROC_LINKS(set_bindings_choose, 0), "set_bindings_choose", 19, "Remap keybindings using the 'choose' mapping rule.", 50, "w:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 39 }, +{ PROC_LINKS(set_bindings_default, 0), "set_bindings_default", 20, "Remap keybindings using the 'default' mapping rule.", 51, "w:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 49 }, +{ PROC_LINKS(set_bindings_mac_default, 0), "set_bindings_mac_default", 24, "Remap keybindings using the 'mac-default' mapping rule.", 55, "w:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 64 }, +{ PROC_LINKS(miblo_increment_basic, 0), "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 29 }, +{ PROC_LINKS(miblo_decrement_basic, 0), "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 44 }, +{ PROC_LINKS(miblo_increment_time_stamp, 0), "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 231 }, +{ PROC_LINKS(miblo_decrement_time_stamp, 0), "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 237 }, +{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 243 }, +{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 249 }, +{ PROC_LINKS(kill_rect, 0), "kill_rect", 9, "Delete characters in a rectangular region. Range testing is done by unwrapped-xy coordinates.", 93, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 44 }, +{ PROC_LINKS(multi_line_edit, 0), "multi_line_edit", 15, "Begin multi-line mode. In multi-line mode characters are inserted at every line between the mark and cursor. All characters are inserted at the same character offset into the line. This mode uses line_char coordinates.", 221, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 125 }, +{ PROC_LINKS(rename_parameter, 0), "rename_parameter", 16, "If the cursor is found to be on the name of a function parameter in the signature of a function definition, all occurences within the scope of the function will be replaced with a new provided string.", 200, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 386 }, +{ PROC_LINKS(write_explicit_enum_values, 0), "write_explicit_enum_values", 26, "If the cursor is found to be on the '{' of an enum definition, the values of the enum will be filled in sequentially starting from zero. Existing values are overwritten.", 170, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 693 }, }; -static int32_t fcoder_metacmd_ID_replace_all_occurrences = 0; +static int32_t fcoder_metacmd_ID_write_explicit_enum_flags = 0; static int32_t fcoder_metacmd_ID_seek_beginning_of_textual_line = 1; static int32_t fcoder_metacmd_ID_seek_end_of_textual_line = 2; static int32_t fcoder_metacmd_ID_seek_beginning_of_line = 3; @@ -588,146 +590,147 @@ static int32_t fcoder_metacmd_ID_reverse_search = 90; static int32_t fcoder_metacmd_ID_search_identifier = 91; static int32_t fcoder_metacmd_ID_reverse_search_identifier = 92; static int32_t fcoder_metacmd_ID_replace_in_range = 93; -static int32_t fcoder_metacmd_ID_query_replace = 94; -static int32_t fcoder_metacmd_ID_query_replace_identifier = 95; -static int32_t fcoder_metacmd_ID_query_replace_selection = 96; -static int32_t fcoder_metacmd_ID_save_all_dirty_buffers = 97; -static int32_t fcoder_metacmd_ID_delete_file_query = 98; -static int32_t fcoder_metacmd_ID_save_to_query = 99; -static int32_t fcoder_metacmd_ID_rename_file_query = 100; -static int32_t fcoder_metacmd_ID_make_directory_query = 101; -static int32_t fcoder_metacmd_ID_move_line_up = 102; -static int32_t fcoder_metacmd_ID_move_line_down = 103; -static int32_t fcoder_metacmd_ID_duplicate_line = 104; -static int32_t fcoder_metacmd_ID_delete_line = 105; -static int32_t fcoder_metacmd_ID_open_file_in_quotes = 106; -static int32_t fcoder_metacmd_ID_open_matching_file_cpp = 107; -static int32_t fcoder_metacmd_ID_view_buffer_other_panel = 108; -static int32_t fcoder_metacmd_ID_swap_buffers_between_panels = 109; -static int32_t fcoder_metacmd_ID_kill_buffer = 110; -static int32_t fcoder_metacmd_ID_save = 111; -static int32_t fcoder_metacmd_ID_reopen = 112; -static int32_t fcoder_metacmd_ID_undo = 113; -static int32_t fcoder_metacmd_ID_redo = 114; -static int32_t fcoder_metacmd_ID_undo_all_buffers = 115; -static int32_t fcoder_metacmd_ID_redo_all_buffers = 116; -static int32_t fcoder_metacmd_ID_open_in_other = 117; -static int32_t fcoder_metacmd_ID_lister__quit = 118; -static int32_t fcoder_metacmd_ID_lister__activate = 119; -static int32_t fcoder_metacmd_ID_lister__write_character = 120; -static int32_t fcoder_metacmd_ID_lister__backspace_text_field = 121; -static int32_t fcoder_metacmd_ID_lister__move_up = 122; -static int32_t fcoder_metacmd_ID_lister__move_down = 123; -static int32_t fcoder_metacmd_ID_lister__wheel_scroll = 124; -static int32_t fcoder_metacmd_ID_lister__mouse_press = 125; -static int32_t fcoder_metacmd_ID_lister__mouse_release = 126; -static int32_t fcoder_metacmd_ID_lister__repaint = 127; -static int32_t fcoder_metacmd_ID_lister__write_character__default = 128; -static int32_t fcoder_metacmd_ID_lister__backspace_text_field__default = 129; -static int32_t fcoder_metacmd_ID_lister__move_up__default = 130; -static int32_t fcoder_metacmd_ID_lister__move_down__default = 131; -static int32_t fcoder_metacmd_ID_lister__write_character__file_path = 132; -static int32_t fcoder_metacmd_ID_lister__backspace_text_field__file_path = 133; -static int32_t fcoder_metacmd_ID_lister__write_character__fixed_list = 134; -static int32_t fcoder_metacmd_ID_interactive_switch_buffer = 135; -static int32_t fcoder_metacmd_ID_interactive_kill_buffer = 136; -static int32_t fcoder_metacmd_ID_interactive_open_or_new = 137; -static int32_t fcoder_metacmd_ID_interactive_new = 138; -static int32_t fcoder_metacmd_ID_interactive_open = 139; -static int32_t fcoder_metacmd_ID_command_lister = 140; -static int32_t fcoder_metacmd_ID_auto_tab_whole_file = 141; -static int32_t fcoder_metacmd_ID_auto_tab_line_at_cursor = 142; -static int32_t fcoder_metacmd_ID_auto_tab_range = 143; -static int32_t fcoder_metacmd_ID_write_and_auto_tab = 144; -static int32_t fcoder_metacmd_ID_list_all_locations = 145; -static int32_t fcoder_metacmd_ID_list_all_substring_locations = 146; -static int32_t fcoder_metacmd_ID_list_all_locations_case_insensitive = 147; -static int32_t fcoder_metacmd_ID_list_all_substring_locations_case_insensitive = 148; -static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier = 149; -static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier_case_insensitive = 150; -static int32_t fcoder_metacmd_ID_list_all_locations_of_selection = 151; -static int32_t fcoder_metacmd_ID_list_all_locations_of_selection_case_insensitive = 152; -static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition = 153; -static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition_of_identifier = 154; -static int32_t fcoder_metacmd_ID_word_complete = 155; -static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_direct = 156; -static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_same_panel_direct = 157; -static int32_t fcoder_metacmd_ID_goto_next_jump_direct = 158; -static int32_t fcoder_metacmd_ID_goto_prev_jump_direct = 159; -static int32_t fcoder_metacmd_ID_goto_next_jump_no_skips_direct = 160; -static int32_t fcoder_metacmd_ID_goto_prev_jump_no_skips_direct = 161; -static int32_t fcoder_metacmd_ID_goto_first_jump_direct = 162; -static int32_t fcoder_metacmd_ID_newline_or_goto_position_direct = 163; -static int32_t fcoder_metacmd_ID_newline_or_goto_position_same_panel_direct = 164; -static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_sticky = 165; -static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_same_panel_sticky = 166; -static int32_t fcoder_metacmd_ID_goto_next_jump_sticky = 167; -static int32_t fcoder_metacmd_ID_goto_prev_jump_sticky = 168; -static int32_t fcoder_metacmd_ID_goto_next_jump_no_skips_sticky = 169; -static int32_t fcoder_metacmd_ID_goto_prev_jump_no_skips_sticky = 170; -static int32_t fcoder_metacmd_ID_goto_first_jump_sticky = 171; -static int32_t fcoder_metacmd_ID_goto_first_jump_same_panel_sticky = 172; -static int32_t fcoder_metacmd_ID_newline_or_goto_position_sticky = 173; -static int32_t fcoder_metacmd_ID_newline_or_goto_position_same_panel_sticky = 174; -static int32_t fcoder_metacmd_ID_view_jump_list_with_lister = 175; -static int32_t fcoder_metacmd_ID_copy = 176; -static int32_t fcoder_metacmd_ID_cut = 177; -static int32_t fcoder_metacmd_ID_paste = 178; -static int32_t fcoder_metacmd_ID_paste_next = 179; -static int32_t fcoder_metacmd_ID_paste_and_indent = 180; -static int32_t fcoder_metacmd_ID_paste_next_and_indent = 181; -static int32_t fcoder_metacmd_ID_execute_previous_cli = 182; -static int32_t fcoder_metacmd_ID_execute_any_cli = 183; -static int32_t fcoder_metacmd_ID_build_search = 184; -static int32_t fcoder_metacmd_ID_build_in_build_panel = 185; -static int32_t fcoder_metacmd_ID_close_build_panel = 186; -static int32_t fcoder_metacmd_ID_change_to_build_panel = 187; -static int32_t fcoder_metacmd_ID_close_all_code = 188; -static int32_t fcoder_metacmd_ID_open_all_code = 189; -static int32_t fcoder_metacmd_ID_open_all_code_recursive = 190; -static int32_t fcoder_metacmd_ID_load_project = 191; -static int32_t fcoder_metacmd_ID_project_fkey_command = 192; -static int32_t fcoder_metacmd_ID_project_go_to_root_directory = 193; -static int32_t fcoder_metacmd_ID_setup_new_project = 194; -static int32_t fcoder_metacmd_ID_setup_build_bat = 195; -static int32_t fcoder_metacmd_ID_setup_build_sh = 196; -static int32_t fcoder_metacmd_ID_setup_build_bat_and_sh = 197; -static int32_t fcoder_metacmd_ID_project_command_lister = 198; -static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer = 199; -static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 200; -static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers = 201; -static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 202; -static int32_t fcoder_metacmd_ID_select_surrounding_scope = 203; -static int32_t fcoder_metacmd_ID_select_next_scope_absolute = 204; -static int32_t fcoder_metacmd_ID_select_prev_scope_absolute = 205; -static int32_t fcoder_metacmd_ID_place_in_scope = 206; -static int32_t fcoder_metacmd_ID_delete_current_scope = 207; -static int32_t fcoder_metacmd_ID_scope_absorb_down = 208; -static int32_t fcoder_metacmd_ID_open_long_braces = 209; -static int32_t fcoder_metacmd_ID_open_long_braces_semicolon = 210; -static int32_t fcoder_metacmd_ID_open_long_braces_break = 211; -static int32_t fcoder_metacmd_ID_if0_off = 212; -static int32_t fcoder_metacmd_ID_write_todo = 213; -static int32_t fcoder_metacmd_ID_write_hack = 214; -static int32_t fcoder_metacmd_ID_write_note = 215; -static int32_t fcoder_metacmd_ID_write_block = 216; -static int32_t fcoder_metacmd_ID_write_zero_struct = 217; -static int32_t fcoder_metacmd_ID_comment_line = 218; -static int32_t fcoder_metacmd_ID_uncomment_line = 219; -static int32_t fcoder_metacmd_ID_comment_line_toggle = 220; -static int32_t fcoder_metacmd_ID_snippet_lister = 221; -static int32_t fcoder_metacmd_ID_set_bindings_choose = 222; -static int32_t fcoder_metacmd_ID_set_bindings_default = 223; -static int32_t fcoder_metacmd_ID_set_bindings_mac_default = 224; -static int32_t fcoder_metacmd_ID_miblo_increment_basic = 225; -static int32_t fcoder_metacmd_ID_miblo_decrement_basic = 226; -static int32_t fcoder_metacmd_ID_miblo_increment_time_stamp = 227; -static int32_t fcoder_metacmd_ID_miblo_decrement_time_stamp = 228; -static int32_t fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 229; -static int32_t fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 230; -static int32_t fcoder_metacmd_ID_kill_rect = 231; -static int32_t fcoder_metacmd_ID_multi_line_edit = 232; -static int32_t fcoder_metacmd_ID_rename_parameter = 233; -static int32_t fcoder_metacmd_ID_write_explicit_enum_values = 234; -static int32_t fcoder_metacmd_ID_write_explicit_enum_flags = 235; +static int32_t fcoder_metacmd_ID_replace_in_buffer = 94; +static int32_t fcoder_metacmd_ID_replace_in_all_buffers = 95; +static int32_t fcoder_metacmd_ID_query_replace = 96; +static int32_t fcoder_metacmd_ID_query_replace_identifier = 97; +static int32_t fcoder_metacmd_ID_query_replace_selection = 98; +static int32_t fcoder_metacmd_ID_save_all_dirty_buffers = 99; +static int32_t fcoder_metacmd_ID_delete_file_query = 100; +static int32_t fcoder_metacmd_ID_save_to_query = 101; +static int32_t fcoder_metacmd_ID_rename_file_query = 102; +static int32_t fcoder_metacmd_ID_make_directory_query = 103; +static int32_t fcoder_metacmd_ID_move_line_up = 104; +static int32_t fcoder_metacmd_ID_move_line_down = 105; +static int32_t fcoder_metacmd_ID_duplicate_line = 106; +static int32_t fcoder_metacmd_ID_delete_line = 107; +static int32_t fcoder_metacmd_ID_open_file_in_quotes = 108; +static int32_t fcoder_metacmd_ID_open_matching_file_cpp = 109; +static int32_t fcoder_metacmd_ID_view_buffer_other_panel = 110; +static int32_t fcoder_metacmd_ID_swap_buffers_between_panels = 111; +static int32_t fcoder_metacmd_ID_kill_buffer = 112; +static int32_t fcoder_metacmd_ID_save = 113; +static int32_t fcoder_metacmd_ID_reopen = 114; +static int32_t fcoder_metacmd_ID_undo = 115; +static int32_t fcoder_metacmd_ID_redo = 116; +static int32_t fcoder_metacmd_ID_undo_all_buffers = 117; +static int32_t fcoder_metacmd_ID_redo_all_buffers = 118; +static int32_t fcoder_metacmd_ID_open_in_other = 119; +static int32_t fcoder_metacmd_ID_lister__quit = 120; +static int32_t fcoder_metacmd_ID_lister__activate = 121; +static int32_t fcoder_metacmd_ID_lister__write_character = 122; +static int32_t fcoder_metacmd_ID_lister__backspace_text_field = 123; +static int32_t fcoder_metacmd_ID_lister__move_up = 124; +static int32_t fcoder_metacmd_ID_lister__move_down = 125; +static int32_t fcoder_metacmd_ID_lister__wheel_scroll = 126; +static int32_t fcoder_metacmd_ID_lister__mouse_press = 127; +static int32_t fcoder_metacmd_ID_lister__mouse_release = 128; +static int32_t fcoder_metacmd_ID_lister__repaint = 129; +static int32_t fcoder_metacmd_ID_lister__write_character__default = 130; +static int32_t fcoder_metacmd_ID_lister__backspace_text_field__default = 131; +static int32_t fcoder_metacmd_ID_lister__move_up__default = 132; +static int32_t fcoder_metacmd_ID_lister__move_down__default = 133; +static int32_t fcoder_metacmd_ID_lister__write_character__file_path = 134; +static int32_t fcoder_metacmd_ID_lister__backspace_text_field__file_path = 135; +static int32_t fcoder_metacmd_ID_lister__write_character__fixed_list = 136; +static int32_t fcoder_metacmd_ID_interactive_switch_buffer = 137; +static int32_t fcoder_metacmd_ID_interactive_kill_buffer = 138; +static int32_t fcoder_metacmd_ID_interactive_open_or_new = 139; +static int32_t fcoder_metacmd_ID_interactive_new = 140; +static int32_t fcoder_metacmd_ID_interactive_open = 141; +static int32_t fcoder_metacmd_ID_command_lister = 142; +static int32_t fcoder_metacmd_ID_auto_tab_whole_file = 143; +static int32_t fcoder_metacmd_ID_auto_tab_line_at_cursor = 144; +static int32_t fcoder_metacmd_ID_auto_tab_range = 145; +static int32_t fcoder_metacmd_ID_write_and_auto_tab = 146; +static int32_t fcoder_metacmd_ID_list_all_locations = 147; +static int32_t fcoder_metacmd_ID_list_all_substring_locations = 148; +static int32_t fcoder_metacmd_ID_list_all_locations_case_insensitive = 149; +static int32_t fcoder_metacmd_ID_list_all_substring_locations_case_insensitive = 150; +static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier = 151; +static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier_case_insensitive = 152; +static int32_t fcoder_metacmd_ID_list_all_locations_of_selection = 153; +static int32_t fcoder_metacmd_ID_list_all_locations_of_selection_case_insensitive = 154; +static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition = 155; +static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition_of_identifier = 156; +static int32_t fcoder_metacmd_ID_word_complete = 157; +static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_direct = 158; +static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_same_panel_direct = 159; +static int32_t fcoder_metacmd_ID_goto_next_jump_direct = 160; +static int32_t fcoder_metacmd_ID_goto_prev_jump_direct = 161; +static int32_t fcoder_metacmd_ID_goto_next_jump_no_skips_direct = 162; +static int32_t fcoder_metacmd_ID_goto_prev_jump_no_skips_direct = 163; +static int32_t fcoder_metacmd_ID_goto_first_jump_direct = 164; +static int32_t fcoder_metacmd_ID_newline_or_goto_position_direct = 165; +static int32_t fcoder_metacmd_ID_newline_or_goto_position_same_panel_direct = 166; +static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_sticky = 167; +static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_same_panel_sticky = 168; +static int32_t fcoder_metacmd_ID_goto_next_jump_sticky = 169; +static int32_t fcoder_metacmd_ID_goto_prev_jump_sticky = 170; +static int32_t fcoder_metacmd_ID_goto_next_jump_no_skips_sticky = 171; +static int32_t fcoder_metacmd_ID_goto_prev_jump_no_skips_sticky = 172; +static int32_t fcoder_metacmd_ID_goto_first_jump_sticky = 173; +static int32_t fcoder_metacmd_ID_goto_first_jump_same_panel_sticky = 174; +static int32_t fcoder_metacmd_ID_newline_or_goto_position_sticky = 175; +static int32_t fcoder_metacmd_ID_newline_or_goto_position_same_panel_sticky = 176; +static int32_t fcoder_metacmd_ID_view_jump_list_with_lister = 177; +static int32_t fcoder_metacmd_ID_copy = 178; +static int32_t fcoder_metacmd_ID_cut = 179; +static int32_t fcoder_metacmd_ID_paste = 180; +static int32_t fcoder_metacmd_ID_paste_next = 181; +static int32_t fcoder_metacmd_ID_paste_and_indent = 182; +static int32_t fcoder_metacmd_ID_paste_next_and_indent = 183; +static int32_t fcoder_metacmd_ID_execute_previous_cli = 184; +static int32_t fcoder_metacmd_ID_execute_any_cli = 185; +static int32_t fcoder_metacmd_ID_build_search = 186; +static int32_t fcoder_metacmd_ID_build_in_build_panel = 187; +static int32_t fcoder_metacmd_ID_close_build_panel = 188; +static int32_t fcoder_metacmd_ID_change_to_build_panel = 189; +static int32_t fcoder_metacmd_ID_close_all_code = 190; +static int32_t fcoder_metacmd_ID_open_all_code = 191; +static int32_t fcoder_metacmd_ID_open_all_code_recursive = 192; +static int32_t fcoder_metacmd_ID_load_project = 193; +static int32_t fcoder_metacmd_ID_project_fkey_command = 194; +static int32_t fcoder_metacmd_ID_project_go_to_root_directory = 195; +static int32_t fcoder_metacmd_ID_setup_new_project = 196; +static int32_t fcoder_metacmd_ID_setup_build_bat = 197; +static int32_t fcoder_metacmd_ID_setup_build_sh = 198; +static int32_t fcoder_metacmd_ID_setup_build_bat_and_sh = 199; +static int32_t fcoder_metacmd_ID_project_command_lister = 200; +static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer = 201; +static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 202; +static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers = 203; +static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 204; +static int32_t fcoder_metacmd_ID_select_surrounding_scope = 205; +static int32_t fcoder_metacmd_ID_select_next_scope_absolute = 206; +static int32_t fcoder_metacmd_ID_select_prev_scope_absolute = 207; +static int32_t fcoder_metacmd_ID_place_in_scope = 208; +static int32_t fcoder_metacmd_ID_delete_current_scope = 209; +static int32_t fcoder_metacmd_ID_scope_absorb_down = 210; +static int32_t fcoder_metacmd_ID_open_long_braces = 211; +static int32_t fcoder_metacmd_ID_open_long_braces_semicolon = 212; +static int32_t fcoder_metacmd_ID_open_long_braces_break = 213; +static int32_t fcoder_metacmd_ID_if0_off = 214; +static int32_t fcoder_metacmd_ID_write_todo = 215; +static int32_t fcoder_metacmd_ID_write_hack = 216; +static int32_t fcoder_metacmd_ID_write_note = 217; +static int32_t fcoder_metacmd_ID_write_block = 218; +static int32_t fcoder_metacmd_ID_write_zero_struct = 219; +static int32_t fcoder_metacmd_ID_comment_line = 220; +static int32_t fcoder_metacmd_ID_uncomment_line = 221; +static int32_t fcoder_metacmd_ID_comment_line_toggle = 222; +static int32_t fcoder_metacmd_ID_snippet_lister = 223; +static int32_t fcoder_metacmd_ID_set_bindings_choose = 224; +static int32_t fcoder_metacmd_ID_set_bindings_default = 225; +static int32_t fcoder_metacmd_ID_set_bindings_mac_default = 226; +static int32_t fcoder_metacmd_ID_miblo_increment_basic = 227; +static int32_t fcoder_metacmd_ID_miblo_decrement_basic = 228; +static int32_t fcoder_metacmd_ID_miblo_increment_time_stamp = 229; +static int32_t fcoder_metacmd_ID_miblo_decrement_time_stamp = 230; +static int32_t fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 231; +static int32_t fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 232; +static int32_t fcoder_metacmd_ID_kill_rect = 233; +static int32_t fcoder_metacmd_ID_multi_line_edit = 234; +static int32_t fcoder_metacmd_ID_rename_parameter = 235; +static int32_t fcoder_metacmd_ID_write_explicit_enum_values = 236; #endif diff --git a/4coder_hash_functions.cpp b/4coder_hash_functions.cpp index 332b1522..a6aa7c57 100644 --- a/4coder_hash_functions.cpp +++ b/4coder_hash_functions.cpp @@ -13,7 +13,7 @@ #define FCODER_HASH_FUNCTIONS_CPP static u64 -table_hash_u8(u8 *v, i32 size){ +table_hash_u8(u8 *v, umem size){ u64 hash = 0; for (u8 *p = v, *e = v + size; p < e; p += 1){ u8 k = *p; @@ -26,7 +26,7 @@ table_hash_u8(u8 *v, i32 size){ return(hash); } static u64 -table_hash_u16(u16 *v, i32 size){ +table_hash_u16(u16 *v, umem size){ u64 hash = 0; for (u16 *p = v, *e = v + size; p < e; p += 1){ u16 k = *p; @@ -39,7 +39,7 @@ table_hash_u16(u16 *v, i32 size){ return(hash); } static u64 -table_hash_u32(u32 *v, i32 size){ +table_hash_u32(u32 *v, umem size){ u64 hash = 0; for (u32 *p = v, *e = v + size; p < e; p += 1){ u32 k = *p; @@ -52,7 +52,7 @@ table_hash_u32(u32 *v, i32 size){ return(hash); } static u64 -table_hash_u64(u64 *v, i32 size){ +table_hash_u64(u64 *v, umem size){ u64 hash = 0; for (u64 *p = v, *e = v + size; p < e; p += 1){ u64 k = *p; @@ -65,7 +65,7 @@ table_hash_u64(u64 *v, i32 size){ return(hash); } static u64 -table_hash(void *v, i32 it_size, i32 size){ +table_hash(void *v, i32 it_size, umem size){ u64 hash = 0; switch (it_size){ case 1: diff --git a/4coder_helper.cpp b/4coder_helper.cpp index f2b87c8c..24407dca 100644 --- a/4coder_helper.cpp +++ b/4coder_helper.cpp @@ -2102,7 +2102,7 @@ open_file_try_current_path_then_binary_path(Application_Links *app, char *file_n static FILE* open_file(Arena *scratch, String_Const_u8 name){ Temp_Memory temp = begin_temp(scratch); - String_Const_u8 name_copy = string_copy(scratch, name); + String_Const_u8 name_copy = push_string_copy(scratch, name); FILE *file = fopen((char*)name_copy.str, "rb"); end_temp(temp); return(file); diff --git a/4coder_lib/4coder_arena.cpp b/4coder_lib/4coder_arena.cpp index 3efdd226..9fb17c1e 100644 --- a/4coder_lib/4coder_arena.cpp +++ b/4coder_lib/4coder_arena.cpp @@ -9,284 +9,7 @@ distribute, and modify this file as you see fit. // TOP -#if !defined(Migrating__Arena) -static Partition -make_part(void *memory, i32 size){ - Partition part = {}; - part.base = (char*)memory; - part.pos = 0; - part.max = size; - return(part); -} - -static void* -part_allocate(Partition *data, i32 size){ - void *ret = 0; - if (size < 0){ - size = 0; - } - if (data->pos + size <= data->max){ - ret = data->base + data->pos; - data->pos += size; - } - return(ret); -} - -static void -part_reduce(Partition *data, i32 size){ - if (size > 0 && size <= data->pos){ - data->pos -= size; - } -} - -static void -part_align(Partition *data, i32 boundary){ - i32 p = data->pos; - p += boundary - 1; - data->pos = p - p%boundary; -} - -static void* -part_current(Partition *data){ - return(data->base + data->pos); -} - -static i32 -part_remaining(Partition *data){ - return(data->max - data->pos); -} - -static Partition -part_sub_part(Partition *data, i32 size){ - Partition result = {}; - void *d = part_allocate(data, size); - if (d != 0){ - result = make_part(d, size); - } - return(result); -} - -static Temp_Memory -begin_temp_memory(Partition *data){ - Temp_Memory result = {}; - result.part = data; - result.pos = data->pos; - return(result); -} - -static void -end_temp_memory(Temp_Memory temp){ - temp.part->pos = temp.pos; -} - -static void* -push_allocator_allocate(Partition *part, i32 size){ - return(part_allocate(part, size)); -} - -static void -push_allocator_align(Partition *part, i32 b){ - part_align(part, b); -} - -//////////////////////////////// - -#if defined(FCODER_CUSTOM_H) - -static Arena -make_arena(Application_Links *app, i32 chunk_size, i32 initial_align){ - Arena arena = {}; - arena.app = app; - arena.chunk_size = chunk_size; - arena.align = initial_align; - return(arena); -} - -static Arena -make_arena(Application_Links *app, i32 chunk_size){ - return(make_arena(app, chunk_size, 1)); -} - -static Arena -make_arena(Application_Links *app){ - return(make_arena(app, 4096, 1)); -} - -static void -arena_release_all(Arena *arena){ - Application_Links *app = arena->app; - for (Partition_Chained *part = arena->part, *prev = 0; - part != 0; - part = prev){ - prev = part->prev; - memory_free(app, part, part->part.max); - } - arena->part = 0; -} - -static void -arena_change_chunk_size(Arena *arena, i32 chunk_size){ - arena->chunk_size = chunk_size; -} - -static Partition_Chained* -arena__new_part(Arena *arena, i32 new_chunk_size){ - Application_Links *app = arena->app; - i32 memory_size = new_chunk_size + sizeof(Partition_Chained); - i32 boundardy = 4096; - if (memory_size < boundardy){ - memory_size = boundardy; - } - else{ - memory_size = memory_size + boundardy - 1; - memory_size = memory_size - memory_size%boundardy; - } - void *memory = memory_allocate(app, memory_size); - Partition_Chained *part = (Partition_Chained*)memory; - part->part = make_part(memory, memory_size); - part_allocate(&part->part, sizeof(*part)); - part->prev = arena->part; - arena->part = part; - return(part); -} - -static Partition_Chained* -arena__new_part(Arena *arena){ - return(arena__new_part(arena, arena->chunk_size)); -} - -static void -arena__align_inner(Arena *arena, i32 b){ - if (arena->align != 1){ - Partition_Chained *part = arena->part; - if (part == 0){ - part = arena__new_part(arena); - } - part_align(&part->part, b); - } -} - -static void* -arena_allocate(Arena *arena, i32 size){ - void *result = 0; - Partition_Chained *part = arena->part; - if (part == 0){ - part = arena__new_part(arena); - } - arena__align_inner(arena, arena->align); - result = part_allocate(&part->part, size); - if (result == 0){ - i32 new_chunk_size = arena->chunk_size; - if (size > new_chunk_size){ - new_chunk_size = size; - } - part = arena__new_part(arena, new_chunk_size); - arena__align_inner(arena, arena->align); - result = part_allocate(&part->part, size); - } - arena->align = 1; - return(result); -} - -static void -arena_align(Arena *arena, i32 b){ - arena__align_inner(arena, b); - arena->align = b; -} - -static Partition* -arena_use_as_part(Arena *arena, i32 minimum_part_size){ - if (minimum_part_size < arena->chunk_size){ - minimum_part_size = arena->chunk_size; - } - Partition_Chained *part = arena->part; - if (part == 0){ - part = arena__new_part(arena, minimum_part_size); - } - else{ - if (part_remaining(&part->part) < minimum_part_size){ - part = arena__new_part(arena, minimum_part_size); - } - } - return(&part->part); -} - -static Temp_Memory_Arena -begin_temp_memory(Arena *arena){ - Temp_Memory_Arena result = {}; - result.arena = arena; - result.part = arena->part; - if (result.part != 0){ - result.pos = result.part->part.pos; - } - return(result); -} - -static void -end_temp_memory(Temp_Memory_Arena temp){ - Application_Links *app = temp.arena->app; - for (Partition_Chained *part = temp.arena->part, *prev = 0; - part != temp.part; - part = prev){ - prev = part->prev; - memory_free(app, part, part->part.max); - } - temp.arena->part = temp.part; - if (temp.part != 0){ - temp.part->part.pos = temp.pos; - } -} - -static Temp_Memory_Arena_Light -temp_memory_light(Temp_Memory_Arena temp){ - Temp_Memory_Arena_Light light = {}; - light.part = temp.part; - light.pos = temp.pos; - return(light); -} - -static void -end_temp_memory(Arena *arena, Temp_Memory_Arena_Light temp){ - Temp_Memory_Arena full_temp = {}; - full_temp.arena = arena; - full_temp.part = temp.part; - full_temp.pos = temp.pos; - end_temp_memory(full_temp); -} - -static void* -push_allocator_allocate(Arena *arena, i32 size){ - return(arena_allocate(arena, size)); -} - -static void -push_allocator_align(Arena *arena, i32 b){ - arena_align(arena, b); -} - -//////////////////////////////// - -Scratch_Block::Scratch_Block(Application_Links *app){ - scratch = context_get_arena(app); - temp = begin_temp_memory(scratch); -} - -Scratch_Block::~Scratch_Block(){ - end_temp_memory(temp); -} - -Scratch_Block::operator Arena*(){ - return(scratch); -} - -#endif - -//////////////////////////////// - -#define push_array(A, T, size) (T*)push_allocator_allocate((A), sizeof(T)*(size)) -#define push_align(A, b) push_allocator_align((A), (b)) -#define reset_temp_memory end_temp_memory -#endif +#error Deprecated file // BOTTOM diff --git a/4coder_lib/4coder_arena.h b/4coder_lib/4coder_arena.h index 77b14b65..84f6958d 100644 --- a/4coder_lib/4coder_arena.h +++ b/4coder_lib/4coder_arena.h @@ -12,55 +12,7 @@ distribute, and modify this file as you see fit. #if !defined(FCODER_ARENA_H) #define FCODER_ARENA_H -#if !defined(Migrating__Arena) -struct Partition{ - char *base; - i32 pos; - i32 max; -}; - -struct Temp_Memory{ - Partition *part; - i32 pos; -}; - -#if defined(FCODER_CUSTOM_H) - -struct Partition_Chained{ - Partition_Chained *prev; - Partition part; -}; - -struct Arena{ - struct Application_Links *app; - Partition_Chained *part; - i32 chunk_size; - i32 align; -}; - -struct Temp_Memory_Arena{ - Arena *arena; - Partition_Chained *part; - i32 pos; -}; - -struct Temp_Memory_Arena_Light{ - Partition_Chained *part; - i32 pos; -}; - -struct Scratch_Block{ - Scratch_Block(Application_Links *app); - ~Scratch_Block(); - operator Arena *(); - - Arena *scratch; - Temp_Memory_Arena temp; -}; - -#endif - -#endif +#error Deprecated file #endif diff --git a/4coder_lib/4coder_table.h b/4coder_lib/4coder_table.h index 5ea7bef6..85f55ad0 100644 --- a/4coder_lib/4coder_table.h +++ b/4coder_lib/4coder_table.h @@ -12,241 +12,7 @@ distribute, and modify this file as you see fit. #if !defined(FCODER_TABLE_H) #define FCODER_TABLE_H -#define TableHashEmpty 0 -#define TableHashDeleted 1 -#define TableHashMin 0x10000000 - -#include - -typedef u32 Hash_Function(void *item, void *arg); -typedef i32 Compare_Function(void *key, void *item, void *arg); - -struct Table{ - u32 *hash_array; - char *data_array; - i32 count, max; - i32 item_size; -}; - -static i32 -table_required_mem_size(i32 table_size, i32 item_size){ - i32 hash_size = ((table_size*sizeof(u32)) + 7) & ~7; - i32 mem_size = hash_size + table_size*item_size; - return(mem_size); -} - -static void -table_init_memory(Table *table, void *memory, i32 table_size, i32 item_size){ - i32 hash_size = table_size * sizeof(u32); - hash_size = (hash_size + 7) & ~7; - - table->hash_array = (u32*)memory; - table->data_array = (char*)(table->hash_array) + hash_size; - - table->count = 0; - table->max = table_size; - table->item_size = item_size; -} - -static i32 -table_at_capacity(Table *table){ - i32 result = true; - if (table->count * 8 < table->max * 7){ - result = false; - } - return(result); -} - -static i32 -table_add(Table *table, void *item, void *arg, Hash_Function *hash_func, Compare_Function *comp_func){ - Assert(table->count * 8 < table->max * 7); - - u32 hash = (hash_func(item, arg) | TableHashMin); - i32 i = hash % table->max; - i32 start = i; - u32 *inspect = table->hash_array + i; - - while (*inspect >= TableHashMin){ - if (*inspect == hash){ - if (comp_func(item, table->data_array + i*table->item_size, arg) == 0){ - return(1); - } - } - ++i; - ++inspect; - if (i == table->max){ - i = 0; - inspect = table->hash_array; - } - Assert(i != start); - } - *inspect = hash; - memcpy(table->data_array + i*table->item_size, item, table->item_size); - ++table->count; - - return(0); -} - -static i32 -table_find_pos(Table *table, void *search_key, void *arg, i32 *pos, i32 *index, Hash_Function *hash_func, Compare_Function *comp_func){ - Assert((table->count - 1) * 8 < table->max * 7); - - u32 hash = (hash_func(search_key, arg) | TableHashMin); - i32 i = hash % table->max; - i32 start = i; - u32 *inspect = table->hash_array + i; - - while (*inspect != TableHashEmpty){ - if (*inspect == hash){ - if (comp_func(search_key, table->data_array + i*table->item_size, arg) == 0){ - if (pos) *pos = i*table->item_size; - if (index) *index = i; - return(1); - } - } - ++i; - ++inspect; - if (i == table->max){ - i = 0; - inspect = table->hash_array; - } - if (i == start) break; - } - - return(0); -} - -static void* -table_find_item(Table *table, void *search_key, void *arg, Hash_Function *hash_func, Compare_Function *comp_func){ - void *result = 0; - i32 pos; - if (table_find_pos(table, search_key, arg, &pos, 0, hash_func, comp_func)){ - result = table->data_array + pos; - } - return(result); -} - -static void -table_remove_index(Table *table, i32 index){ - table->hash_array[index] = TableHashDeleted; - --table->count; -} - -static i32 -table_remove_match(Table *table, void *search_key, void *arg, Hash_Function *hash_func, Compare_Function *comp_func){ - i32 result = false; - i32 index; - if (table_find_pos(table, search_key, arg, 0, &index, hash_func, comp_func)){ - table_remove_index(table, index); - result = true; - } - return(result); -} - -static void -table_clear(Table *table){ - table->count = 0; - memset(table->hash_array, 0, table->max*sizeof(*table->hash_array)); -} - -static void -table_rehash(Table *src, Table *dst, void *arg, Hash_Function *hash_func, Compare_Function *comp_func){ - Assert((dst->count + src->count - 1) * 7 < dst->max * 8); - Assert(dst->item_size == src->item_size); - - i32 count = src->count; - i32 item_size = src->item_size; - u32 *hash_item = src->hash_array; - char *data_item = src->data_array; - for (i32 i = 0, c = 0; - c < count; - ++i, ++hash_item, data_item += item_size){ - if (*hash_item >= TableHashMin){ - ++c; - table_add(dst, data_item, arg, hash_func, comp_func); - } - } -} - -static u32 -tbl_string_hash(void *item, void *arg){ - String_Const_u8 *string = (String_Const_u8*)item; - u32 x = 5381; - (void)arg; - u8 *str = string->str; - umem len = string->size; - for (umem i = 0; i < len; i += 1){ - u8 c = str[i]; - x = ((x << 5) + x) + c; - } - return(x); -} - -static i32 -tbl_string_compare(void *a, void *b, void *arg){ - String_Const_u8 *stra = (String_Const_u8*)a; - String_Const_u8 *strb = (String_Const_u8*)b; - i32 result = (!string_match(*stra, *strb)); - return(result); -} - -struct Offset_String{ - umem offset; - umem size; -}; - -static u32 -tbl_offset_string_hash(void *item, void *arg){ - Offset_String *string = (Offset_String*)item; - u32 x = 5381; - u8 *str = ((u8*)arg) + string->offset; - umem size = string->size; - for (umem i = 0; i < size; i += 1){ - u8 c = str[i]; - x = ((x << 5) + x) + c; - } - return(x); -} - -static i32 -tbl_offset_string_compare(void *a, void *b, void *arg){ - Offset_String *ostra = (Offset_String*)a; - Offset_String *ostrb = (Offset_String*)b; - String_Const_u8 stra = SCu8((u8*)arg + ostra->offset, ostra->size); - String_Const_u8 strb = SCu8((u8*)arg + ostrb->offset, ostrb->size); - i32 result = (!string_match(stra, strb)); - return(result); -} - -struct String_Space{ - char *space; - i32 pos; - i32 new_pos; - i32 max; -}; - -static Offset_String -strspace_append(String_Space *space, char *str, i32 len){ - Offset_String result = {}; - if (space->new_pos + len <= space->max){ - result.offset = space->new_pos; - result.size = len; - - memcpy(space->space + space->new_pos, str, len); - space->new_pos = space->pos + len; - } - return(result); -} - -static void -strspace_keep_prev(String_Space *space){ - space->pos = space->new_pos; -} - -static void -strspace_discard_prev(String_Space *space){ - space->new_pos = space->pos; -} +#error Deprecated file #endif diff --git a/4coder_lists.cpp b/4coder_lists.cpp index 801ac06d..367be5ab 100644 --- a/4coder_lists.cpp +++ b/4coder_lists.cpp @@ -559,7 +559,7 @@ generate_hot_directory_file_list(Application_Links *app, Lister *lister){ info < one_past_last; info += 1){ if (info->folder) continue; - String_Const_u8 file_name = string_copy(&lister->arena, SCu8(info->filename, info->filename_len)); + String_Const_u8 file_name = push_string_copy(&lister->arena, SCu8(info->filename, info->filename_len)); char *is_loaded = ""; char *status_flag = ""; diff --git a/4coder_project_commands.cpp b/4coder_project_commands.cpp index 1e7d2488..534efc4b 100644 --- a/4coder_project_commands.cpp +++ b/4coder_project_commands.cpp @@ -190,7 +190,7 @@ parse_project__config_data__version_0(Arena *arena, String_Const_u8 file_dir, Co // Set new project directory { - project->dir = string_copy(arena, file_dir); + project->dir = push_string_copy(arena, file_dir); project->load_path_array.paths = push_array(arena, Project_File_Load_Path, 1); project->load_path_array.count = 1; @@ -231,12 +231,12 @@ parse_project__config_data__version_0(Arena *arena, String_Const_u8 file_dir, Co if (config_compound_var(parsed, fkey_command_name, j, &compound)){ String_Const_u8 cmd = {}; if (config_compound_string_member(parsed, compound, "cmd", 0, &cmd)){ - command->cmd = string_copy(arena, cmd); + command->cmd = push_string_copy(arena, cmd); } String_Const_u8 out = {}; if (config_compound_string_member(parsed, compound, "out", 1, &out)){ - command->out = string_copy(arena, out); + command->out = push_string_copy(arena, out); } b32 footer_panel = false; @@ -268,7 +268,7 @@ parse_project__extract_pattern_array(Arena *arena, Config *parsed, char *root_va for (Config_Get_Result_Node *node = list.first; node != 0; node = node->next, i += 1){ - String_Const_u8 str = string_copy(arena, node->result.string); + String_Const_u8 str = push_string_copy(arena, node->result.string); array_out->patterns[i].absolutes = string_split_wildcards(arena, str); } } @@ -293,13 +293,13 @@ parse_project__config_data__version_1(Arena *arena, String_Const_u8 root_dir, Co Project *project = push_array_zero(arena, Project, 1); // Set new project directory - project->dir = string_copy(arena, root_dir); + project->dir = push_string_copy(arena, root_dir); // project_name { String_Const_u8 str = {}; if (config_string_var(parsed, "project_name", 0, &str)){ - project->name = string_copy(arena, str); + project->name = push_string_copy(arena, str); } else{ project->name = SCu8(""); @@ -366,7 +366,7 @@ parse_project__config_data__version_1(Arena *arena, String_Const_u8 root_dir, Co String_Const_u8 str = {}; if (config_compound_string_member(parsed, src, "path", 0, &str)){ - dst->path = string_copy(arena, str); + dst->path = push_string_copy(arena, str); } config_compound_bool_member(parsed, src, "recursive", 1, &dst->recursive); @@ -466,9 +466,9 @@ parse_project__config_data__version_1(Arena *arena, String_Const_u8 root_dir, Co config_compound_bool_member(parsed, src, "cursor_at_end", 5, &cursor_at_end); - dst->name = string_copy(arena, name); - dst->cmd = string_copy(arena, cmd_str); - dst->out = string_copy(arena, out); + dst->name = push_string_copy(arena, name); + dst->cmd = push_string_copy(arena, cmd_str); + dst->out = push_string_copy(arena, out); dst->footer_panel = footer_panel; dst->save_dirty_files = save_dirty_files; dst->cursor_at_end = cursor_at_end; @@ -599,8 +599,8 @@ project_deep_copy__pattern_array(Arena *arena, Project_File_Pattern_Array *src_a static Project project_deep_copy__inner(Arena *arena, Project *project){ Project result = {}; - result.dir = string_copy(arena, project->dir); - result.name = string_copy(arena, project->name); + result.dir = push_string_copy(arena, project->dir); + result.name = push_string_copy(arena, project->name); project_deep_copy__pattern_array(arena, &project->pattern_array, &result.pattern_array); project_deep_copy__pattern_array(arena, &project->blacklist_pattern_array, &result.blacklist_pattern_array); @@ -612,7 +612,7 @@ project_deep_copy__inner(Arena *arena, Project *project){ Project_File_Load_Path *dst = result.load_path_array.paths; Project_File_Load_Path *src = project->load_path_array.paths; for (i32 i = 0; i < path_count; ++i, ++dst, ++src){ - dst->path = string_copy(arena, src->path); + dst->path = push_string_copy(arena, src->path); dst->recursive = src->recursive; dst->relative = src->relative; } @@ -627,13 +627,13 @@ project_deep_copy__inner(Arena *arena, Project *project){ Project_Command *src = project->command_array.commands; for (i32 i = 0; i < command_count; ++i, ++dst, ++src){ if (src->name.str != 0){ - dst->name = string_copy(arena, src->name); + dst->name = push_string_copy(arena, src->name); } if (src->cmd.str != 0){ - dst->cmd = string_copy(arena, src->cmd); + dst->cmd = push_string_copy(arena, src->cmd); } if (src->out.str != 0){ - dst->out = string_copy(arena, src->out); + dst->out = push_string_copy(arena, src->out); } dst->footer_panel = src->footer_panel; dst->save_dirty_files = src->save_dirty_files; @@ -1074,9 +1074,9 @@ project_generate_bat_script(Arena *scratch, String_Const_u8 opts, String_Const_u Temp_Memory temp = begin_temp(scratch); - String_Const_u8 cf = string_copy(scratch, code_file); - String_Const_u8 od = string_copy(scratch, output_dir); - String_Const_u8 bf = string_copy(scratch, binary_file); + String_Const_u8 cf = push_string_copy(scratch, code_file); + String_Const_u8 od = push_string_copy(scratch, output_dir); + String_Const_u8 bf = push_string_copy(scratch, binary_file); cf = string_mod_replace_character(cf, '/', '\\'); od = string_mod_replace_character(od, '/', '\\'); @@ -1358,8 +1358,8 @@ CUSTOM_DOC("Open a lister of all commands in the currently loaded project.") for (i32 i = 0; i < current_project.command_array.count; i += 1){ - options[i].string = string_copy(scratch, current_project.command_array.commands[i].name); - options[i].status = string_copy(scratch, current_project.command_array.commands[i].cmd); + options[i].string = push_string_copy(scratch, current_project.command_array.commands[i].name); + options[i].status = push_string_copy(scratch, current_project.command_array.commands[i].cmd); options[i].user_data = IntAsPtr(i); } begin_integrated_lister__basic_list(app, "Command:", activate_project_command, 0, 0, options, option_count, 0, view); diff --git a/4coder_search.cpp b/4coder_search.cpp index 971f184e..a0804fbb 100644 --- a/4coder_search.cpp +++ b/4coder_search.cpp @@ -9,6 +9,77 @@ and list all locations. // Search Iteration Systems // +#if Migrate__Match_Iterator + + +CUSTOM_COMMAND_SIG(list_all_locations) +CUSTOM_DOC("Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.") +{ + NotImplemented; +} + +CUSTOM_COMMAND_SIG(list_all_substring_locations) +CUSTOM_DOC("Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.") +{ + NotImplemented; +} + +CUSTOM_COMMAND_SIG(list_all_locations_case_insensitive) +CUSTOM_DOC("Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.") +{ + NotImplemented; +} + +CUSTOM_COMMAND_SIG(list_all_substring_locations_case_insensitive) +CUSTOM_DOC("Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.") +{ + NotImplemented; +} + +CUSTOM_COMMAND_SIG(list_all_locations_of_identifier) +CUSTOM_DOC("Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.") +{ + NotImplemented; +} + +CUSTOM_COMMAND_SIG(list_all_locations_of_identifier_case_insensitive) +CUSTOM_DOC("Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.") +{ + NotImplemented; +} + +CUSTOM_COMMAND_SIG(list_all_locations_of_selection) +CUSTOM_DOC("Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.") +{ + NotImplemented; +} + +CUSTOM_COMMAND_SIG(list_all_locations_of_selection_case_insensitive) +CUSTOM_DOC("Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.") +{ + NotImplemented; +} + +CUSTOM_COMMAND_SIG(list_all_locations_of_type_definition) +CUSTOM_DOC("Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.") +{ + NotImplemented; +} + +CUSTOM_COMMAND_SIG(list_all_locations_of_type_definition_of_identifier) +CUSTOM_DOC("Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.") +{ + NotImplemented; +} + +CUSTOM_COMMAND_SIG(word_complete) +CUSTOM_DOC("Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.") +{ + NotImplemented; +} + +#else + static void search_key_alloc(Heap *heap, Search_Key *key, umem *size, i32 count){ count = clamp_top(count, ArrayCount(key->words)); @@ -38,11 +109,6 @@ search_key_alloc(Heap *heap, Search_Key *key, umem *size, i32 count){ for (i32 i = 0; i < count; ++i){ key->words[i].str = char_ptr; key->words[i].size = 0; -#if 0 - key->words[i].str = char_ptr; - key->words[i].size = 0; - key->words[i].memory_size = size[i]; -#endif char_ptr += size[i]; } @@ -774,74 +840,10 @@ CUSTOM_DOC("Reads a token or word under the cursor and lists all locations of st } } - // // Word Complete Command // -#if 0 - -CUSTOM_COMMAND_SIG(word_complete) -CUSTOM_DOC("Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.") -{ - View_ID view = get_active_view(app, AccessOpen); - Buffer_ID buffer = view_get_buffer(app, view, AccessOpen); - if (buffer != 0){ - Managed_Scope scope = view_get_managed_scope(app, view); - - local_persist b32 completion_state_initialized = false; - local_persist Data_Table completion_table = {}; - - b32 reset_completion_state = false; - u64 rewrite = 0; - managed_variable_get(app, scope, view_rewrite_loc, &rewrite); - if (rewrite != RewriteWordComplete){ - reset_completion_state = true; - } - managed_variable_set(app, scope, view_next_rewrite_loc, RewriteWordComplete); - - if (!completion_state_initialized || reset_completion_state){ - table_clear(&completion_table); - completion_table = make_Data_table_app_links(app); - - Scratch_Block scratch(app); - - i64 pos = view_get_cursor_pos(app, view); - i64 start_pos = scan(app, boundary_alpha_numeric_underscore_utf8, buffer, Scan_Backward, pos); - if (start_pos < pos){ - i64 check = scan(app, boundary_alpha_numeric_underscore_utf8, buffer, Scan_Forward, start_pos); - if (pos <= check){ - Range_i64 range = Ii64(start_pos, pos); - String_Const_u8 match_prefix = push_buffer_range(app, scratch, buffer, range); - - String_Match_Flag has_flags = StringMatch_CaseSensitive|StringMatch_RightSideSloppy; - String_Match_List not_flags = StringMatch_LeftSideSloppy; - - i64 size = buffer_get_size(app, buffer); - String_Match_List forward = buffer_find_all_matches(app, scratch, buffer, 0, Ii64(pos, size), match_prefix, - &character_predicate_alpha_numeric_underscore_utf8, Scan_Forward); - String_Match_List backward = buffer_find_all_matches(app, scratch, buffer, 0, Ii64(0, start_pos), match_prefix, - &character_predicate_alpha_numeric_underscore_utf8, Scan_Backward); - - string_match_list_filter_flags(&forward , has_flags, not_flags); - string_match_list_filter_flags(&backward, has_flags, not_flags); - - String_Match_List list = string_match_list_merge_nearest(&forward, &backward, range); - - for (String_Match *node = list.first; - node != 0; - node = node->next){ - node->range.end = scan(app, boundary_alpha_numeric_underscore_utf8, node->buffer, Scan_Forward, node->range.end); - } - - } - } - } - } -} - -#else - static Word_Complete_State complete_state = {}; CUSTOM_COMMAND_SIG(word_complete) @@ -993,6 +995,7 @@ CUSTOM_DOC("Iteratively tries completing the word to the left of the cursor with } } } + #endif // BOTTOM diff --git a/4coder_search.h b/4coder_search.h index 86d114c0..d3ed38e7 100644 --- a/4coder_search.h +++ b/4coder_search.h @@ -20,12 +20,15 @@ Time to rewrite _ALL_ of this s***f. */ +#define Migrate__Match_Iterator 1 + //////////////////////////////// //////////////////////////////// +#if !Migrate__Match_Iterator // TODO(allen): deprecate all this typedef i32 Seek_Potential_Match_Direction; enum{ @@ -104,6 +107,7 @@ struct Word_Complete_State{ i32 word_end; i32 initialized; }; +#endif #endif diff --git a/4coder_table.cpp b/4coder_table.cpp new file mode 100644 index 00000000..aa26d4c8 --- /dev/null +++ b/4coder_table.cpp @@ -0,0 +1,160 @@ +/* + * 4coder tables + */ + +// TOP + +internal u64 +table_hash(Data key){ + return(table_hash_u8((u8*)key.data, key.size) | bit_63); +} + +global_const u64 table_empty_slot = 0; +global_const u64 table_erased_slot = 1; + +//////////////////////////////// + +//////////////////////////////// + +internal Table_Data_u64 +make_table_Data_u64(Base_Allocator *allocator, u32 slot_count){ + Table_Data_u64 table = {}; + table.allocator = allocator; + slot_count = clamp_bot(8, slot_count); + Data mem = base_allocate(allocator, slot_count*(sizeof(*table.hashes) + sizeof(*table.keys) + sizeof(*table.vals))); + block_zero(mem.data, mem.size); + table.memory = mem.data; + table.hashes = (u64*)table.memory; + table.keys = (Data*)(table.hashes + slot_count); + table.vals = (u64*)(table.keys + slot_count); + table.slot_count = slot_count; + table.used_count = 0; + table.dirty_count = 0; + return(table); +} + +internal Table_Lookup +table_lookup(Table_Data_u64 *table, Data key){ + u64 *hashes = table->hashes; + u32 slot_count = table->slot_count; + + u64 hash = table_hash(key); + u32 first_index = hash % slot_count; + u32 index = first_index; + Table_Lookup result = {}; + result.hash = hash; + for (;;){ + if (hash == hashes[index]){ + if (data_match(key, table->keys[index])){ + result.index = index; + result.found_match = true; + result.found_empty_slot = false; + result.found_erased_slot = false; + break; + } + } + if (table_empty_slot == hashes[index]){ + result.index = index; + result.found_empty_slot = true; + result.found_erased_slot = false; + break; + } + if (table_erased_slot == hashes[index] && !result.found_erased_slot){ + result.index = index; + result.found_erased_slot = true; + } + index += 1; + if (index >= slot_count){ + index = 0; + } + if (index == first_index){ + break; + } + } + + return(result); +} + +internal b32 +table_read(Table_Data_u64 *table, Data key, u64 *val_out){ + b32 result = false; + Table_Lookup lookup = table_lookup(table, key); + if (lookup.found_match){ + *val_out = table->vals[lookup.index]; + result = true; + } + return(result); +} + +internal void +table_insert__inner(Table_Data_u64 *table, Table_Lookup lookup, Data key, u64 val){ + Assert(lookup.found_empty_slot || lookup.found_erased_slot); + table->hashes[lookup.index] = lookup.hash; + table->keys[lookup.index] = key; + table->vals[lookup.index] = val; + table->used_count += 1; + if (lookup.found_empty_slot){ + table->dirty_count += 1; + } +} + +internal b32 +table_rehash(Table_Data_u64 *dst, Table_Data_u64 *src){ + b32 result = false; + u32 src_slot_count = src->slot_count; + if ((dst->dirty_count + src->used_count)*8 < dst->slot_count*7){ + u64 *src_hashes = src->hashes; + for (u32 i = 0; i < src_slot_count; i += 1){ + if (HasFlag(src_hashes[i], bit_63)){ + Data key = src->keys[i]; + Table_Lookup lookup = table_lookup(dst, key); + table_insert__inner(dst, lookup, key, src->vals[i]); + } + } + result = true; + } + return(result); +} + +internal b32 +table_insert(Table_Data_u64 *table, Data key, u64 val){ + b32 result = false; + Table_Lookup lookup = table_lookup(table, key); + if (!lookup.found_match){ + if ((table->dirty_count + 1)*8 >= table->slot_count*7){ + i32 new_slot_count = table->slot_count; + if (table->used_count*2 >= table->slot_count){ + new_slot_count = table->slot_count*4; + } + Table_Data_u64 new_table = make_table_Data_u64(table->allocator, new_slot_count); + table_rehash(&new_table, table); + base_free(table->allocator, table->memory); + *table = new_table; + lookup = table_lookup(table, key); + Assert(lookup.found_empty_slot); + } + table_insert__inner(table, lookup, key, val); + result = true; + } + return(result); +} + +internal b32 +table_erase(Table_Data_u64 *table, Data key){ + b32 result = false; + Table_Lookup lookup = table_lookup(table, key); + if (lookup.found_match){ + table->hashes[lookup.index] = table_erased_slot; + block_zero_struct(&table->keys[lookup.index]); + table->vals[lookup.index] = 0; + table->used_count -= 1; + result = true; + } + return(result); +} + +//////////////////////////////// + +//////////////////////////////// + +// BOTTOM diff --git a/4coder_table.h b/4coder_table.h new file mode 100644 index 00000000..1a5be8ec --- /dev/null +++ b/4coder_table.h @@ -0,0 +1,62 @@ +/* + * 4coder tables + */ + +// TOP + +#if !defined(FCODER_TABLES_H) +#define FCODER_TABLES_H + +struct Table_Lookup{ + u64 hash; + u32 index; + b8 found_match; + b8 found_empty_slot; + b8 found_erased_slot; +}; + +struct Table_u64_u64{ + Base_Allocator *allocator; + void *memory; + u64 *keys; + u64 *vals; + u32 slot_count; + u32 used_count; + u32 dirty_count; +}; + +struct Table_Data_u64{ + Base_Allocator *allocator; + void *memory; + u64 *hashes; + Data *keys; + u64 *vals; + u32 slot_count; + u32 used_count; + u32 dirty_count; +}; + +struct Table_u64_Data{ + Base_Allocator *allocator; + void *memory; + u64 *keys; + Data *vals; + u32 slot_count; + u32 used_count; + u32 dirty_count; +}; + +struct Table_Data_Data{ + Base_Allocator *allocator; + void *memory; + u64 *hashes; + Data *keys; + Data *vals; + u32 slot_count; + u32 used_count; + u32 dirty_count; +}; + +#endif + +// BOTTOM diff --git a/4coder_ui_helper.cpp b/4coder_ui_helper.cpp index 394d98d3..63c7233f 100644 --- a/4coder_ui_helper.cpp +++ b/4coder_ui_helper.cpp @@ -581,22 +581,22 @@ lister_add_item(Lister *lister, Lister_Prealloced_String string, Lister_Prealloc static void* lister_add_item(Lister *lister, Lister_Prealloced_String string, String_Const_u8 status, void *user_data, umem extra_space){ - return(lister_add_item(lister, string, lister_prealloced(string_copy(&lister->arena, status)), + return(lister_add_item(lister, string, lister_prealloced(push_string_copy(&lister->arena, status)), user_data, extra_space)); } static void* lister_add_item(Lister *lister, String_Const_u8 string, Lister_Prealloced_String status, void *user_data, umem extra_space){ - return(lister_add_item(lister, lister_prealloced(string_copy(&lister->arena, string)), status, + return(lister_add_item(lister, lister_prealloced(push_string_copy(&lister->arena, string)), status, user_data, extra_space)); } static void* lister_add_item(Lister *lister, String_Const_u8 string, String_Const_u8 status, void *user_data, umem extra_space){ return(lister_add_item(lister, - lister_prealloced(string_copy(&lister->arena, string)), - lister_prealloced(string_copy(&lister->arena, status)), + lister_prealloced(push_string_copy(&lister->arena, string)), + lister_prealloced(push_string_copy(&lister->arena, status)), user_data, extra_space)); } @@ -619,7 +619,7 @@ lister_add_theme_item(Lister *lister, static void* lister_add_theme_item(Lister *lister, String_Const_u8 string, i32 index, void *user_data, i32 extra_space){ - return(lister_add_theme_item(lister, lister_prealloced(string_copy(&lister->arena, string)), index, + return(lister_add_theme_item(lister, lister_prealloced(push_string_copy(&lister->arena, string)), index, user_data, extra_space)); } diff --git a/4ed.cpp b/4ed.cpp index a9260c87..5e45e60f 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -902,7 +902,7 @@ App_Init_Sig(app_init){ dynamic_workspace_init(&models->mem.heap, &models->lifetime_allocator, DynamicWorkspace_Global, 0, &models->dynamic_workspace); // NOTE(allen): file setup - working_set_init(system, &models->working_set, arena, &vars->models.mem.heap); + working_set_init(system, &models->working_set, arena); models->working_set.default_display_width = DEFAULT_DISPLAY_WIDTH; models->working_set.default_minimum_base_display_width = DEFAULT_MINIMUM_BASE_DISPLAY_WIDTH; diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index 8c65760e..303e6f08 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -196,7 +196,7 @@ DOC_SEE(The_4coder_Clipboard) String_Const_u8 *str = working_set_clipboard_index(&models->working_set, item_index); String_Const_u8 result = {}; if (str != 0){ - result = string_copy(arena, *str); + result = push_string_copy(arena, *str); } return(result); } @@ -558,7 +558,7 @@ Push_Buffer_Base_Name(Application_Links *app, Arena *arena, Buffer_ID buffer_id) Editing_File *file = imp_get_file(models, buffer_id); String_Const_u8 result = {}; if (api_check_buffer(file)){ - result = string_copy(arena, string_from_file_name(&file->base_name)); + result = push_string_copy(arena, string_from_file_name(&file->base_name)); } return(result); } @@ -569,7 +569,7 @@ Push_Buffer_Unique_Name(Application_Links *app, Arena *out, Buffer_ID buffer_id) Editing_File *file = imp_get_file(models, buffer_id); String_Const_u8 result = {}; if (api_check_buffer(file)){ - result = string_copy(out, string_from_file_name(&file->unique_name)); + result = push_string_copy(out, string_from_file_name(&file->unique_name)); } return(result); } @@ -580,7 +580,7 @@ Push_Buffer_File_Name(Application_Links *app, Arena *arena, Buffer_ID buffer_id) Editing_File *file = imp_get_file(models, buffer_id); String_Const_u8 result = {}; if (api_check_buffer(file)){ - result = string_copy(arena, string_from_file_name(&file->canon)); + result = push_string_copy(arena, string_from_file_name(&file->canon)); } return(result); } @@ -1005,7 +1005,7 @@ DOC_SEE(Buffer_Save_Flag) if (!skip_save){ Arena *scratch = &models->mem.arena; Temp_Memory temp = begin_temp(scratch); - String_Const_u8 name = string_copy(scratch, file_name); + String_Const_u8 name = push_string_copy(scratch, file_name); save_file_to_name(system, models, file, name.str); end_temp(temp); result = true; @@ -3443,7 +3443,7 @@ DOC_SEE(directory_set_hot) Models *models = (Models*)app->cmd_context; Hot_Directory *hot = &models->hot_directory; hot_directory_clean_end(hot); - String_Const_u8 result = string_copy(arena, SCu8(hot->string_space, hot->string_size)); + String_Const_u8 result = push_string_copy(arena, SCu8(hot->string_space, hot->string_size)); return(result); } @@ -3490,7 +3490,7 @@ DOC_SEE(File_List) str = (char*)canon.name_space; } else{ - String_Const_u8 s = string_copy(scratch, string_from_file_name(&canon)); + String_Const_u8 s = push_string_copy(scratch, string_from_file_name(&canon)); str = (char*)s.str; } system->set_file_list(list_out, str, 0, 0, 0); diff --git a/4ed_app_target.cpp b/4ed_app_target.cpp index 8214ebaf..345720fc 100644 --- a/4ed_app_target.cpp +++ b/4ed_app_target.cpp @@ -19,17 +19,18 @@ #include "4coder_base_types.h" #include "4ed_font.h" #include "4ed_system.h" +#include "4coder_table.h" #include "4coder_base_types.cpp" #include "4coder_string_match.cpp" #include "4coder_stringf.cpp" #include "4coder_app_links_allocator.cpp" +#include "4coder_hash_functions.cpp" +#include "4coder_table.cpp" -#include "4coder_lib/4coder_arena.cpp" #include "4coder_lib/4coder_heap.cpp" #define FSTRING_IMPLEMENTATION #include "4coder_lib/4coder_string.h" -#include "4coder_lib/4coder_table.h" #include "4coder_lib/4coder_utf8.h" // TODO(allen): stop this nonsense diff --git a/4ed_cli.cpp b/4ed_cli.cpp index 316cffc6..2b634c20 100644 --- a/4ed_cli.cpp +++ b/4ed_cli.cpp @@ -95,8 +95,8 @@ internal b32 child_process_call(Models *models, System_Functions *system, String_Const_u8 path, String_Const_u8 command, Child_Process_ID *id_out){ b32 result = false; Scratch_Block scratch(&models->app_links); - String_Const_u8 path_n = string_copy(scratch, path); - String_Const_u8 command_n = string_copy(scratch, command); + String_Const_u8 path_n = push_string_copy(scratch, path); + String_Const_u8 command_n = push_string_copy(scratch, command); CLI_Handles cli_handles = {}; if (system->cli_call((char*)path_n.str, (char*)command_n.str, &cli_handles)){ Child_Process_And_ID new_process = child_process_alloc_new(models, &models->child_processes); diff --git a/4ed_file.cpp b/4ed_file.cpp index baca5d68..90fde17b 100644 --- a/4ed_file.cpp +++ b/4ed_file.cpp @@ -11,7 +11,7 @@ internal Buffer_Slot_ID to_file_id(i32 id){ - Buffer_Slot_ID result; + Buffer_Slot_ID result = {}; result.id = id; return(result); } diff --git a/4ed_working_set.cpp b/4ed_working_set.cpp index 39d35efd..2afafe1e 100644 --- a/4ed_working_set.cpp +++ b/4ed_working_set.cpp @@ -116,7 +116,7 @@ working_set_get_active_file(Working_Set *working_set, Buffer_ID id){ // TODO(allen): REWRITE all of working set internal void -working_set_init(System_Functions *system, Working_Set *working_set, Arena *arena, Heap *heap){ +working_set_init(System_Functions *system, Working_Set *working_set, Arena *arena){ i16 init_count = 16; i16 array_init_count = 256; @@ -150,102 +150,58 @@ working_set_init(System_Functions *system, Working_Set *working_set, Arena *aren } #endif - // NOTE(allen): init canon table - { - i32 item_size = sizeof(File_Name_Entry); - i32 table_size = working_set->file_max; - i32 mem_size = table_required_mem_size(table_size, item_size); - void *mem = heap_allocate(heap, mem_size); - memset(mem, 0, mem_size); - table_init_memory(&working_set->canon_table, mem, table_size, item_size); - } - - // NOTE(allen): init name table - { - i32 item_size = sizeof(File_Name_Entry); - i32 table_size = working_set->file_max; - i32 mem_size = table_required_mem_size(table_size, item_size); - void *mem = heap_allocate(heap, mem_size); - memset(mem, 0, mem_size); - table_init_memory(&working_set->name_table, mem, table_size, item_size); - } -} - -internal void -working_set__grow_if_needed(Table *table, Heap *heap, void *arg, Hash_Function *hash_func, Compare_Function *comp_func){ - if (table_at_capacity(table)){ - Table btable = {}; - i32 new_max = table->max * 2; - i32 mem_size = table_required_mem_size(new_max, table->item_size); - void *mem = heap_allocate(heap, mem_size); - table_init_memory(&btable, mem, new_max, table->item_size); - table_clear(&btable); - table_rehash(table, &btable, 0, hash_func, comp_func); - heap_free(heap, table->hash_array); - *table = btable; - } + working_set->canon_table = make_table_Data_u64(arena->base_allocator, 128); + working_set->name_table = make_table_Data_u64(arena->base_allocator, 128); } internal Editing_File* -working_set_contains_basic(Working_Set *working_set, Table *table, String_Const_u8 name){ +working_set_contains__generic(Working_Set *working_set, Table_Data_u64 *table, String_Const_u8 name){ Editing_File *result = 0; - - File_Name_Entry *entry = (File_Name_Entry*) - table_find_item(table, &name, 0, tbl_string_hash, tbl_string_compare); - if (entry){ - result = working_set_index(working_set, entry->id); + u64 val = 0; + if (table_read(table, make_data(name.str, name.size), &val)){ + result = working_set_index(working_set, to_file_id((Buffer_ID)val)); } - return(result); } internal b32 -working_set_add_basic(Heap *heap, Working_Set *working_set, Table *table, Editing_File *file, String_Const_u8 name){ - working_set__grow_if_needed(table, heap, 0, tbl_string_hash, tbl_string_compare); - - File_Name_Entry entry; - entry.name = name; - entry.id = file->id; - b32 result = (table_add(table, &entry, 0, tbl_string_hash, tbl_string_compare) == 0); - return(result); +working_set_add__generic(Table_Data_u64 *table, Buffer_ID id, String_Const_u8 name){ + return(table_insert(table, make_data(name.str, name.size), id)); } internal void -working_set_remove_basic(Working_Set *working_set, Table *table, String_Const_u8 name){ - table_remove_match(table, &name, 0, tbl_string_hash, tbl_string_compare); +working_set_remove__generic(Table_Data_u64 *table, String_Const_u8 name){ + table_erase(table, make_data(name.str, name.size)); } internal Editing_File* working_set_contains_canon(Working_Set *working_set, String_Const_u8 name){ - Editing_File *result = working_set_contains_basic(working_set, &working_set->canon_table, name); - return(result); + return(working_set_contains__generic(working_set, &working_set->canon_table, name)); } internal b32 -working_set_canon_add(Heap *heap, Working_Set *working_set, Editing_File *file, String_Const_u8 name){ - b32 result = working_set_add_basic(heap,working_set, &working_set->canon_table, file, name); - return(result); +working_set_canon_add(Working_Set *working_set, Editing_File *file, String_Const_u8 name){ + return(working_set_add__generic(&working_set->canon_table, file->id.id, name)); } internal void working_set_canon_remove(Working_Set *working_set, String_Const_u8 name){ - working_set_remove_basic(working_set, &working_set->canon_table, name); + working_set_remove__generic(&working_set->canon_table, name); } internal Editing_File* working_set_contains_name(Working_Set *working_set, String_Const_u8 name){ - return(working_set_contains_basic(working_set, &working_set->name_table, name)); + return(working_set_contains__generic(working_set, &working_set->name_table, name)); } internal b32 working_set_add_name(Heap *heap, Working_Set *working_set, Editing_File *file, String_Const_u8 name){ - b32 result = working_set_add_basic(heap, working_set, &working_set->name_table, file, name); - return(result); + return(working_set_add__generic(&working_set->name_table, file->id.id, name)); } internal void working_set_remove_name(Working_Set *working_set, String_Const_u8 name){ - working_set_remove_basic(working_set, &working_set->name_table, name); + working_set_remove__generic(&working_set->name_table, name); } internal Editing_File* @@ -347,7 +303,7 @@ file_bind_file_name(System_Functions *system, Heap *heap, Working_Set *working_s block_copy(file->canon.name_space, canon_file_name.str, size); file_name_terminate(&file->canon); system->add_listener((char*)file->canon.name_space); - b32 result = working_set_canon_add(heap, working_set, file, string_from_file_name(&file->canon)); + b32 result = working_set_canon_add(working_set, file, string_from_file_name(&file->canon)); Assert(result); } @@ -477,8 +433,8 @@ buffer_bind_name(Models *models, Heap *heap, Arena *scratch, Working_Set *workin Buffer_Name_Conflict_Entry *entry = &conflicts[i]; entry->buffer_id = file_ptr->id.id; - entry->file_name = string_copy(scratch, string_from_file_name(&file_ptr->canon)); - entry->base_name = string_copy(scratch, base_name); + entry->file_name = push_string_copy(scratch, string_from_file_name(&file_ptr->canon)); + entry->base_name = push_string_copy(scratch, base_name); String_Const_u8 b = base_name; if (i > 0){ diff --git a/4ed_working_set.h b/4ed_working_set.h index 333f8d84..a535522e 100644 --- a/4ed_working_set.h +++ b/4ed_working_set.h @@ -35,8 +35,8 @@ struct Working_Set{ Plat_Handle edit_finished_timer; b32 do_not_mark_edits; - Table canon_table; - Table name_table; + Table_Data_u64 canon_table; + Table_Data_u64 name_table; // TODO(allen): do(update clipboard system to exist fully in the custom layer) String_Const_u8 clipboards[64]; @@ -51,11 +51,6 @@ struct Working_Set{ i32 default_minimum_base_display_width; }; -struct File_Name_Entry{ - String_Const_u8 name; - Buffer_Slot_ID id; -}; - internal void file_mark_edit_finished(Working_Set *working_set, Editing_File *file); diff --git a/meta/4ed_build.cpp b/meta/4ed_build.cpp index 1a689d66..17a87367 100644 --- a/meta/4ed_build.cpp +++ b/meta/4ed_build.cpp @@ -12,8 +12,6 @@ //#define FM_PRINT_COMMANDS #include "../4coder_base_types.h" -# include "../4coder_lib/4coder_arena.h" -# include "../4coder_lib/4coder_arena.cpp" #if 0 # define FSTRING_IMPLEMENTATION diff --git a/meta/4ed_metagen.cpp b/meta/4ed_metagen.cpp index d67cf6c2..2abafaa1 100644 --- a/meta/4ed_metagen.cpp +++ b/meta/4ed_metagen.cpp @@ -17,10 +17,8 @@ #include "4coder_API/4coder_version.h" #include "4coder_API/4coder_keycodes.h" -# include "4coder_lib/4coder_arena.h" #include "4coder_base_types.cpp" #include "4coder_stringf.cpp" -# include "4coder_lib/4coder_arena.cpp" # define FSTRING_IMPLEMENTATION # include "4coder_lib/4coder_string.h" #include "4coder_lib/4cpp_lexer.h" @@ -73,11 +71,11 @@ generate_custom_headers(Arena *arena){ String_Const_char name_string = unit_custom.set.items[i].name; List_String_Const_char macro_list = {}; - string_list_push(arena, ¯o_list, string_mod_upper(string_copy(arena, name_string))); + string_list_push(arena, ¯o_list, string_mod_upper(push_string_copy(arena, name_string))); string_list_push_lit(arena, ¯o_list, "_SIG"); func_4ed_names.names[i].macro = string_list_flatten(arena, macro_list); - func_4ed_names.names[i].public_name = string_mod_lower(string_copy(arena, name_string)); + func_4ed_names.names[i].public_name = string_mod_lower(push_string_copy(arena, name_string)); } // NOTE(allen): Output diff --git a/platform_win32/win32_4ed.cpp b/platform_win32/win32_4ed.cpp index 35fe6408..d794dc44 100644 --- a/platform_win32/win32_4ed.cpp +++ b/platform_win32/win32_4ed.cpp @@ -27,14 +27,12 @@ #include "4coder_lib/4coder_utf8.h" #if defined(FRED_SUPER) -# include "4coder_lib/4coder_arena.h" # include "4coder_lib/4coder_heap.h" # include "4coder_lib/4coder_string.h" #include "4coder_base_types.cpp" -# include "4coder_lib/4coder_arena.cpp" # include "4coder_lib/4coder_heap.cpp" # define FSTRING_IMPLEMENTATION # include "4coder_lib/4coder_string.h" diff --git a/things_ive_broken.txt b/things_ive_broken.txt index e07a0e47..4866d41b 100644 --- a/things_ive_broken.txt +++ b/things_ive_broken.txt @@ -34,3 +34,8 @@ buffer_find_hard_start -> get_line_indent_info get_active_view -> get_active_view_DEP view_compute_cursor -> view_compute_cursor_DEP + +list__parameters +list_query__parameters +list_identifier__parameters +list_type_definition__parameters