From a6e582add034ae04cbf69e0d779a3f73d57c7d75 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Fri, 18 Oct 2019 13:54:45 -0700 Subject: [PATCH] Progress towards profile inspector --- custom/4coder_default_bindings.cpp | 1 + custom/4coder_default_include.cpp | 4 + custom/4coder_fancy.cpp | 9 +- custom/4coder_lister_base.cpp | 1 + custom/4coder_profile.cpp | 143 ++++++++++ custom/4coder_profile.h | 60 ++++ custom/4coder_profile_inspect.cpp | 277 ++++++++++++++++++ custom/4coder_search.cpp | 37 ++- custom/generated/command_metadata.h | 428 ++++++++++++++-------------- 9 files changed, 747 insertions(+), 213 deletions(-) create mode 100644 custom/4coder_profile.cpp create mode 100644 custom/4coder_profile.h create mode 100644 custom/4coder_profile_inspect.cpp diff --git a/custom/4coder_default_bindings.cpp b/custom/4coder_default_bindings.cpp index 5b45e75f..72544ac2 100644 --- a/custom/4coder_default_bindings.cpp +++ b/custom/4coder_default_bindings.cpp @@ -18,6 +18,7 @@ custom_layer_init(Application_Links *app){ Thread_Context *tctx = get_thread_context(app); mapping_init(tctx, &framework_mapping); setup_default_mapping(&framework_mapping); + profile_history_init(); } #endif diff --git a/custom/4coder_default_include.cpp b/custom/4coder_default_include.cpp index cdab29bd..2aa235ad 100644 --- a/custom/4coder_default_include.cpp +++ b/custom/4coder_default_include.cpp @@ -22,7 +22,9 @@ #include "4coder_base_types.cpp" #include "4coder_stringf.cpp" #include "4coder_app_links_allocator.cpp" +#include "4coder_system_allocator.cpp" +#include "4coder_profile.h" #include "4coder_table.h" #include "4coder_token.h" #include "generated/lexer_cpp.h" @@ -62,6 +64,7 @@ #include "4coder_table.cpp" #include "4coder_string_match.cpp" #include "4coder_buffer_seek_constructors.cpp" +#include "4coder_profile.cpp" #include "4coder_token.cpp" #include "generated/lexer_cpp.cpp" @@ -93,6 +96,7 @@ #include "4coder_scope_commands.cpp" #include "4coder_combined_write_commands.cpp" #include "4coder_miblo_numbers.cpp" +#include "4coder_profile_inspect.cpp" #include "4coder_default_hooks.cpp" diff --git a/custom/4coder_fancy.cpp b/custom/4coder_fancy.cpp index af85853e..377b02d0 100644 --- a/custom/4coder_fancy.cpp +++ b/custom/4coder_fancy.cpp @@ -208,8 +208,9 @@ draw_fancy_string(Application_Links *app, Face_ID font_id, Fancy_String *string, f32 adv = get_string_advance(app, use_font_id, string->value); - // TODO(casey): need to fill the background here, but I don't know the line height, - // and I can't actually render filled shapes, so, like, I can't properly do dP :( + // TODO(casey): need to fill the background here, but I don't know the line + // height, and I can't actually render filled shapes, so, like, I can't + // properly do dP :( Face_Metrics metrics = get_face_metrics(app, font_id); @@ -221,8 +222,8 @@ draw_fancy_string(Application_Links *app, Face_ID font_id, Fancy_String *string, } static Vec2_f32 -draw_fancy_string(Application_Links *app, Face_ID font_id, Fancy_String *string, Vec2 P, - int_color fore, int_color back){ +draw_fancy_string(Application_Links *app, Face_ID font_id, Fancy_String *string, + Vec2_f32 P, int_color fore, int_color back){ return(draw_fancy_string(app, font_id, string, P, fore, back, 0, V2(1.f, 0.f))); } diff --git a/custom/4coder_lister_base.cpp b/custom/4coder_lister_base.cpp index 3d671a58..c0d832d0 100644 --- a/custom/4coder_lister_base.cpp +++ b/custom/4coder_lister_base.cpp @@ -646,6 +646,7 @@ lister_run(Application_Links *app, View_ID view, Lister *lister){ } if (!handled){ + // TODO(allen): dedup this stuff. Mapping *mapping = lister->mapping; Command_Map *map = lister->map; if (mapping != 0 && map != 0){ diff --git a/custom/4coder_profile.cpp b/custom/4coder_profile.cpp new file mode 100644 index 00000000..6997878b --- /dev/null +++ b/custom/4coder_profile.cpp @@ -0,0 +1,143 @@ +/* + * 4coder_profile.cpp - Built in self profiling report. + */ + +// TOP + +function Profile_Group* +make_profile_group__inner(u32 slot_count, u32 stack_size, char *source_location){ + Arena arena = make_arena_system(KB(4)); + Profile_Group *group = push_array(&arena, Profile_Group, 1); + group->arena = arena; + group->thread_id = system_thread_get_id(); + group->source_location = SCu8(source_location); + group->slot_names = push_array_zero(&group->arena, String_Const_u8, slot_count); + group->timer_stack = push_array_zero(&group->arena, Profile_Slot, stack_size); + group->slot_count = slot_count; + group->stack_size = stack_size; + group->stack_top = 0; + group->first = 0; + group->last = 0; + return(group); +} + +#define make_profile_group(L,T) make_profile_group__inner((L),(T), file_name_line_number) + +function void +profile_define(Profile_Group *group, u32 slot_index, char *name){ + if (slot_index < group->slot_count){ + group->slot_names[slot_index] = SCu8(name); + } +} + +function void +profile__record(Profile_Group *group, u32 slot_index, u64 time){ + Profile_Record *record = push_array(&group->arena, Profile_Record, 1); + record->slot_index = slot_index; + record->time = time; + sll_queue_push(group->first, group->last, record); +} + +function void +profile_begin_range(Profile_Group *group, u32 slot_index){ + Assert(group->stack_top < group->stack_size); + Profile_Slot *slot = &group->timer_stack[group->stack_top]; + Profile_Slot *prev = 0; + if (group->stack_top > 0){ + prev = &group->timer_stack[group->stack_top - 1]; + } + slot->slot_index = slot_index; + group->stack_top += 1; + slot->accumulated_time = 0; + u64 time = system_now_time(); + slot->start_time = time; + if (prev != 0){ + prev->accumulated_time += time - prev->start_time; + } +} + +function void +profile_end_range(Profile_Group *group){ + u64 time = system_now_time(); + Assert(group->stack_top > 0); + group->stack_top -= 1; + if (group->stack_top > 0){ + Profile_Slot *prev = &group->timer_stack[group->stack_top - 1]; + prev->start_time = time; + } + Profile_Slot *slot = &group->timer_stack[group->stack_top]; + u64 accumulated = time - slot->start_time + slot->accumulated_time; + profile__record(group, slot->slot_index, accumulated); +} + +function void +profile_add_note(Profile_Group *group, u32 slot_index){ + profile__record(group, slot_index, 0); +} + +function void +profile_group_post(Profile_Group *group){ + Assert(group->stack_top == 0); + system_mutex_acquire(profile_history.mutex); + if (profile_history.disable_bits == 0){ + sll_queue_push(profile_history.first, profile_history.last, group); + } + else{ + Arena *arena = &group->arena; + linalloc_clear(arena); + } + system_mutex_release(profile_history.mutex); +} + +function void +profile_history_set_enabled(b32 value, Profile_Enable_Flag flag){ + system_mutex_acquire(profile_history.mutex); + if (value){ + RemFlag(profile_history.disable_bits, flag); + } + else{ + AddFlag(profile_history.disable_bits, flag); + } + system_mutex_release(profile_history.mutex); +} + +function void +profile_history_clear(void){ + system_mutex_acquire(profile_history.mutex); + for (Profile_Group *node = profile_history.first, *next = 0; + node != 0; + node = next){ + next = node->next; + Arena *arena = &node->arena; + linalloc_clear(arena); + } + system_mutex_release(profile_history.mutex); +} + +function void +profile_history_init(void){ + profile_history.mutex = system_mutex_make(); + profile_history.disable_bits = 0; +} + +//////////////////////////////// + +CUSTOM_COMMAND_SIG(profile_enable) +CUSTOM_DOC("Allow 4coder's self profiler to gather new profiling information.") +{ + profile_history_set_enabled(true, ProfileEnable_UserBit); +} + +CUSTOM_COMMAND_SIG(profile_disable) +CUSTOM_DOC("Prevent 4coder's self profiler from gathering new profiling information.") +{ + profile_history_set_enabled(false, ProfileEnable_UserBit); +} + +CUSTOM_COMMAND_SIG(profile_clear) +CUSTOM_DOC("Clear all profiling information from 4coder's self profiler.") +{ + profile_history_clear(); +} + +// BOTTOM diff --git a/custom/4coder_profile.h b/custom/4coder_profile.h new file mode 100644 index 00000000..531e4b51 --- /dev/null +++ b/custom/4coder_profile.h @@ -0,0 +1,60 @@ +/* + * 4coder_profile.h - Types for built in self profiling report. + */ + +// TOP + +#if !defined(FCODER_PROFILE_H) +#define FCODER_PROFILE_H + +struct Profile_Slot{ + u64 start_time; + u64 accumulated_time; + u32 slot_index; +}; + +struct Profile_Record{ + Profile_Record *next; + struct Profile_Group *group; + u64 time; + u32 slot_index; +}; + +struct Profile_Group{ + Profile_Group *next; + + Arena arena; + + i32 thread_id; + String_Const_u8 source_location; + String_Const_u8 *slot_names; + Profile_Slot *timer_stack; + u32 slot_count; + u32 stack_size; + u32 stack_top; + + Profile_Record *first; + Profile_Record *last; +}; + +//////////////////////////////// + +typedef u32 Profile_Enable_Flag; +enum{ + ProfileEnable_UserBit = 0x1, + ProfileEnable_InspectBit = 0x2 +}; + +struct Profile_History{ + System_Mutex mutex; + Profile_Enable_Flag disable_bits; + Profile_Group *first; + Profile_Group *last; +}; + +global Profile_History profile_history = {}; + +#endif + +// BOTTOM + diff --git a/custom/4coder_profile_inspect.cpp b/custom/4coder_profile_inspect.cpp new file mode 100644 index 00000000..7f8950f4 --- /dev/null +++ b/custom/4coder_profile_inspect.cpp @@ -0,0 +1,277 @@ +/* + * 4coder_profile.cpp - Built in self profiling UI. + */ + +// TOP + +struct Profile_Group_Ptr{ + Profile_Group_Ptr *next; + Profile_Group *group; +}; + +struct Profile_Universal_Slot{ + Profile_Universal_Slot *next; + + String_Const_u8 source_location; + u32 slot_index; + + String_Const_u8 name; + + u32 count; + u64 total_time; +}; + +struct Profile_Thread{ + Profile_Thread *next; + i32 thread_id; + + Profile_Group_Ptr *first_group; + Profile_Group_Ptr *last_group; + + Profile_Universal_Slot *first_slot; + Profile_Universal_Slot *last_slot; + i32 slot_count; + + Profile_Universal_Slot **sorted_slots; +}; + +//////////////////////////////// + +function Profile_Thread* +get_column_from_thread_id(Profile_Thread *first, i32 thread_id){ + Profile_Thread *result = 0; + for (Profile_Thread *node = first; + node != 0; + node = node->next){ + if (node->thread_id == thread_id){ + result = node; + break; + } + } + return(result); +} + +function Profile_Universal_Slot* +get_universal_slot(Profile_Thread *column, String_Const_u8 source_location, + u32 slot_index){ + Profile_Universal_Slot *result = 0; + for (Profile_Universal_Slot *node = column->first_slot; + node != 0; + node = node->next){ + if (node->slot_index == slot_index && + string_match(node->source_location, source_location)){ + result = node; + break; + } + } + return(result); +} + +function void +sort_universal_slots(Profile_Universal_Slot **slots, i32 first, i32 one_past_last){ + if (first + 1 < one_past_last){ + i32 pivot = one_past_last - 1; + Profile_Universal_Slot *pivot_slot = &slots[pivot]; + i32 j = first; + for (i32 i = first; i < pivot; i += 1){ + Profile_Universal_Slot *slot = &slots[i]; + b32 is_less = false; + if (slot->total_time < pivot_slot->total_time){ + is_less = true; + } + else if (slot->total_time == pivot_slot->total_time){ + if (slot->count < pivot_slot->count){ + is_less = true; + } + else if (slot->count == pivot_slot->count){ + i32 comp = string_compare(slot->source_location, + pivot_slot->source_location); + if (comp < 0){ + is_less = true; + } + else if (comp == 0){ + if (slot->slot_index < pivot_slot->slot_index){ + is_less = true; + } + } + } + } + if (is_less){ + Swap(Profile_Universal_Slot*, slots[i], slots[j]); + j += 1; + } + } + Swap(Profile_Universal_Slot*, slots[j], slots[pivot]); + sort_universal_slots(slots, first, pivot); + sort_universal_slots(slots, pivot + 1, one_past_last); + } +} + +function void +profile_render(Application_Links *app, Frame_Info frame_info, View_ID view){ + Scratch_Block scratch(app); + + Rect_f32 region = draw_background_and_margin(app, view); + Rect_f32 prev_clip = draw_set_clip(app, region); + + Face_ID face_id = get_face_id(app, 0); + Face_Metrics metrics = get_face_metrics(app, face_id); + f32 line_height = metrics.line_height; + + system_mutex_acquire(profile_history.mutex); + + // TODO(allen): cache this result! + Profile_Thread *thread_first = 0; + Profile_Thread *thread_last = 0; + i32 thread_count = 0; + for (Profile_Group *node = profile_history.first; + node != 0; + node = node->next){ + i32 thread_id = node->thread_id; + Profile_Thread *column = get_column_from_thread_id(thread_first, thread_id); + if (column == 0){ + column = push_array(scratch, Profile_Thread, 1); + sll_queue_push(thread_first, thread_last, column); + thread_count += 1; + column->thread_id = thread_id; + column->first_group = 0; + column->last_group = 0; + } + + Profile_Group_Ptr *ptr = push_array(scratch, Profile_Group_Ptr, 1); + sll_queue_push(column->first_group, column->last_group, ptr); + ptr->group = node; + + String_Const_u8 source_location = node->source_location; + for (Profile_Record *record = node->first; + record != 0; + record = record->next){ + Profile_Universal_Slot *univ_slot = + get_universal_slot(column, source_location, record->slot_index); + if (univ_slot == 0){ + univ_slot = push_array(scratch, Profile_Universal_Slot, 1); + sll_queue_push(column->first_slot, column->last_slot, univ_slot); + column->slot_count += 1; + univ_slot->source_location = source_location; + univ_slot->slot_index = record->slot_index; + univ_slot->name = node->slot_names[univ_slot->slot_index]; + univ_slot->count = 0; + univ_slot->total_time = 0; + } + univ_slot->count += 1; + univ_slot->total_time += record->time; + } + } + + for (Profile_Thread *column = thread_first; + column != 0; + column = column->next){ + i32 count = column->slot_count; + Profile_Universal_Slot **slots = push_array(scratch, Profile_Universal_Slot*, count); + column->sorted_slots = slots; + sort_universal_slots(slots, 0, count); + } + + f32 column_width = rect_width(region)/(f32)thread_count; + + Rect_f32_Pair header_body = rect_split_top_bottom(region, line_height*2.f); + + Range_f32 full_y = rect_range_y(region); + Range_f32 header_y = rect_range_y(header_body.min); + Range_f32 body_y = rect_range_y(header_body.max); + + f32 pos_x = region.x0; + for (Profile_Thread *column = thread_first; + column != 0; + column = column->next){ + Range_f32 column_x = If32_size(pos_x, column_width); + + // NOTE(allen): header + { + Rect_f32 box = Rf32(column_x, header_y); + draw_rectangle_outline(app, box, 6.f, 3.f, Stag_Margin_Active); + } + + Range_f32 text_x = If32(column_x.min + 6.f, column_x.max - 6.f); + draw_set_clip(app, Rf32(text_x, full_y)); + + // NOTE(allen): header text + { + Fancy_String_List list = {}; + push_fancy_stringf(scratch, &list, fancy_id(Stag_Keyword), + "%d", column->thread_id); + f32 y = (header_y.min + header_y.max - line_height)*0.5f; + draw_fancy_string(app, face_id, list.first, + V2f32(text_x.min, y), + Stag_Default, 0); + } + + pos_x = column_x.max; + } + + system_mutex_release(profile_history.mutex); + + draw_set_clip(app, prev_clip); +} + +CUSTOM_COMMAND_SIG(profile_inspect) +CUSTOM_DOC("Inspect all currently collected profiling information in 4coder's self profiler.") +{ + View_ID view = get_active_view(app, Access_Always); + View_Context ctx = view_current_context(app, view); + ctx.render_caller = profile_render; + ctx.hides_buffer = true; + view_push_context(app, view, &ctx); + + profile_history_set_enabled(false, ProfileEnable_InspectBit); + + for (;;){ + User_Input in = get_next_input(app, EventPropertyGroup_Any, EventProperty_Escape); + if (in.abort){ + break; + } + +#if 0 + b32 handled = true; + switch (in.event.kind){ + default: + { + handled = false; + }break; + } +#else + b32 handled = false; +#endif + + if (!handled){ + // TODO(allen): dedup this stuff. + // TODO(allen): get mapping and map from a more flexible source. + Mapping *mapping = &framework_mapping; + Command_Map *map = mapping_get_map(mapping, mapid_global); + if (mapping != 0 && map != 0){ + Command_Binding binding = + map_get_binding_recursive(mapping, map, &in.event); + if (binding.custom != 0){ + i64 old_num = get_current_input_sequence_number(app); + binding.custom(app); + i64 num = get_current_input_sequence_number(app); + if (old_num < num){ + break; + } + } + else{ + leave_current_input_unhandled(app); + } + } + else{ + leave_current_input_unhandled(app); + } + } + } + + profile_history_set_enabled(true, ProfileEnable_InspectBit); + + view_pop_context(app, view); +} + +// BOTTOM diff --git a/custom/4coder_search.cpp b/custom/4coder_search.cpp index 7fe5a93b..a1fe80e5 100644 --- a/custom/4coder_search.cpp +++ b/custom/4coder_search.cpp @@ -385,12 +385,32 @@ CUSTOM_DOC("Iteratively tries completing the word to the left of the cursor with View_ID view = get_active_view(app, Access_ReadWriteVisible); Buffer_ID buffer = view_get_buffer(app, view, Access_ReadWriteVisible); if (buffer != 0){ + enum{ + Prof_WordComplete, + Prof_FirstCompletion, + Prof_ReserveArena, + Prof_NeedleRange, + Prof_GetState, + Prof_Apply, + Prof_COUNT, + }; + Profile_Group *profile = make_profile_group(Prof_COUNT, Prof_COUNT); + profile_define(profile, Prof_WordComplete, "word complete"); + profile_define(profile, Prof_FirstCompletion, "first completion"); + profile_define(profile, Prof_ReserveArena, "reserve arena"); + profile_define(profile, Prof_NeedleRange, "needle range"); + profile_define(profile, Prof_GetState, "get state"); + profile_define(profile, Prof_Apply, "apply"); + + profile_begin_range(profile, Prof_WordComplete); + Managed_Scope scope = view_get_managed_scope(app, view); b32 first_completion = false; Rewrite_Type *rewrite = scope_attachment(app, scope, view_rewrite_loc, Rewrite_Type); if (*rewrite != Rewrite_WordComplete){ first_completion = true; + profile_add_note(profile, Prof_FirstCompletion); } Rewrite_Type *next_rewrite = scope_attachment(app, scope, view_next_rewrite_loc, Rewrite_Type); @@ -399,6 +419,7 @@ CUSTOM_DOC("Iteratively tries completing the word to the left of the cursor with local_persist Arena *completion_arena = {}; if (completion_arena == 0){ completion_arena = reserve_arena(app); + profile_add_note(profile, Prof_ReserveArena); } local_persist Word_Complete_State state = {}; @@ -407,13 +428,22 @@ CUSTOM_DOC("Iteratively tries completing the word to the left of the cursor with linalloc_clear(completion_arena); i64 pos = view_get_cursor_pos(app, view); + + profile_begin_range(profile, Prof_NeedleRange); Range_i64 needle_range = get_word_complete_needle_range(app, buffer, pos); + profile_end_range(profile); + if (range_size(needle_range) > 0){ - state = get_word_complete_state(app, completion_arena, buffer, needle_range); + profile_begin_range(profile, Prof_GetState); + state = get_word_complete_state(app, completion_arena, buffer, + needle_range); + profile_end_range(profile); } } if (state.initialized){ + profile_begin_range(profile, Prof_Apply); + if (state.iterator == 0){ state.iterator = state.list.first; } @@ -432,7 +462,12 @@ CUSTOM_DOC("Iteratively tries completing the word to the left of the cursor with buffer_replace_range(app, buffer, state.range, str); state.range.max = state.range.min + str.size; view_set_cursor_and_preferred_x(app, view, seek_pos(state.range.max)); + + profile_end_range(profile); } + + profile_end_range(profile); + profile_group_post(profile); } } diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index 19e113d4..0d6e6299 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -2,7 +2,7 @@ #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 207 +#define command_one_past_last_id 211 #if defined(CUSTOM_COMMAND_SIG) #define PROC_LINKS(x,y) x #else @@ -10,6 +10,9 @@ #endif #if defined(CUSTOM_COMMAND_SIG) CUSTOM_COMMAND_SIG(default_view_input_handler); +CUSTOM_COMMAND_SIG(profile_enable); +CUSTOM_COMMAND_SIG(profile_disable); +CUSTOM_COMMAND_SIG(profile_clear); CUSTOM_COMMAND_SIG(seek_beginning_of_textual_line); CUSTOM_COMMAND_SIG(seek_end_of_textual_line); CUSTOM_COMMAND_SIG(seek_beginning_of_line); @@ -214,6 +217,7 @@ CUSTOM_COMMAND_SIG(miblo_increment_time_stamp); CUSTOM_COMMAND_SIG(miblo_decrement_time_stamp); CUSTOM_COMMAND_SIG(miblo_increment_time_stamp_minute); CUSTOM_COMMAND_SIG(miblo_decrement_time_stamp_minute); +CUSTOM_COMMAND_SIG(profile_inspect); CUSTOM_COMMAND_SIG(default_startup); CUSTOM_COMMAND_SIG(default_try_exit); #endif @@ -227,8 +231,11 @@ char *source_name; i32 source_name_len; i32 line_number; }; -static Command_Metadata fcoder_metacmd_table[207] = { +static Command_Metadata fcoder_metacmd_table[211] = { { PROC_LINKS(default_view_input_handler, 0), "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 56 }, +{ PROC_LINKS(profile_enable, 0), "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "w:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 125 }, +{ PROC_LINKS(profile_disable, 0), "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "w:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 131 }, +{ PROC_LINKS(profile_clear, 0), "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "w:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 137 }, { 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\\custom\\4coder_helper.cpp", 36, 2095 }, { 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\\custom\\4coder_helper.cpp", 36, 2101 }, { 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\\custom\\4coder_helper.cpp", 36, 2107 }, @@ -433,214 +440,219 @@ static Command_Metadata fcoder_metacmd_table[207] = { { 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\\custom\\4coder_miblo_numbers.cpp", 43, 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\\custom\\4coder_miblo_numbers.cpp", 43, 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\\custom\\4coder_miblo_numbers.cpp", 43, 249 }, +{ PROC_LINKS(profile_inspect, 0), "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "w:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 164 }, { PROC_LINKS(default_startup, 0), "default_startup", 15, "Default command for responding to a startup event", 49, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 }, { PROC_LINKS(default_try_exit, 0), "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 21 }, }; static i32 fcoder_metacmd_ID_default_view_input_handler = 0; -static i32 fcoder_metacmd_ID_seek_beginning_of_textual_line = 1; -static i32 fcoder_metacmd_ID_seek_end_of_textual_line = 2; -static i32 fcoder_metacmd_ID_seek_beginning_of_line = 3; -static i32 fcoder_metacmd_ID_seek_end_of_line = 4; -static i32 fcoder_metacmd_ID_goto_beginning_of_file = 5; -static i32 fcoder_metacmd_ID_goto_end_of_file = 6; -static i32 fcoder_metacmd_ID_change_active_panel = 7; -static i32 fcoder_metacmd_ID_change_active_panel_backwards = 8; -static i32 fcoder_metacmd_ID_open_panel_vsplit = 9; -static i32 fcoder_metacmd_ID_open_panel_hsplit = 10; -static i32 fcoder_metacmd_ID_suppress_mouse = 11; -static i32 fcoder_metacmd_ID_allow_mouse = 12; -static i32 fcoder_metacmd_ID_toggle_mouse = 13; -static i32 fcoder_metacmd_ID_set_mode_to_original = 14; -static i32 fcoder_metacmd_ID_set_mode_to_notepad_like = 15; -static i32 fcoder_metacmd_ID_toggle_highlight_line_at_cursor = 16; -static i32 fcoder_metacmd_ID_toggle_highlight_enclosing_scopes = 17; -static i32 fcoder_metacmd_ID_toggle_paren_matching_helper = 18; -static i32 fcoder_metacmd_ID_toggle_fullscreen = 19; -static i32 fcoder_metacmd_ID_write_text_input = 20; -static i32 fcoder_metacmd_ID_write_space = 21; -static i32 fcoder_metacmd_ID_write_underscore = 22; -static i32 fcoder_metacmd_ID_delete_char = 23; -static i32 fcoder_metacmd_ID_backspace_char = 24; -static i32 fcoder_metacmd_ID_set_mark = 25; -static i32 fcoder_metacmd_ID_cursor_mark_swap = 26; -static i32 fcoder_metacmd_ID_delete_range = 27; -static i32 fcoder_metacmd_ID_backspace_alpha_numeric_boundary = 28; -static i32 fcoder_metacmd_ID_delete_alpha_numeric_boundary = 29; -static i32 fcoder_metacmd_ID_snipe_backward_whitespace_or_token_boundary = 30; -static i32 fcoder_metacmd_ID_snipe_forward_whitespace_or_token_boundary = 31; -static i32 fcoder_metacmd_ID_center_view = 32; -static i32 fcoder_metacmd_ID_left_adjust_view = 33; -static i32 fcoder_metacmd_ID_click_set_cursor_and_mark = 34; -static i32 fcoder_metacmd_ID_click_set_cursor = 35; -static i32 fcoder_metacmd_ID_click_set_cursor_if_lbutton = 36; -static i32 fcoder_metacmd_ID_click_set_mark = 37; -static i32 fcoder_metacmd_ID_mouse_wheel_scroll = 38; -static i32 fcoder_metacmd_ID_move_up = 39; -static i32 fcoder_metacmd_ID_move_down = 40; -static i32 fcoder_metacmd_ID_move_up_10 = 41; -static i32 fcoder_metacmd_ID_move_down_10 = 42; -static i32 fcoder_metacmd_ID_move_down_textual = 43; -static i32 fcoder_metacmd_ID_page_up = 44; -static i32 fcoder_metacmd_ID_page_down = 45; -static i32 fcoder_metacmd_ID_move_up_to_blank_line = 46; -static i32 fcoder_metacmd_ID_move_down_to_blank_line = 47; -static i32 fcoder_metacmd_ID_move_up_to_blank_line_skip_whitespace = 48; -static i32 fcoder_metacmd_ID_move_down_to_blank_line_skip_whitespace = 49; -static i32 fcoder_metacmd_ID_move_up_to_blank_line_end = 50; -static i32 fcoder_metacmd_ID_move_down_to_blank_line_end = 51; -static i32 fcoder_metacmd_ID_move_left = 52; -static i32 fcoder_metacmd_ID_move_right = 53; -static i32 fcoder_metacmd_ID_move_right_whitespace_boundary = 54; -static i32 fcoder_metacmd_ID_move_left_whitespace_boundary = 55; -static i32 fcoder_metacmd_ID_move_right_token_boundary = 56; -static i32 fcoder_metacmd_ID_move_left_token_boundary = 57; -static i32 fcoder_metacmd_ID_move_right_whitespace_or_token_boundary = 58; -static i32 fcoder_metacmd_ID_move_left_whitespace_or_token_boundary = 59; -static i32 fcoder_metacmd_ID_move_right_alpha_numeric_boundary = 60; -static i32 fcoder_metacmd_ID_move_left_alpha_numeric_boundary = 61; -static i32 fcoder_metacmd_ID_move_right_alpha_numeric_or_camel_boundary = 62; -static i32 fcoder_metacmd_ID_move_left_alpha_numeric_or_camel_boundary = 63; -static i32 fcoder_metacmd_ID_select_all = 64; -static i32 fcoder_metacmd_ID_to_uppercase = 65; -static i32 fcoder_metacmd_ID_to_lowercase = 66; -static i32 fcoder_metacmd_ID_clean_all_lines = 67; -static i32 fcoder_metacmd_ID_basic_change_active_panel = 68; -static i32 fcoder_metacmd_ID_close_panel = 69; -static i32 fcoder_metacmd_ID_show_scrollbar = 70; -static i32 fcoder_metacmd_ID_hide_scrollbar = 71; -static i32 fcoder_metacmd_ID_show_filebar = 72; -static i32 fcoder_metacmd_ID_hide_filebar = 73; -static i32 fcoder_metacmd_ID_toggle_filebar = 74; -static i32 fcoder_metacmd_ID_toggle_fps_meter = 75; -static i32 fcoder_metacmd_ID_increase_face_size = 76; -static i32 fcoder_metacmd_ID_decrease_face_size = 77; -static i32 fcoder_metacmd_ID_mouse_wheel_change_face_size = 78; -static i32 fcoder_metacmd_ID_toggle_virtual_whitespace = 79; -static i32 fcoder_metacmd_ID_toggle_show_whitespace = 80; -static i32 fcoder_metacmd_ID_toggle_line_numbers = 81; -static i32 fcoder_metacmd_ID_exit_4coder = 82; -static i32 fcoder_metacmd_ID_goto_line = 83; -static i32 fcoder_metacmd_ID_search = 84; -static i32 fcoder_metacmd_ID_reverse_search = 85; -static i32 fcoder_metacmd_ID_search_identifier = 86; -static i32 fcoder_metacmd_ID_reverse_search_identifier = 87; -static i32 fcoder_metacmd_ID_replace_in_range = 88; -static i32 fcoder_metacmd_ID_replace_in_buffer = 89; -static i32 fcoder_metacmd_ID_replace_in_all_buffers = 90; -static i32 fcoder_metacmd_ID_query_replace = 91; -static i32 fcoder_metacmd_ID_query_replace_identifier = 92; -static i32 fcoder_metacmd_ID_query_replace_selection = 93; -static i32 fcoder_metacmd_ID_save_all_dirty_buffers = 94; -static i32 fcoder_metacmd_ID_delete_file_query = 95; -static i32 fcoder_metacmd_ID_save_to_query = 96; -static i32 fcoder_metacmd_ID_rename_file_query = 97; -static i32 fcoder_metacmd_ID_make_directory_query = 98; -static i32 fcoder_metacmd_ID_move_line_up = 99; -static i32 fcoder_metacmd_ID_move_line_down = 100; -static i32 fcoder_metacmd_ID_duplicate_line = 101; -static i32 fcoder_metacmd_ID_delete_line = 102; -static i32 fcoder_metacmd_ID_open_file_in_quotes = 103; -static i32 fcoder_metacmd_ID_open_matching_file_cpp = 104; -static i32 fcoder_metacmd_ID_view_buffer_other_panel = 105; -static i32 fcoder_metacmd_ID_swap_buffers_between_panels = 106; -static i32 fcoder_metacmd_ID_kill_buffer = 107; -static i32 fcoder_metacmd_ID_save = 108; -static i32 fcoder_metacmd_ID_reopen = 109; -static i32 fcoder_metacmd_ID_undo = 110; -static i32 fcoder_metacmd_ID_redo = 111; -static i32 fcoder_metacmd_ID_undo_all_buffers = 112; -static i32 fcoder_metacmd_ID_redo_all_buffers = 113; -static i32 fcoder_metacmd_ID_open_in_other = 114; -static i32 fcoder_metacmd_ID_default_file_externally_modified = 115; -static i32 fcoder_metacmd_ID_set_eol_mode_to_crlf = 116; -static i32 fcoder_metacmd_ID_set_eol_mode_to_lf = 117; -static i32 fcoder_metacmd_ID_set_eol_mode_to_binary = 118; -static i32 fcoder_metacmd_ID_set_eol_mode_from_contents = 119; -static i32 fcoder_metacmd_ID_interactive_switch_buffer = 120; -static i32 fcoder_metacmd_ID_interactive_kill_buffer = 121; -static i32 fcoder_metacmd_ID_interactive_open_or_new = 122; -static i32 fcoder_metacmd_ID_interactive_new = 123; -static i32 fcoder_metacmd_ID_interactive_open = 124; -static i32 fcoder_metacmd_ID_command_lister = 125; -static i32 fcoder_metacmd_ID_auto_indent_whole_file = 126; -static i32 fcoder_metacmd_ID_auto_indent_line_at_cursor = 127; -static i32 fcoder_metacmd_ID_auto_indent_range = 128; -static i32 fcoder_metacmd_ID_write_text_and_auto_indent = 129; -static i32 fcoder_metacmd_ID_list_all_locations = 130; -static i32 fcoder_metacmd_ID_list_all_substring_locations = 131; -static i32 fcoder_metacmd_ID_list_all_locations_case_insensitive = 132; -static i32 fcoder_metacmd_ID_list_all_substring_locations_case_insensitive = 133; -static i32 fcoder_metacmd_ID_list_all_locations_of_identifier = 134; -static i32 fcoder_metacmd_ID_list_all_locations_of_identifier_case_insensitive = 135; -static i32 fcoder_metacmd_ID_list_all_locations_of_selection = 136; -static i32 fcoder_metacmd_ID_list_all_locations_of_selection_case_insensitive = 137; -static i32 fcoder_metacmd_ID_list_all_locations_of_type_definition = 138; -static i32 fcoder_metacmd_ID_list_all_locations_of_type_definition_of_identifier = 139; -static i32 fcoder_metacmd_ID_word_complete = 140; -static i32 fcoder_metacmd_ID_goto_jump_at_cursor = 141; -static i32 fcoder_metacmd_ID_goto_jump_at_cursor_same_panel = 142; -static i32 fcoder_metacmd_ID_goto_next_jump = 143; -static i32 fcoder_metacmd_ID_goto_prev_jump = 144; -static i32 fcoder_metacmd_ID_goto_next_jump_no_skips = 145; -static i32 fcoder_metacmd_ID_goto_prev_jump_no_skips = 146; -static i32 fcoder_metacmd_ID_goto_first_jump = 147; -static i32 fcoder_metacmd_ID_goto_first_jump_same_panel_sticky = 148; -static i32 fcoder_metacmd_ID_if_read_only_goto_position = 149; -static i32 fcoder_metacmd_ID_if_read_only_goto_position_same_panel = 150; -static i32 fcoder_metacmd_ID_view_jump_list_with_lister = 151; -static i32 fcoder_metacmd_ID_show_the_log_graph = 152; -static i32 fcoder_metacmd_ID_copy = 153; -static i32 fcoder_metacmd_ID_cut = 154; -static i32 fcoder_metacmd_ID_paste = 155; -static i32 fcoder_metacmd_ID_paste_next = 156; -static i32 fcoder_metacmd_ID_paste_and_indent = 157; -static i32 fcoder_metacmd_ID_paste_next_and_indent = 158; -static i32 fcoder_metacmd_ID_execute_previous_cli = 159; -static i32 fcoder_metacmd_ID_execute_any_cli = 160; -static i32 fcoder_metacmd_ID_build_search = 161; -static i32 fcoder_metacmd_ID_build_in_build_panel = 162; -static i32 fcoder_metacmd_ID_close_build_panel = 163; -static i32 fcoder_metacmd_ID_change_to_build_panel = 164; -static i32 fcoder_metacmd_ID_close_all_code = 165; -static i32 fcoder_metacmd_ID_open_all_code = 166; -static i32 fcoder_metacmd_ID_open_all_code_recursive = 167; -static i32 fcoder_metacmd_ID_load_project = 168; -static i32 fcoder_metacmd_ID_project_fkey_command = 169; -static i32 fcoder_metacmd_ID_project_go_to_root_directory = 170; -static i32 fcoder_metacmd_ID_setup_new_project = 171; -static i32 fcoder_metacmd_ID_setup_build_bat = 172; -static i32 fcoder_metacmd_ID_setup_build_sh = 173; -static i32 fcoder_metacmd_ID_setup_build_bat_and_sh = 174; -static i32 fcoder_metacmd_ID_project_command_lister = 175; -static i32 fcoder_metacmd_ID_list_all_functions_current_buffer = 176; -static i32 fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 177; -static i32 fcoder_metacmd_ID_list_all_functions_all_buffers = 178; -static i32 fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 179; -static i32 fcoder_metacmd_ID_select_surrounding_scope = 180; -static i32 fcoder_metacmd_ID_select_next_scope_absolute = 181; -static i32 fcoder_metacmd_ID_select_next_scope_after_current = 182; -static i32 fcoder_metacmd_ID_select_prev_scope_absolute = 183; -static i32 fcoder_metacmd_ID_place_in_scope = 184; -static i32 fcoder_metacmd_ID_delete_current_scope = 185; -static i32 fcoder_metacmd_ID_open_long_braces = 186; -static i32 fcoder_metacmd_ID_open_long_braces_semicolon = 187; -static i32 fcoder_metacmd_ID_open_long_braces_break = 188; -static i32 fcoder_metacmd_ID_if0_off = 189; -static i32 fcoder_metacmd_ID_write_todo = 190; -static i32 fcoder_metacmd_ID_write_hack = 191; -static i32 fcoder_metacmd_ID_write_note = 192; -static i32 fcoder_metacmd_ID_write_block = 193; -static i32 fcoder_metacmd_ID_write_zero_struct = 194; -static i32 fcoder_metacmd_ID_comment_line = 195; -static i32 fcoder_metacmd_ID_uncomment_line = 196; -static i32 fcoder_metacmd_ID_comment_line_toggle = 197; -static i32 fcoder_metacmd_ID_snippet_lister = 198; -static i32 fcoder_metacmd_ID_miblo_increment_basic = 199; -static i32 fcoder_metacmd_ID_miblo_decrement_basic = 200; -static i32 fcoder_metacmd_ID_miblo_increment_time_stamp = 201; -static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp = 202; -static i32 fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 203; -static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 204; -static i32 fcoder_metacmd_ID_default_startup = 205; -static i32 fcoder_metacmd_ID_default_try_exit = 206; +static i32 fcoder_metacmd_ID_profile_enable = 1; +static i32 fcoder_metacmd_ID_profile_disable = 2; +static i32 fcoder_metacmd_ID_profile_clear = 3; +static i32 fcoder_metacmd_ID_seek_beginning_of_textual_line = 4; +static i32 fcoder_metacmd_ID_seek_end_of_textual_line = 5; +static i32 fcoder_metacmd_ID_seek_beginning_of_line = 6; +static i32 fcoder_metacmd_ID_seek_end_of_line = 7; +static i32 fcoder_metacmd_ID_goto_beginning_of_file = 8; +static i32 fcoder_metacmd_ID_goto_end_of_file = 9; +static i32 fcoder_metacmd_ID_change_active_panel = 10; +static i32 fcoder_metacmd_ID_change_active_panel_backwards = 11; +static i32 fcoder_metacmd_ID_open_panel_vsplit = 12; +static i32 fcoder_metacmd_ID_open_panel_hsplit = 13; +static i32 fcoder_metacmd_ID_suppress_mouse = 14; +static i32 fcoder_metacmd_ID_allow_mouse = 15; +static i32 fcoder_metacmd_ID_toggle_mouse = 16; +static i32 fcoder_metacmd_ID_set_mode_to_original = 17; +static i32 fcoder_metacmd_ID_set_mode_to_notepad_like = 18; +static i32 fcoder_metacmd_ID_toggle_highlight_line_at_cursor = 19; +static i32 fcoder_metacmd_ID_toggle_highlight_enclosing_scopes = 20; +static i32 fcoder_metacmd_ID_toggle_paren_matching_helper = 21; +static i32 fcoder_metacmd_ID_toggle_fullscreen = 22; +static i32 fcoder_metacmd_ID_write_text_input = 23; +static i32 fcoder_metacmd_ID_write_space = 24; +static i32 fcoder_metacmd_ID_write_underscore = 25; +static i32 fcoder_metacmd_ID_delete_char = 26; +static i32 fcoder_metacmd_ID_backspace_char = 27; +static i32 fcoder_metacmd_ID_set_mark = 28; +static i32 fcoder_metacmd_ID_cursor_mark_swap = 29; +static i32 fcoder_metacmd_ID_delete_range = 30; +static i32 fcoder_metacmd_ID_backspace_alpha_numeric_boundary = 31; +static i32 fcoder_metacmd_ID_delete_alpha_numeric_boundary = 32; +static i32 fcoder_metacmd_ID_snipe_backward_whitespace_or_token_boundary = 33; +static i32 fcoder_metacmd_ID_snipe_forward_whitespace_or_token_boundary = 34; +static i32 fcoder_metacmd_ID_center_view = 35; +static i32 fcoder_metacmd_ID_left_adjust_view = 36; +static i32 fcoder_metacmd_ID_click_set_cursor_and_mark = 37; +static i32 fcoder_metacmd_ID_click_set_cursor = 38; +static i32 fcoder_metacmd_ID_click_set_cursor_if_lbutton = 39; +static i32 fcoder_metacmd_ID_click_set_mark = 40; +static i32 fcoder_metacmd_ID_mouse_wheel_scroll = 41; +static i32 fcoder_metacmd_ID_move_up = 42; +static i32 fcoder_metacmd_ID_move_down = 43; +static i32 fcoder_metacmd_ID_move_up_10 = 44; +static i32 fcoder_metacmd_ID_move_down_10 = 45; +static i32 fcoder_metacmd_ID_move_down_textual = 46; +static i32 fcoder_metacmd_ID_page_up = 47; +static i32 fcoder_metacmd_ID_page_down = 48; +static i32 fcoder_metacmd_ID_move_up_to_blank_line = 49; +static i32 fcoder_metacmd_ID_move_down_to_blank_line = 50; +static i32 fcoder_metacmd_ID_move_up_to_blank_line_skip_whitespace = 51; +static i32 fcoder_metacmd_ID_move_down_to_blank_line_skip_whitespace = 52; +static i32 fcoder_metacmd_ID_move_up_to_blank_line_end = 53; +static i32 fcoder_metacmd_ID_move_down_to_blank_line_end = 54; +static i32 fcoder_metacmd_ID_move_left = 55; +static i32 fcoder_metacmd_ID_move_right = 56; +static i32 fcoder_metacmd_ID_move_right_whitespace_boundary = 57; +static i32 fcoder_metacmd_ID_move_left_whitespace_boundary = 58; +static i32 fcoder_metacmd_ID_move_right_token_boundary = 59; +static i32 fcoder_metacmd_ID_move_left_token_boundary = 60; +static i32 fcoder_metacmd_ID_move_right_whitespace_or_token_boundary = 61; +static i32 fcoder_metacmd_ID_move_left_whitespace_or_token_boundary = 62; +static i32 fcoder_metacmd_ID_move_right_alpha_numeric_boundary = 63; +static i32 fcoder_metacmd_ID_move_left_alpha_numeric_boundary = 64; +static i32 fcoder_metacmd_ID_move_right_alpha_numeric_or_camel_boundary = 65; +static i32 fcoder_metacmd_ID_move_left_alpha_numeric_or_camel_boundary = 66; +static i32 fcoder_metacmd_ID_select_all = 67; +static i32 fcoder_metacmd_ID_to_uppercase = 68; +static i32 fcoder_metacmd_ID_to_lowercase = 69; +static i32 fcoder_metacmd_ID_clean_all_lines = 70; +static i32 fcoder_metacmd_ID_basic_change_active_panel = 71; +static i32 fcoder_metacmd_ID_close_panel = 72; +static i32 fcoder_metacmd_ID_show_scrollbar = 73; +static i32 fcoder_metacmd_ID_hide_scrollbar = 74; +static i32 fcoder_metacmd_ID_show_filebar = 75; +static i32 fcoder_metacmd_ID_hide_filebar = 76; +static i32 fcoder_metacmd_ID_toggle_filebar = 77; +static i32 fcoder_metacmd_ID_toggle_fps_meter = 78; +static i32 fcoder_metacmd_ID_increase_face_size = 79; +static i32 fcoder_metacmd_ID_decrease_face_size = 80; +static i32 fcoder_metacmd_ID_mouse_wheel_change_face_size = 81; +static i32 fcoder_metacmd_ID_toggle_virtual_whitespace = 82; +static i32 fcoder_metacmd_ID_toggle_show_whitespace = 83; +static i32 fcoder_metacmd_ID_toggle_line_numbers = 84; +static i32 fcoder_metacmd_ID_exit_4coder = 85; +static i32 fcoder_metacmd_ID_goto_line = 86; +static i32 fcoder_metacmd_ID_search = 87; +static i32 fcoder_metacmd_ID_reverse_search = 88; +static i32 fcoder_metacmd_ID_search_identifier = 89; +static i32 fcoder_metacmd_ID_reverse_search_identifier = 90; +static i32 fcoder_metacmd_ID_replace_in_range = 91; +static i32 fcoder_metacmd_ID_replace_in_buffer = 92; +static i32 fcoder_metacmd_ID_replace_in_all_buffers = 93; +static i32 fcoder_metacmd_ID_query_replace = 94; +static i32 fcoder_metacmd_ID_query_replace_identifier = 95; +static i32 fcoder_metacmd_ID_query_replace_selection = 96; +static i32 fcoder_metacmd_ID_save_all_dirty_buffers = 97; +static i32 fcoder_metacmd_ID_delete_file_query = 98; +static i32 fcoder_metacmd_ID_save_to_query = 99; +static i32 fcoder_metacmd_ID_rename_file_query = 100; +static i32 fcoder_metacmd_ID_make_directory_query = 101; +static i32 fcoder_metacmd_ID_move_line_up = 102; +static i32 fcoder_metacmd_ID_move_line_down = 103; +static i32 fcoder_metacmd_ID_duplicate_line = 104; +static i32 fcoder_metacmd_ID_delete_line = 105; +static i32 fcoder_metacmd_ID_open_file_in_quotes = 106; +static i32 fcoder_metacmd_ID_open_matching_file_cpp = 107; +static i32 fcoder_metacmd_ID_view_buffer_other_panel = 108; +static i32 fcoder_metacmd_ID_swap_buffers_between_panels = 109; +static i32 fcoder_metacmd_ID_kill_buffer = 110; +static i32 fcoder_metacmd_ID_save = 111; +static i32 fcoder_metacmd_ID_reopen = 112; +static i32 fcoder_metacmd_ID_undo = 113; +static i32 fcoder_metacmd_ID_redo = 114; +static i32 fcoder_metacmd_ID_undo_all_buffers = 115; +static i32 fcoder_metacmd_ID_redo_all_buffers = 116; +static i32 fcoder_metacmd_ID_open_in_other = 117; +static i32 fcoder_metacmd_ID_default_file_externally_modified = 118; +static i32 fcoder_metacmd_ID_set_eol_mode_to_crlf = 119; +static i32 fcoder_metacmd_ID_set_eol_mode_to_lf = 120; +static i32 fcoder_metacmd_ID_set_eol_mode_to_binary = 121; +static i32 fcoder_metacmd_ID_set_eol_mode_from_contents = 122; +static i32 fcoder_metacmd_ID_interactive_switch_buffer = 123; +static i32 fcoder_metacmd_ID_interactive_kill_buffer = 124; +static i32 fcoder_metacmd_ID_interactive_open_or_new = 125; +static i32 fcoder_metacmd_ID_interactive_new = 126; +static i32 fcoder_metacmd_ID_interactive_open = 127; +static i32 fcoder_metacmd_ID_command_lister = 128; +static i32 fcoder_metacmd_ID_auto_indent_whole_file = 129; +static i32 fcoder_metacmd_ID_auto_indent_line_at_cursor = 130; +static i32 fcoder_metacmd_ID_auto_indent_range = 131; +static i32 fcoder_metacmd_ID_write_text_and_auto_indent = 132; +static i32 fcoder_metacmd_ID_list_all_locations = 133; +static i32 fcoder_metacmd_ID_list_all_substring_locations = 134; +static i32 fcoder_metacmd_ID_list_all_locations_case_insensitive = 135; +static i32 fcoder_metacmd_ID_list_all_substring_locations_case_insensitive = 136; +static i32 fcoder_metacmd_ID_list_all_locations_of_identifier = 137; +static i32 fcoder_metacmd_ID_list_all_locations_of_identifier_case_insensitive = 138; +static i32 fcoder_metacmd_ID_list_all_locations_of_selection = 139; +static i32 fcoder_metacmd_ID_list_all_locations_of_selection_case_insensitive = 140; +static i32 fcoder_metacmd_ID_list_all_locations_of_type_definition = 141; +static i32 fcoder_metacmd_ID_list_all_locations_of_type_definition_of_identifier = 142; +static i32 fcoder_metacmd_ID_word_complete = 143; +static i32 fcoder_metacmd_ID_goto_jump_at_cursor = 144; +static i32 fcoder_metacmd_ID_goto_jump_at_cursor_same_panel = 145; +static i32 fcoder_metacmd_ID_goto_next_jump = 146; +static i32 fcoder_metacmd_ID_goto_prev_jump = 147; +static i32 fcoder_metacmd_ID_goto_next_jump_no_skips = 148; +static i32 fcoder_metacmd_ID_goto_prev_jump_no_skips = 149; +static i32 fcoder_metacmd_ID_goto_first_jump = 150; +static i32 fcoder_metacmd_ID_goto_first_jump_same_panel_sticky = 151; +static i32 fcoder_metacmd_ID_if_read_only_goto_position = 152; +static i32 fcoder_metacmd_ID_if_read_only_goto_position_same_panel = 153; +static i32 fcoder_metacmd_ID_view_jump_list_with_lister = 154; +static i32 fcoder_metacmd_ID_show_the_log_graph = 155; +static i32 fcoder_metacmd_ID_copy = 156; +static i32 fcoder_metacmd_ID_cut = 157; +static i32 fcoder_metacmd_ID_paste = 158; +static i32 fcoder_metacmd_ID_paste_next = 159; +static i32 fcoder_metacmd_ID_paste_and_indent = 160; +static i32 fcoder_metacmd_ID_paste_next_and_indent = 161; +static i32 fcoder_metacmd_ID_execute_previous_cli = 162; +static i32 fcoder_metacmd_ID_execute_any_cli = 163; +static i32 fcoder_metacmd_ID_build_search = 164; +static i32 fcoder_metacmd_ID_build_in_build_panel = 165; +static i32 fcoder_metacmd_ID_close_build_panel = 166; +static i32 fcoder_metacmd_ID_change_to_build_panel = 167; +static i32 fcoder_metacmd_ID_close_all_code = 168; +static i32 fcoder_metacmd_ID_open_all_code = 169; +static i32 fcoder_metacmd_ID_open_all_code_recursive = 170; +static i32 fcoder_metacmd_ID_load_project = 171; +static i32 fcoder_metacmd_ID_project_fkey_command = 172; +static i32 fcoder_metacmd_ID_project_go_to_root_directory = 173; +static i32 fcoder_metacmd_ID_setup_new_project = 174; +static i32 fcoder_metacmd_ID_setup_build_bat = 175; +static i32 fcoder_metacmd_ID_setup_build_sh = 176; +static i32 fcoder_metacmd_ID_setup_build_bat_and_sh = 177; +static i32 fcoder_metacmd_ID_project_command_lister = 178; +static i32 fcoder_metacmd_ID_list_all_functions_current_buffer = 179; +static i32 fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 180; +static i32 fcoder_metacmd_ID_list_all_functions_all_buffers = 181; +static i32 fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 182; +static i32 fcoder_metacmd_ID_select_surrounding_scope = 183; +static i32 fcoder_metacmd_ID_select_next_scope_absolute = 184; +static i32 fcoder_metacmd_ID_select_next_scope_after_current = 185; +static i32 fcoder_metacmd_ID_select_prev_scope_absolute = 186; +static i32 fcoder_metacmd_ID_place_in_scope = 187; +static i32 fcoder_metacmd_ID_delete_current_scope = 188; +static i32 fcoder_metacmd_ID_open_long_braces = 189; +static i32 fcoder_metacmd_ID_open_long_braces_semicolon = 190; +static i32 fcoder_metacmd_ID_open_long_braces_break = 191; +static i32 fcoder_metacmd_ID_if0_off = 192; +static i32 fcoder_metacmd_ID_write_todo = 193; +static i32 fcoder_metacmd_ID_write_hack = 194; +static i32 fcoder_metacmd_ID_write_note = 195; +static i32 fcoder_metacmd_ID_write_block = 196; +static i32 fcoder_metacmd_ID_write_zero_struct = 197; +static i32 fcoder_metacmd_ID_comment_line = 198; +static i32 fcoder_metacmd_ID_uncomment_line = 199; +static i32 fcoder_metacmd_ID_comment_line_toggle = 200; +static i32 fcoder_metacmd_ID_snippet_lister = 201; +static i32 fcoder_metacmd_ID_miblo_increment_basic = 202; +static i32 fcoder_metacmd_ID_miblo_decrement_basic = 203; +static i32 fcoder_metacmd_ID_miblo_increment_time_stamp = 204; +static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp = 205; +static i32 fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 206; +static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 207; +static i32 fcoder_metacmd_ID_profile_inspect = 208; +static i32 fcoder_metacmd_ID_default_startup = 209; +static i32 fcoder_metacmd_ID_default_try_exit = 210; #endif