Progress towards profile inspector

master
Allen Webster 2019-10-18 13:54:45 -07:00
parent 0fd91c8aaf
commit a6e582add0
9 changed files with 747 additions and 213 deletions

View File

@ -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

View File

@ -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"

View File

@ -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)));
}

View File

@ -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){

143
custom/4coder_profile.cpp Normal file
View File

@ -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

60
custom/4coder_profile.h Normal file
View File

@ -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

View File

@ -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

View File

@ -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);
}
}

View File

@ -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