diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp
index 9b668788..0cb727be 100644
--- a/4ed_api_implementation.cpp
+++ b/4ed_api_implementation.cpp
@@ -2007,8 +2007,8 @@ managed_scope_get_attachment(Application_Links *app, Managed_Scope scope, Manage
         }
         else{
 #define M \
-"ERROR: scope attachment already exists with a size smaller than the requested size; no attachment pointer can be returned."
-            print_message(app, string_u8_litexpr(M));
+            "ERROR: scope attachment already exists with a size smaller than the requested size; no attachment pointer can be returned."
+                print_message(app, string_u8_litexpr(M));
 #undef M
         }
     }
diff --git a/4ed_app_models.h b/4ed_app_models.h
index 670b0c26..71ea3254 100644
--- a/4ed_app_models.h
+++ b/4ed_app_models.h
@@ -1,196 +1,196 @@
-/*
- * Mr. 4th Dimention - Allen Webster
- *
- * 06.05.2016 (dd.mm.yyyy)
- *
- * Global app level settings definition
- *
- */
-
-// TOP
-
-#if !defined(FRED_APP_MODELS_H)
-#define FRED_APP_MODELS_H
-
-struct App_Settings{
-    char *init_files[8];
-    i32 init_files_count;
-    i32 init_files_max;
-    
-    char **custom_flags;
-    i32 custom_flags_count;
-    
-    i32 initial_line;
-    b32 lctrl_lalt_is_altgr;
-    
-    i32 font_size;
-    b32 use_hinting;
-};
-
-enum App_State{
-    APP_STATE_EDIT,
-    APP_STATE_RESIZING,
-    // never below this
-    APP_STATE_COUNT
-};
-
-struct Model_View_Command_Function{
-    Model_View_Command_Function *next;
-    Custom_Command_Function *custom_func;
-    View_ID view_id;
-};
-
-struct Model_Input_Event_Node{
-    Model_Input_Event_Node *next;
-    Input_Event event;
-};
-
-struct Models{
-    Arena arena_;
-    Arena *arena;
-    Heap heap;
-    
-    App_Settings settings;
-    App_State state;
-    
-    Face_ID global_face_id;
-    
-    Coroutine_Group coroutines;
-    
-    Child_Process_Container child_processes;
-    Custom_API config_api;
-    
-    Tick_Function *tick;
-    Render_Caller_Function *render_caller;
-    Delta_Rule_Function *delta_rule;
-    u64 delta_rule_memory_size;
-    
-    Hook_Function *buffer_viewer_update;
-    Custom_Command_Function *view_event_handler;
-    Buffer_Name_Resolver_Function *buffer_name_resolver;
-    Buffer_Hook_Function *begin_buffer;
-    Buffer_Hook_Function *end_buffer;
-    Buffer_Hook_Function *new_file;
-    Buffer_Hook_Function *save_file;
-    Buffer_Edit_Range_Function *buffer_edit_range;
-    Buffer_Region_Function *buffer_region;
-    Layout_Function *layout_func;
-    
-    Color_Table color_table_;
-    
-    Model_View_Command_Function *free_view_cmd_funcs;
-    Model_View_Command_Function *first_view_cmd_func;
-    Model_View_Command_Function *last_view_cmd_func;
-    
-    Arena *virtual_event_arena;
-    Model_Input_Event_Node *free_virtual_event;
-    Model_Input_Event_Node *first_virtual_event;
-    Model_Input_Event_Node *last_virtual_event;
-    
-    Layout layout;
-    Working_Set working_set;
-    Live_Views view_set;
-    Global_History global_history;
-    Text_Layout_Container text_layouts;
-    Font_Set font_set;
-    
-    Managed_ID_Set managed_id_set;
-    Dynamic_Workspace dynamic_workspace;
-    Lifetime_Allocator lifetime_allocator;
-    
-    Editing_File *message_buffer;
-    Editing_File *scratch_buffer;
-    Editing_File *log_buffer;
-    Editing_File *keyboard_buffer;
-    
-    Hot_Directory hot_directory;
-    
-    b8 keep_playing;
-    b8 hard_exit;
-    
-    b32 has_new_title;
-    char *title_space;
-    i32 title_capacity;
-    
-    Panel *resizing_intermediate_panel;
-    
-    Plat_Handle period_wakeup_timer;
-    i32 frame_counter;
-    u32 next_animate_delay;
-    b32 animate_next_frame;
-    
-    Profile_Global_List profile_list;
-    
-    // Last frame state
-    Vec2_i32 prev_p;
-    Panel *prev_mouse_panel;
-    b32 animated_last_frame;
-    u64 last_render_usecond_stamp;
-    
-    // Event Context
-    Application_Step_Input *input;
-    i64 current_input_sequence_number;
-    User_Input current_input;
-    b8 current_input_unhandled;
-    
-    b8 in_render_mode;
-    Render_Target *target;
-};
-
-////////////////////////////////
-
-typedef i32 Dynamic_Workspace_Type;
-enum{
-    DynamicWorkspace_Global = 0,
-    DynamicWorkspace_Unassociated = 1,
-    DynamicWorkspace_Buffer = 2,
-    DynamicWorkspace_View = 3,
-    DynamicWorkspace_Intersected = 4,
-};
-
-enum Input_Types{
-    Input_AnyKey,
-    Input_Esc,
-    Input_MouseMove,
-    Input_MouseLeftButton,
-    Input_MouseRightButton,
-    Input_MouseWheel,
-    Input_Count
-};
-
-struct Consumption_Record{
-    b32 consumed;
-    char consumer[32];
-};
-
-struct File_Init{
-    String_Const_u8 name;
-    Editing_File **ptr;
-    b32 read_only;
-};
-
-enum Command_Line_Action{
-    CLAct_Nothing,
-    CLAct_Ignore,
-    CLAct_UserFile,
-    CLAct_CustomDLL,
-    CLAct_InitialFilePosition,
-    CLAct_WindowSize,
-    CLAct_WindowMaximize,
-    CLAct_WindowPosition,
-    CLAct_WindowFullscreen,
-    CLAct_FontSize,
-    CLAct_FontUseHinting,
-    //
-    CLAct_COUNT,
-};
-
-enum Command_Line_Mode{
-    CLMode_App,
-    CLMode_Custom
-};
-
-#endif
-
-// BOTTOM
-
+/*
+ * Mr. 4th Dimention - Allen Webster
+ *
+ * 06.05.2016 (dd.mm.yyyy)
+ *
+ * Global app level settings definition
+ *
+ */
+
+// TOP
+
+#if !defined(FRED_APP_MODELS_H)
+#define FRED_APP_MODELS_H
+
+struct App_Settings{
+    char *init_files[8];
+    i32 init_files_count;
+    i32 init_files_max;
+    
+    char **custom_flags;
+    i32 custom_flags_count;
+    
+    i32 initial_line;
+    b32 lctrl_lalt_is_altgr;
+    
+    i32 font_size;
+    b32 use_hinting;
+};
+
+enum App_State{
+    APP_STATE_EDIT,
+    APP_STATE_RESIZING,
+    // never below this
+    APP_STATE_COUNT
+};
+
+struct Model_View_Command_Function{
+    Model_View_Command_Function *next;
+    Custom_Command_Function *custom_func;
+    View_ID view_id;
+};
+
+struct Model_Input_Event_Node{
+    Model_Input_Event_Node *next;
+    Input_Event event;
+};
+
+struct Models{
+    Arena arena_;
+    Arena *arena;
+    Heap heap;
+    
+    App_Settings settings;
+    App_State state;
+    
+    Face_ID global_face_id;
+    
+    Coroutine_Group coroutines;
+    
+    Child_Process_Container child_processes;
+    Custom_API config_api;
+    
+    Tick_Function *tick;
+    Render_Caller_Function *render_caller;
+    Delta_Rule_Function *delta_rule;
+    u64 delta_rule_memory_size;
+    
+    Hook_Function *buffer_viewer_update;
+    Custom_Command_Function *view_event_handler;
+    Buffer_Name_Resolver_Function *buffer_name_resolver;
+    Buffer_Hook_Function *begin_buffer;
+    Buffer_Hook_Function *end_buffer;
+    Buffer_Hook_Function *new_file;
+    Buffer_Hook_Function *save_file;
+    Buffer_Edit_Range_Function *buffer_edit_range;
+    Buffer_Region_Function *buffer_region;
+    Layout_Function *layout_func;
+    
+    Color_Table color_table_;
+    
+    Model_View_Command_Function *free_view_cmd_funcs;
+    Model_View_Command_Function *first_view_cmd_func;
+    Model_View_Command_Function *last_view_cmd_func;
+    
+    Arena *virtual_event_arena;
+    Model_Input_Event_Node *free_virtual_event;
+    Model_Input_Event_Node *first_virtual_event;
+    Model_Input_Event_Node *last_virtual_event;
+    
+    Layout layout;
+    Working_Set working_set;
+    Live_Views view_set;
+    Global_History global_history;
+    Text_Layout_Container text_layouts;
+    Font_Set font_set;
+    
+    Managed_ID_Set managed_id_set;
+    Dynamic_Workspace dynamic_workspace;
+    Lifetime_Allocator lifetime_allocator;
+    
+    Editing_File *message_buffer;
+    Editing_File *scratch_buffer;
+    Editing_File *log_buffer;
+    Editing_File *keyboard_buffer;
+    
+    Hot_Directory hot_directory;
+    
+    b8 keep_playing;
+    b8 hard_exit;
+    
+    b32 has_new_title;
+    char *title_space;
+    i32 title_capacity;
+    
+    Panel *resizing_intermediate_panel;
+    
+    Plat_Handle period_wakeup_timer;
+    i32 frame_counter;
+    u32 next_animate_delay;
+    b32 animate_next_frame;
+    
+    Profile_Global_List profile_list;
+    
+    // Last frame state
+    Vec2_i32 prev_p;
+    Panel *prev_mouse_panel;
+    b32 animated_last_frame;
+    u64 last_render_usecond_stamp;
+    
+    // Event Context
+    Application_Step_Input *input;
+    i64 current_input_sequence_number;
+    User_Input current_input;
+    b8 current_input_unhandled;
+    
+    b8 in_render_mode;
+    Render_Target *target;
+};
+
+////////////////////////////////
+
+typedef i32 Dynamic_Workspace_Type;
+enum{
+    DynamicWorkspace_Global = 0,
+    DynamicWorkspace_Unassociated = 1,
+    DynamicWorkspace_Buffer = 2,
+    DynamicWorkspace_View = 3,
+    DynamicWorkspace_Intersected = 4,
+};
+
+enum Input_Types{
+    Input_AnyKey,
+    Input_Esc,
+    Input_MouseMove,
+    Input_MouseLeftButton,
+    Input_MouseRightButton,
+    Input_MouseWheel,
+    Input_Count
+};
+
+struct Consumption_Record{
+    b32 consumed;
+    char consumer[32];
+};
+
+struct File_Init{
+    String_Const_u8 name;
+    Editing_File **ptr;
+    b32 read_only;
+};
+
+enum Command_Line_Action{
+    CLAct_Nothing,
+    CLAct_Ignore,
+    CLAct_UserFile,
+    CLAct_CustomDLL,
+    CLAct_InitialFilePosition,
+    CLAct_WindowSize,
+    CLAct_WindowMaximize,
+    CLAct_WindowPosition,
+    CLAct_WindowFullscreen,
+    CLAct_FontSize,
+    CLAct_FontUseHinting,
+    //
+    CLAct_COUNT,
+};
+
+enum Command_Line_Mode{
+    CLMode_App,
+    CLMode_Custom
+};
+
+#endif
+
+// BOTTOM
+
diff --git a/4ed_file.cpp b/4ed_file.cpp
index c3c18d64..260d587a 100644
--- a/4ed_file.cpp
+++ b/4ed_file.cpp
@@ -442,8 +442,8 @@ file_relative_xy_of_pos(Thread_Context *tctx, Models *models, Editing_File *file
 
 function Rect_f32
 file_padded_box_of_pos(Thread_Context *tctx, Models *models, Editing_File *file,
-                      Layout_Function *layout_func, f32 width, Face *face,
-                      i64 base_line, i64 pos){
+                       Layout_Function *layout_func, f32 width, Face *face,
+                       i64 base_line, i64 pos){
     i64 line_number = buffer_get_line_index(&file->state.buffer, pos) + 1;
     Layout_Item_List line = file_get_line_layout(tctx, models, file, layout_func, width, face, line_number);
     Rect_f32 result = layout_padded_box_of_pos(line, pos);
diff --git a/4ed_file_track_general.cpp b/4ed_file_track_general.cpp
deleted file mode 100644
index 3edbb7f9..00000000
--- a/4ed_file_track_general.cpp
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Mr. 4th Dimention - Allen Webster
- *
- * 20.08.2016
- *
- * File tracking shared.
- *
- */
-
-// TOP
-
-struct File_Index{
-    u32 id[4];
-};
-
-typedef u32 rptr32;
-
-#define to_ptr(b,p) ((void*)((char*)b + p))
-#define to_rptr32(b,p) ((rptr32)((char*)(p) - (char*)(b)))
-
-struct File_Track_Entry{
-    File_Index hash;
-    u32 opaque[4];
-};
-global_const File_Track_Entry null_file_track_entry = {};
-
-struct File_Track_Tables{
-    i32 size;
-    u32 tracked_count;
-    u32 max;
-    rptr32 file_table;
-};
-
-struct DLL_Node {
-    DLL_Node *next;
-    DLL_Node *prev;
-};
-
-internal File_Index
-zero_file_index(){
-    File_Index a = {};
-    return(a);
-}
-
-internal i32
-file_hash_is_zero(File_Index a){
-    return ((a.id[0] == 0) &&
-            (a.id[1] == 0) &&
-            (a.id[2] == 0) &&
-            (a.id[3] == 0));
-}
-
-internal i32
-file_hash_is_deleted(File_Index a){
-    return ((a.id[0] == 0xFFFFFFFF) &&
-            (a.id[1] == 0xFFFFFFFF) &&
-            (a.id[2] == 0xFFFFFFFF) &&
-            (a.id[3] == 0xFFFFFFFF));
-}
-
-internal i32
-file_index_eq(File_Index a, File_Index b){
-    return ((a.id[0] == b.id[0]) &&
-            (a.id[1] == b.id[1]) &&
-            (a.id[2] == b.id[2]) &&
-            (a.id[3] == b.id[3]));
-}
-
-internal void
-insert_node(DLL_Node *pos, DLL_Node *node){
-    node->prev = pos;
-    node->next = pos->next;
-    pos->next = node;
-    node->next->prev = node;
-}
-
-internal void
-remove_node(DLL_Node *node){
-    node->next->prev = node->prev;
-    node->prev->next = node->next;
-}
-
-internal void
-init_sentinel_node(DLL_Node *node){
-    node->next = node;
-    node->prev = node;
-}
-
-internal DLL_Node*
-allocate_node(DLL_Node *sentinel){
-    DLL_Node *result = 0;
-    if (sentinel->next != sentinel){
-        result = sentinel->next;
-        remove_node(result);
-    }
-    return(result);
-}
-
-#define FILE_ENTRY_COST (sizeof(File_Track_Entry))
-
-
-internal i32
-tracking_system_has_space(File_Track_Tables *tables, i32 new_count){
-    u32 count = tables->tracked_count;
-    u32 max = tables->max;
-    i32 result = ((count + new_count)*8 < max*7);
-    return(result);
-}
-
-internal i32
-entry_is_available(File_Track_Entry *entry){
-    i32 result = 0;
-    if (entry){
-        result =
-            file_hash_is_zero(entry->hash) ||
-            file_hash_is_deleted(entry->hash);
-    }
-    return (result);
-}
-
-internal File_Track_Entry*
-tracking_system_lookup_entry(File_Track_Tables *tables, File_Index key){
-    u32 hash = key.id[0];
-    u32 max = tables->max;
-    u32 index = (hash) % max;
-    u32 start = index;
-    
-    File_Track_Entry *entries = (File_Track_Entry*)to_ptr(tables, tables->file_table);
-    
-    File_Track_Entry* result = 0;
-    for (;;){
-        File_Track_Entry *entry = entries + index;
-        
-        if (file_index_eq(entry->hash, key)){
-            result = entry;
-            break;
-        }
-        else if (file_hash_is_zero(entry->hash)){
-            if (result == 0){
-                result = entry;
-            }
-            break;
-        }
-        else if (file_hash_is_deleted(entry->hash)){
-            if (result == 0){
-                result = entry;
-            }
-        }
-        
-        ++index;
-        if (index == max) index = 0;
-        if (index == start) break;
-    }
-    
-    return(result);
-}
-
-internal File_Track_Entry*
-get_file_entry(File_Track_Tables *tables, File_Index index){
-    File_Track_Entry *entry = 0;
-    
-    File_Track_Entry *result = tracking_system_lookup_entry(tables, index);
-    if (result && file_index_eq(index, result->hash)){
-        entry = result;
-    }
-    
-    return(entry);
-}
-
-internal void
-internal_free_slot(File_Track_Tables *tables, File_Track_Entry *entry){
-    Assert(!entry_is_available(entry));
-    
-    *entry = null_file_track_entry;
-    entry->hash.id[0] = 0xFFFFFFFF;
-    entry->hash.id[1] = 0xFFFFFFFF;
-    entry->hash.id[2] = 0xFFFFFFFF;
-    entry->hash.id[3] = 0xFFFFFFFF;
-    
-    --tables->tracked_count;
-}
-
-internal i32
-enough_memory_to_init_table(i32 table_memory_size){
-    i32 result = (sizeof(File_Track_Tables) + FILE_ENTRY_COST*8 <= table_memory_size);
-    return(result);
-}
-
-internal void
-init_table_memory(File_Track_Tables *tables, i32 table_memory_size){
-    tables->size = table_memory_size;
-    tables->tracked_count = 0;
-    
-    i32 max_number_of_entries = (table_memory_size - sizeof(*tables)) / FILE_ENTRY_COST;
-    
-    tables->file_table = sizeof(*tables);
-    tables->max = max_number_of_entries;
-}
-
-internal File_Track_Result
-move_table_memory(File_Track_Tables *original_tables,
-                  void *mem, i32 size){
-    File_Track_Result result = FileTrack_Good;
-    
-    if (original_tables->size < size){
-        File_Track_Tables *tables = (File_Track_Tables*)mem;
-        
-        // NOTE(allen): Initialize main data tables
-        {
-            tables->size = size;
-            
-            i32 likely_entry_size = FILE_ENTRY_COST;
-            i32 max_number_of_entries = (size - sizeof(*tables)) / likely_entry_size;
-            
-            tables->file_table = sizeof(*tables);
-            tables->max = max_number_of_entries;
-        }
-        
-        if (tables->max > original_tables->max){
-            u32 original_max = original_tables->max;
-            
-            // NOTE(allen): Rehash the tracking table
-            {
-                File_Track_Entry *entries = (File_Track_Entry*)
-                    to_ptr(original_tables, original_tables->file_table);
-                
-                for (u32 index = 0; index < original_max; ++index){
-                    File_Track_Entry *entry = entries + index;
-                    if (!entry_is_available(entry)){
-                        File_Index hash = entry->hash;
-                        File_Track_Entry *lookup =
-                            tracking_system_lookup_entry(tables, hash);
-                        
-                        Assert(entry_is_available(lookup));
-                        *lookup = *entry;
-                    }
-                }
-                
-                tables->tracked_count = original_tables->tracked_count;
-            }
-        }
-        else{
-            result = FileTrack_MemoryTooSmall;
-        }
-    }
-    else{
-        result = FileTrack_MemoryTooSmall;
-    }
-    
-    return(result);
-}
-
-// BOTTOM
-
diff --git a/custom/4coder_base_commands.cpp b/custom/4coder_base_commands.cpp
index 6b204cb2..bf29d099 100644
--- a/custom/4coder_base_commands.cpp
+++ b/custom/4coder_base_commands.cpp
@@ -595,26 +595,55 @@ CUSTOM_DOC("Removes trailing whitespace from all lines in the current buffer.")
     Batch_Edit *batch_first = 0;
     Batch_Edit *batch_last = 0;
     
-    String_Const_u8 text = push_whole_buffer(app, scratch, buffer);
-    
-    u64 whitespace_start = 0;
-    for (u64 i = 0; i < text.size; i += 1){
-        u8 v = string_get_character(text, i);
-        if (v == '\n' || i + 1 == text.size){
-            if (whitespace_start < i){
+    i64 line_count = buffer_get_line_count(app, buffer);
+    for (i64 line_number = 1; line_number <= line_count; line_number += 1){
+        i64 line_start = get_line_side_pos(app, buffer, line_number, Side_Min);
+        i64 line_end = get_line_side_pos(app, buffer, line_number, Side_Max);
+        u8 prev = buffer_get_char(app, buffer, line_end - 1);
+        b32 has_cr_character = false;
+        b32 has_tail_whitespace = false;
+        if (prev == '\r'){
+            has_cr_character = true;
+            if (line_end - 2 >= line_start){
+                prev = buffer_get_char(app, buffer, line_end - 2);
+                has_tail_whitespace = character_is_whitespace(prev);
+            }
+        }
+        else{
+            has_tail_whitespace = character_is_whitespace(prev);
+        }
+        if (has_tail_whitespace){
+            String_Const_u8 line = push_buffer_range(app, scratch, buffer,
+                                                     Ii64(line_start, line_end));
+            if (line.size > 0){
+                i64 end_offset = line.size;
+                i64 i = line.size - 1;
+                if (has_cr_character){
+                    end_offset -= 1;
+                    i -= 1;
+                }
+                i64 start_offset = 0;
+                for (; i >= 0; i -= 1){
+                    if (!character_is_whitespace(line.str[i])){
+                        start_offset = i + 1;
+                        break;
+                    }
+                }
+                
+                i64 start = start_offset + line_start;
+                i64 end   = end_offset   + line_start;
+                
                 Batch_Edit *batch = push_array(scratch, Batch_Edit, 1);
                 sll_queue_push(batch_first, batch_last, batch);
                 batch->edit.text = SCu8();
-                batch->edit.range = Ii64(whitespace_start, i);
+                batch->edit.range = Ii64(start, end);
             }
-            whitespace_start = i + 1;
-        }
-        else if (!character_is_whitespace(v)){
-            whitespace_start = i + 1;
         }
     }
     
-    buffer_batch_edit(app, buffer, batch_first);
+    if (batch_first != 0){
+        buffer_batch_edit(app, buffer, batch_first);
+    }
 }
 
 ////////////////////////////////
diff --git a/custom/4coder_code_index.cpp b/custom/4coder_code_index.cpp
index 6d4e413a..bf8f208e 100644
--- a/custom/4coder_code_index.cpp
+++ b/custom/4coder_code_index.cpp
@@ -937,7 +937,11 @@ layout_index__inner(Application_Links *app, Arena *arena, Buffer_ID buffer, Rang
                     lr_tb_advance_x_without_item(&pos_vars, shift);
                     goto consuming_non_whitespace;
                 }
-                if (*ptr == '\n'){
+                if (*ptr == '\r'){
+                    i64 index = layout_index_from_ptr(ptr, text.str, range.first);
+                    newline_layout_consume_CR(&newline_vars, index);
+                }
+                else if (*ptr == '\n'){
                     pending_wrap_ptr = ptr;
                     i64 index = layout_index_from_ptr(ptr, text.str, range.first);
                     f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
@@ -1180,1181 +1184,3 @@ CUSTOM_DOC("Toggles the current buffer's virtual whitespace status.")
 }
 
 // BOTTOM
-
-#if 0
-=======
-/*
-4coder_code_index.cpp - Generic code indexing system for layout, definition jumps, etc.
-*/
-
-// TOP
-
-global Code_Index global_code_index = {};
-
-function void
-code_index_init(void){
-    global_code_index.mutex = system_mutex_make();
-    global_code_index.node_arena = make_arena_system(KB(4));
-    global_code_index.buffer_to_index_file = make_table_u64_u64(global_code_index.node_arena.base_allocator, 500);
-}
-
-function Code_Index_File_Storage*
-code_index__alloc_storage(void){
-    Code_Index_File_Storage *result = global_code_index.free_storage;
-    if (result == 0){
-        result = push_array_zero(&global_code_index.node_arena, Code_Index_File_Storage, 1);
-    }
-    else{
-        sll_stack_pop(global_code_index.free_storage);
-    }
-    zdll_push_back(global_code_index.storage_first, global_code_index.storage_last, result);
-    global_code_index.storage_count += 1;
-    return(result);
-}
-
-function void
-code_index__free_storage(Code_Index_File_Storage *storage){
-    zdll_remove(global_code_index.storage_first, global_code_index.storage_last, storage);
-    global_code_index.storage_count -= 1;
-    sll_stack_push(global_code_index.free_storage, storage);
-}
-
-function void
-code_index_push_nest(Code_Index_Nest_List *list, Code_Index_Nest *nest){
-    sll_queue_push(list->first, list->last, nest);
-    list->count += 1;
-}
-
-function Code_Index_Nest_Ptr_Array
-code_index_nest_ptr_array_from_list(Arena *arena, Code_Index_Nest_List *list){
-    Code_Index_Nest_Ptr_Array array = {};
-    array.ptrs = push_array_zero(arena, Code_Index_Nest*, list->count);
-    array.count = list->count;
-    i32 counter = 0;
-    for (Code_Index_Nest *node = list->first;
-         node != 0;
-         node = node->next){
-        array.ptrs[counter] = node;
-        counter += 1;
-    }
-    return(array);
-}
-
-function Code_Index_Note_Ptr_Array
-code_index_note_ptr_array_from_list(Arena *arena, Code_Index_Note_List *list){
-    Code_Index_Note_Ptr_Array array = {};
-    array.ptrs = push_array_zero(arena, Code_Index_Note*, list->count);
-    array.count = list->count;
-    i32 counter = 0;
-    for (Code_Index_Note *node = list->first;
-         node != 0;
-         node = node->next){
-        array.ptrs[counter] = node;
-        counter += 1;
-    }
-    return(array);
-}
-
-function void
-code_index_lock(void){
-    system_mutex_acquire(global_code_index.mutex);
-}
-
-function void
-code_index_unlock(void){
-    system_mutex_release(global_code_index.mutex);
-}
-
-function void
-code_index_set_file(Buffer_ID buffer, Arena arena, Code_Index_File *index){
-    Code_Index_File_Storage *storage = 0;
-    Table_Lookup lookup = table_lookup(&global_code_index.buffer_to_index_file, buffer);
-    if (lookup.found_match){
-        u64 val = 0;
-        table_read(&global_code_index.buffer_to_index_file, lookup, &val);
-        storage = (Code_Index_File_Storage*)IntAsPtr(val);
-        linalloc_clear(&storage->arena);
-    }
-    else{
-        storage = code_index__alloc_storage();
-        table_insert(&global_code_index.buffer_to_index_file, buffer, (u64)PtrAsInt(storage));
-    }
-    storage->arena = arena;
-    storage->file = index;
-}
-
-function void
-code_index_erase_file(Buffer_ID buffer){
-    Table_Lookup lookup = table_lookup(&global_code_index.buffer_to_index_file, buffer);
-    if (lookup.found_match){
-        u64 val = 0;
-        table_read(&global_code_index.buffer_to_index_file, lookup, &val);
-        Code_Index_File_Storage *storage = (Code_Index_File_Storage*)IntAsPtr(val);
-        linalloc_clear(&storage->arena);
-        table_erase(&global_code_index.buffer_to_index_file, lookup);
-        code_index__free_storage(storage);
-    }
-}
-
-function Code_Index_File*
-code_index_get_file(Buffer_ID buffer){
-    Code_Index_File *result = 0;
-    Table_Lookup lookup = table_lookup(&global_code_index.buffer_to_index_file, buffer);
-    if (lookup.found_match){
-        u64 val = 0;
-        table_read(&global_code_index.buffer_to_index_file, lookup, &val);
-        Code_Index_File_Storage *storage = (Code_Index_File_Storage*)IntAsPtr(val);
-        result = storage->file;
-    }
-    return(result);
-}
-
-function Code_Index_Nest*
-code_index_get_nest(Code_Index_Nest_Ptr_Array *array, i64 pos){
-    Code_Index_Nest *result = 0;
-    i32 count = array->count;
-    Code_Index_Nest **nest_ptrs = array->ptrs;
-    for (i32 i = 0; i < count; i += 1){
-        Code_Index_Nest *nest = nest_ptrs[i];
-        if (nest->open.max <= pos && pos <= nest->close.min){
-            Code_Index_Nest *sub_nest =
-                code_index_get_nest(&nest->nest_array, pos);
-            if (sub_nest != 0){
-                result = sub_nest;
-            }
-            else{
-                result = nest;
-            }
-            break;
-        }
-    }
-    return(result);
-}
-
-function Code_Index_Nest*
-code_index_get_nest(Code_Index_Nest *nest, i64 pos){
-    return(code_index_get_nest(&nest->nest_array, pos));
-}
-
-function Code_Index_Nest*
-code_index_get_nest(Code_Index_File *file, i64 pos){
-    return(code_index_get_nest(&file->nest_array, pos));
-}
-
-function void
-index_shift(i64 *ptr, Range_i64 old_range, u64 new_size){
-    i64 i = *ptr;
-    if (old_range.min <= i && i < old_range.max){
-        *ptr = old_range.first;
-    }
-    else if (old_range.max <= i){
-        *ptr = i + new_size - (old_range.max - old_range.min);
-    }
-}
-
-function void
-code_index_shift(Code_Index_Nest_Ptr_Array *array,
-                 Range_i64 old_range, u64 new_size){
-    i32 count = array->count;
-    Code_Index_Nest **nest_ptr = array->ptrs;
-    for (i32 i = 0; i < count; i += 1, nest_ptr += 1){
-        Code_Index_Nest *nest = *nest_ptr;
-        index_shift(&nest->open.min, old_range, new_size);
-        index_shift(&nest->open.max, old_range, new_size);
-        if (nest->is_closed){
-            index_shift(&nest->close.min, old_range, new_size);
-            index_shift(&nest->close.max, old_range, new_size);
-        }
-        code_index_shift(&nest->nest_array, old_range, new_size);
-    }
-}
-
-function void
-code_index_shift(Code_Index_File *file, Range_i64 old_range, u64 new_size){
-    code_index_shift(&file->nest_array, old_range, new_size);
-}
-
-////////////////////////////////
-
-function void
-generic_parse_inc(Generic_Parse_State *state){
-    if (!token_it_inc_all(&state->it)){
-        state->finished = true;
-    }
-}
-
-function void
-generic_parse_skip_soft_tokens(Code_Index_File *index, Generic_Parse_State *state){
-    Token *token = token_it_read(&state->it);
-    for (;token != 0 && !state->finished;){
-        if (state->in_preprocessor && !HasFlag(token->flags, TokenBaseFlag_PreprocessorBody)){
-            break;
-        }
-        if (token->kind == TokenBaseKind_Comment){
-            state->handle_comment(state->app, state->arena, index, token, state->contents);
-        }
-        else if (token->kind == TokenBaseKind_Whitespace){
-            Range_i64 range = Ii64(token);
-            u8 *ptr = state->contents.str + range.one_past_last - 1;
-            for (i64 i = range.one_past_last - 1;
-                 i >= range.first;
-                 i -= 1, ptr -= 1){
-                if (*ptr == '\n'){
-                    state->prev_line_start = ptr + 1;
-                    break;
-                }
-            }
-        }
-        else{
-            break;
-        }
-        generic_parse_inc(state);
-        token = token_it_read(&state->it);
-    }
-}
-
-function void
-generic_parse_init(Application_Links *app, Arena *arena, String_Const_u8 contents, Token_Array *tokens, Generic_Parse_Comment_Function *handle_comment, Generic_Parse_State *state){
-    state->app = app;
-    state->arena = arena;
-    state->contents = contents;
-    state->it = token_iterator(0, tokens);
-    state->handle_comment = handle_comment;
-    state->prev_line_start = contents.str;
-}
-
-////////////////////////////////
-
-#if 0
-// NOTE(allen): grammar syntax
-(X) = X
-X Y = X and then Y
-X? = zero or one X
-$X = check for X but dont consume // NOTE(yuval): Removed apostrophe as it was causing a warning when compiling with gcc
-[X] = zero or more Xs
-X | Y = either X or Y
-* = anything that does not match previous options in a X | Y | ... chain
-* - X = anything that does not match X or previous options in a Y | Z | ... chain
-<X> = a token of type X
-"X" = literally the string "X"
-X{Y} = X with flag Y
-
-// NOTE(allen): grammar of code index parse
-file: [preprocessor | scope | parens | function | type | * - <end-of-file>] <end-of-file>
-preprocessor: <preprocessor> [scope | parens | stmnt]{pp-body}
-scope: <scope-open> [preprocessor | scope | parens | * - <scope-close>] <scope-close>
-paren: <paren-open> [preprocessor | scope | parens | * - <paren-close>] <paren-close>
-stmnt-close-pattern: <scope-open> | <scope-close> | <paren-open> | <paren-close> | <stmnt-close> | <preprocessor>
-stmnt: [type | * - stmnt-close-pattern] stmnt-close-pattern
-type: struct | union | enum | typedef
-struct: "struct" <identifier> $(";" | "{")
-union: "union" <identifier> $(";" | "{")
-enum: "enum" <identifier> $(";" | "{")
-typedef: "typedef" [* - (<identifier> (";" | "("))] <identifier> $(";" | "(")
-function: <identifier> >"(" [* - ("(" | ")" | "{" | "}" | ";")] ")" ("{" | ";")
-
-#endif
-
-////////////////////////////////
-
-function Code_Index_Note*
-index_new_note(Code_Index_File *index, Generic_Parse_State *state, Range_i64 range, Code_Index_Note_Kind kind, Code_Index_Nest *parent){
-    Code_Index_Note *result = push_array(state->arena, Code_Index_Note, 1);
-    sll_queue_push(index->note_list.first, index->note_list.last, result);
-    index->note_list.count += 1;
-    result->note_kind = kind;
-    result->pos = range;
-    result->text = push_string_copy(state->arena, string_substring(state->contents, range));
-    result->file = index;
-    result->parent = parent;
-    return(result);
-}
-
-function void
-cpp_parse_type_structure(Code_Index_File *index, Generic_Parse_State *state, Code_Index_Nest *parent){
-    generic_parse_inc(state);
-    generic_parse_skip_soft_tokens(index, state);
-    if (state->finished){
-        return;
-    }
-    Token *token = token_it_read(&state->it);
-    if (token != 0 && token->kind == TokenBaseKind_Identifier){
-        generic_parse_inc(state);
-        generic_parse_skip_soft_tokens(index, state);
-        Token *peek = token_it_read(&state->it);
-        if (peek != 0 && peek->kind == TokenBaseKind_StatementClose ||
-            peek->kind == TokenBaseKind_ScopeOpen){
-            index_new_note(index, state, Ii64(token), CodeIndexNote_Type, parent);
-        }
-    }
-}
-
-function void
-cpp_parse_type_def(Code_Index_File *index, Generic_Parse_State *state, Code_Index_Nest *parent){
-    generic_parse_inc(state);
-    generic_parse_skip_soft_tokens(index, state);
-    for (;;){
-        b32 did_advance = false;
-        Token *token = token_it_read(&state->it);
-        if (token == 0 || state->finished){
-            break;
-        }
-        if (token->kind == TokenBaseKind_Identifier){
-            generic_parse_inc(state);
-            generic_parse_skip_soft_tokens(index, state);
-            did_advance = true;
-            Token *peek = token_it_read(&state->it);
-            if (peek != 0 && peek->kind == TokenBaseKind_StatementClose ||
-                peek->kind == TokenBaseKind_ParentheticalOpen){
-                index_new_note(index, state, Ii64(token), CodeIndexNote_Type, parent);
-                break;
-            }
-        }
-        else if (token->kind == TokenBaseKind_StatementClose ||
-                 token->kind == TokenBaseKind_ScopeOpen ||
-                 token->kind == TokenBaseKind_ScopeClose ||
-                 token->kind == TokenBaseKind_ScopeOpen ||
-                 token->kind == TokenBaseKind_ScopeClose){
-            break;
-        }
-        else if (token->kind == TokenBaseKind_Keyword){
-            String_Const_u8 lexeme = string_substring(state->contents, Ii64(token));
-            if (string_match(lexeme, string_u8_litexpr("struct")) ||
-                string_match(lexeme, string_u8_litexpr("union")) ||
-                string_match(lexeme, string_u8_litexpr("enum"))){
-                break;
-            }
-        }
-        if (!did_advance){
-            generic_parse_inc(state);
-            generic_parse_skip_soft_tokens(index, state);
-        }
-    }
-}
-
-function void
-cpp_parse_function(Code_Index_File *index, Generic_Parse_State *state, Code_Index_Nest *parent){
-    Token *token = token_it_read(&state->it);
-    generic_parse_inc(state);
-    generic_parse_skip_soft_tokens(index, state);
-    if (state->finished){
-        return;
-    }
-    Token *peek = token_it_read(&state->it);
-    Token *reset_point = peek;
-    if (peek != 0 && peek->sub_kind == TokenCppKind_ParenOp){
-        b32 at_paren_close = false;
-        for (; peek != 0;){
-            generic_parse_inc(state);
-            generic_parse_skip_soft_tokens(index, state);
-            peek = token_it_read(&state->it);
-            if (peek == 0 || state->finished){
-                break;
-            }
-            
-            if (peek->kind == TokenBaseKind_ParentheticalOpen ||
-                peek->kind == TokenBaseKind_ScopeOpen ||
-                peek->kind == TokenBaseKind_ScopeClose ||
-                peek->kind == TokenBaseKind_StatementClose){
-                break;
-            }
-            if (peek->kind == TokenBaseKind_ParentheticalClose){
-                at_paren_close = true;
-                break;
-            }
-        }
-        
-        if (at_paren_close){
-            generic_parse_inc(state);
-            generic_parse_skip_soft_tokens(index, state);
-            peek = token_it_read(&state->it);
-            if (peek != 0 &&
-                peek->kind == TokenBaseKind_ScopeOpen ||
-                peek->kind == TokenBaseKind_StatementClose){
-                index_new_note(index, state, Ii64(token), CodeIndexNote_Function, parent);
-            }
-        }
-    }
-    state->it = token_iterator(state->it.user_id, state->it.tokens, state->it.count, reset_point);
-}
-
-function Code_Index_Nest*
-generic_parse_statement(Code_Index_File *index, Generic_Parse_State *state);
-
-function Code_Index_Nest*
-generic_parse_preprocessor(Code_Index_File *index, Generic_Parse_State *state);
-
-function Code_Index_Nest*
-generic_parse_scope(Code_Index_File *index, Generic_Parse_State *state);
-
-function Code_Index_Nest*
-generic_parse_paren(Code_Index_File *index, Generic_Parse_State *state);
-
-function Code_Index_Nest*
-generic_parse_statement(Code_Index_File *index, Generic_Parse_State *state){
-    Token *token = token_it_read(&state->it);
-    Code_Index_Nest *result = push_array_zero(state->arena, Code_Index_Nest, 1);
-    result->kind = CodeIndexNest_Statement;
-    result->open = Ii64(token->pos);
-    result->close = Ii64(max_i64);
-    result->file = index;
-    
-    state->in_statement = true;
-    
-    for (;;){
-        generic_parse_skip_soft_tokens(index, state);
-        token = token_it_read(&state->it);
-        if (token == 0 || state->finished){
-            break;
-        }
-        
-        if (state->in_preprocessor){
-            if (!HasFlag(token->flags, TokenBaseFlag_PreprocessorBody) ||
-                token->kind == TokenBaseKind_Preprocessor){
-                result->is_closed = true;
-                result->close = Ii64(token->pos);
-                break;
-            }
-        }
-        else{
-            if (token->kind == TokenBaseKind_Preprocessor){
-                result->is_closed = true;
-                result->close = Ii64(token->pos);
-                break;
-            }
-        }
-        
-        if (token->kind == TokenBaseKind_ScopeOpen ||
-            token->kind == TokenBaseKind_ScopeClose ||
-            token->kind == TokenBaseKind_ParentheticalOpen){
-            result->is_closed = true;
-            result->close = Ii64(token->pos);
-            break;
-        }
-        
-        if (token->kind == TokenBaseKind_StatementClose){
-            result->is_closed = true;
-            result->close = Ii64(token);
-            generic_parse_inc(state);
-            break;
-        }
-        
-        generic_parse_inc(state);
-    }
-    
-    state->in_statement = false;
-    
-    return(result);
-}
-
-function Code_Index_Nest*
-generic_parse_preprocessor(Code_Index_File *index, Generic_Parse_State *state){
-    Token *token = token_it_read(&state->it);
-    Code_Index_Nest *result = push_array_zero(state->arena, Code_Index_Nest, 1);
-    result->kind = CodeIndexNest_Preprocessor;
-    result->open = Ii64(token->pos);
-    result->close = Ii64(max_i64);
-    result->file = index;
-    
-    state->in_preprocessor = true;
-    
-    b32 potential_macro  = false;
-    if (state->do_cpp_parse){
-        if (token->sub_kind == TokenCppKind_PPDefine){
-            potential_macro = true;
-        }
-    }
-    
-    generic_parse_inc(state);
-    for (;;){
-        generic_parse_skip_soft_tokens(index, state);
-        token = token_it_read(&state->it);
-        if (token == 0 || state->finished){
-            break;
-        }
-        
-        if (!HasFlag(token->flags, TokenBaseFlag_PreprocessorBody) ||
-            token->kind == TokenBaseKind_Preprocessor){
-            result->is_closed = true;
-            result->close = Ii64(token->pos);
-            break;
-        }
-        
-        if (state->do_cpp_parse && potential_macro){
-            if (token->sub_kind == TokenCppKind_Identifier){
-                index_new_note(index, state, Ii64(token), CodeIndexNote_Macro, result);
-            }
-            potential_macro = false;
-        }
-        
-        if (token->kind == TokenBaseKind_ScopeOpen){
-            Code_Index_Nest *nest = generic_parse_scope(index, state);
-            nest->parent = result;
-            code_index_push_nest(&result->nest_list, nest);
-            continue;
-        }
-        
-        if (token->kind == TokenBaseKind_ParentheticalOpen){
-            Code_Index_Nest *nest = generic_parse_paren(index, state);
-            nest->parent = result;
-            code_index_push_nest(&result->nest_list, nest);
-            continue;
-        }
-        
-        generic_parse_inc(state);
-    }
-    
-    result->nest_array = code_index_nest_ptr_array_from_list(state->arena, &result->nest_list);
-    
-    state->in_preprocessor = false;
-    
-    return(result);
-}
-
-function Code_Index_Nest*
-generic_parse_scope(Code_Index_File *index, Generic_Parse_State *state){
-    Token *token = token_it_read(&state->it);
-    Code_Index_Nest *result = push_array_zero(state->arena, Code_Index_Nest, 1);
-    result->kind = CodeIndexNest_Scope;
-    result->open = Ii64(token);
-    result->close = Ii64(max_i64);
-    result->file = index;
-    
-    state->scope_counter += 1;
-    
-    generic_parse_inc(state);
-    for (;;){
-        generic_parse_skip_soft_tokens(index, state);
-        token = token_it_read(&state->it);
-        if (token == 0 || state->finished){
-            break;
-        }
-        
-        if (state->in_preprocessor){
-            if (!HasFlag(token->flags, TokenBaseFlag_PreprocessorBody) ||
-                token->kind == TokenBaseKind_Preprocessor){
-                break;
-            }
-        }
-        else{
-            if (token->kind == TokenBaseKind_Preprocessor){
-                Code_Index_Nest *nest = generic_parse_preprocessor(index, state);
-                code_index_push_nest(&index->nest_list, nest);
-                continue;
-            }
-        }
-        
-        if (token->kind == TokenBaseKind_ScopeClose){
-            result->is_closed = true;
-            result->close = Ii64(token);
-            generic_parse_inc(state);
-            break;
-        }
-        
-        if (token->kind == TokenBaseKind_ScopeOpen){
-            Code_Index_Nest *nest = generic_parse_scope(index, state);
-            nest->parent = result;
-            code_index_push_nest(&result->nest_list, nest);
-            continue;
-        }
-        
-        if (token->kind == TokenBaseKind_ParentheticalOpen){
-            Code_Index_Nest *nest = generic_parse_paren(index, state);
-            nest->parent = result;
-            code_index_push_nest(&result->nest_list, nest);
-            continue;
-        }
-        
-        if (token->kind == TokenBaseKind_ParentheticalClose){
-            generic_parse_inc(state);
-            continue;
-        }
-        
-        {
-            Code_Index_Nest *nest = generic_parse_statement(index, state);
-            nest->parent = result;
-            code_index_push_nest(&result->nest_list, nest);
-        }
-    }
-    
-    result->nest_array = code_index_nest_ptr_array_from_list(state->arena, &result->nest_list);
-    
-    state->scope_counter -= 1;
-    
-    return(result);
-}
-
-function Code_Index_Nest*
-generic_parse_paren(Code_Index_File *index, Generic_Parse_State *state){
-    Token *token = token_it_read(&state->it);
-    Code_Index_Nest *result = push_array_zero(state->arena, Code_Index_Nest, 1);
-    result->kind = CodeIndexNest_Paren;
-    result->open = Ii64(token);
-    result->close = Ii64(max_i64);
-    result->file = index;
-    
-    i64 manifested_characters_on_line = 0;
-    {
-        u8 *ptr = state->prev_line_start;
-        u8 *end_ptr = state->contents.str + token->pos;
-        // NOTE(allen): Initial whitespace
-        for (;ptr < end_ptr; ptr += 1){
-            if (!character_is_whitespace(*ptr)){
-                break;
-            }
-        }
-        // NOTE(allen): Manifested characters
-        manifested_characters_on_line = (i64)(end_ptr - ptr) + token->size;
-    }
-    
-    state->paren_counter += 1;
-    
-    generic_parse_inc(state);
-    for (;;){
-        generic_parse_skip_soft_tokens(index, state);
-        token = token_it_read(&state->it);
-        if (token == 0 || state->finished){
-            break;
-        }
-        
-        if (state->in_preprocessor){
-            if (!HasFlag(token->flags, TokenBaseFlag_PreprocessorBody) ||
-                token->kind == TokenBaseKind_Preprocessor){
-                break;
-            }
-        }
-        else{
-            if (token->kind == TokenBaseKind_Preprocessor){
-                Code_Index_Nest *nest = generic_parse_preprocessor(index, state);
-                code_index_push_nest(&index->nest_list, nest);
-                continue;
-            }
-        }
-        
-        if (token->kind == TokenBaseKind_ParentheticalClose){
-            result->is_closed = true;
-            result->close = Ii64(token);
-            generic_parse_inc(state);
-            break;
-        }
-        
-        if (token->kind == TokenBaseKind_ScopeClose){
-            break;
-        }
-        
-        if (token->kind == TokenBaseKind_ScopeOpen){
-            Code_Index_Nest *nest = generic_parse_scope(index, state);
-            nest->parent = result;
-            code_index_push_nest(&result->nest_list, nest);
-            continue;
-        }
-        
-        if (token->kind == TokenBaseKind_ParentheticalOpen){
-            Code_Index_Nest *nest = generic_parse_paren(index, state);
-            nest->parent = result;
-            code_index_push_nest(&result->nest_list, nest);
-            continue;
-        }
-        
-        generic_parse_inc(state);
-    }
-    
-    result->nest_array = code_index_nest_ptr_array_from_list(state->arena, &result->nest_list);
-    
-    state->paren_counter -= 1;
-    
-    return(result);
-}
-
-function b32
-generic_parse_full_input_breaks(Code_Index_File *index, Generic_Parse_State *state, i32 limit){
-    b32 result = false;
-    
-    i64 first_index = token_it_index(&state->it);
-    i64 one_past_last_index = first_index + limit;
-    for (;;){
-        generic_parse_skip_soft_tokens(index, state);
-        Token *token = token_it_read(&state->it);
-        
-        if (token == 0 || state->finished){
-            result = true;
-            break;
-        }
-        
-        if (token->kind == TokenBaseKind_Preprocessor){
-            Code_Index_Nest *nest = generic_parse_preprocessor(index, state);
-            code_index_push_nest(&index->nest_list, nest);
-        }
-        else if (token->kind == TokenBaseKind_ScopeOpen){
-            Code_Index_Nest *nest = generic_parse_scope(index, state);
-            code_index_push_nest(&index->nest_list, nest);
-        }
-        else if (token->kind == TokenBaseKind_ParentheticalOpen){
-            Code_Index_Nest *nest = generic_parse_paren(index, state);
-            code_index_push_nest(&index->nest_list, nest);
-        }
-        else if (state->do_cpp_parse){
-            if (token->sub_kind == TokenCppKind_Struct ||
-                token->sub_kind == TokenCppKind_Union ||
-                token->sub_kind == TokenCppKind_Enum){
-                cpp_parse_type_structure(index, state, 0);
-            }
-            else if (token->sub_kind == TokenCppKind_Typedef){
-                cpp_parse_type_def(index, state, 0);
-            }
-            else if (token->sub_kind == TokenCppKind_Identifier){
-                cpp_parse_function(index, state, 0);
-            }
-            else{
-                generic_parse_inc(state);
-            }
-        }
-        else{
-            generic_parse_inc(state);
-        }
-        
-        i64 index = token_it_index(&state->it);
-        if (index >= one_past_last_index){
-            token = token_it_read(&state->it);
-            if (token == 0){
-                result = true;
-            }
-            break;
-        }
-    }
-    
-    if (result){
-        index->nest_array = code_index_nest_ptr_array_from_list(state->arena, &index->nest_list);
-        index->note_array = code_index_note_ptr_array_from_list(state->arena, &index->note_list);
-    }
-    
-    return(result);
-}
-
-////////////////////////////////
-
-function void
-default_comment_index(Application_Links *app, Arena *arena, Code_Index_File *index, Token *token, String_Const_u8 contents){
-    
-}
-
-function void
-generic_parse_init(Application_Links *app, Arena *arena, String_Const_u8 contents, Token_Array *tokens, Generic_Parse_State *state){
-    generic_parse_init(app, arena, contents, tokens, default_comment_index, state);
-}
-
-////////////////////////////////
-
-function Token_Pair
-layout_token_pair(Token_Array *tokens, i64 pos){
-    Token_Pair result = {};
-    Token_Iterator_Array it = token_iterator_pos(0, tokens, pos);
-    Token *b = token_it_read(&it);
-    if (b != 0){
-        if (b->kind == TokenBaseKind_Whitespace){
-            token_it_inc_non_whitespace(&it);
-            b = token_it_read(&it);
-        }
-    }
-    token_it_dec_non_whitespace(&it);
-    Token *a = token_it_read(&it);
-    if (a != 0){
-        result.a = *a;
-    }
-    if (b != 0){
-        result.b = *b;
-    }
-    return(result);
-}
-
-function f32
-layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_Nest *nest, i64 pos, f32 space_advance, b32 *unresolved_dependence){
-    f32 result = 0.f;
-    if (nest != 0){
-        switch (nest->kind){
-            case CodeIndexNest_Scope:
-            case CodeIndexNest_Preprocessor:
-            {
-                result = layout_index_x_shift(app, reflex, nest->parent, pos, space_advance, unresolved_dependence);
-                if (nest->open.min < pos && nest->open.max <= pos &&
-                    (!nest->is_closed || pos < nest->close.min)){
-                    result += 4.f*space_advance;
-                }
-            }break;
-            
-            case CodeIndexNest_Statement:
-            {
-                result = layout_index_x_shift(app, reflex, nest->parent, pos, space_advance, unresolved_dependence);
-                if (nest->open.min < pos && nest->open.max <= pos &&
-                    (!nest->is_closed || pos < nest->close.min)){
-                    result += 4.f*space_advance;
-                }
-            }break;
-            
-            case CodeIndexNest_Paren:
-            {
-                Rect_f32 box = layout_reflex_get_rect(app, reflex, nest->open.max - 1, unresolved_dependence);
-                result = box.x1;
-            }break;
-        }
-    }
-    return(result);
-}
-
-function f32
-layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_Nest *nest, i64 pos, f32 space_advance){
-    b32 ignore;
-    return(layout_index_x_shift(app, reflex, nest, pos, space_advance, &ignore));
-}
-
-function f32
-layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_File *file, i64 pos, f32 space_advance, b32 *unresolved_dependence){
-    f32 indent = 0;
-    Code_Index_Nest *nest = code_index_get_nest(file, pos);
-    if (nest != 0){
-        indent = layout_index_x_shift(app, reflex, nest, pos, space_advance, unresolved_dependence);
-    }
-    return(indent);
-}
-
-function f32
-layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_File *file, i64 pos, f32 space_advance){
-    b32 ignore;
-    return(layout_index_x_shift(app, reflex, file, pos, space_advance, &ignore));
-}
-
-function void
-layout_index__emit_chunk(LefRig_TopBot_Layout_Vars *pos_vars, Face_ID face, Arena *arena, u8 *text_str, i64 range_first, u8 *ptr, u8 *end, Layout_Item_List *list){
-    for (;ptr < end;){
-        Character_Consume_Result consume = utf8_consume(ptr, (u64)(end - ptr));
-        if (consume.codepoint != '\r'){
-            i64 index = layout_index_from_ptr(ptr, text_str, range_first);
-            if (consume.codepoint != max_u32){
-                lr_tb_write(pos_vars, face, arena, list, index, consume.codepoint);
-            }
-            else{
-                lr_tb_write_byte(pos_vars, face, arena, list, index, *ptr);
-            }
-		}
-        ptr += consume.inc;
-    }
-}
-
-function i32
-layout_token_score_wrap_token(Token_Pair *pair, Token_Cpp_Kind kind){
-    i32 result = 0;
-    if (pair->a.sub_kind != kind && pair->b.sub_kind == kind){
-        result -= 1;
-    }
-    else if (pair->a.sub_kind == kind && pair->b.sub_kind != kind){
-        result += 1;
-    }
-    return(result);
-}
-
-function Layout_Item_List
-layout_index__inner(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width, Code_Index_File *file, Layout_Wrap_Kind kind){
-    Scratch_Block scratch(app);
-    
-    Managed_Scope scope = buffer_get_managed_scope(app, buffer);
-    Token_Array *tokens_ptr = scope_attachment(app, scope, attachment_tokens, Token_Array);
-    
-    Layout_Item_List list = get_empty_item_list(range);
-    String_Const_u8 text = push_buffer_range(app, scratch, buffer, range);
-    
-    Face_Advance_Map advance_map = get_face_advance_map(app, face);
-    Face_Metrics metrics = get_face_metrics(app, face);
-    LefRig_TopBot_Layout_Vars pos_vars = get_lr_tb_layout_vars(&advance_map, &metrics, width);
-    
-    f32 wrap_align_x = width - metrics.normal_advance;
-    
-    Layout_Reflex reflex = get_layout_reflex(&list, buffer, width, face);
-    
-    if (text.size == 0){
-        lr_tb_write_blank(&pos_vars, face, arena, &list, range.start);
-    }
-    else{
-        b32 first_of_the_line = true;
-        Newline_Layout_Vars newline_vars = get_newline_layout_vars();
-        
-        u8 *ptr = text.str;
-        u8 *end_ptr = ptr + text.size;
-        u8 *word_ptr = ptr;
-        
-        u8 *pending_wrap_ptr = ptr;
-        f32 pending_wrap_x = 0.f;
-        i32 pending_wrap_paren_nest_count = 0;
-        i32 pending_wrap_token_score = 0;
-        f32 pending_wrap_accumulated_w = 0.f;
-        
-        start:
-        if (ptr == end_ptr){
-            i64 index = layout_index_from_ptr(ptr, text.str, range.first);
-            f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
-            lr_tb_advance_x_without_item(&pos_vars, shift);
-            goto finish;
-        }
-        
-        if (!character_is_whitespace(*ptr)){
-            i64 index = layout_index_from_ptr(ptr, text.str, range.first);
-            f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
-            lr_tb_advance_x_without_item(&pos_vars, shift);
-            goto consuming_non_whitespace;
-        }
-        
-        {
-            for (;ptr < end_ptr; ptr += 1){
-                if (!character_is_whitespace(*ptr)){
-                    pending_wrap_ptr = ptr;
-                    word_ptr = ptr;
-                    i64 index = layout_index_from_ptr(ptr, text.str, range.first);
-                    f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
-                    lr_tb_advance_x_without_item(&pos_vars, shift);
-                    goto consuming_non_whitespace;
-                }
-                if (*ptr == '\n'){
-                    pending_wrap_ptr = ptr;
-                    i64 index = layout_index_from_ptr(ptr, text.str, range.first);
-                    f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
-                    lr_tb_advance_x_without_item(&pos_vars, shift);
-                    goto consuming_normal_whitespace;
-                }
-            }
-            
-            if (ptr == end_ptr){
-                pending_wrap_ptr = ptr;
-                i64 index = layout_index_from_ptr(ptr - 1, text.str, range.first);
-                f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
-                lr_tb_advance_x_without_item(&pos_vars, shift);
-                goto finish;
-            }
-        }
-        
-        consuming_non_whitespace:
-        {
-            for (;ptr <= end_ptr; ptr += 1){
-                if (ptr == end_ptr || character_is_whitespace(*ptr)){
-                    break;
-                }
-            }
-            
-            // NOTE(allen): measure this word
-            newline_layout_consume_default(&newline_vars);
-            String_Const_u8 word = SCu8(word_ptr, ptr);
-            u8 *word_end = ptr;
-            {
-                f32 word_advance = 0.f;
-                ptr = word.str;
-                for (;ptr < word_end;){
-                    Character_Consume_Result consume = utf8_consume(ptr, (u64)(word_end - ptr));
-                    if (consume.codepoint != max_u32){
-                        word_advance += lr_tb_advance(&pos_vars, face, consume.codepoint);
-                    }
-                    else{
-                        word_advance += lr_tb_advance_byte(&pos_vars);
-                    }
-                    ptr += consume.inc;
-                }
-                pending_wrap_accumulated_w += word_advance;
-            }
-            
-            if (!first_of_the_line && (kind == Layout_Wrapped) && lr_tb_crosses_width(&pos_vars, pending_wrap_accumulated_w)){
-                i64 index = layout_index_from_ptr(pending_wrap_ptr, text.str, range.first);
-                lr_tb_align_rightward(&pos_vars, wrap_align_x);
-                lr_tb_write_ghost(&pos_vars, face, arena, &list, index, '\\');
-                
-                lr_tb_next_line(&pos_vars);
-#if 0
-                f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
-                lr_tb_advance_x_without_item(&pos_vars, shift);
-#endif
-                
-                ptr = pending_wrap_ptr;
-                pending_wrap_accumulated_w = 0.f;
-                first_of_the_line = true;
-                goto start;
-            }
-        }
-        
-        consuming_normal_whitespace:
-        for (; ptr < end_ptr; ptr += 1){
-            if (!character_is_whitespace(*ptr)){
-                u8 *new_wrap_ptr = ptr;
-                
-                i64 index = layout_index_from_ptr(new_wrap_ptr, text.str, range.first);
-                Code_Index_Nest *new_wrap_nest = code_index_get_nest(file, index);
-                b32 invalid_wrap_x = false;
-                f32 new_wrap_x = layout_index_x_shift(app, &reflex, new_wrap_nest, index, metrics.space_advance, &invalid_wrap_x);
-                if (invalid_wrap_x){
-                    new_wrap_x = max_f32;
-                }
-                
-                i32 new_wrap_paren_nest_count = 0;
-                for (Code_Index_Nest *nest = new_wrap_nest;
-                     nest != 0;
-                     nest = nest->parent){
-                    if (nest->kind == CodeIndexNest_Paren){
-                        new_wrap_paren_nest_count += 1;
-                    }
-                }
-                
-                Token_Pair new_wrap_token_pair = layout_token_pair(tokens_ptr, index);
-                
-                // TODO(allen): pull out the token scoring part and make it replacable for other
-                // language's token based wrap scoring needs.
-                i32 token_score = 0;
-                if (new_wrap_token_pair.a.kind == TokenBaseKind_Keyword){
-                    if (new_wrap_token_pair.b.kind == TokenBaseKind_ParentheticalOpen ||
-                        new_wrap_token_pair.b.kind == TokenBaseKind_Keyword){
-                        token_score -= 2;
-                    }
-                }
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_Eq);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_PlusEq);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_MinusEq);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_StarEq);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_DivEq);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_ModEq);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_LeftLeftEq);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_RightRightEq);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_Comma);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_AndAnd);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_OrOr);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_Ternary);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_Colon);
-                token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_Semicolon);
-                
-                i32 new_wrap_token_score = token_score;
-                
-                b32 new_wrap_ptr_is_better = false;
-                if (first_of_the_line){
-                    new_wrap_ptr_is_better = true;
-                }
-                else{
-                    if (new_wrap_token_score > pending_wrap_token_score){
-                        new_wrap_ptr_is_better = true;
-                    }
-                    else if (new_wrap_token_score == pending_wrap_token_score){
-                        f32 new_score = new_wrap_paren_nest_count*10.f + new_wrap_x;
-                        f32 old_score = pending_wrap_paren_nest_count*10.f + pending_wrap_x + metrics.normal_advance*4.f + pending_wrap_accumulated_w*0.5f;
-                        
-                        if (new_score < old_score){
-                            new_wrap_ptr_is_better = true;
-                        }
-                    }
-                }
-                
-                if (new_wrap_ptr_is_better){
-                    layout_index__emit_chunk(&pos_vars, face, arena, text.str, range.first, pending_wrap_ptr, new_wrap_ptr, &list);
-                    first_of_the_line = false;
-                    
-                    pending_wrap_ptr = new_wrap_ptr;
-                    pending_wrap_paren_nest_count = new_wrap_paren_nest_count;
-                    pending_wrap_x = layout_index_x_shift(app, &reflex, new_wrap_nest, index, metrics.space_advance);
-                    pending_wrap_paren_nest_count = new_wrap_paren_nest_count;
-                    pending_wrap_token_score = new_wrap_token_score;
-                    pending_wrap_accumulated_w = 0.f;
-                }
-                
-                word_ptr = ptr;
-                goto consuming_non_whitespace;
-            }
-            
-            i64 index = layout_index_from_ptr(ptr, text.str, range.first);
-            switch (*ptr){
-                default:
-                {
-                    newline_layout_consume_default(&newline_vars);
-                    pending_wrap_accumulated_w += lr_tb_advance(&pos_vars, face, *ptr);
-                }break;
-                
-                case '\r':
-                {
-                    newline_layout_consume_CR(&newline_vars, index);
-                }break;
-                
-                case '\n':
-                {
-                    layout_index__emit_chunk(&pos_vars, face, arena, text.str, range.first, pending_wrap_ptr, ptr, &list);
-                    pending_wrap_ptr = ptr + 1;
-                    pending_wrap_accumulated_w = 0.f;
-                    
-                    u64 newline_index = newline_layout_consume_LF(&newline_vars, index);
-                    lr_tb_write_blank(&pos_vars, face, arena, &list, newline_index);
-                    lr_tb_next_line(&pos_vars);
-                    first_of_the_line = true;
-                    ptr += 1;
-                    goto start;
-                }break;
-            }
-        }
-        
-        finish:
-        if (newline_layout_consume_finish(&newline_vars)){
-            layout_index__emit_chunk(&pos_vars, face, arena, text.str, range.first, pending_wrap_ptr, ptr, &list);
-            i64 index = layout_index_from_ptr(ptr, text.str, range.first);
-            lr_tb_write_blank(&pos_vars, face, arena, &list, index);
-        }
-    }
-    
-    layout_item_list_finish(&list, -pos_vars.line_to_text_shift);
-    
-    return(list);
-}
-
-function Layout_Item_List
-layout_virt_indent_index(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width, Layout_Wrap_Kind kind){
-    Layout_Item_List result = {};
-    
-    if (global_config.enable_virtual_whitespace){
-        code_index_lock();
-        Code_Index_File *file = code_index_get_file(buffer);
-        if (file != 0){
-            result = layout_index__inner(app, arena, buffer, range, face, width, file, kind);
-        }
-        code_index_unlock();
-        if (file == 0){
-            result = layout_virt_indent_literal(app, arena, buffer, range, face, width, kind);
-        }
-    }
-    else{
-        result = layout_basic(app, arena, buffer, range, face, width, kind);
-    }
-    
-    return(result);
-}
-
-function Layout_Item_List
-layout_virt_indent_index_unwrapped(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
-    return(layout_virt_indent_index(app, arena, buffer, range, face, width, Layout_Unwrapped));
-}
-
-function Layout_Item_List
-layout_virt_indent_index_wrapped(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
-    return(layout_virt_indent_index(app, arena, buffer, range, face, width, Layout_Wrapped));
-}
-
-function Layout_Item_List
-layout_virt_indent_index_generic(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
-    Managed_Scope scope = buffer_get_managed_scope(app, buffer);
-    b32 *wrap_lines_ptr = scope_attachment(app, scope, buffer_wrap_lines, b32);
-    b32 wrap_lines = (wrap_lines_ptr != 0 && *wrap_lines_ptr);
-    return(layout_virt_indent_index(app, arena, buffer, range, face, width, wrap_lines?Layout_Wrapped:Layout_Unwrapped));
-}
-
-CUSTOM_COMMAND_SIG(toggle_virtual_whitespace)
-CUSTOM_DOC("Toggles the current buffer's virtual whitespace status.")
-{
-    global_config.enable_virtual_whitespace = !global_config.enable_virtual_whitespace;
-    
-    for (Buffer_ID buffer = get_buffer_next(app, 0, Access_Always);
-         buffer != 0;
-         buffer = get_buffer_next(app, buffer, Access_Always)){
-        buffer_clear_layout_cache(app, buffer);
-    }
-}
-
-// BOTTOM
-
->>>>>>> yuval_macos_platform_layer
-#endif
diff --git a/custom/4coder_helper.cpp b/custom/4coder_helper.cpp
index c4246f52..1213c417 100644
--- a/custom/4coder_helper.cpp
+++ b/custom/4coder_helper.cpp
@@ -1206,6 +1206,7 @@ get_indent_info_range(Application_Links *app, Buffer_ID buffer, Range_i64 range,
     info.first_char_pos = range.end;
     info.is_blank = true;
     info.all_space = true;
+    
     for (u64 i = 0; i < s.size; i += 1){
         u8 c = s.str[i];
         if (!character_is_whitespace(c)){
@@ -1214,13 +1215,15 @@ get_indent_info_range(Application_Links *app, Buffer_ID buffer, Range_i64 range,
             info.first_char_pos = range.start + (i64)i;
             break;
         }
-        if (c != ' '){
+        if (c == ' '){
+            info.indent_pos += 1;
+        }
+        else{
             info.all_space = false;
         }
         if (c == '\t'){
             info.indent_pos += tab_additional_width;
         }
-        info.indent_pos += 1;
     }
     
     return(info);
diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h
index f4843974..24c2dfd0 100644
--- a/custom/generated/command_metadata.h
+++ b/custom/generated/command_metadata.h
@@ -253,237 +253,237 @@ i32 source_name_len;
 i32 line_number;
 };
 static Command_Metadata fcoder_metacmd_table[231] = {
-{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 409 },
-{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 407 },
-{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 417 },
-{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 398 },
-{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 165 },
-{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 96 },
-{ PROC_LINKS(basic_change_active_panel, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 622 },
-{ PROC_LINKS(build_in_build_panel, 0), false, "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\\custom\\4coder_build_commands.cpp", 44, 159 },
-{ PROC_LINKS(build_search, 0), false, "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\\custom\\4coder_build_commands.cpp", 44, 122 },
-{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 208 },
-{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 284 },
-{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 290 },
-{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "c:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 180 },
-{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 587 },
-{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 480 },
-{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 244 },
-{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 234 },
-{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 254 },
-{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 266 },
-{ PROC_LINKS(close_all_code, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 842 },
-{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "c:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 174 },
-{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 630 },
-{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "c:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 190 },
-{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 761 },
-{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 125 },
-{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 149 },
-{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 19 },
-{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 135 },
-{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "c:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 175 },
-{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 28 },
-{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 693 },
-{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1804 },
-{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "c:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 },
-{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "c:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 23 },
-{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "c:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 51 },
-{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 173 },
-{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 79 },
-{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope.  Leaves the contents within the scope.", 99, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 112 },
-{ PROC_LINKS(delete_file_query, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1230 },
-{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1402 },
-{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 145 },
-{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1388 },
-{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "c:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 22 },
-{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "c:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 7 },
-{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 749 },
-{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2184 },
-{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2192 },
-{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 525 },
-{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 542 },
-{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 348 },
-{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "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\\custom\\4coder_jump_sticky.cpp", 41, 375 },
-{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 757 },
-{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "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\\custom\\4coder_jump_sticky.cpp", 41, 464 },
-{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "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\\custom\\4coder_jump_sticky.cpp", 41, 494 },
-{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "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\\custom\\4coder_jump_sticky.cpp", 41, 481 },
-{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "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\\custom\\4coder_jump_sticky.cpp", 41, 511 },
-{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 660 },
-{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 646 },
-{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 869 },
-{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 70 },
-{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 564 },
-{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 581 },
-{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 682 },
-{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 520 },
-{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 661 },
-{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 715 },
-{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 612 },
-{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 510 },
-{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "c:\\4ed\\code\\custom\\4coder_code_index_listers.cpp", 48, 12 },
-{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "c:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 54 },
-{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "c:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 77 },
-{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "c:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 41 },
-{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1548 },
-{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 9 },
-{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 222 },
-{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "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\\custom\\4coder_function_list.cpp", 43, 296 },
-{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), false, "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\\custom\\4coder_function_list.cpp", 43, 302 },
-{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "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\\custom\\4coder_function_list.cpp", 43, 267 },
-{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), false, "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\\custom\\4coder_function_list.cpp", 43, 277 },
-{ PROC_LINKS(list_all_locations, 0), false, "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\\custom\\4coder_search.cpp", 36, 165 },
-{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "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\\custom\\4coder_search.cpp", 36, 177 },
-{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "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\\custom\\4coder_search.cpp", 36, 189 },
-{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "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\\custom\\4coder_search.cpp", 36, 195 },
-{ PROC_LINKS(list_all_locations_of_selection, 0), false, "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\\custom\\4coder_search.cpp", 36, 201 },
-{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "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\\custom\\4coder_search.cpp", 36, 207 },
-{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "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\\custom\\4coder_search.cpp", 36, 213 },
-{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "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\\custom\\4coder_search.cpp", 36, 221 },
-{ PROC_LINKS(list_all_substring_locations, 0), false, "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\\custom\\4coder_search.cpp", 36, 171 },
-{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "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\\custom\\4coder_search.cpp", 36, 183 },
-{ PROC_LINKS(load_project, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 862 },
-{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "c:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1622 },
-{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 457 },
-{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 469 },
-{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1342 },
-{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 44 },
-{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "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\\custom\\4coder_miblo_numbers.cpp", 43, 237 },
-{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "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\\custom\\4coder_miblo_numbers.cpp", 43, 249 },
-{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 29 },
-{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "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\\custom\\4coder_miblo_numbers.cpp", 43, 231 },
-{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "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\\custom\\4coder_miblo_numbers.cpp", 43, 243 },
-{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 704 },
-{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 276 },
-{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 347 },
-{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 359 },
-{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 365 },
-{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 418 },
-{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 442 },
-{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 430 },
-{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 448 },
-{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 525 },
-{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 539 },
-{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 497 },
-{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 482 },
-{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 511 },
-{ PROC_LINKS(move_line_down, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1382 },
-{ PROC_LINKS(move_line_up, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1376 },
-{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 456 },
-{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 518 },
-{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 532 },
-{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 490 },
-{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 474 },
-{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 504 },
-{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 341 },
-{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 353 },
-{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 412 },
-{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 436 },
-{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 424 },
-{ PROC_LINKS(open_all_code, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 848 },
-{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 854 },
-{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1467 },
-{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1798 },
-{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 46 },
-{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 62 },
-{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 54 },
-{ PROC_LINKS(open_matching_file_cpp, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1499 },
-{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 310 },
-{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 300 },
-{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 383 },
-{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 375 },
-{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 39 },
-{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 113 },
-{ PROC_LINKS(paste_next, 0), false, "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\\custom\\4coder_clipboard.cpp", 39, 72 },
-{ PROC_LINKS(paste_next_and_indent, 0), false, "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\\custom\\4coder_clipboard.cpp", 39, 120 },
-{ PROC_LINKS(place_in_scope, 0), false, "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\\custom\\4coder_scope_commands.cpp", 44, 106 },
-{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "c:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 226 },
-{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "c:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 219 },
-{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "c:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 212 },
-{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "c:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 886 },
-{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1289 },
-{ PROC_LINKS(project_fkey_command, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 870 },
-{ PROC_LINKS(project_go_to_root_directory, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 896 },
-{ PROC_LINKS(query_replace, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1158 },
-{ PROC_LINKS(query_replace_identifier, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1179 },
-{ PROC_LINKS(query_replace_selection, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1195 },
-{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1637 },
-{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1722 },
-{ PROC_LINKS(rename_file_query, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1307 },
-{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1566 },
-{ PROC_LINKS(replace_in_all_buffers, 0), false, "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, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1068 },
-{ PROC_LINKS(replace_in_buffer, 0), false, "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1059 },
-{ PROC_LINKS(replace_in_range, 0), false, "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, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1050 },
-{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 991 },
-{ PROC_LINKS(reverse_search_identifier, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1003 },
-{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1556 },
-{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 382 },
-{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1274 },
-{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 985 },
-{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 997 },
-{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2172 },
-{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2160 },
-{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2178 },
-{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2166 },
-{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 548 },
-{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 57 },
-{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 66 },
-{ PROC_LINKS(select_prev_scope_absolute, 0), false, "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\\custom\\4coder_scope_commands.cpp", 44, 82 },
-{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 99 },
-{ PROC_LINKS(select_surrounding_scope, 0), false, "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\\custom\\4coder_scope_commands.cpp", 44, 27 },
-{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 39 },
-{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 125 },
-{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 112 },
-{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 86 },
-{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 99 },
-{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 126 },
-{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 427 },
-{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 421 },
-{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1237 },
-{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1249 },
-{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1243 },
-{ PROC_LINKS(setup_new_project, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 1230 },
-{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 653 },
-{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 639 },
-{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "c:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 994 },
-{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 190 },
-{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 198 },
-{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 237 },
-{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 403 },
-{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1524 },
-{ PROC_LINKS(test_double_backspace, 0), false, "test_double_backspace", 21, "Made for testing purposes (I should have deleted this if you are reading it let me know)", 88, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 115 },
-{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 785 },
-{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 574 },
-{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 561 },
-{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 667 },
-{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 676 },
-{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off.  The change(s) do not take effect until the next frame.", 89, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 451 },
-{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 439 },
-{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 433 },
-{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 730 },
-{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 736 },
-{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 415 },
-{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 445 },
-{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 721 },
-{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "c:\\4ed\\code\\custom\\4coder_code_index.cpp", 40, 1170 },
-{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 20 },
-{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 34 },
-{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 137 },
-{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1624 },
-{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1651 },
-{ PROC_LINKS(view_buffer_other_panel, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1512 },
-{ PROC_LINKS(view_jump_list_with_lister, 0), false, "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\\custom\\4coder_jump_lister.cpp", 41, 59 },
-{ PROC_LINKS(word_complete, 0), false, "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\\custom\\4coder_search.cpp", 36, 395 },
-{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 642 },
-{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 94 },
-{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 82 },
-{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 88 },
-{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 67 },
-{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 427 },
-{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 59 },
-{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 76 },
-{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 73 },
-{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 100 },
+{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 409 },
+{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "w:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 407 },
+{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "w:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 417 },
+{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "w:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 398 },
+{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 165 },
+{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 96 },
+{ PROC_LINKS(basic_change_active_panel, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 651 },
+{ PROC_LINKS(build_in_build_panel, 0), false, "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\\custom\\4coder_build_commands.cpp", 44, 159 },
+{ PROC_LINKS(build_search, 0), false, "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\\custom\\4coder_build_commands.cpp", 44, 122 },
+{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 208 },
+{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 284 },
+{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 290 },
+{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "w:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 180 },
+{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 587 },
+{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 480 },
+{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 244 },
+{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 234 },
+{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 254 },
+{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 266 },
+{ PROC_LINKS(close_all_code, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 842 },
+{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "w:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 174 },
+{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 659 },
+{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "w:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 190 },
+{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 761 },
+{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 125 },
+{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 149 },
+{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 19 },
+{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 135 },
+{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "w:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 175 },
+{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 28 },
+{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 722 },
+{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1833 },
+{ PROC_LINKS(default_startup, 0), false, "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), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 23 },
+{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 51 },
+{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 173 },
+{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 79 },
+{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope.  Leaves the contents within the scope.", 99, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 112 },
+{ PROC_LINKS(delete_file_query, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1259 },
+{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1431 },
+{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 145 },
+{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1417 },
+{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "w:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 22 },
+{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "w:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 7 },
+{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 778 },
+{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2187 },
+{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2195 },
+{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 525 },
+{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 542 },
+{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 348 },
+{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "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\\custom\\4coder_jump_sticky.cpp", 41, 375 },
+{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 786 },
+{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "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\\custom\\4coder_jump_sticky.cpp", 41, 464 },
+{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "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\\custom\\4coder_jump_sticky.cpp", 41, 494 },
+{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "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\\custom\\4coder_jump_sticky.cpp", 41, 481 },
+{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "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\\custom\\4coder_jump_sticky.cpp", 41, 511 },
+{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 689 },
+{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 675 },
+{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 869 },
+{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 70 },
+{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 564 },
+{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 581 },
+{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 711 },
+{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 520 },
+{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 661 },
+{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 715 },
+{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 612 },
+{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 510 },
+{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "w:\\4ed\\code\\custom\\4coder_code_index_listers.cpp", 48, 12 },
+{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "w:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 54 },
+{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "w:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 77 },
+{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "w:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 41 },
+{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1577 },
+{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 9 },
+{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 222 },
+{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "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\\custom\\4coder_function_list.cpp", 43, 296 },
+{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), false, "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\\custom\\4coder_function_list.cpp", 43, 302 },
+{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "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\\custom\\4coder_function_list.cpp", 43, 267 },
+{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), false, "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\\custom\\4coder_function_list.cpp", 43, 277 },
+{ PROC_LINKS(list_all_locations, 0), false, "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\\custom\\4coder_search.cpp", 36, 165 },
+{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "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\\custom\\4coder_search.cpp", 36, 177 },
+{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "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\\custom\\4coder_search.cpp", 36, 189 },
+{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "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\\custom\\4coder_search.cpp", 36, 195 },
+{ PROC_LINKS(list_all_locations_of_selection, 0), false, "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\\custom\\4coder_search.cpp", 36, 201 },
+{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "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\\custom\\4coder_search.cpp", 36, 207 },
+{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "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\\custom\\4coder_search.cpp", 36, 213 },
+{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "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\\custom\\4coder_search.cpp", 36, 221 },
+{ PROC_LINKS(list_all_substring_locations, 0), false, "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\\custom\\4coder_search.cpp", 36, 171 },
+{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "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\\custom\\4coder_search.cpp", 36, 183 },
+{ PROC_LINKS(load_project, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 862 },
+{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "w:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1622 },
+{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 457 },
+{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 469 },
+{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1371 },
+{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 44 },
+{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "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_decrement_time_stamp_minute, 0), false, "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(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 29 },
+{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "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\\custom\\4coder_miblo_numbers.cpp", 43, 231 },
+{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "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(mouse_wheel_change_face_size, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 733 },
+{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 276 },
+{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 347 },
+{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 359 },
+{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 365 },
+{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 418 },
+{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 442 },
+{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 430 },
+{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 448 },
+{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 525 },
+{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 539 },
+{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 497 },
+{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 482 },
+{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 511 },
+{ PROC_LINKS(move_line_down, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1411 },
+{ PROC_LINKS(move_line_up, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1405 },
+{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 456 },
+{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 518 },
+{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 532 },
+{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 490 },
+{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 474 },
+{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 504 },
+{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 341 },
+{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 353 },
+{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 412 },
+{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 436 },
+{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 424 },
+{ PROC_LINKS(open_all_code, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 848 },
+{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 854 },
+{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1496 },
+{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1827 },
+{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 46 },
+{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 62 },
+{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 54 },
+{ PROC_LINKS(open_matching_file_cpp, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1528 },
+{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 310 },
+{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 300 },
+{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 383 },
+{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 375 },
+{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 39 },
+{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 113 },
+{ PROC_LINKS(paste_next, 0), false, "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\\custom\\4coder_clipboard.cpp", 39, 72 },
+{ PROC_LINKS(paste_next_and_indent, 0), false, "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\\custom\\4coder_clipboard.cpp", 39, 120 },
+{ PROC_LINKS(place_in_scope, 0), false, "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\\custom\\4coder_scope_commands.cpp", 44, 106 },
+{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "w:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 226 },
+{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "w:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 219 },
+{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "w:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 212 },
+{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "w:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 886 },
+{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1289 },
+{ PROC_LINKS(project_fkey_command, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 870 },
+{ PROC_LINKS(project_go_to_root_directory, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 896 },
+{ PROC_LINKS(query_replace, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1187 },
+{ PROC_LINKS(query_replace_identifier, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1208 },
+{ PROC_LINKS(query_replace_selection, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1224 },
+{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1666 },
+{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1751 },
+{ PROC_LINKS(rename_file_query, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1336 },
+{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1595 },
+{ PROC_LINKS(replace_in_all_buffers, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1097 },
+{ PROC_LINKS(replace_in_buffer, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1088 },
+{ PROC_LINKS(replace_in_range, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1079 },
+{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1020 },
+{ PROC_LINKS(reverse_search_identifier, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1032 },
+{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1585 },
+{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 382 },
+{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1303 },
+{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1014 },
+{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1026 },
+{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2175 },
+{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2163 },
+{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2181 },
+{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2169 },
+{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 548 },
+{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 57 },
+{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 66 },
+{ PROC_LINKS(select_prev_scope_absolute, 0), false, "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\\custom\\4coder_scope_commands.cpp", 44, 82 },
+{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 99 },
+{ PROC_LINKS(select_surrounding_scope, 0), false, "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\\custom\\4coder_scope_commands.cpp", 44, 27 },
+{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 39 },
+{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 125 },
+{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 112 },
+{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 86 },
+{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 99 },
+{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 126 },
+{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 427 },
+{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 421 },
+{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1237 },
+{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1249 },
+{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1243 },
+{ PROC_LINKS(setup_new_project, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 1230 },
+{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 682 },
+{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 668 },
+{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "w:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 994 },
+{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 190 },
+{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 198 },
+{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 237 },
+{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 403 },
+{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1553 },
+{ PROC_LINKS(test_double_backspace, 0), false, "test_double_backspace", 21, "Made for testing purposes (I should have deleted this if you are reading it let me know)", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 115 },
+{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 785 },
+{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 574 },
+{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 561 },
+{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 696 },
+{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 705 },
+{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off.  The change(s) do not take effect until the next frame.", 89, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 451 },
+{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 439 },
+{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 433 },
+{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 759 },
+{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 765 },
+{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 415 },
+{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 445 },
+{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 750 },
+{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\custom\\4coder_code_index.cpp", 40, 1174 },
+{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 20 },
+{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 34 },
+{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 137 },
+{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1653 },
+{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1680 },
+{ PROC_LINKS(view_buffer_other_panel, 0), false, "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\\custom\\4coder_base_commands.cpp", 43, 1541 },
+{ PROC_LINKS(view_jump_list_with_lister, 0), false, "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\\custom\\4coder_jump_lister.cpp", 41, 59 },
+{ PROC_LINKS(word_complete, 0), false, "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\\custom\\4coder_search.cpp", 36, 395 },
+{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 642 },
+{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 94 },
+{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 82 },
+{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 88 },
+{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 67 },
+{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "w:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 427 },
+{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 59 },
+{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 76 },
+{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 73 },
+{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 100 },
 };
 static i32 fcoder_metacmd_ID_allow_mouse = 0;
 static i32 fcoder_metacmd_ID_auto_indent_line_at_cursor = 1;
diff --git a/custom/generated/lexer_cpp.cpp b/custom/generated/lexer_cpp.cpp
index 213d6ac5..5c62f12e 100644
--- a/custom/generated/lexer_cpp.cpp
+++ b/custom/generated/lexer_cpp.cpp
@@ -43,453 +43,447 @@ lexeme_table_lookup(u64 *hash_array, String_Const_u8 *key_array,
 }
 
 #endif
-u64 cpp_main_keys_hash_array[124] = {
-0x26092f2f0215ece3,0x0000000000000000,0x5ce5a2eda58b1f23,0xb2d6c5c6769fa3a3,
-0xb9ddf454bfe26d23,0x0000000000000000,0xcd0f6cfa687dd553,0x0000000000000000,
-0x0000000000000000,0x5ce5a2e0c5100279,0x5ce5a2ede7babb3d,0x0000000000000000,
-0x0000000000000000,0x6f6d951cb7cb582d,0x0e10b5f7624a6565,0xf889fe35be4428e3,
-0x6f6d951cb404483f,0x26092f2f02f1c5ef,0x0000000000000000,0xe2b3ddb2fb5b2e6b,
-0x0000000000000000,0x6f6d951cb4ea937d,0x0000000000000000,0x0000000000000000,
-0x0000000000000000,0x0e10b1af23a24eb5,0x5ce5a2f3706ea43f,0x0000000000000000,
-0xb2d6ca88b991d451,0xe2b3ddb2fb5a20a9,0x0000000000000000,0x26092f2f02d33cab,
-0x0000000000000000,0x0000000000000000,0x5ce5a2e66f839a73,0x0000000000000000,
-0x5ce5a2eda5890521,0x0000000000000000,0x6f6d951cb4228ddb,0x6f6d951cba73c8ab,
-0xb9ddf454bfe26e41,0xd50b424c05eec7e9,0x8557f78510d2bb43,0x0000000000000000,
-0x0000000000000000,0x26092f2f020b132d,0x0000000000000000,0x0000000000000000,
-0xe2b3ddb2fb5bc1c9,0x0000000000000000,0x8ef935ae0949ace3,0x0000000000000000,
-0x0000000000000000,0x0000000000000000,0x0000000000000000,0x26092f2f02d2781b,
-0x26092f2f02e7a15d,0xb2d6c74182f6a66d,0x0000000000000000,0x0000000000000000,
-0x0000000000000000,0x0000000000000000,0x0000000000000000,0x26092f2f02e78453,
-0xe2b3ddb2fb5bd5b5,0xb2d6c74182f6a7e9,0x0000000000000000,0x0000000000000000,
-0xb2d6c6c7361150b5,0x5ce5a2e0b306cde5,0x0000000000000000,0x0000000000000000,
-0x0000000000000000,0x0000000000000000,0x5ce5a2e7e5c24db3,0x26092f2f0216583b,
-0x0e101bb85ac205ad,0x6f6d951cacb1aa35,0x0000000000000000,0x0000000000000000,
-0x0000000000000000,0x5ce5a2e197faf9d9,0xe2b3ddb2fb5baba1,0x6f6d951cba402e7b,
-0x26092f2f02e1d2eb,0x0000000000000000,0x73a9345f7aa71363,0x0000000000000000,
-0x0e10b66610117f15,0x0000000000000000,0xe95e136b18f58763,0x0e10078c941fcafb,
-0x0000000000000000,0x0000000000000000,0x5ce5a2f37530abf3,0xb2d6c68c37b0f1f7,
-0x5ce5a2e7e4364fe9,0x5ce5a2f37536698d,0x0000000000000000,0x0000000000000000,
-0x5ce5a2e049adcf39,0x0000000000000000,0x0000000000000000,0x0e100efea5987c03,
-0x6f6d951c847de2fb,0x0e106caf9da9bbbd,0x0e109bd9232f3723,0x0000000000000000,
-0x6f6d951c86ec6929,0x0000000000000000,0x0000000000000000,0x0e114d6868e6156b,
-0x6f6d951c8f3e1899,0x0e105b1fdc2b41ad,0xb2d6c5dc5a9a53e5,0x0000000000000000,
-0x0000000000000000,0x0000000000000000,0x26092f2f0212aa4b,0x0000000000000000,
-0x0000000000000000,0x0000000000000000,0x5ce5a2f37ca36a8b,0xcd1ba7f6b56d6ce3,
+u64 cpp_main_keys_hash_array[121] = {
+0x0000000000000000,0x0000000000000000,0x0000000000000000,0x8349fa730393363b,
+0x0000000000000000,0x8349fa730aae0099,0x60ea26a19b756e79,0x0000000000000000,
+0xb93f1a8b9f2a32a5,0x0000000000000000,0x70176a7f513b6149,0x83cfadc08adce95d,
+0x0000000000000000,0xef2944a1e021a185,0x33d534df660dd7d1,0xef2944a1e020e4ef,
+0x4925ce049db84f37,0x0000000000000000,0xef2944a1e0217bb9,0x0000000000000000,
+0x83cfadc025927fad,0x9c990ba137331a7b,0x0000000000000000,0xd0ee94c41229223b,
+0x83cfadc218c1af4b,0x83cfadc05860fa51,0x33d534df65d0b7a1,0x8349fa73053a0c29,
+0x0000000000000000,0x33d534df666c18fb,0x1af8d017f84db43f,0x0000000000000000,
+0x0000000000000000,0x1af8d017f84db719,0x0000000000000000,0x0000000000000000,
+0x33d534df66190e59,0x49275265b1018d2d,0x0000000000000000,0x0000000000000000,
+0x33d534df6630873d,0x4925e70b40952c2b,0x8349fa731f0043ad,0x0000000000000000,
+0xef2944a1e026c143,0x83cfadc027d6a375,0x49240a553feb1893,0x0000000000000000,
+0x0000000000000000,0x9c99072ffa085123,0x83cfadc17d987a33,0x49274937cc2c73ab,
+0x9c9907648aae4125,0x492415929b88fb15,0x0000000000000000,0x0000000000000000,
+0x0000000000000000,0x83cfadc226c3a251,0x8349fa731f1a8b89,0x492739e1687c7c73,
+0x0000000000000000,0x0000000000000000,0x492760d5d9233623,0x83cfadc100295e99,
+0x83cfadc3f0d53289,0x8349fa731f0596e9,0x0000000000000000,0x0000000000000000,
+0x8349fa7336b0ba93,0x9c99074f559d0e07,0x8349fa73039058ed,0x0000000000000000,
+0x0000000000000000,0x8349fa73365331d3,0x9c990ba137331761,0x31d873deecc74ec9,
+0x83cfadc05d3daf09,0x0000000000000000,0x0000000000000000,0x9c99064c8ae8c92f,
+0x0000000000000000,0x0000000000000000,0x33d534df6605b333,0x0000000000000000,
+0x33d534df6772a0a9,0x4925b9bfb359db75,0x0000000000000000,0x0000000000000000,
+0x0000000000000000,0xb03d472d14c4eec9,0x0000000000000000,0x0000000000000000,
+0x0000000000000000,0x0000000000000000,0xd3a2eb0b8808f565,0xef2944a1e0216207,
+0x83cfadc024f06dbb,0x83cfadc1887f2993,0x0000000000000000,0x0000000000000000,
+0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000,
+0x33d534df666c8233,0x0000000000000000,0x0000000000000000,0x49274be6eb62115b,
+0x0000000000000000,0x8349fa733124f7c9,0x0000000000000000,0x83cfadc101f1a3f7,
+0x33d534df6605923b,0x33d534df6638d32b,0x0000000000000000,0x0000000000000000,
+0x0000000000000000,0x83cfadc06ebf6037,0x0000000000000000,0x9c99070bb0253d6d,
+0x64fb60a931f3c149,
 };
-u8 cpp_main_keys_key_array_0[] = {0x74,0x72,0x75,0x65,};
-u8 cpp_main_keys_key_array_2[] = {0x73,0x69,0x67,0x6e,0x65,0x64,};
-u8 cpp_main_keys_key_array_3[] = {0x76,0x69,0x72,0x74,0x75,0x61,0x6c,};
-u8 cpp_main_keys_key_array_4[] = {0x64,0x6f,};
-u8 cpp_main_keys_key_array_6[] = {0x70,0x72,0x6f,0x74,0x65,0x63,0x74,0x65,0x64,};
-u8 cpp_main_keys_key_array_9[] = {0x64,0x6f,0x75,0x62,0x6c,0x65,};
-u8 cpp_main_keys_key_array_10[] = {0x70,0x75,0x62,0x6c,0x69,0x63,};
-u8 cpp_main_keys_key_array_13[] = {0x63,0x6c,0x61,0x73,0x73,};
-u8 cpp_main_keys_key_array_14[] = {0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,0x65,};
-u8 cpp_main_keys_key_array_15[] = {0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,};
-u8 cpp_main_keys_key_array_16[] = {0x63,0x61,0x74,0x63,0x68,};
-u8 cpp_main_keys_key_array_17[] = {0x67,0x6f,0x74,0x6f,};
-u8 cpp_main_keys_key_array_19[] = {0x61,0x73,0x6d,};
-u8 cpp_main_keys_key_array_21[] = {0x62,0x72,0x65,0x61,0x6b,};
-u8 cpp_main_keys_key_array_25[] = {0x76,0x6f,0x6c,0x61,0x74,0x69,0x6c,0x65,};
-u8 cpp_main_keys_key_array_26[] = {0x73,0x77,0x69,0x74,0x63,0x68,};
-u8 cpp_main_keys_key_array_28[] = {0x74,0x79,0x70,0x65,0x64,0x65,0x66,};
-u8 cpp_main_keys_key_array_29[] = {0x74,0x72,0x79,};
-u8 cpp_main_keys_key_array_31[] = {0x65,0x6c,0x73,0x65,};
-u8 cpp_main_keys_key_array_34[] = {0x72,0x65,0x74,0x75,0x72,0x6e,};
-u8 cpp_main_keys_key_array_36[] = {0x73,0x69,0x7a,0x65,0x6f,0x66,};
-u8 cpp_main_keys_key_array_38[] = {0x63,0x6f,0x6e,0x73,0x74,};
-u8 cpp_main_keys_key_array_39[] = {0x66,0x61,0x6c,0x73,0x65,};
-u8 cpp_main_keys_key_array_40[] = {0x69,0x66,};
-u8 cpp_main_keys_key_array_41[] = {0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x61,0x73,0x73,0x65,0x72,0x74,};
-u8 cpp_main_keys_key_array_42[] = {0x74,0x68,0x72,0x65,0x61,0x64,0x5f,0x6c,0x6f,0x63,0x61,0x6c,};
-u8 cpp_main_keys_key_array_45[] = {0x74,0x68,0x69,0x73,};
-u8 cpp_main_keys_key_array_48[] = {0x69,0x6e,0x74,};
-u8 cpp_main_keys_key_array_50[] = {0x64,0x79,0x6e,0x61,0x6d,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,};
-u8 cpp_main_keys_key_array_55[] = {0x65,0x6e,0x75,0x6d,};
-u8 cpp_main_keys_key_array_56[] = {0x63,0x68,0x61,0x72,};
-u8 cpp_main_keys_key_array_57[] = {0x61,0x6c,0x69,0x67,0x6e,0x61,0x73,};
-u8 cpp_main_keys_key_array_63[] = {0x63,0x61,0x73,0x65,};
-u8 cpp_main_keys_key_array_64[] = {0x66,0x6f,0x72,};
-u8 cpp_main_keys_key_array_65[] = {0x61,0x6c,0x69,0x67,0x6e,0x6f,0x66,};
-u8 cpp_main_keys_key_array_68[] = {0x64,0x65,0x66,0x61,0x75,0x6c,0x74,};
-u8 cpp_main_keys_key_array_69[] = {0x64,0x65,0x6c,0x65,0x74,0x65,};
-u8 cpp_main_keys_key_array_74[] = {0x65,0x78,0x74,0x65,0x72,0x6e,};
-u8 cpp_main_keys_key_array_75[] = {0x6c,0x6f,0x6e,0x67,};
-u8 cpp_main_keys_key_array_76[] = {0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,};
-u8 cpp_main_keys_key_array_77[] = {0x77,0x68,0x69,0x6c,0x65,};
-u8 cpp_main_keys_key_array_81[] = {0x69,0x6e,0x6c,0x69,0x6e,0x65,};
-u8 cpp_main_keys_key_array_82[] = {0x6e,0x65,0x77,};
-u8 cpp_main_keys_key_array_83[] = {0x66,0x6c,0x6f,0x61,0x74,};
-u8 cpp_main_keys_key_array_84[] = {0x62,0x6f,0x6f,0x6c,};
-u8 cpp_main_keys_key_array_86[] = {0x63,0x6f,0x6e,0x73,0x74,0x5f,0x63,0x61,0x73,0x74,};
-u8 cpp_main_keys_key_array_88[] = {0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,};
-u8 cpp_main_keys_key_array_90[] = {0x72,0x65,0x69,0x6e,0x74,0x65,0x72,0x70,0x72,0x65,0x74,0x5f,0x63,0x61,0x73,0x74,};
-u8 cpp_main_keys_key_array_91[] = {0x65,0x78,0x70,0x6c,0x69,0x63,0x69,0x74,};
-u8 cpp_main_keys_key_array_94[] = {0x73,0x74,0x72,0x75,0x63,0x74,};
-u8 cpp_main_keys_key_array_95[] = {0x6e,0x75,0x6c,0x6c,0x70,0x74,0x72,};
-u8 cpp_main_keys_key_array_96[] = {0x65,0x78,0x70,0x6f,0x72,0x74,};
-u8 cpp_main_keys_key_array_97[] = {0x73,0x74,0x61,0x74,0x69,0x63,};
-u8 cpp_main_keys_key_array_100[] = {0x66,0x72,0x69,0x65,0x6e,0x64,};
-u8 cpp_main_keys_key_array_103[] = {0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,};
-u8 cpp_main_keys_key_array_104[] = {0x75,0x73,0x69,0x6e,0x67,};
-u8 cpp_main_keys_key_array_105[] = {0x64,0x65,0x63,0x6c,0x74,0x79,0x70,0x65,};
-u8 cpp_main_keys_key_array_106[] = {0x75,0x6e,0x73,0x69,0x67,0x6e,0x65,0x64,};
-u8 cpp_main_keys_key_array_108[] = {0x73,0x68,0x6f,0x72,0x74,};
-u8 cpp_main_keys_key_array_111[] = {0x74,0x79,0x70,0x65,0x6e,0x61,0x6d,0x65,};
-u8 cpp_main_keys_key_array_112[] = {0x75,0x6e,0x69,0x6f,0x6e,};
-u8 cpp_main_keys_key_array_113[] = {0x6e,0x6f,0x65,0x78,0x63,0x65,0x70,0x74,};
-u8 cpp_main_keys_key_array_114[] = {0x70,0x72,0x69,0x76,0x61,0x74,0x65,};
-u8 cpp_main_keys_key_array_118[] = {0x76,0x6f,0x69,0x64,};
-u8 cpp_main_keys_key_array_122[] = {0x74,0x79,0x70,0x65,0x69,0x64,};
-u8 cpp_main_keys_key_array_123[] = {0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,};
-String_Const_u8 cpp_main_keys_key_array[124] = {
-{cpp_main_keys_key_array_0, 4},
-{0, 0},
-{cpp_main_keys_key_array_2, 6},
-{cpp_main_keys_key_array_3, 7},
-{cpp_main_keys_key_array_4, 2},
-{0, 0},
-{cpp_main_keys_key_array_6, 9},
-{0, 0},
-{0, 0},
-{cpp_main_keys_key_array_9, 6},
-{cpp_main_keys_key_array_10, 6},
-{0, 0},
-{0, 0},
-{cpp_main_keys_key_array_13, 5},
-{cpp_main_keys_key_array_14, 8},
-{cpp_main_keys_key_array_15, 11},
-{cpp_main_keys_key_array_16, 5},
-{cpp_main_keys_key_array_17, 4},
-{0, 0},
-{cpp_main_keys_key_array_19, 3},
-{0, 0},
-{cpp_main_keys_key_array_21, 5},
+u8 cpp_main_keys_key_array_3[] = {0x66,0x61,0x6c,0x73,0x65,};
+u8 cpp_main_keys_key_array_5[] = {0x73,0x68,0x6f,0x72,0x74,};
+u8 cpp_main_keys_key_array_6[] = {0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x61,0x73,0x73,0x65,0x72,0x74,};
+u8 cpp_main_keys_key_array_8[] = {0x74,0x68,0x72,0x65,0x61,0x64,0x5f,0x6c,0x6f,0x63,0x61,0x6c,};
+u8 cpp_main_keys_key_array_10[] = {0x64,0x79,0x6e,0x61,0x6d,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,};
+u8 cpp_main_keys_key_array_11[] = {0x74,0x79,0x70,0x65,0x69,0x64,};
+u8 cpp_main_keys_key_array_13[] = {0x6e,0x65,0x77,};
+u8 cpp_main_keys_key_array_14[] = {0x62,0x6f,0x6f,0x6c,};
+u8 cpp_main_keys_key_array_15[] = {0x74,0x72,0x79,};
+u8 cpp_main_keys_key_array_16[] = {0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,};
+u8 cpp_main_keys_key_array_18[] = {0x69,0x6e,0x74,};
+u8 cpp_main_keys_key_array_20[] = {0x73,0x77,0x69,0x74,0x63,0x68,};
+u8 cpp_main_keys_key_array_21[] = {0x61,0x6c,0x69,0x67,0x6e,0x6f,0x66,};
+u8 cpp_main_keys_key_array_23[] = {0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,};
+u8 cpp_main_keys_key_array_24[] = {0x69,0x6e,0x6c,0x69,0x6e,0x65,};
+u8 cpp_main_keys_key_array_25[] = {0x73,0x74,0x61,0x74,0x69,0x63,};
+u8 cpp_main_keys_key_array_26[] = {0x74,0x68,0x69,0x73,};
+u8 cpp_main_keys_key_array_27[] = {0x62,0x72,0x65,0x61,0x6b,};
+u8 cpp_main_keys_key_array_29[] = {0x63,0x61,0x73,0x65,};
+u8 cpp_main_keys_key_array_30[] = {0x69,0x66,};
+u8 cpp_main_keys_key_array_33[] = {0x64,0x6f,};
+u8 cpp_main_keys_key_array_36[] = {0x67,0x6f,0x74,0x6f,};
+u8 cpp_main_keys_key_array_37[] = {0x65,0x78,0x70,0x6c,0x69,0x63,0x69,0x74,};
+u8 cpp_main_keys_key_array_40[] = {0x76,0x6f,0x69,0x64,};
+u8 cpp_main_keys_key_array_41[] = {0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,};
+u8 cpp_main_keys_key_array_42[] = {0x63,0x61,0x74,0x63,0x68,};
+u8 cpp_main_keys_key_array_44[] = {0x61,0x73,0x6d,};
+u8 cpp_main_keys_key_array_45[] = {0x73,0x69,0x67,0x6e,0x65,0x64,};
+u8 cpp_main_keys_key_array_46[] = {0x76,0x6f,0x6c,0x61,0x74,0x69,0x6c,0x65,};
+u8 cpp_main_keys_key_array_49[] = {0x70,0x72,0x69,0x76,0x61,0x74,0x65,};
+u8 cpp_main_keys_key_array_50[] = {0x64,0x6f,0x75,0x62,0x6c,0x65,};
+u8 cpp_main_keys_key_array_51[] = {0x74,0x79,0x70,0x65,0x6e,0x61,0x6d,0x65,};
+u8 cpp_main_keys_key_array_52[] = {0x76,0x69,0x72,0x74,0x75,0x61,0x6c,};
+u8 cpp_main_keys_key_array_53[] = {0x6e,0x6f,0x65,0x78,0x63,0x65,0x70,0x74,};
+u8 cpp_main_keys_key_array_57[] = {0x70,0x75,0x62,0x6c,0x69,0x63,};
+u8 cpp_main_keys_key_array_58[] = {0x63,0x6c,0x61,0x73,0x73,};
+u8 cpp_main_keys_key_array_59[] = {0x64,0x65,0x63,0x6c,0x74,0x79,0x70,0x65,};
+u8 cpp_main_keys_key_array_62[] = {0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,0x65,};
+u8 cpp_main_keys_key_array_63[] = {0x65,0x78,0x70,0x6f,0x72,0x74,};
+u8 cpp_main_keys_key_array_64[] = {0x66,0x72,0x69,0x65,0x6e,0x64,};
+u8 cpp_main_keys_key_array_65[] = {0x63,0x6f,0x6e,0x73,0x74,};
+u8 cpp_main_keys_key_array_68[] = {0x77,0x68,0x69,0x6c,0x65,};
+u8 cpp_main_keys_key_array_69[] = {0x74,0x79,0x70,0x65,0x64,0x65,0x66,};
+u8 cpp_main_keys_key_array_70[] = {0x66,0x6c,0x6f,0x61,0x74,};
+u8 cpp_main_keys_key_array_73[] = {0x75,0x6e,0x69,0x6f,0x6e,};
+u8 cpp_main_keys_key_array_74[] = {0x61,0x6c,0x69,0x67,0x6e,0x61,0x73,};
+u8 cpp_main_keys_key_array_75[] = {0x72,0x65,0x69,0x6e,0x74,0x65,0x72,0x70,0x72,0x65,0x74,0x5f,0x63,0x61,0x73,0x74,};
+u8 cpp_main_keys_key_array_76[] = {0x73,0x74,0x72,0x75,0x63,0x74,};
+u8 cpp_main_keys_key_array_79[] = {0x6e,0x75,0x6c,0x6c,0x70,0x74,0x72,};
+u8 cpp_main_keys_key_array_82[] = {0x65,0x6e,0x75,0x6d,};
+u8 cpp_main_keys_key_array_84[] = {0x6c,0x6f,0x6e,0x67,};
+u8 cpp_main_keys_key_array_85[] = {0x75,0x6e,0x73,0x69,0x67,0x6e,0x65,0x64,};
+u8 cpp_main_keys_key_array_89[] = {0x63,0x6f,0x6e,0x73,0x74,0x5f,0x63,0x61,0x73,0x74,};
+u8 cpp_main_keys_key_array_94[] = {0x70,0x72,0x6f,0x74,0x65,0x63,0x74,0x65,0x64,};
+u8 cpp_main_keys_key_array_95[] = {0x66,0x6f,0x72,};
+u8 cpp_main_keys_key_array_96[] = {0x73,0x69,0x7a,0x65,0x6f,0x66,};
+u8 cpp_main_keys_key_array_97[] = {0x64,0x65,0x6c,0x65,0x74,0x65,};
+u8 cpp_main_keys_key_array_104[] = {0x63,0x68,0x61,0x72,};
+u8 cpp_main_keys_key_array_107[] = {0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,};
+u8 cpp_main_keys_key_array_109[] = {0x75,0x73,0x69,0x6e,0x67,};
+u8 cpp_main_keys_key_array_111[] = {0x65,0x78,0x74,0x65,0x72,0x6e,};
+u8 cpp_main_keys_key_array_112[] = {0x65,0x6c,0x73,0x65,};
+u8 cpp_main_keys_key_array_113[] = {0x74,0x72,0x75,0x65,};
+u8 cpp_main_keys_key_array_117[] = {0x72,0x65,0x74,0x75,0x72,0x6e,};
+u8 cpp_main_keys_key_array_119[] = {0x64,0x65,0x66,0x61,0x75,0x6c,0x74,};
+u8 cpp_main_keys_key_array_120[] = {0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,};
+String_Const_u8 cpp_main_keys_key_array[121] = {
 {0, 0},
 {0, 0},
 {0, 0},
-{cpp_main_keys_key_array_25, 8},
-{cpp_main_keys_key_array_26, 6},
+{cpp_main_keys_key_array_3, 5},
 {0, 0},
-{cpp_main_keys_key_array_28, 7},
-{cpp_main_keys_key_array_29, 3},
+{cpp_main_keys_key_array_5, 5},
+{cpp_main_keys_key_array_6, 13},
 {0, 0},
-{cpp_main_keys_key_array_31, 4},
+{cpp_main_keys_key_array_8, 12},
+{0, 0},
+{cpp_main_keys_key_array_10, 12},
+{cpp_main_keys_key_array_11, 6},
+{0, 0},
+{cpp_main_keys_key_array_13, 3},
+{cpp_main_keys_key_array_14, 4},
+{cpp_main_keys_key_array_15, 3},
+{cpp_main_keys_key_array_16, 8},
+{0, 0},
+{cpp_main_keys_key_array_18, 3},
+{0, 0},
+{cpp_main_keys_key_array_20, 6},
+{cpp_main_keys_key_array_21, 7},
+{0, 0},
+{cpp_main_keys_key_array_23, 9},
+{cpp_main_keys_key_array_24, 6},
+{cpp_main_keys_key_array_25, 6},
+{cpp_main_keys_key_array_26, 4},
+{cpp_main_keys_key_array_27, 5},
+{0, 0},
+{cpp_main_keys_key_array_29, 4},
+{cpp_main_keys_key_array_30, 2},
 {0, 0},
 {0, 0},
-{cpp_main_keys_key_array_34, 6},
-{0, 0},
-{cpp_main_keys_key_array_36, 6},
-{0, 0},
-{cpp_main_keys_key_array_38, 5},
-{cpp_main_keys_key_array_39, 5},
-{cpp_main_keys_key_array_40, 2},
-{cpp_main_keys_key_array_41, 13},
-{cpp_main_keys_key_array_42, 12},
+{cpp_main_keys_key_array_33, 2},
 {0, 0},
 {0, 0},
-{cpp_main_keys_key_array_45, 4},
+{cpp_main_keys_key_array_36, 4},
+{cpp_main_keys_key_array_37, 8},
 {0, 0},
 {0, 0},
-{cpp_main_keys_key_array_48, 3},
+{cpp_main_keys_key_array_40, 4},
+{cpp_main_keys_key_array_41, 8},
+{cpp_main_keys_key_array_42, 5},
 {0, 0},
-{cpp_main_keys_key_array_50, 12},
+{cpp_main_keys_key_array_44, 3},
+{cpp_main_keys_key_array_45, 6},
+{cpp_main_keys_key_array_46, 8},
+{0, 0},
+{0, 0},
+{cpp_main_keys_key_array_49, 7},
+{cpp_main_keys_key_array_50, 6},
+{cpp_main_keys_key_array_51, 8},
+{cpp_main_keys_key_array_52, 7},
+{cpp_main_keys_key_array_53, 8},
 {0, 0},
 {0, 0},
 {0, 0},
-{0, 0},
-{cpp_main_keys_key_array_55, 4},
-{cpp_main_keys_key_array_56, 4},
-{cpp_main_keys_key_array_57, 7},
+{cpp_main_keys_key_array_57, 6},
+{cpp_main_keys_key_array_58, 5},
+{cpp_main_keys_key_array_59, 8},
 {0, 0},
 {0, 0},
+{cpp_main_keys_key_array_62, 8},
+{cpp_main_keys_key_array_63, 6},
+{cpp_main_keys_key_array_64, 6},
+{cpp_main_keys_key_array_65, 5},
 {0, 0},
 {0, 0},
-{0, 0},
-{cpp_main_keys_key_array_63, 4},
-{cpp_main_keys_key_array_64, 3},
-{cpp_main_keys_key_array_65, 7},
+{cpp_main_keys_key_array_68, 5},
+{cpp_main_keys_key_array_69, 7},
+{cpp_main_keys_key_array_70, 5},
 {0, 0},
 {0, 0},
-{cpp_main_keys_key_array_68, 7},
-{cpp_main_keys_key_array_69, 6},
+{cpp_main_keys_key_array_73, 5},
+{cpp_main_keys_key_array_74, 7},
+{cpp_main_keys_key_array_75, 16},
+{cpp_main_keys_key_array_76, 6},
 {0, 0},
 {0, 0},
+{cpp_main_keys_key_array_79, 7},
 {0, 0},
 {0, 0},
-{cpp_main_keys_key_array_74, 6},
-{cpp_main_keys_key_array_75, 4},
-{cpp_main_keys_key_array_76, 8},
-{cpp_main_keys_key_array_77, 5},
+{cpp_main_keys_key_array_82, 4},
 {0, 0},
-{0, 0},
-{0, 0},
-{cpp_main_keys_key_array_81, 6},
-{cpp_main_keys_key_array_82, 3},
-{cpp_main_keys_key_array_83, 5},
 {cpp_main_keys_key_array_84, 4},
-{0, 0},
-{cpp_main_keys_key_array_86, 10},
-{0, 0},
-{cpp_main_keys_key_array_88, 8},
-{0, 0},
-{cpp_main_keys_key_array_90, 16},
-{cpp_main_keys_key_array_91, 8},
+{cpp_main_keys_key_array_85, 8},
 {0, 0},
 {0, 0},
-{cpp_main_keys_key_array_94, 6},
-{cpp_main_keys_key_array_95, 7},
+{0, 0},
+{cpp_main_keys_key_array_89, 10},
+{0, 0},
+{0, 0},
+{0, 0},
+{0, 0},
+{cpp_main_keys_key_array_94, 9},
+{cpp_main_keys_key_array_95, 3},
 {cpp_main_keys_key_array_96, 6},
 {cpp_main_keys_key_array_97, 6},
 {0, 0},
 {0, 0},
-{cpp_main_keys_key_array_100, 6},
-{0, 0},
-{0, 0},
-{cpp_main_keys_key_array_103, 8},
-{cpp_main_keys_key_array_104, 5},
-{cpp_main_keys_key_array_105, 8},
-{cpp_main_keys_key_array_106, 8},
-{0, 0},
-{cpp_main_keys_key_array_108, 5},
-{0, 0},
-{0, 0},
-{cpp_main_keys_key_array_111, 8},
-{cpp_main_keys_key_array_112, 5},
-{cpp_main_keys_key_array_113, 8},
-{cpp_main_keys_key_array_114, 7},
 {0, 0},
 {0, 0},
 {0, 0},
-{cpp_main_keys_key_array_118, 4},
+{0, 0},
+{cpp_main_keys_key_array_104, 4},
+{0, 0},
+{0, 0},
+{cpp_main_keys_key_array_107, 8},
+{0, 0},
+{cpp_main_keys_key_array_109, 5},
+{0, 0},
+{cpp_main_keys_key_array_111, 6},
+{cpp_main_keys_key_array_112, 4},
+{cpp_main_keys_key_array_113, 4},
 {0, 0},
 {0, 0},
 {0, 0},
-{cpp_main_keys_key_array_122, 6},
-{cpp_main_keys_key_array_123, 9},
+{cpp_main_keys_key_array_117, 6},
+{0, 0},
+{cpp_main_keys_key_array_119, 7},
+{cpp_main_keys_key_array_120, 11},
 };
-Lexeme_Table_Value cpp_main_keys_value_array[124] = {
-{8, TokenCppKind_LiteralTrue},
-{0, 0},
-{4, TokenCppKind_Signed},
-{4, TokenCppKind_Virtual},
-{4, TokenCppKind_Do},
-{0, 0},
-{4, TokenCppKind_Protected},
-{0, 0},
-{0, 0},
-{4, TokenCppKind_Double},
-{4, TokenCppKind_Public},
-{0, 0},
-{0, 0},
-{4, TokenCppKind_Class},
-{4, TokenCppKind_Template},
-{4, TokenCppKind_StaticCast},
-{4, TokenCppKind_Catch},
-{4, TokenCppKind_Goto},
-{0, 0},
-{4, TokenCppKind_Asm},
-{0, 0},
-{4, TokenCppKind_Break},
+Lexeme_Table_Value cpp_main_keys_value_array[121] = {
 {0, 0},
 {0, 0},
 {0, 0},
-{4, TokenCppKind_Volatile},
-{4, TokenCppKind_Switch},
-{0, 0},
-{4, TokenCppKind_Typedef},
-{4, TokenCppKind_Try},
-{0, 0},
-{4, TokenCppKind_Else},
-{0, 0},
-{0, 0},
-{4, TokenCppKind_Return},
-{0, 0},
-{4, TokenCppKind_SizeOf},
-{0, 0},
-{4, TokenCppKind_Const},
 {8, TokenCppKind_LiteralFalse},
-{4, TokenCppKind_If},
+{0, 0},
+{4, TokenCppKind_Short},
 {4, TokenCppKind_StaticAssert},
+{0, 0},
 {4, TokenCppKind_ThreadLocal},
 {0, 0},
+{4, TokenCppKind_DynamicCast},
+{4, TokenCppKind_TypeID},
 {0, 0},
-{4, TokenCppKind_This},
-{0, 0},
+{4, TokenCppKind_New},
+{4, TokenCppKind_Bool},
+{4, TokenCppKind_Try},
+{4, TokenCppKind_Operator},
 {0, 0},
 {4, TokenCppKind_Int},
 {0, 0},
-{4, TokenCppKind_DynamicCast},
+{4, TokenCppKind_Switch},
+{4, TokenCppKind_AlignOf},
+{0, 0},
+{4, TokenCppKind_Namespace},
+{4, TokenCppKind_Inline},
+{4, TokenCppKind_Static},
+{4, TokenCppKind_This},
+{4, TokenCppKind_Break},
+{0, 0},
+{4, TokenCppKind_Case},
+{4, TokenCppKind_If},
 {0, 0},
 {0, 0},
+{4, TokenCppKind_Do},
+{0, 0},
+{0, 0},
+{4, TokenCppKind_Goto},
+{4, TokenCppKind_Explicit},
+{0, 0},
+{0, 0},
+{4, TokenCppKind_Void},
+{4, TokenCppKind_Continue},
+{4, TokenCppKind_Catch},
+{0, 0},
+{4, TokenCppKind_Asm},
+{4, TokenCppKind_Signed},
+{4, TokenCppKind_Volatile},
+{0, 0},
+{0, 0},
+{4, TokenCppKind_Private},
+{4, TokenCppKind_Double},
+{4, TokenCppKind_Typename},
+{4, TokenCppKind_Virtual},
+{4, TokenCppKind_NoExcept},
+{0, 0},
+{0, 0},
+{0, 0},
+{4, TokenCppKind_Public},
+{4, TokenCppKind_Class},
+{4, TokenCppKind_DeclType},
+{0, 0},
+{0, 0},
+{4, TokenCppKind_Template},
+{4, TokenCppKind_Export},
+{4, TokenCppKind_Friend},
+{4, TokenCppKind_Const},
+{0, 0},
+{0, 0},
+{4, TokenCppKind_While},
+{4, TokenCppKind_Typedef},
+{4, TokenCppKind_Float},
+{0, 0},
+{0, 0},
+{4, TokenCppKind_Union},
+{4, TokenCppKind_AlignAs},
+{4, TokenCppKind_ReinterpretCast},
+{4, TokenCppKind_Struct},
+{0, 0},
+{0, 0},
+{4, TokenCppKind_NullPtr},
 {0, 0},
 {0, 0},
 {4, TokenCppKind_Enum},
-{4, TokenCppKind_Char},
-{4, TokenCppKind_AlignAs},
+{0, 0},
+{4, TokenCppKind_Long},
+{4, TokenCppKind_Unsigned},
+{0, 0},
+{0, 0},
+{0, 0},
+{4, TokenCppKind_ConstCast},
 {0, 0},
 {0, 0},
 {0, 0},
 {0, 0},
-{0, 0},
-{4, TokenCppKind_Case},
+{4, TokenCppKind_Protected},
 {4, TokenCppKind_For},
-{4, TokenCppKind_AlignOf},
-{0, 0},
-{0, 0},
-{4, TokenCppKind_Default},
+{4, TokenCppKind_SizeOf},
 {4, TokenCppKind_Delete},
 {0, 0},
 {0, 0},
 {0, 0},
 {0, 0},
-{4, TokenCppKind_Extern},
-{4, TokenCppKind_Long},
+{0, 0},
+{0, 0},
+{4, TokenCppKind_Char},
+{0, 0},
+{0, 0},
 {4, TokenCppKind_Register},
-{4, TokenCppKind_While},
 {0, 0},
-{0, 0},
-{0, 0},
-{4, TokenCppKind_Inline},
-{4, TokenCppKind_New},
-{4, TokenCppKind_Float},
-{4, TokenCppKind_Bool},
-{0, 0},
-{4, TokenCppKind_ConstCast},
-{0, 0},
-{4, TokenCppKind_Operator},
-{0, 0},
-{4, TokenCppKind_ReinterpretCast},
-{4, TokenCppKind_Explicit},
-{0, 0},
-{0, 0},
-{4, TokenCppKind_Struct},
-{4, TokenCppKind_NullPtr},
-{4, TokenCppKind_Export},
-{4, TokenCppKind_Static},
-{0, 0},
-{0, 0},
-{4, TokenCppKind_Friend},
-{0, 0},
-{0, 0},
-{4, TokenCppKind_Continue},
 {4, TokenCppKind_Using},
-{4, TokenCppKind_DeclType},
-{4, TokenCppKind_Unsigned},
 {0, 0},
-{4, TokenCppKind_Short},
-{0, 0},
-{0, 0},
-{4, TokenCppKind_Typename},
-{4, TokenCppKind_Union},
-{4, TokenCppKind_NoExcept},
-{4, TokenCppKind_Private},
+{4, TokenCppKind_Extern},
+{4, TokenCppKind_Else},
+{8, TokenCppKind_LiteralTrue},
 {0, 0},
 {0, 0},
 {0, 0},
-{4, TokenCppKind_Void},
+{4, TokenCppKind_Return},
 {0, 0},
-{0, 0},
-{0, 0},
-{4, TokenCppKind_TypeID},
-{4, TokenCppKind_Namespace},
+{4, TokenCppKind_Default},
+{4, TokenCppKind_StaticCast},
 };
-i32 cpp_main_keys_slot_count = 124;
-u64 cpp_main_keys_seed = 0x8546da5e0b8a4494;
+i32 cpp_main_keys_slot_count = 121;
+u64 cpp_main_keys_seed = 0xbe799f2fde8371d5;
 u64 cpp_pp_directives_hash_array[25] = {
-0xa9c93e3b092cb44d,0x0000000000000000,0x0dd88216be8f0f45,0x0000000000000000,
-0x0dd88216bc8af78d,0x92a889595c683c55,0xdab9e300145b906f,0x92a889577e972a4b,
-0x0000000000000000,0x0dd88216bb8053ff,0x0000000000000000,0x0dd88216bd573601,
-0x0000000000000000,0xdab9e300142a071d,0x0000000000000000,0xa9c93ef34054fce1,
-0x0dd88216a4783a45,0xdab9e300145b9a25,0x92a889595b4a2105,0x0000000000000000,
-0x86d1d427e10cd86d,0x0000000000000000,0x92a889590753d01d,0x0000000000000000,
-0x0000000000000000,
+0x0000000000000000,0x7374aea13484b05f,0x0000000000000000,0x13df0688ba346a0b,
+0x13df0688baa01c5b,0x0000000000000000,0x7608ddc2856c80e7,0x7608ddb7913d492b,
+0xa00a5f761251a671,0x7374abedc5e7bf23,0x0000000000000000,0x7608ddb7b08326a7,
+0x0000000000000000,0x0000000000000000,0x13df0688bc2f3331,0x0000000000000000,
+0x7608ddc8a5840d1d,0x13df068884fd102b,0x0000000000000000,0xc7e053324abe568b,
+0xa00a5f761208b767,0x0000000000000000,0x0000000000000000,0xa00a5f761251cfeb,
+0x13df0688bc39ad2b,
 };
-u8 cpp_pp_directives_key_array_0[] = {0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,};
-u8 cpp_pp_directives_key_array_2[] = {0x69,0x66,0x64,0x65,0x66,};
-u8 cpp_pp_directives_key_array_4[] = {0x65,0x6e,0x64,0x69,0x66,};
-u8 cpp_pp_directives_key_array_5[] = {0x69,0x66,0x6e,0x64,0x65,0x66,};
-u8 cpp_pp_directives_key_array_6[] = {0x65,0x6c,0x73,0x65,};
-u8 cpp_pp_directives_key_array_7[] = {0x70,0x72,0x61,0x67,0x6d,0x61,};
-u8 cpp_pp_directives_key_array_9[] = {0x75,0x73,0x69,0x6e,0x67,};
-u8 cpp_pp_directives_key_array_11[] = {0x65,0x72,0x72,0x6f,0x72,};
-u8 cpp_pp_directives_key_array_13[] = {0x6c,0x69,0x6e,0x65,};
-u8 cpp_pp_directives_key_array_15[] = {0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,};
-u8 cpp_pp_directives_key_array_16[] = {0x75,0x6e,0x64,0x65,0x66,};
-u8 cpp_pp_directives_key_array_17[] = {0x65,0x6c,0x69,0x66,};
-u8 cpp_pp_directives_key_array_18[] = {0x69,0x6d,0x70,0x6f,0x72,0x74,};
-u8 cpp_pp_directives_key_array_20[] = {0x69,0x66,};
-u8 cpp_pp_directives_key_array_22[] = {0x64,0x65,0x66,0x69,0x6e,0x65,};
+u8 cpp_pp_directives_key_array_1[] = {0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,};
+u8 cpp_pp_directives_key_array_3[] = {0x65,0x6e,0x64,0x69,0x66,};
+u8 cpp_pp_directives_key_array_4[] = {0x65,0x72,0x72,0x6f,0x72,};
+u8 cpp_pp_directives_key_array_6[] = {0x64,0x65,0x66,0x69,0x6e,0x65,};
+u8 cpp_pp_directives_key_array_7[] = {0x69,0x66,0x6e,0x64,0x65,0x66,};
+u8 cpp_pp_directives_key_array_8[] = {0x65,0x6c,0x73,0x65,};
+u8 cpp_pp_directives_key_array_9[] = {0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,};
+u8 cpp_pp_directives_key_array_11[] = {0x69,0x6d,0x70,0x6f,0x72,0x74,};
+u8 cpp_pp_directives_key_array_14[] = {0x75,0x73,0x69,0x6e,0x67,};
+u8 cpp_pp_directives_key_array_16[] = {0x70,0x72,0x61,0x67,0x6d,0x61,};
+u8 cpp_pp_directives_key_array_17[] = {0x69,0x66,0x64,0x65,0x66,};
+u8 cpp_pp_directives_key_array_19[] = {0x69,0x66,};
+u8 cpp_pp_directives_key_array_20[] = {0x6c,0x69,0x6e,0x65,};
+u8 cpp_pp_directives_key_array_23[] = {0x65,0x6c,0x69,0x66,};
+u8 cpp_pp_directives_key_array_24[] = {0x75,0x6e,0x64,0x65,0x66,};
 String_Const_u8 cpp_pp_directives_key_array[25] = {
-{cpp_pp_directives_key_array_0, 7},
 {0, 0},
-{cpp_pp_directives_key_array_2, 5},
+{cpp_pp_directives_key_array_1, 7},
 {0, 0},
+{cpp_pp_directives_key_array_3, 5},
 {cpp_pp_directives_key_array_4, 5},
-{cpp_pp_directives_key_array_5, 6},
-{cpp_pp_directives_key_array_6, 4},
+{0, 0},
+{cpp_pp_directives_key_array_6, 6},
 {cpp_pp_directives_key_array_7, 6},
+{cpp_pp_directives_key_array_8, 4},
+{cpp_pp_directives_key_array_9, 7},
 {0, 0},
-{cpp_pp_directives_key_array_9, 5},
-{0, 0},
-{cpp_pp_directives_key_array_11, 5},
-{0, 0},
-{cpp_pp_directives_key_array_13, 4},
-{0, 0},
-{cpp_pp_directives_key_array_15, 7},
-{cpp_pp_directives_key_array_16, 5},
-{cpp_pp_directives_key_array_17, 4},
-{cpp_pp_directives_key_array_18, 6},
-{0, 0},
-{cpp_pp_directives_key_array_20, 2},
-{0, 0},
-{cpp_pp_directives_key_array_22, 6},
+{cpp_pp_directives_key_array_11, 6},
 {0, 0},
 {0, 0},
+{cpp_pp_directives_key_array_14, 5},
+{0, 0},
+{cpp_pp_directives_key_array_16, 6},
+{cpp_pp_directives_key_array_17, 5},
+{0, 0},
+{cpp_pp_directives_key_array_19, 2},
+{cpp_pp_directives_key_array_20, 4},
+{0, 0},
+{0, 0},
+{cpp_pp_directives_key_array_23, 4},
+{cpp_pp_directives_key_array_24, 5},
 };
 Lexeme_Table_Value cpp_pp_directives_value_array[25] = {
-{5, TokenCppKind_PPVersion},
 {0, 0},
-{5, TokenCppKind_PPIfDef},
+{5, TokenCppKind_PPInclude},
 {0, 0},
 {5, TokenCppKind_PPEndIf},
+{5, TokenCppKind_PPError},
+{0, 0},
+{5, TokenCppKind_PPDefine},
 {5, TokenCppKind_PPIfNDef},
 {5, TokenCppKind_PPElse},
-{5, TokenCppKind_PPPragma},
+{5, TokenCppKind_PPVersion},
+{0, 0},
+{5, TokenCppKind_PPImport},
+{0, 0},
 {0, 0},
 {5, TokenCppKind_PPUsing},
 {0, 0},
-{5, TokenCppKind_PPError},
-{0, 0},
-{5, TokenCppKind_PPLine},
-{0, 0},
-{5, TokenCppKind_PPInclude},
-{5, TokenCppKind_PPUndef},
-{5, TokenCppKind_PPElIf},
-{5, TokenCppKind_PPImport},
+{5, TokenCppKind_PPPragma},
+{5, TokenCppKind_PPIfDef},
 {0, 0},
 {5, TokenCppKind_PPIf},
-{0, 0},
-{5, TokenCppKind_PPDefine},
+{5, TokenCppKind_PPLine},
 {0, 0},
 {0, 0},
+{5, TokenCppKind_PPElIf},
+{5, TokenCppKind_PPUndef},
 };
 i32 cpp_pp_directives_slot_count = 25;
-u64 cpp_pp_directives_seed = 0x6e8a1011f7d8dd90;
+u64 cpp_pp_directives_seed = 0xd17159c86f8daa32;
 u64 cpp_pp_keys_hash_array[2] = {
-0x56dd32803fcaa4ab,0x0000000000000000,
+0x0000000000000000,0x11c2628dcdcd8d85,
 };
-u8 cpp_pp_keys_key_array_0[] = {0x64,0x65,0x66,0x69,0x6e,0x65,0x64,};
+u8 cpp_pp_keys_key_array_1[] = {0x64,0x65,0x66,0x69,0x6e,0x65,0x64,};
 String_Const_u8 cpp_pp_keys_key_array[2] = {
-{cpp_pp_keys_key_array_0, 7},
 {0, 0},
+{cpp_pp_keys_key_array_1, 7},
 };
 Lexeme_Table_Value cpp_pp_keys_value_array[2] = {
-{4, TokenCppKind_PPDefined},
 {0, 0},
+{4, TokenCppKind_PPDefined},
 };
 i32 cpp_pp_keys_slot_count = 2;
-u64 cpp_pp_keys_seed = 0xbb7907ea1860ef2c;
+u64 cpp_pp_keys_seed = 0x965fd683eb991685;
 struct Lex_State_Cpp{
 u32 flags_ZF0;
 u32 flags_KF0;
@@ -560,10 +554,10 @@ token.kind = 2;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -643,10 +637,10 @@ token.kind = 13;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -665,10 +659,10 @@ token.kind = 14;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -697,10 +691,10 @@ token.kind = 15;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -750,10 +744,10 @@ token.kind = 15;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -791,10 +785,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -830,10 +824,10 @@ token.kind = 13;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -857,10 +851,10 @@ token.kind = 14;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -879,10 +873,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -907,10 +901,10 @@ token.kind = 11;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -934,10 +928,10 @@ token.kind = 12;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -956,10 +950,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1038,10 +1032,10 @@ token.kind = 6;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1088,10 +1082,10 @@ token.kind = 1;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1151,10 +1145,10 @@ token.kind = 10;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1196,10 +1190,10 @@ token.kind = 1;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1218,10 +1212,10 @@ token.kind = 1;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1263,10 +1257,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1285,10 +1279,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1341,10 +1335,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1373,10 +1367,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1418,10 +1412,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1494,10 +1488,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1577,10 +1571,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1610,10 +1604,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1632,10 +1626,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1677,10 +1671,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1710,10 +1704,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1732,10 +1726,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1777,10 +1771,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1805,10 +1799,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1827,10 +1821,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1872,10 +1866,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1900,10 +1894,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1922,10 +1916,10 @@ token.kind = 9;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -1967,10 +1961,10 @@ token.kind = 2;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2020,10 +2014,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2088,10 +2082,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2175,10 +2169,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2250,10 +2244,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2287,10 +2281,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2352,10 +2346,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2384,10 +2378,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2449,10 +2443,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2481,10 +2475,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2551,10 +2545,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2583,10 +2577,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2648,10 +2642,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2680,10 +2674,10 @@ token.kind = 8;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2725,10 +2719,10 @@ token.kind = 2;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2824,10 +2818,10 @@ state.flags_KF0 |= 0x2;
 }
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2882,10 +2876,10 @@ token.kind = 2;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2918,10 +2912,10 @@ token.kind = 10;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2963,10 +2957,10 @@ token.kind = 2;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -2999,10 +2993,10 @@ token.kind = 10;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -3171,10 +3165,10 @@ token.kind = 2;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -3214,10 +3208,10 @@ token.kind = 10;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -3260,10 +3254,10 @@ token.kind = 10;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -3637,10 +3631,10 @@ token.kind = 2;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -3768,10 +3762,10 @@ token.kind = 10;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -3895,10 +3889,10 @@ token.kind = 3;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -3945,10 +3939,10 @@ token.kind = 3;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -3990,10 +3984,10 @@ token.kind = 15;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4012,10 +4006,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4057,10 +4051,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4079,10 +4073,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4101,10 +4095,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4146,10 +4140,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4168,10 +4162,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4190,10 +4184,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4240,10 +4234,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4262,10 +4256,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4307,10 +4301,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4362,10 +4356,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4384,10 +4378,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4434,10 +4428,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4456,10 +4450,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4501,10 +4495,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4523,10 +4517,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4568,10 +4562,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4590,10 +4584,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4635,10 +4629,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4657,10 +4651,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4702,10 +4696,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4724,10 +4718,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4769,10 +4763,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4791,10 +4785,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4836,10 +4830,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4858,10 +4852,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4903,10 +4897,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4925,10 +4919,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4970,10 +4964,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -4992,10 +4986,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -5037,10 +5031,10 @@ token.kind = 15;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -5059,10 +5053,10 @@ token.kind = 15;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -5104,10 +5098,10 @@ token.kind = 2;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
@@ -5126,10 +5120,10 @@ token.kind = 7;
 }while(0);
 token_list_push(arena, list, &token);
 emit_counter += 1;
+state.emit_ptr = state.ptr;
 if (emit_counter == max){
 goto end;
 }
-state.emit_ptr = state.ptr;
 }
 state.flags_ZF0 = 0;
 goto state_label_1; // root
diff --git a/custom/lexer_generator/4coder_lex_gen_main.cpp b/custom/lexer_generator/4coder_lex_gen_main.cpp
index ec02a67b..086715b2 100644
--- a/custom/lexer_generator/4coder_lex_gen_main.cpp
+++ b/custom/lexer_generator/4coder_lex_gen_main.cpp
@@ -3531,12 +3531,12 @@ gen_SLOW_action_list__cont_flow(Arena *scratch, Token_Kind_Set tokens, Flag_Set
                 
                 fprintf(out, "token_list_push(arena, list, &token);\n");
                 fprintf(out, "emit_counter += 1;\n");
+                fprintf(out, "state.emit_ptr = state.ptr;\n");
                 if (context != ActionContext_EndOfFile){
                     fprintf(out, "if (emit_counter == max){\n");
                     fprintf(out, "goto end;\n");
                     fprintf(out, "}\n");
                 }
-                fprintf(out, "state.emit_ptr = state.ptr;\n");
                 fprintf(out, "}\n");
             }break;
         }
diff --git a/ship_files/changes.txt b/ship_files/changes.txt
index 2c0837b8..e8c636ab 100644
--- a/ship_files/changes.txt
+++ b/ship_files/changes.txt
@@ -12,6 +12,10 @@
  + Fix: the margin colors for panels are determined by the margins in theme files
  + Fix: when a file is deleted outside of 4coder, the '!' dirty status is added to the buffer
  + Fix: on mac file changes outside of 4coder are detected and do not stall the UI
+ + Fix: in virtual whitespace layouts blank lines correctly mark carriage return characters before newline characters
+ + Fix: auto-indentation leaves the carriage return in CRLF line endings in place and does not count them as indentation
+ + Fix: lexer emit pointer advances correctly when the output buffer becomes full
+ + Improvement: optimization in clean_all_lines command, handles CRLF line endings
 
 4.1.2
  + Cursor color changes when recording macro if the theme provides a second cursor color