From 8f8ad47f4ea7260c72d83731b69ddd0ba3f834a5 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Fri, 23 Aug 2019 18:34:42 -0700 Subject: [PATCH] Log grapher wrapped up, more flexible key matching in listers, i64 in markers --- 4coder_API/4coder_types.h | 2 +- 4coder_API/4coder_version.h | 6 + 4coder_api_transition_30_31.h | 6 +- 4coder_api_transition_30_31_helpers.cpp | 2 + 4coder_base_commands.cpp | 56 +- 4coder_base_types.cpp | 4 +- 4coder_base_types.h | 2 +- 4coder_build_commands.cpp | 4 +- 4coder_default_framework.h | 3 +- 4coder_default_framework_variables.cpp | 68 +- 4coder_default_hooks.cpp | 21 - 4coder_default_include.cpp | 4 +- 4coder_fancy.cpp | 39 +- 4coder_generated/command_metadata.h | 983 ++++++++++++------------ 4coder_generated/remapping.h | 40 +- 4coder_helper.cpp | 30 + 4coder_jump_direct.cpp | 138 ---- 4coder_jump_sticky.cpp | 80 +- 4coder_jumping.cpp | 37 +- 4coder_log_parser.cpp | 749 ++++++++++++++++-- 4coder_log_parser.h | 71 ++ 4coder_remapping_commands.cpp | 2 + 4coder_ui_helper.cpp | 57 +- 4ed_buffer.cpp | 8 +- 4ed_buffer.h | 2 +- 4ed_edit.cpp | 6 +- 4ed_file.cpp | 2 +- 4ed_view.cpp | 1 + 4ed_working_set.cpp | 2 +- meta/4ed_metagen.cpp | 20 +- platform_win32/win32_4ed.cpp | 2 + 31 files changed, 1516 insertions(+), 931 deletions(-) delete mode 100644 4coder_jump_direct.cpp diff --git a/4coder_API/4coder_types.h b/4coder_API/4coder_types.h index c1fb8a8f..f3bb82a4 100644 --- a/4coder_API/4coder_types.h +++ b/4coder_API/4coder_types.h @@ -615,7 +615,7 @@ DOC_SEE(buffer_add_markers) */ STRUCT Marker{ /* DOC(The current position of the marker measure in absolute byte positioning coordinates.) */ - i32 pos; + i64 pos; /* DOC(When a marker is inside a range that gets edited, by default the marker 'leans_left' which means it goes to the beginning of the edited range. If the field lean_right is set to true, the marker will lean right with edits and will go to the end of edited range.) */ b32 lean_right; }; diff --git a/4coder_API/4coder_version.h b/4coder_API/4coder_version.h index 71127e2a..01d982c8 100644 --- a/4coder_API/4coder_version.h +++ b/4coder_API/4coder_version.h @@ -20,6 +20,12 @@ #define VERSION_TYPE #endif +// string +#define VN__(a,b,c) #a "." #b "." #c +#define VN_(a,b,c) VN__(a,b,c) +#define VERSION_NUMBER VN_(MAJOR,MINOR,PATCH) +#define VERSION_STRING "alpha " VERSION_NUMBER + #define VERSION VERSION_STRING VERSION_TYPE #define WINDOW_NAME "4coder: " VERSION diff --git a/4coder_api_transition_30_31.h b/4coder_api_transition_30_31.h index 4e6b73fc..e05f4af1 100644 --- a/4coder_api_transition_30_31.h +++ b/4coder_api_transition_30_31.h @@ -8,9 +8,9 @@ * This transition helper will be removed in a future version so it is recommended to get off sooner or laster. * * Tips on transitioning: -* -* Wrather than just try to inline this code everywhere, you can simplify things quite a lot by storing references -* to buffers and views and Buffer_ID and View_ID instead of Buffer_Summary and View_Summary. + * + * Wrather than just try to inline this code everywhere, you can simplify things quite a lot by storing references + * to buffers and views and Buffer_ID and View_ID instead of Buffer_Summary and View_Summary. * Just get the summaries when you need information in those structures. * * You will make your code simpler if you stick to String as much as possible, but whenever you want to you can switch diff --git a/4coder_api_transition_30_31_helpers.cpp b/4coder_api_transition_30_31_helpers.cpp index 3f47be0e..e60d21d1 100644 --- a/4coder_api_transition_30_31_helpers.cpp +++ b/4coder_api_transition_30_31_helpers.cpp @@ -762,10 +762,12 @@ view_set_vertical_focus(Application_Links *app, View_Summary *view, i32 y_top, i view_set_vertical_focus(app, view==0?0:view->view_id, (f32)y_top, (f32)y_bot); } +#if 0 static b32 advance_cursor_in_jump_view(Application_Links *app, View_Summary *view, i32 skip_repeats, i32 skip_sub_error, i32 direction, Name_Line_Column_Location *location_out){ return(advance_cursor_in_jump_view(app, view==0?0:view->view_id, skip_repeats, skip_sub_error, direction, location_out)); } +#endif static Parsed_Jump seek_next_jump_in_view(Application_Links *app, Arena *arena, View_Summary *view, i32 skip_sub_errors, i32 direction, i32 *line_out){ diff --git a/4coder_base_commands.cpp b/4coder_base_commands.cpp index 0b73fca6..c847b425 100644 --- a/4coder_base_commands.cpp +++ b/4coder_base_commands.cpp @@ -314,16 +314,9 @@ CUSTOM_DOC("Reads the scroll wheel value from the mouse state and scrolls accord //////////////////////////////// -static void -move_vertical(Application_Links *app, f32 line_multiplier){ - View_ID view = get_active_view(app, AccessProtected); - - Buffer_ID buffer = view_get_buffer(app, view, AccessProtected); - Face_ID face_id = get_face_id(app, buffer); - Face_Metrics metrics = get_face_metrics(app, face_id); - - f32 delta_y = line_multiplier*metrics.line_height; - f32 new_y = get_view_y(app, view) + delta_y; +internal void +move_vertical_pixels(Application_Links *app, View_ID view, f32 pixels){ + f32 new_y = get_view_y(app, view) + pixels; f32 x = view_get_preferred_x(app, view); view_set_cursor(app, view, seek_wrapped_xy(x, new_y, false), false); @@ -335,7 +328,7 @@ move_vertical(Application_Links *app, f32 line_multiplier){ GUI_Scroll_Vars scroll_vars = view_get_scroll_vars(app, view); if (scroll_vars.target_y < full_scroll_y){ GUI_Scroll_Vars new_scroll_vars = scroll_vars; - new_scroll_vars.target_y += (i32)delta_y; + new_scroll_vars.target_y += (i32)pixels; new_scroll_vars.target_y = clamp_top(new_scroll_vars.target_y, (i32)full_scroll_y); view_set_scroll(app, view, new_scroll_vars); } @@ -344,21 +337,34 @@ move_vertical(Application_Links *app, f32 line_multiplier){ no_mark_snap_to_cursor_if_shift(app, view); } -static f32 -get_page_jump(Application_Links *app, View_ID view){ - Rect_f32 region = view_get_buffer_region(app, view); +internal void +move_vertical_pixels(Application_Links *app, f32 pixels){ + View_ID view = get_active_view(app, AccessProtected); + move_vertical_pixels(app, view, pixels); +} + +internal void +move_vertical_lines(Application_Links *app, View_ID view, f32 lines){ Buffer_ID buffer = view_get_buffer(app, view, AccessProtected); Face_ID face_id = get_face_id(app, buffer); Face_Metrics metrics = get_face_metrics(app, face_id); - f32 page_jump = 1.f; - if (metrics.line_height > 0.f){ - f32 height = rect_height(region); - f32 line_count = height/metrics.line_height; - i32 line_count_rounded = (i32)line_count; - page_jump = (f32)line_count_rounded - 3.f; - page_jump = clamp_bot(1.f, page_jump); - } - return(page_jump); + + f32 delta_y = lines*metrics.line_height; + move_vertical_pixels(app, delta_y); +} + +internal void +move_vertical_lines(Application_Links *app, f32 lines){ + View_ID view = get_active_view(app, AccessProtected); + move_vertical_lines(app, view, lines); +} + +#define move_vertical move_vertical_lines + +internal f32 +get_page_jump(Application_Links *app, View_ID view){ + Rect_f32 region = view_get_buffer_region(app, view); + return(rect_height(region)*.9f); } CUSTOM_COMMAND_SIG(move_up) @@ -400,7 +406,7 @@ CUSTOM_DOC("Scrolls the view up one view height and moves the cursor up one view { View_ID view = get_active_view(app, AccessProtected); f32 page_jump = get_page_jump(app, view); - move_vertical(app, -page_jump); + move_vertical_pixels(app, -page_jump); } CUSTOM_COMMAND_SIG(page_down) @@ -408,7 +414,7 @@ CUSTOM_DOC("Scrolls the view down one view height and moves the cursor down one { View_ID view = get_active_view(app, AccessProtected); f32 page_jump = get_page_jump(app, view); - move_vertical(app, page_jump); + move_vertical_pixels(app, page_jump); } internal void diff --git a/4coder_base_types.cpp b/4coder_base_types.cpp index 29554e30..d60b45b0 100644 --- a/4coder_base_types.cpp +++ b/4coder_base_types.cpp @@ -1430,11 +1430,11 @@ operator!=(Vec4_f32 a, Vec4_f32 b){ static b32 operator==(Rect_i32 a, Rect_i32 b){ - return(a.p0 == b.p0 && a.p0 == b.p0); + return(a.p0 == b.p0 && a.p1 == b.p1); } static b32 operator==(Rect_f32 a, Rect_f32 b){ - return(a.p0 == b.p0 && a.p0 == b.p0); + return(a.p0 == b.p0 && a.p1 == b.p1); } static b32 diff --git a/4coder_base_types.h b/4coder_base_types.h index 53ec1db4..079bdb83 100644 --- a/4coder_base_types.h +++ b/4coder_base_types.h @@ -464,7 +464,7 @@ union SNode{ #define dll_remove_multiple(n1,n2) (dll_remove_multiple_((n1),(n2))) #define sll_stack_push_(h,n) n->next=h,h=n -#define sll_stack_pop_(h) h->next=0,h=h->next +#define sll_stack_pop_(h) h=h=h->next #define sll_queue_push_multiple_(f,l,ff,ll) if(ll){if(f){l->next=ff;}else{f=ff;}l=ll;l->next=0;} #define sll_queue_push_(f,l,n) sll_queue_push_multiple_(f,l,n,n) #define sll_queue_pop_(f,l) if (f==l) { f=l=0; } else { f->next=0;f=f->next; } diff --git a/4coder_build_commands.cpp b/4coder_build_commands.cpp index d889ffec..da551b54 100644 --- a/4coder_build_commands.cpp +++ b/4coder_build_commands.cpp @@ -131,7 +131,7 @@ CUSTOM_DOC("Looks for a build.bat, build.sh, or makefile in the current and pare View_ID view = get_active_view(app, AccessAll); Buffer_ID buffer = view_get_buffer(app, view, AccessAll); standard_search_and_build(app, view, buffer); - memset(&prev_location, 0, sizeof(prev_location)); + block_zero_struct(&prev_location); lock_jump_buffer(app, string_u8_litexpr("*compilation*")); } @@ -171,7 +171,7 @@ CUSTOM_DOC("Looks for a build.bat, build.sh, or makefile in the current and pare standard_search_and_build(app, build_view, buffer); set_fancy_compilation_buffer_font(app); - memset(&prev_location, 0, sizeof(prev_location)); + block_zero_struct(&prev_location); lock_jump_buffer(app, string_u8_litexpr("*compilation*")); } diff --git a/4coder_default_framework.h b/4coder_default_framework.h index 55e324c3..bbab5886 100644 --- a/4coder_default_framework.h +++ b/4coder_default_framework.h @@ -10,6 +10,7 @@ enum Default_Maps{ default_code_map, default_lister_ui_map, + default_log_graph_map, default_maps_count, }; @@ -32,7 +33,7 @@ typedef ID_Line_Column_Jump_Location ID_Based_Jump_Location; struct ID_Pos_Jump_Location{ Buffer_ID buffer_id; - i32 pos; + i64 pos; }; struct Name_Line_Column_Location{ diff --git a/4coder_default_framework_variables.cpp b/4coder_default_framework_variables.cpp index 3141b927..5789989c 100644 --- a/4coder_default_framework_variables.cpp +++ b/4coder_default_framework_variables.cpp @@ -5,12 +5,12 @@ the default 4coder behavior. // TOP -static Named_Mapping *named_maps = 0; -static i32 named_map_count = 0; +global Named_Mapping *named_maps = 0; +global i32 named_map_count = 0; -static b32 allow_immediate_close_without_checking_for_changes = false; +global b32 allow_immediate_close_without_checking_for_changes = false; -static char *default_extensions[] = { +global char *default_extensions[] = { "cpp", "hpp", "c", @@ -26,56 +26,56 @@ static char *default_extensions[] = { #if !defined(AUTO_CENTER_AFTER_JUMPS) #define AUTO_CENTER_AFTER_JUMPS true #endif -static b32 auto_center_after_jumps = AUTO_CENTER_AFTER_JUMPS; -static u8 locked_buffer_space[256]; -static String_Const_u8 locked_buffer = {}; +global b32 auto_center_after_jumps = AUTO_CENTER_AFTER_JUMPS; +global u8 locked_buffer_space[256]; +global String_Const_u8 locked_buffer = {}; -static View_ID build_footer_panel_view_id = 0; +global View_ID build_footer_panel_view_id = 0; -static Managed_Variable_ID view_rewrite_loc = 0; -static Managed_Variable_ID view_next_rewrite_loc = 0; -static Managed_Variable_ID view_paste_index_loc = 0; -static Managed_Variable_ID view_is_passive_loc = 0; -static Managed_Variable_ID view_snap_mark_to_cursor = 0; -static Managed_Variable_ID view_ui_data = 0; -static Managed_Variable_ID view_highlight_range = 0; -static Managed_Variable_ID view_highlight_buffer = 0; -static Managed_Variable_ID view_render_hook = 0; +global Managed_Variable_ID view_rewrite_loc = 0; +global Managed_Variable_ID view_next_rewrite_loc = 0; +global Managed_Variable_ID view_paste_index_loc = 0; +global Managed_Variable_ID view_is_passive_loc = 0; +global Managed_Variable_ID view_snap_mark_to_cursor = 0; +global Managed_Variable_ID view_ui_data = 0; +global Managed_Variable_ID view_highlight_range = 0; +global Managed_Variable_ID view_highlight_buffer = 0; +global Managed_Variable_ID view_render_hook = 0; -static Managed_Variable_ID sticky_jump_marker_handle = 0; +global Managed_Variable_ID sticky_jump_marker_handle = 0; -static u8 out_buffer_space[1024]; -static u8 command_space[1024]; -static char hot_directory_space[1024]; +global u8 out_buffer_space[1024]; +global u8 command_space[1024]; +global char hot_directory_space[1024]; -static b32 highlight_line_at_cursor = true; -static b32 do_matching_enclosure_highlight = true; -static b32 do_matching_paren_highlight = true; -static b32 do_colored_comment_keywords = true; -static b32 suppressing_mouse = false; +global b32 highlight_line_at_cursor = true; +global b32 do_matching_enclosure_highlight = true; +global b32 do_matching_paren_highlight = true; +global b32 do_colored_comment_keywords = true; +global b32 suppressing_mouse = false; -static b32 cursor_is_hidden = false; +global b32 cursor_is_hidden = false; -static b32 show_fps_hud = false; +global b32 show_fps_hud = false; -static Heap global_heap; +global Heap global_heap; enum{ FCoderMode_Original = 0, FCoderMode_NotepadLike = 1, }; -static i32 fcoder_mode = FCoderMode_Original; +global i32 fcoder_mode = FCoderMode_Original; -static ID_Line_Column_Jump_Location prev_location = {}; +global ID_Pos_Jump_Location prev_location = {}; -static Arena global_config_arena = {}; -static Config_Data global_config = {}; +global Arena global_config_arena = {}; +global Config_Data global_config = {}; -static char previous_isearch_query[256] = {}; +global char previous_isearch_query[256] = {}; // BOTTOM diff --git a/4coder_default_hooks.cpp b/4coder_default_hooks.cpp index 314dea52..1f58ebc5 100644 --- a/4coder_default_hooks.cpp +++ b/4coder_default_hooks.cpp @@ -742,27 +742,6 @@ default_buffer_render_caller(Application_Links *app, Frame_Info frame_info, View //managed_scope_clear_self_all_dependent_scopes(app, render_scope); } -static int_color -get_margin_color(i32 level){ - int_color margin = 0; - switch (level){ - default: - case UIActivation_None: - { - margin = Stag_List_Item; - }break; - case UIActivation_Hover: - { - margin = Stag_List_Item_Hover; - }break; - case UIActivation_Active: - { - margin = Stag_List_Item_Active; - }break; - } - return(margin); -} - static void default_ui_render_caller(Application_Links *app, View_ID view_id, Rect_f32 rect_f32, Face_ID face_id){ UI_Data *ui_data = 0; diff --git a/4coder_default_include.cpp b/4coder_default_include.cpp index e41474fd..667b58c3 100644 --- a/4coder_default_include.cpp +++ b/4coder_default_include.cpp @@ -8,7 +8,6 @@ #define FCODER_DEFAULT_INCLUDE_CPP // NOTE(allen): Defines before 4coder_default_include.cpp: -// USE_OLD_STYLE_JUMPS -> use "old style" direct jumps instead of sticky jumps // REMOVE_TRANSITION_HELPER_31 -> does not include the transition helpers for the API changes in 4.0.31 // REMOVE_OLD_STRING -> does not include the old 4coder_string.h library. // NOTE: You can only remove "old string" if you first remove the transition helper. @@ -66,7 +65,6 @@ #include "4coder_default_framework_variables.cpp" #include "4coder_helper.cpp" -#include "4coder_log_parser.cpp" #include "4coder_seek.cpp" #include "4coder_fancy.cpp" #include "4coder_ui_helper.cpp" @@ -79,9 +77,9 @@ #include "4coder_auto_indent.cpp" #include "4coder_search.cpp" #include "4coder_jumping.cpp" -#include "4coder_jump_direct.cpp" #include "4coder_jump_sticky.cpp" #include "4coder_jump_lister.cpp" +#include "4coder_log_parser.cpp" #include "4coder_clipboard.cpp" #include "4coder_system_command.cpp" #include "4coder_build_commands.cpp" diff --git a/4coder_fancy.cpp b/4coder_fancy.cpp index 54f7ae78..031db2bc 100644 --- a/4coder_fancy.cpp +++ b/4coder_fancy.cpp @@ -198,8 +198,9 @@ fancy_string_list_single(Fancy_String *fancy_string){ return(list); } -static Vec2 -draw_fancy_string(Application_Links *app, Face_ID font_id, Fancy_String *string, Vec2 P, int_color fore, int_color back, u32 flags, Vec2 dP){ +static Vec2_f32 +draw_fancy_string(Application_Links *app, Face_ID font_id, Fancy_String *string, Vec2 P, + int_color fore, int_color back, u32 flags, Vec2 dP){ for (;string != 0; string = string->next){ Face_ID use_font_id = (string->font_id) ? string->font_id : font_id; @@ -219,10 +220,40 @@ draw_fancy_string(Application_Links *app, Face_ID font_id, Fancy_String *string, return(P); } -static Vec2 -draw_fancy_string(Application_Links *app, Face_ID font_id, Fancy_String *string, Vec2 P, int_color fore, int_color back){ +static Vec2_f32 +draw_fancy_string(Application_Links *app, Face_ID font_id, Fancy_String *string, Vec2 P, + int_color fore, int_color back){ return(draw_fancy_string(app, font_id, string, P, fore, back, 0, V2(1.f, 0.f))); } +static f32 +get_fancy_string_advance(Application_Links *app, Face_ID font_id, Fancy_String *string){ + f32 advance = 0.f; + for (;string != 0; + string = string->next){ + Face_ID use_font_id = (string->font_id) ? string->font_id : font_id; + f32 adv = get_string_advance(app, use_font_id, string->value); + Face_Metrics metrics = get_face_metrics(app, font_id); + advance += (string->pre_margin + string->post_margin)*metrics.typical_character_width + adv; + } + return(advance); +} + +static void +draw_rectangle(Application_Links *app, Rect_f32 rect, Fancy_Color fancy_color){ + int_color color = int_color_from(app, fancy_color); + draw_rectangle(app, rect, color); +} + +//////////////////////////////// + +global Fancy_Color white = fancy_rgba(1.0f, 1.0f, 1.0f, 1.0f); +global Fancy_Color light_gray = fancy_rgba(0.7f, 0.7f, 0.7f, 1.0f); +global Fancy_Color gray = fancy_rgba(0.5f, 0.5f, 0.5f, 1.0f); +global Fancy_Color dark_gray = fancy_rgba(0.3f, 0.3f, 0.3f, 1.0f); +global Fancy_Color black = fancy_rgba(0.0f, 0.0f, 0.0f, 1.0f); +global Fancy_Color pink = fancy_rgba(1.0f, 0.0f, 1.0f, 1.0f); +global Fancy_Color green = fancy_rgba(0.0f, 1.0f, 0.0f, 1.0f); + // BOTTOM diff --git a/4coder_generated/command_metadata.h b/4coder_generated/command_metadata.h index f5eb025f..79a85a0a 100644 --- a/4coder_generated/command_metadata.h +++ b/4coder_generated/command_metadata.h @@ -2,7 +2,7 @@ #define command_id(c) (fcoder_metacmd_ID_##c) #define command_metadata(c) (&fcoder_metacmd_table[command_id(c)]) #define command_metadata_by_id(id) (&fcoder_metacmd_table[id]) -#define command_one_past_last_id 238 +#define command_one_past_last_id 235 #if defined(CUSTOM_COMMAND_SIG) #define PROC_LINKS(x,y) x #else @@ -10,7 +10,6 @@ #endif #if defined(CUSTOM_COMMAND_SIG) CUSTOM_COMMAND_SIG(write_explicit_enum_flags); -CUSTOM_COMMAND_SIG(parse_the_log); CUSTOM_COMMAND_SIG(seek_beginning_of_textual_line); CUSTOM_COMMAND_SIG(seek_end_of_textual_line); CUSTOM_COMMAND_SIG(seek_beginning_of_line); @@ -168,26 +167,24 @@ CUSTOM_COMMAND_SIG(list_all_locations_of_selection_case_insensitive); CUSTOM_COMMAND_SIG(list_all_locations_of_type_definition); CUSTOM_COMMAND_SIG(list_all_locations_of_type_definition_of_identifier); CUSTOM_COMMAND_SIG(word_complete); -CUSTOM_COMMAND_SIG(goto_jump_at_cursor_direct); -CUSTOM_COMMAND_SIG(goto_jump_at_cursor_same_panel_direct); -CUSTOM_COMMAND_SIG(goto_next_jump_direct); -CUSTOM_COMMAND_SIG(goto_prev_jump_direct); -CUSTOM_COMMAND_SIG(goto_next_jump_no_skips_direct); -CUSTOM_COMMAND_SIG(goto_prev_jump_no_skips_direct); -CUSTOM_COMMAND_SIG(goto_first_jump_direct); -CUSTOM_COMMAND_SIG(newline_or_goto_position_direct); -CUSTOM_COMMAND_SIG(newline_or_goto_position_same_panel_direct); -CUSTOM_COMMAND_SIG(goto_jump_at_cursor_sticky); -CUSTOM_COMMAND_SIG(goto_jump_at_cursor_same_panel_sticky); -CUSTOM_COMMAND_SIG(goto_next_jump_sticky); -CUSTOM_COMMAND_SIG(goto_prev_jump_sticky); -CUSTOM_COMMAND_SIG(goto_next_jump_no_skips_sticky); -CUSTOM_COMMAND_SIG(goto_prev_jump_no_skips_sticky); -CUSTOM_COMMAND_SIG(goto_first_jump_sticky); +CUSTOM_COMMAND_SIG(goto_jump_at_cursor); +CUSTOM_COMMAND_SIG(goto_jump_at_cursor_same_panel); +CUSTOM_COMMAND_SIG(goto_next_jump); +CUSTOM_COMMAND_SIG(goto_prev_jump); +CUSTOM_COMMAND_SIG(goto_next_jump_no_skips); +CUSTOM_COMMAND_SIG(goto_prev_jump_no_skips); +CUSTOM_COMMAND_SIG(goto_first_jump); CUSTOM_COMMAND_SIG(goto_first_jump_same_panel_sticky); -CUSTOM_COMMAND_SIG(newline_or_goto_position_sticky); -CUSTOM_COMMAND_SIG(newline_or_goto_position_same_panel_sticky); +CUSTOM_COMMAND_SIG(newline_or_goto_position); +CUSTOM_COMMAND_SIG(newline_or_goto_position_same_panel); CUSTOM_COMMAND_SIG(view_jump_list_with_lister); +CUSTOM_COMMAND_SIG(log_graph__escape); +CUSTOM_COMMAND_SIG(log_graph__scroll_wheel); +CUSTOM_COMMAND_SIG(log_graph__page_up); +CUSTOM_COMMAND_SIG(log_graph__page_down); +CUSTOM_COMMAND_SIG(log_graph__click_select_event); +CUSTOM_COMMAND_SIG(log_graph__click_jump_to_event_source); +CUSTOM_COMMAND_SIG(show_the_log_graph); CUSTOM_COMMAND_SIG(copy); CUSTOM_COMMAND_SIG(cut); CUSTOM_COMMAND_SIG(paste); @@ -258,482 +255,476 @@ char *source_name; int32_t source_name_len; int32_t line_number; }; -static Command_Metadata fcoder_metacmd_table[238] = { -{ PROC_LINKS(write_explicit_enum_flags, 0), "write_explicit_enum_flags", 25, "If the cursor is found to be on the '{' of an enum definition, the values of the enum will be filled in to give each a unique power of 2 value, starting from 1. Existing values are overwritten.", 194, "c:\\4ed\\code\\4coder_experiments.cpp", 34, 699 }, -{ PROC_LINKS(parse_the_log, 0), "parse_the_log", 13, "Tests the log parser", 20, "c:\\4ed\\code\\4coder_log_parser.cpp", 33, 357 }, -{ PROC_LINKS(seek_beginning_of_textual_line, 0), "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "c:\\4ed\\code\\4coder_seek.cpp", 27, 28 }, -{ PROC_LINKS(seek_end_of_textual_line, 0), "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "c:\\4ed\\code\\4coder_seek.cpp", 27, 34 }, -{ PROC_LINKS(seek_beginning_of_line, 0), "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "c:\\4ed\\code\\4coder_seek.cpp", 27, 40 }, -{ PROC_LINKS(seek_end_of_line, 0), "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "c:\\4ed\\code\\4coder_seek.cpp", 27, 46 }, -{ PROC_LINKS(goto_beginning_of_file, 0), "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "c:\\4ed\\code\\4coder_seek.cpp", 27, 52 }, -{ PROC_LINKS(goto_end_of_file, 0), "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "c:\\4ed\\code\\4coder_seek.cpp", 27, 60 }, -{ PROC_LINKS(change_active_panel, 0), "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 201 }, -{ PROC_LINKS(change_active_panel_backwards, 0), "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 211 }, -{ PROC_LINKS(open_panel_vsplit, 0), "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 221 }, -{ PROC_LINKS(open_panel_hsplit, 0), "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 231 }, -{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 292 }, -{ PROC_LINKS(allow_mouse, 0), "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 298 }, -{ PROC_LINKS(toggle_mouse, 0), "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 304 }, -{ PROC_LINKS(set_mode_to_original, 0), "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 310 }, -{ PROC_LINKS(set_mode_to_notepad_like, 0), "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 316 }, -{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 322 }, -{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 328 }, -{ PROC_LINKS(toggle_paren_matching_helper, 0), "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 334 }, -{ PROC_LINKS(toggle_fullscreen, 0), "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 340 }, -{ PROC_LINKS(remap_interactive, 0), "remap_interactive", 17, "Switch to a named key binding map.", 34, "c:\\4ed\\code\\4coder_default_framework.cpp", 40, 348 }, -{ PROC_LINKS(write_character, 0), "write_character", 15, "Inserts whatever character was used to trigger this command.", 60, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 66 }, -{ PROC_LINKS(write_underscore, 0), "write_underscore", 16, "Inserts an underscore.", 22, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 75 }, -{ PROC_LINKS(delete_char, 0), "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 82 }, -{ PROC_LINKS(backspace_char, 0), "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 99 }, -{ PROC_LINKS(set_mark, 0), "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 118 }, -{ PROC_LINKS(cursor_mark_swap, 0), "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 127 }, -{ PROC_LINKS(delete_range, 0), "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 137 }, -{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 157 }, -{ PROC_LINKS(delete_alpha_numeric_boundary, 0), "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 165 }, -{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 185 }, -{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 193 }, -{ PROC_LINKS(center_view, 0), "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 206 }, -{ PROC_LINKS(left_adjust_view, 0), "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 221 }, -{ PROC_LINKS(click_set_cursor_and_mark, 0), "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 244 }, -{ PROC_LINKS(click_set_cursor, 0), "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 259 }, -{ PROC_LINKS(click_set_cursor_if_lbutton, 0), "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 273 }, -{ PROC_LINKS(click_set_mark, 0), "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 289 }, -{ PROC_LINKS(mouse_wheel_scroll, 0), "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 303 }, -{ PROC_LINKS(move_up, 0), "move_up", 7, "Moves the cursor up one line.", 29, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 364 }, -{ PROC_LINKS(move_down, 0), "move_down", 9, "Moves the cursor down one line.", 31, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 370 }, -{ PROC_LINKS(move_up_10, 0), "move_up_10", 10, "Moves the cursor up ten lines.", 30, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 376 }, -{ PROC_LINKS(move_down_10, 0), "move_down_10", 12, "Moves the cursor down ten lines.", 32, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 382 }, -{ PROC_LINKS(move_down_textual, 0), "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 388 }, -{ PROC_LINKS(page_up, 0), "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 398 }, -{ PROC_LINKS(page_down, 0), "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 406 }, -{ PROC_LINKS(move_up_to_blank_line, 0), "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 435 }, -{ PROC_LINKS(move_down_to_blank_line, 0), "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 441 }, -{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 447 }, -{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 453 }, -{ PROC_LINKS(move_up_to_blank_line_end, 0), "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 459 }, -{ PROC_LINKS(move_down_to_blank_line_end, 0), "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 465 }, -{ PROC_LINKS(move_left, 0), "move_left", 9, "Moves the cursor one character to the left.", 43, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 476 }, -{ PROC_LINKS(move_right, 0), "move_right", 10, "Moves the cursor one character to the right.", 44, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 487 }, -{ PROC_LINKS(move_right_whitespace_boundary, 0), "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 508 }, -{ PROC_LINKS(move_left_whitespace_boundary, 0), "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 516 }, -{ PROC_LINKS(move_right_token_boundary, 0), "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 524 }, -{ PROC_LINKS(move_left_token_boundary, 0), "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 532 }, -{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 540 }, -{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 548 }, -{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 556 }, -{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 564 }, -{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 572 }, -{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 580 }, -{ PROC_LINKS(select_all, 0), "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 601 }, -{ PROC_LINKS(to_uppercase, 0), "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 614 }, -{ PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 627 }, -{ PROC_LINKS(clean_all_lines, 0), "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 640 }, -{ PROC_LINKS(basic_change_active_panel, 0), "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 678 }, -{ PROC_LINKS(close_panel, 0), "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 686 }, -{ PROC_LINKS(show_scrollbar, 0), "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 695 }, -{ PROC_LINKS(hide_scrollbar, 0), "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 702 }, -{ PROC_LINKS(show_filebar, 0), "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 709 }, -{ PROC_LINKS(hide_filebar, 0), "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 716 }, -{ PROC_LINKS(toggle_filebar, 0), "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 723 }, -{ PROC_LINKS(toggle_line_wrap, 0), "toggle_line_wrap", 16, "Toggles the current buffer's line wrapping status.", 50, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 732 }, -{ PROC_LINKS(toggle_fps_meter, 0), "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 742 }, -{ PROC_LINKS(increase_line_wrap, 0), "increase_line_wrap", 18, "Increases the current buffer's width for line wrapping.", 55, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 748 }, -{ PROC_LINKS(decrease_line_wrap, 0), "decrease_line_wrap", 18, "Decrases the current buffer's width for line wrapping.", 54, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 758 }, -{ PROC_LINKS(increase_face_size, 0), "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 768 }, -{ PROC_LINKS(decrease_face_size, 0), "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 779 }, -{ PROC_LINKS(mouse_wheel_change_face_size, 0), "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 790 }, -{ PROC_LINKS(toggle_virtual_whitespace, 0), "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 807 }, -{ PROC_LINKS(toggle_show_whitespace, 0), "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 817 }, -{ PROC_LINKS(toggle_line_numbers, 0), "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 826 }, -{ PROC_LINKS(eol_dosify, 0), "eol_dosify", 10, "Puts the buffer in DOS line ending mode.", 40, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 832 }, -{ PROC_LINKS(eol_nixify, 0), "eol_nixify", 10, "Puts the buffer in NIX line ending mode.", 40, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 840 }, -{ PROC_LINKS(exit_4coder, 0), "exit_4coder", 11, "Attempts to close 4coder.", 25, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 848 }, -{ PROC_LINKS(goto_line, 0), "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 856 }, -{ PROC_LINKS(search, 0), "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1067 }, -{ PROC_LINKS(reverse_search, 0), "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1073 }, -{ PROC_LINKS(search_identifier, 0), "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1079 }, -{ PROC_LINKS(reverse_search_identifier, 0), "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1090 }, -{ PROC_LINKS(replace_in_range, 0), "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1141 }, -{ PROC_LINKS(replace_in_buffer, 0), "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1150 }, -{ PROC_LINKS(replace_in_all_buffers, 0), "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1159 }, -{ PROC_LINKS(query_replace, 0), "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1247 }, -{ PROC_LINKS(query_replace_identifier, 0), "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1267 }, -{ PROC_LINKS(query_replace_selection, 0), "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1283 }, -{ PROC_LINKS(save_all_dirty_buffers, 0), "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1318 }, -{ PROC_LINKS(delete_file_query, 0), "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1343 }, -{ PROC_LINKS(save_to_query, 0), "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1381 }, -{ PROC_LINKS(rename_file_query, 0), "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1416 }, -{ PROC_LINKS(make_directory_query, 0), "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1456 }, -{ PROC_LINKS(move_line_up, 0), "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1489 }, -{ PROC_LINKS(move_line_down, 0), "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1495 }, -{ PROC_LINKS(duplicate_line, 0), "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1501 }, -{ PROC_LINKS(delete_line, 0), "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1515 }, -{ PROC_LINKS(open_file_in_quotes, 0), "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1580 }, -{ PROC_LINKS(open_matching_file_cpp, 0), "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1612 }, -{ PROC_LINKS(view_buffer_other_panel, 0), "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1625 }, -{ PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1637 }, -{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1671 }, -{ PROC_LINKS(save, 0), "save", 4, "Saves the current buffer.", 25, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1679 }, -{ PROC_LINKS(reopen, 0), "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1691 }, -{ PROC_LINKS(undo, 0), "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1749 }, -{ PROC_LINKS(redo, 0), "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1762 }, -{ PROC_LINKS(undo_all_buffers, 0), "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1776 }, -{ PROC_LINKS(redo_all_buffers, 0), "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1850 }, -{ PROC_LINKS(open_in_other, 0), "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "c:\\4ed\\code\\4coder_base_commands.cpp", 36, 1953 }, -{ PROC_LINKS(lister__quit, 0), "lister__quit", 12, "A lister mode command that quits the list without executing any actions.", 72, "c:\\4ed\\code\\4coder_lists.cpp", 28, 8 }, -{ PROC_LINKS(lister__activate, 0), "lister__activate", 16, "A lister mode command that activates the list's action on the highlighted item.", 79, "c:\\4ed\\code\\4coder_lists.cpp", 28, 15 }, -{ PROC_LINKS(lister__write_character, 0), "lister__write_character", 23, "A lister mode command that dispatches to the lister's write character handler.", 78, "c:\\4ed\\code\\4coder_lists.cpp", 28, 30 }, -{ PROC_LINKS(lister__backspace_text_field, 0), "lister__backspace_text_field", 28, "A lister mode command that dispatches to the lister's backspace text field handler.", 83, "c:\\4ed\\code\\4coder_lists.cpp", 28, 40 }, -{ PROC_LINKS(lister__move_up, 0), "lister__move_up", 15, "A lister mode command that dispatches to the lister's navigate up handler.", 74, "c:\\4ed\\code\\4coder_lists.cpp", 28, 50 }, -{ PROC_LINKS(lister__move_down, 0), "lister__move_down", 17, "A lister mode command that dispatches to the lister's navigate down handler.", 76, "c:\\4ed\\code\\4coder_lists.cpp", 28, 60 }, -{ PROC_LINKS(lister__wheel_scroll, 0), "lister__wheel_scroll", 20, "A lister mode command that scrolls the list in response to the mouse wheel.", 75, "c:\\4ed\\code\\4coder_lists.cpp", 28, 70 }, -{ PROC_LINKS(lister__mouse_press, 0), "lister__mouse_press", 19, "A lister mode command that beings a click interaction with a list item under the mouse.", 87, "c:\\4ed\\code\\4coder_lists.cpp", 28, 84 }, -{ PROC_LINKS(lister__mouse_release, 0), "lister__mouse_release", 21, "A lister mode command that ends a click interaction with a list item under the mouse, possibly activating it.", 109, "c:\\4ed\\code\\4coder_lists.cpp", 28, 95 }, -{ PROC_LINKS(lister__repaint, 0), "lister__repaint", 15, "A lister mode command that updates the lists UI data.", 53, "c:\\4ed\\code\\4coder_lists.cpp", 28, 110 }, -{ PROC_LINKS(lister__write_character__default, 0), "lister__write_character__default", 32, "A lister mode command that inserts a new character to the text field.", 69, "c:\\4ed\\code\\4coder_lists.cpp", 28, 120 }, -{ PROC_LINKS(lister__backspace_text_field__default, 0), "lister__backspace_text_field__default", 37, "A lister mode command that backspaces one character from the text field.", 72, "c:\\4ed\\code\\4coder_lists.cpp", 28, 139 }, -{ PROC_LINKS(lister__move_up__default, 0), "lister__move_up__default", 24, "A lister mode command that moves the highlighted item one up in the list.", 73, "c:\\4ed\\code\\4coder_lists.cpp", 28, 153 }, -{ PROC_LINKS(lister__move_down__default, 0), "lister__move_down__default", 26, "A lister mode command that moves the highlighted item one down in the list.", 75, "c:\\4ed\\code\\4coder_lists.cpp", 28, 168 }, -{ PROC_LINKS(lister__write_character__file_path, 0), "lister__write_character__file_path", 34, "A lister mode command that inserts a character into the text field of a file system list.", 89, "c:\\4ed\\code\\4coder_lists.cpp", 28, 183 }, -{ PROC_LINKS(lister__backspace_text_field__file_path, 0), "lister__backspace_text_field__file_path", 39, "A lister mode command that backspaces one character from the text field of a file system list.", 94, "c:\\4ed\\code\\4coder_lists.cpp", 28, 208 }, -{ PROC_LINKS(lister__write_character__fixed_list, 0), "lister__write_character__fixed_list", 35, "A lister mode command that handles input for the fixed sure to kill list.", 73, "c:\\4ed\\code\\4coder_lists.cpp", 28, 249 }, -{ PROC_LINKS(interactive_switch_buffer, 0), "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "c:\\4ed\\code\\4coder_lists.cpp", 28, 723 }, -{ PROC_LINKS(interactive_kill_buffer, 0), "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "c:\\4ed\\code\\4coder_lists.cpp", 28, 742 }, -{ PROC_LINKS(interactive_open_or_new, 0), "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "c:\\4ed\\code\\4coder_lists.cpp", 28, 815 }, -{ PROC_LINKS(interactive_new, 0), "interactive_new", 15, "Interactively creates a new file.", 33, "c:\\4ed\\code\\4coder_lists.cpp", 28, 854 }, -{ PROC_LINKS(interactive_open, 0), "interactive_open", 16, "Interactively opens a file.", 27, "c:\\4ed\\code\\4coder_lists.cpp", 28, 887 }, -{ PROC_LINKS(command_lister, 0), "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "c:\\4ed\\code\\4coder_lists.cpp", 28, 969 }, -{ PROC_LINKS(auto_tab_whole_file, 0), "auto_tab_whole_file", 19, "Audo-indents the entire current buffer.", 39, "c:\\4ed\\code\\4coder_auto_indent.cpp", 34, 546 }, -{ PROC_LINKS(auto_tab_line_at_cursor, 0), "auto_tab_line_at_cursor", 23, "Auto-indents the line on which the cursor sits.", 47, "c:\\4ed\\code\\4coder_auto_indent.cpp", 34, 555 }, -{ PROC_LINKS(auto_tab_range, 0), "auto_tab_range", 14, "Auto-indents the range between the cursor and the mark.", 55, "c:\\4ed\\code\\4coder_auto_indent.cpp", 34, 565 }, -{ PROC_LINKS(write_and_auto_tab, 0), "write_and_auto_tab", 18, "Inserts a character and auto-indents the line on which the cursor sits.", 71, "c:\\4ed\\code\\4coder_auto_indent.cpp", 34, 575 }, -{ PROC_LINKS(list_all_locations, 0), "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "c:\\4ed\\code\\4coder_search.cpp", 29, 164 }, -{ PROC_LINKS(list_all_substring_locations, 0), "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "c:\\4ed\\code\\4coder_search.cpp", 29, 170 }, -{ PROC_LINKS(list_all_locations_case_insensitive, 0), "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "c:\\4ed\\code\\4coder_search.cpp", 29, 176 }, -{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "c:\\4ed\\code\\4coder_search.cpp", 29, 182 }, -{ PROC_LINKS(list_all_locations_of_identifier, 0), "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "c:\\4ed\\code\\4coder_search.cpp", 29, 188 }, -{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "c:\\4ed\\code\\4coder_search.cpp", 29, 194 }, -{ PROC_LINKS(list_all_locations_of_selection, 0), "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "c:\\4ed\\code\\4coder_search.cpp", 29, 200 }, -{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "c:\\4ed\\code\\4coder_search.cpp", 29, 206 }, -{ PROC_LINKS(list_all_locations_of_type_definition, 0), "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "c:\\4ed\\code\\4coder_search.cpp", 29, 212 }, -{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "c:\\4ed\\code\\4coder_search.cpp", 29, 220 }, -{ PROC_LINKS(word_complete, 0), "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "c:\\4ed\\code\\4coder_search.cpp", 29, 374 }, -{ PROC_LINKS(goto_jump_at_cursor_direct, 0), "goto_jump_at_cursor_direct", 26, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 8 }, -{ PROC_LINKS(goto_jump_at_cursor_same_panel_direct, 0), "goto_jump_at_cursor_same_panel_direct", 37, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list..", 168, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 31 }, -{ PROC_LINKS(goto_next_jump_direct, 0), "goto_next_jump_direct", 21, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 52 }, -{ PROC_LINKS(goto_prev_jump_direct, 0), "goto_prev_jump_direct", 21, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 61 }, -{ PROC_LINKS(goto_next_jump_no_skips_direct, 0), "goto_next_jump_no_skips_direct", 30, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 70 }, -{ PROC_LINKS(goto_prev_jump_no_skips_direct, 0), "goto_prev_jump_no_skips_direct", 30, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 79 }, -{ PROC_LINKS(goto_first_jump_direct, 0), "goto_first_jump_direct", 22, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 88 }, -{ PROC_LINKS(newline_or_goto_position_direct, 0), "newline_or_goto_position_direct", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 103 }, -{ PROC_LINKS(newline_or_goto_position_same_panel_direct, 0), "newline_or_goto_position_same_panel_direct", 42, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "c:\\4ed\\code\\4coder_jump_direct.cpp", 34, 120 }, -{ PROC_LINKS(goto_jump_at_cursor_sticky, 0), "goto_jump_at_cursor_sticky", 26, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 352 }, -{ PROC_LINKS(goto_jump_at_cursor_same_panel_sticky, 0), "goto_jump_at_cursor_same_panel_sticky", 37, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 379 }, -{ PROC_LINKS(goto_next_jump_sticky, 0), "goto_next_jump_sticky", 21, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 478 }, -{ PROC_LINKS(goto_prev_jump_sticky, 0), "goto_prev_jump_sticky", 21, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 495 }, -{ PROC_LINKS(goto_next_jump_no_skips_sticky, 0), "goto_next_jump_no_skips_sticky", 30, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 508 }, -{ PROC_LINKS(goto_prev_jump_no_skips_sticky, 0), "goto_prev_jump_no_skips_sticky", 30, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 525 }, -{ PROC_LINKS(goto_first_jump_sticky, 0), "goto_first_jump_sticky", 22, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 539 }, -{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 556 }, -{ PROC_LINKS(newline_or_goto_position_sticky, 0), "newline_or_goto_position_sticky", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 578 }, -{ PROC_LINKS(newline_or_goto_position_same_panel_sticky, 0), "newline_or_goto_position_same_panel_sticky", 42, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "c:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 595 }, -{ PROC_LINKS(view_jump_list_with_lister, 0), "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "c:\\4ed\\code\\4coder_jump_lister.cpp", 34, 104 }, -{ PROC_LINKS(copy, 0), "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 19 }, -{ PROC_LINKS(cut, 0), "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 28 }, -{ PROC_LINKS(paste, 0), "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 39 }, -{ PROC_LINKS(paste_next, 0), "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 72 }, -{ PROC_LINKS(paste_and_indent, 0), "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 114 }, -{ PROC_LINKS(paste_next_and_indent, 0), "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "c:\\4ed\\code\\4coder_clipboard.cpp", 32, 121 }, -{ PROC_LINKS(execute_previous_cli, 0), "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "c:\\4ed\\code\\4coder_system_command.cpp", 37, 7 }, -{ PROC_LINKS(execute_any_cli, 0), "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "c:\\4ed\\code\\4coder_system_command.cpp", 37, 22 }, -{ PROC_LINKS(build_search, 0), "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "c:\\4ed\\code\\4coder_build_commands.cpp", 37, 128 }, -{ PROC_LINKS(build_in_build_panel, 0), "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "c:\\4ed\\code\\4coder_build_commands.cpp", 37, 163 }, -{ PROC_LINKS(close_build_panel, 0), "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "c:\\4ed\\code\\4coder_build_commands.cpp", 37, 178 }, -{ PROC_LINKS(change_to_build_panel, 0), "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "c:\\4ed\\code\\4coder_build_commands.cpp", 37, 184 }, -{ PROC_LINKS(close_all_code, 0), "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 921 }, -{ PROC_LINKS(open_all_code, 0), "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 927 }, -{ PROC_LINKS(open_all_code_recursive, 0), "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 933 }, -{ PROC_LINKS(load_project, 0), "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 941 }, -{ PROC_LINKS(project_fkey_command, 0), "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 948 }, -{ PROC_LINKS(project_go_to_root_directory, 0), "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 971 }, -{ PROC_LINKS(setup_new_project, 0), "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 1306 }, -{ PROC_LINKS(setup_build_bat, 0), "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 1313 }, -{ PROC_LINKS(setup_build_sh, 0), "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 1319 }, -{ PROC_LINKS(setup_build_bat_and_sh, 0), "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 1325 }, -{ PROC_LINKS(project_command_lister, 0), "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "c:\\4ed\\code\\4coder_project_commands.cpp", 39, 1340 }, -{ PROC_LINKS(list_all_functions_current_buffer, 0), "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "c:\\4ed\\code\\4coder_function_list.cpp", 36, 266 }, -{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "c:\\4ed\\code\\4coder_function_list.cpp", 36, 276 }, -{ PROC_LINKS(list_all_functions_all_buffers, 0), "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "c:\\4ed\\code\\4coder_function_list.cpp", 36, 288 }, -{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "c:\\4ed\\code\\4coder_function_list.cpp", 36, 294 }, -{ PROC_LINKS(select_surrounding_scope, 0), "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 337 }, -{ PROC_LINKS(select_next_scope_absolute, 0), "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 352 }, -{ PROC_LINKS(select_prev_scope_absolute, 0), "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 371 }, -{ PROC_LINKS(place_in_scope, 0), "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 445 }, -{ PROC_LINKS(delete_current_scope, 0), "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 451 }, -{ PROC_LINKS(scope_absorb_down, 0), "scope_absorb_down", 17, "If a scope is currently selected, and a statement or block statement is present below the current scope, the statement is moved into the scope.", 143, "c:\\4ed\\code\\4coder_scope_commands.cpp", 37, 670 }, -{ PROC_LINKS(open_long_braces, 0), "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 46 }, -{ PROC_LINKS(open_long_braces_semicolon, 0), "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 54 }, -{ PROC_LINKS(open_long_braces_break, 0), "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 62 }, -{ PROC_LINKS(if0_off, 0), "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 70 }, -{ PROC_LINKS(write_todo, 0), "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 76 }, -{ PROC_LINKS(write_hack, 0), "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 82 }, -{ PROC_LINKS(write_note, 0), "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 88 }, -{ PROC_LINKS(write_block, 0), "write_block", 11, "At the cursor, insert a block comment.", 38, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 94 }, -{ PROC_LINKS(write_zero_struct, 0), "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 100 }, -{ PROC_LINKS(comment_line, 0), "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 125 }, -{ PROC_LINKS(uncomment_line, 0), "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 137 }, -{ PROC_LINKS(comment_line_toggle, 0), "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 149 }, -{ PROC_LINKS(snippet_lister, 0), "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "c:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 235 }, -{ PROC_LINKS(set_bindings_choose, 0), "set_bindings_choose", 19, "Remap keybindings using the 'choose' mapping rule.", 50, "c:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 39 }, -{ PROC_LINKS(set_bindings_default, 0), "set_bindings_default", 20, "Remap keybindings using the 'default' mapping rule.", 51, "c:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 49 }, -{ PROC_LINKS(set_bindings_mac_default, 0), "set_bindings_mac_default", 24, "Remap keybindings using the 'mac-default' mapping rule.", 55, "c:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 64 }, -{ PROC_LINKS(miblo_increment_basic, 0), "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 29 }, -{ PROC_LINKS(miblo_decrement_basic, 0), "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 44 }, -{ PROC_LINKS(miblo_increment_time_stamp, 0), "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 231 }, -{ PROC_LINKS(miblo_decrement_time_stamp, 0), "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 237 }, -{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 243 }, -{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 249 }, -{ PROC_LINKS(kill_rect, 0), "kill_rect", 9, "Delete characters in a rectangular region. Range testing is done by unwrapped-xy coordinates.", 93, "c:\\4ed\\code\\4coder_experiments.cpp", 34, 44 }, -{ PROC_LINKS(multi_line_edit, 0), "multi_line_edit", 15, "Begin multi-line mode. In multi-line mode characters are inserted at every line between the mark and cursor. All characters are inserted at the same character offset into the line. This mode uses line_char coordinates.", 221, "c:\\4ed\\code\\4coder_experiments.cpp", 34, 125 }, -{ PROC_LINKS(rename_parameter, 0), "rename_parameter", 16, "If the cursor is found to be on the name of a function parameter in the signature of a function definition, all occurences within the scope of the function will be replaced with a new provided string.", 200, "c:\\4ed\\code\\4coder_experiments.cpp", 34, 386 }, -{ PROC_LINKS(write_explicit_enum_values, 0), "write_explicit_enum_values", 26, "If the cursor is found to be on the '{' of an enum definition, the values of the enum will be filled in sequentially starting from zero. Existing values are overwritten.", 170, "c:\\4ed\\code\\4coder_experiments.cpp", 34, 693 }, +static Command_Metadata fcoder_metacmd_table[235] = { +{ PROC_LINKS(write_explicit_enum_flags, 0), "write_explicit_enum_flags", 25, "If the cursor is found to be on the '{' of an enum definition, the values of the enum will be filled in to give each a unique power of 2 value, starting from 1. Existing values are overwritten.", 194, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 699 }, +{ PROC_LINKS(seek_beginning_of_textual_line, 0), "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "w:\\4ed\\code\\4coder_seek.cpp", 27, 28 }, +{ PROC_LINKS(seek_end_of_textual_line, 0), "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "w:\\4ed\\code\\4coder_seek.cpp", 27, 34 }, +{ PROC_LINKS(seek_beginning_of_line, 0), "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "w:\\4ed\\code\\4coder_seek.cpp", 27, 40 }, +{ PROC_LINKS(seek_end_of_line, 0), "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "w:\\4ed\\code\\4coder_seek.cpp", 27, 46 }, +{ PROC_LINKS(goto_beginning_of_file, 0), "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "w:\\4ed\\code\\4coder_seek.cpp", 27, 52 }, +{ PROC_LINKS(goto_end_of_file, 0), "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "w:\\4ed\\code\\4coder_seek.cpp", 27, 60 }, +{ PROC_LINKS(change_active_panel, 0), "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 201 }, +{ PROC_LINKS(change_active_panel_backwards, 0), "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 211 }, +{ PROC_LINKS(open_panel_vsplit, 0), "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 221 }, +{ PROC_LINKS(open_panel_hsplit, 0), "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 231 }, +{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 292 }, +{ PROC_LINKS(allow_mouse, 0), "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 298 }, +{ PROC_LINKS(toggle_mouse, 0), "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 304 }, +{ PROC_LINKS(set_mode_to_original, 0), "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 310 }, +{ PROC_LINKS(set_mode_to_notepad_like, 0), "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 316 }, +{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 322 }, +{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 328 }, +{ PROC_LINKS(toggle_paren_matching_helper, 0), "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 334 }, +{ PROC_LINKS(toggle_fullscreen, 0), "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 340 }, +{ PROC_LINKS(remap_interactive, 0), "remap_interactive", 17, "Switch to a named key binding map.", 34, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 348 }, +{ PROC_LINKS(write_character, 0), "write_character", 15, "Inserts whatever character was used to trigger this command.", 60, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 66 }, +{ PROC_LINKS(write_underscore, 0), "write_underscore", 16, "Inserts an underscore.", 22, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 75 }, +{ PROC_LINKS(delete_char, 0), "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 82 }, +{ PROC_LINKS(backspace_char, 0), "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 99 }, +{ PROC_LINKS(set_mark, 0), "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 118 }, +{ PROC_LINKS(cursor_mark_swap, 0), "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 127 }, +{ PROC_LINKS(delete_range, 0), "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 137 }, +{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 157 }, +{ PROC_LINKS(delete_alpha_numeric_boundary, 0), "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 165 }, +{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 185 }, +{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 193 }, +{ PROC_LINKS(center_view, 0), "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 206 }, +{ PROC_LINKS(left_adjust_view, 0), "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 221 }, +{ PROC_LINKS(click_set_cursor_and_mark, 0), "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 244 }, +{ PROC_LINKS(click_set_cursor, 0), "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 259 }, +{ PROC_LINKS(click_set_cursor_if_lbutton, 0), "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 273 }, +{ PROC_LINKS(click_set_mark, 0), "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 289 }, +{ PROC_LINKS(mouse_wheel_scroll, 0), "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 303 }, +{ PROC_LINKS(move_up, 0), "move_up", 7, "Moves the cursor up one line.", 29, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 370 }, +{ PROC_LINKS(move_down, 0), "move_down", 9, "Moves the cursor down one line.", 31, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 376 }, +{ PROC_LINKS(move_up_10, 0), "move_up_10", 10, "Moves the cursor up ten lines.", 30, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 382 }, +{ PROC_LINKS(move_down_10, 0), "move_down_10", 12, "Moves the cursor down ten lines.", 32, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 388 }, +{ PROC_LINKS(move_down_textual, 0), "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 394 }, +{ PROC_LINKS(page_up, 0), "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 404 }, +{ PROC_LINKS(page_down, 0), "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 412 }, +{ PROC_LINKS(move_up_to_blank_line, 0), "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 441 }, +{ PROC_LINKS(move_down_to_blank_line, 0), "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 447 }, +{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 453 }, +{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 459 }, +{ PROC_LINKS(move_up_to_blank_line_end, 0), "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 465 }, +{ PROC_LINKS(move_down_to_blank_line_end, 0), "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 471 }, +{ PROC_LINKS(move_left, 0), "move_left", 9, "Moves the cursor one character to the left.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 482 }, +{ PROC_LINKS(move_right, 0), "move_right", 10, "Moves the cursor one character to the right.", 44, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 493 }, +{ PROC_LINKS(move_right_whitespace_boundary, 0), "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 514 }, +{ PROC_LINKS(move_left_whitespace_boundary, 0), "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 522 }, +{ PROC_LINKS(move_right_token_boundary, 0), "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 530 }, +{ PROC_LINKS(move_left_token_boundary, 0), "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 538 }, +{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 546 }, +{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 554 }, +{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 562 }, +{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 570 }, +{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 578 }, +{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 586 }, +{ PROC_LINKS(select_all, 0), "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 607 }, +{ PROC_LINKS(to_uppercase, 0), "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 620 }, +{ PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 633 }, +{ PROC_LINKS(clean_all_lines, 0), "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 646 }, +{ PROC_LINKS(basic_change_active_panel, 0), "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 684 }, +{ PROC_LINKS(close_panel, 0), "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 692 }, +{ PROC_LINKS(show_scrollbar, 0), "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 701 }, +{ PROC_LINKS(hide_scrollbar, 0), "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 708 }, +{ PROC_LINKS(show_filebar, 0), "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 715 }, +{ PROC_LINKS(hide_filebar, 0), "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 722 }, +{ PROC_LINKS(toggle_filebar, 0), "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 729 }, +{ PROC_LINKS(toggle_line_wrap, 0), "toggle_line_wrap", 16, "Toggles the current buffer's line wrapping status.", 50, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 738 }, +{ PROC_LINKS(toggle_fps_meter, 0), "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 748 }, +{ PROC_LINKS(increase_line_wrap, 0), "increase_line_wrap", 18, "Increases the current buffer's width for line wrapping.", 55, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 754 }, +{ PROC_LINKS(decrease_line_wrap, 0), "decrease_line_wrap", 18, "Decrases the current buffer's width for line wrapping.", 54, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 764 }, +{ PROC_LINKS(increase_face_size, 0), "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 774 }, +{ PROC_LINKS(decrease_face_size, 0), "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 785 }, +{ PROC_LINKS(mouse_wheel_change_face_size, 0), "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 796 }, +{ PROC_LINKS(toggle_virtual_whitespace, 0), "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 813 }, +{ PROC_LINKS(toggle_show_whitespace, 0), "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 823 }, +{ PROC_LINKS(toggle_line_numbers, 0), "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 832 }, +{ PROC_LINKS(eol_dosify, 0), "eol_dosify", 10, "Puts the buffer in DOS line ending mode.", 40, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 838 }, +{ PROC_LINKS(eol_nixify, 0), "eol_nixify", 10, "Puts the buffer in NIX line ending mode.", 40, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 846 }, +{ PROC_LINKS(exit_4coder, 0), "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 854 }, +{ PROC_LINKS(goto_line, 0), "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 862 }, +{ PROC_LINKS(search, 0), "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1073 }, +{ PROC_LINKS(reverse_search, 0), "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1079 }, +{ PROC_LINKS(search_identifier, 0), "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1085 }, +{ PROC_LINKS(reverse_search_identifier, 0), "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1096 }, +{ PROC_LINKS(replace_in_range, 0), "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1147 }, +{ PROC_LINKS(replace_in_buffer, 0), "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1156 }, +{ PROC_LINKS(replace_in_all_buffers, 0), "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1165 }, +{ PROC_LINKS(query_replace, 0), "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1253 }, +{ PROC_LINKS(query_replace_identifier, 0), "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1273 }, +{ PROC_LINKS(query_replace_selection, 0), "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1289 }, +{ PROC_LINKS(save_all_dirty_buffers, 0), "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1324 }, +{ PROC_LINKS(delete_file_query, 0), "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1349 }, +{ PROC_LINKS(save_to_query, 0), "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1387 }, +{ PROC_LINKS(rename_file_query, 0), "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1422 }, +{ PROC_LINKS(make_directory_query, 0), "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1462 }, +{ PROC_LINKS(move_line_up, 0), "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1495 }, +{ PROC_LINKS(move_line_down, 0), "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1501 }, +{ PROC_LINKS(duplicate_line, 0), "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1507 }, +{ PROC_LINKS(delete_line, 0), "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1521 }, +{ PROC_LINKS(open_file_in_quotes, 0), "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1586 }, +{ PROC_LINKS(open_matching_file_cpp, 0), "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1618 }, +{ PROC_LINKS(view_buffer_other_panel, 0), "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1631 }, +{ PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1643 }, +{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1677 }, +{ PROC_LINKS(save, 0), "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1685 }, +{ PROC_LINKS(reopen, 0), "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1697 }, +{ PROC_LINKS(undo, 0), "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1755 }, +{ PROC_LINKS(redo, 0), "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1768 }, +{ PROC_LINKS(undo_all_buffers, 0), "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1782 }, +{ PROC_LINKS(redo_all_buffers, 0), "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1856 }, +{ PROC_LINKS(open_in_other, 0), "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1959 }, +{ PROC_LINKS(lister__quit, 0), "lister__quit", 12, "A lister mode command that quits the list without executing any actions.", 72, "w:\\4ed\\code\\4coder_lists.cpp", 28, 8 }, +{ PROC_LINKS(lister__activate, 0), "lister__activate", 16, "A lister mode command that activates the list's action on the highlighted item.", 79, "w:\\4ed\\code\\4coder_lists.cpp", 28, 15 }, +{ PROC_LINKS(lister__write_character, 0), "lister__write_character", 23, "A lister mode command that dispatches to the lister's write character handler.", 78, "w:\\4ed\\code\\4coder_lists.cpp", 28, 30 }, +{ PROC_LINKS(lister__backspace_text_field, 0), "lister__backspace_text_field", 28, "A lister mode command that dispatches to the lister's backspace text field handler.", 83, "w:\\4ed\\code\\4coder_lists.cpp", 28, 40 }, +{ PROC_LINKS(lister__move_up, 0), "lister__move_up", 15, "A lister mode command that dispatches to the lister's navigate up handler.", 74, "w:\\4ed\\code\\4coder_lists.cpp", 28, 50 }, +{ PROC_LINKS(lister__move_down, 0), "lister__move_down", 17, "A lister mode command that dispatches to the lister's navigate down handler.", 76, "w:\\4ed\\code\\4coder_lists.cpp", 28, 60 }, +{ PROC_LINKS(lister__wheel_scroll, 0), "lister__wheel_scroll", 20, "A lister mode command that scrolls the list in response to the mouse wheel.", 75, "w:\\4ed\\code\\4coder_lists.cpp", 28, 70 }, +{ PROC_LINKS(lister__mouse_press, 0), "lister__mouse_press", 19, "A lister mode command that beings a click interaction with a list item under the mouse.", 87, "w:\\4ed\\code\\4coder_lists.cpp", 28, 84 }, +{ PROC_LINKS(lister__mouse_release, 0), "lister__mouse_release", 21, "A lister mode command that ends a click interaction with a list item under the mouse, possibly activating it.", 109, "w:\\4ed\\code\\4coder_lists.cpp", 28, 95 }, +{ PROC_LINKS(lister__repaint, 0), "lister__repaint", 15, "A lister mode command that updates the lists UI data.", 53, "w:\\4ed\\code\\4coder_lists.cpp", 28, 110 }, +{ PROC_LINKS(lister__write_character__default, 0), "lister__write_character__default", 32, "A lister mode command that inserts a new character to the text field.", 69, "w:\\4ed\\code\\4coder_lists.cpp", 28, 120 }, +{ PROC_LINKS(lister__backspace_text_field__default, 0), "lister__backspace_text_field__default", 37, "A lister mode command that backspaces one character from the text field.", 72, "w:\\4ed\\code\\4coder_lists.cpp", 28, 139 }, +{ PROC_LINKS(lister__move_up__default, 0), "lister__move_up__default", 24, "A lister mode command that moves the highlighted item one up in the list.", 73, "w:\\4ed\\code\\4coder_lists.cpp", 28, 153 }, +{ PROC_LINKS(lister__move_down__default, 0), "lister__move_down__default", 26, "A lister mode command that moves the highlighted item one down in the list.", 75, "w:\\4ed\\code\\4coder_lists.cpp", 28, 168 }, +{ PROC_LINKS(lister__write_character__file_path, 0), "lister__write_character__file_path", 34, "A lister mode command that inserts a character into the text field of a file system list.", 89, "w:\\4ed\\code\\4coder_lists.cpp", 28, 183 }, +{ PROC_LINKS(lister__backspace_text_field__file_path, 0), "lister__backspace_text_field__file_path", 39, "A lister mode command that backspaces one character from the text field of a file system list.", 94, "w:\\4ed\\code\\4coder_lists.cpp", 28, 208 }, +{ PROC_LINKS(lister__write_character__fixed_list, 0), "lister__write_character__fixed_list", 35, "A lister mode command that handles input for the fixed sure to kill list.", 73, "w:\\4ed\\code\\4coder_lists.cpp", 28, 249 }, +{ PROC_LINKS(interactive_switch_buffer, 0), "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "w:\\4ed\\code\\4coder_lists.cpp", 28, 723 }, +{ PROC_LINKS(interactive_kill_buffer, 0), "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "w:\\4ed\\code\\4coder_lists.cpp", 28, 742 }, +{ PROC_LINKS(interactive_open_or_new, 0), "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "w:\\4ed\\code\\4coder_lists.cpp", 28, 815 }, +{ PROC_LINKS(interactive_new, 0), "interactive_new", 15, "Interactively creates a new file.", 33, "w:\\4ed\\code\\4coder_lists.cpp", 28, 854 }, +{ PROC_LINKS(interactive_open, 0), "interactive_open", 16, "Interactively opens a file.", 27, "w:\\4ed\\code\\4coder_lists.cpp", 28, 887 }, +{ PROC_LINKS(command_lister, 0), "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "w:\\4ed\\code\\4coder_lists.cpp", 28, 969 }, +{ PROC_LINKS(auto_tab_whole_file, 0), "auto_tab_whole_file", 19, "Audo-indents the entire current buffer.", 39, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 546 }, +{ PROC_LINKS(auto_tab_line_at_cursor, 0), "auto_tab_line_at_cursor", 23, "Auto-indents the line on which the cursor sits.", 47, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 555 }, +{ PROC_LINKS(auto_tab_range, 0), "auto_tab_range", 14, "Auto-indents the range between the cursor and the mark.", 55, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 565 }, +{ PROC_LINKS(write_and_auto_tab, 0), "write_and_auto_tab", 18, "Inserts a character and auto-indents the line on which the cursor sits.", 71, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 575 }, +{ PROC_LINKS(list_all_locations, 0), "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "w:\\4ed\\code\\4coder_search.cpp", 29, 164 }, +{ PROC_LINKS(list_all_substring_locations, 0), "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "w:\\4ed\\code\\4coder_search.cpp", 29, 170 }, +{ PROC_LINKS(list_all_locations_case_insensitive, 0), "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "w:\\4ed\\code\\4coder_search.cpp", 29, 176 }, +{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "w:\\4ed\\code\\4coder_search.cpp", 29, 182 }, +{ PROC_LINKS(list_all_locations_of_identifier, 0), "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 188 }, +{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "w:\\4ed\\code\\4coder_search.cpp", 29, 194 }, +{ PROC_LINKS(list_all_locations_of_selection, 0), "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 200 }, +{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "w:\\4ed\\code\\4coder_search.cpp", 29, 206 }, +{ PROC_LINKS(list_all_locations_of_type_definition, 0), "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "w:\\4ed\\code\\4coder_search.cpp", 29, 212 }, +{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "w:\\4ed\\code\\4coder_search.cpp", 29, 220 }, +{ PROC_LINKS(word_complete, 0), "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "w:\\4ed\\code\\4coder_search.cpp", 29, 374 }, +{ PROC_LINKS(goto_jump_at_cursor, 0), "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\\4coder_jump_sticky.cpp", 34, 352 }, +{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), "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\\4coder_jump_sticky.cpp", 34, 379 }, +{ PROC_LINKS(goto_next_jump, 0), "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\\4coder_jump_sticky.cpp", 34, 468 }, +{ PROC_LINKS(goto_prev_jump, 0), "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\\4coder_jump_sticky.cpp", 34, 485 }, +{ PROC_LINKS(goto_next_jump_no_skips, 0), "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\\4coder_jump_sticky.cpp", 34, 498 }, +{ PROC_LINKS(goto_prev_jump_no_skips, 0), "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\\4coder_jump_sticky.cpp", 34, 515 }, +{ PROC_LINKS(goto_first_jump, 0), "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\\4coder_jump_sticky.cpp", 34, 529 }, +{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 546 }, +{ PROC_LINKS(newline_or_goto_position, 0), "newline_or_goto_position", 24, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 568 }, +{ PROC_LINKS(newline_or_goto_position_same_panel, 0), "newline_or_goto_position_same_panel", 35, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 585 }, +{ PROC_LINKS(view_jump_list_with_lister, 0), "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "w:\\4ed\\code\\4coder_jump_lister.cpp", 34, 104 }, +{ PROC_LINKS(log_graph__escape, 0), "log_graph__escape", 17, "Ends the log grapher", 20, "w:\\4ed\\code\\4coder_log_parser.cpp", 33, 906 }, +{ PROC_LINKS(log_graph__scroll_wheel, 0), "log_graph__scroll_wheel", 23, "Scrolls the log graph", 21, "w:\\4ed\\code\\4coder_log_parser.cpp", 33, 917 }, +{ PROC_LINKS(log_graph__page_up, 0), "log_graph__page_up", 18, "Scroll the log graph up one whole page", 38, "w:\\4ed\\code\\4coder_log_parser.cpp", 33, 928 }, +{ PROC_LINKS(log_graph__page_down, 0), "log_graph__page_down", 20, "Scroll the log graph down one whole page", 40, "w:\\4ed\\code\\4coder_log_parser.cpp", 33, 936 }, +{ PROC_LINKS(log_graph__click_select_event, 0), "log_graph__click_select_event", 29, "Select the event record at the mouse point in the log graph", 59, "w:\\4ed\\code\\4coder_log_parser.cpp", 33, 970 }, +{ PROC_LINKS(log_graph__click_jump_to_event_source, 0), "log_graph__click_jump_to_event_source", 37, "Jump to the code that logged the event record at the mouse point in the log graph", 81, "w:\\4ed\\code\\4coder_log_parser.cpp", 33, 989 }, +{ PROC_LINKS(show_the_log_graph, 0), "show_the_log_graph", 18, "Parser *log* and displays the 'log graph' UI", 44, "w:\\4ed\\code\\4coder_log_parser.cpp", 33, 1037 }, +{ PROC_LINKS(copy, 0), "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 19 }, +{ PROC_LINKS(cut, 0), "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 28 }, +{ PROC_LINKS(paste, 0), "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 39 }, +{ PROC_LINKS(paste_next, 0), "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 72 }, +{ PROC_LINKS(paste_and_indent, 0), "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 114 }, +{ PROC_LINKS(paste_next_and_indent, 0), "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 121 }, +{ PROC_LINKS(execute_previous_cli, 0), "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "w:\\4ed\\code\\4coder_system_command.cpp", 37, 7 }, +{ PROC_LINKS(execute_any_cli, 0), "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "w:\\4ed\\code\\4coder_system_command.cpp", 37, 22 }, +{ PROC_LINKS(build_search, 0), "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "w:\\4ed\\code\\4coder_build_commands.cpp", 37, 128 }, +{ PROC_LINKS(build_in_build_panel, 0), "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "w:\\4ed\\code\\4coder_build_commands.cpp", 37, 163 }, +{ PROC_LINKS(close_build_panel, 0), "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "w:\\4ed\\code\\4coder_build_commands.cpp", 37, 178 }, +{ PROC_LINKS(change_to_build_panel, 0), "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "w:\\4ed\\code\\4coder_build_commands.cpp", 37, 184 }, +{ PROC_LINKS(close_all_code, 0), "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 921 }, +{ PROC_LINKS(open_all_code, 0), "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 927 }, +{ PROC_LINKS(open_all_code_recursive, 0), "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 933 }, +{ PROC_LINKS(load_project, 0), "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 941 }, +{ PROC_LINKS(project_fkey_command, 0), "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 948 }, +{ PROC_LINKS(project_go_to_root_directory, 0), "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 971 }, +{ PROC_LINKS(setup_new_project, 0), "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1306 }, +{ PROC_LINKS(setup_build_bat, 0), "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1313 }, +{ PROC_LINKS(setup_build_sh, 0), "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1319 }, +{ PROC_LINKS(setup_build_bat_and_sh, 0), "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1325 }, +{ PROC_LINKS(project_command_lister, 0), "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1340 }, +{ PROC_LINKS(list_all_functions_current_buffer, 0), "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 266 }, +{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 276 }, +{ PROC_LINKS(list_all_functions_all_buffers, 0), "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 288 }, +{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 294 }, +{ PROC_LINKS(select_surrounding_scope, 0), "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "w:\\4ed\\code\\4coder_scope_commands.cpp", 37, 337 }, +{ PROC_LINKS(select_next_scope_absolute, 0), "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "w:\\4ed\\code\\4coder_scope_commands.cpp", 37, 352 }, +{ PROC_LINKS(select_prev_scope_absolute, 0), "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "w:\\4ed\\code\\4coder_scope_commands.cpp", 37, 371 }, +{ PROC_LINKS(place_in_scope, 0), "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "w:\\4ed\\code\\4coder_scope_commands.cpp", 37, 445 }, +{ PROC_LINKS(delete_current_scope, 0), "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "w:\\4ed\\code\\4coder_scope_commands.cpp", 37, 451 }, +{ PROC_LINKS(scope_absorb_down, 0), "scope_absorb_down", 17, "If a scope is currently selected, and a statement or block statement is present below the current scope, the statement is moved into the scope.", 143, "w:\\4ed\\code\\4coder_scope_commands.cpp", 37, 670 }, +{ PROC_LINKS(open_long_braces, 0), "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 46 }, +{ PROC_LINKS(open_long_braces_semicolon, 0), "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 54 }, +{ PROC_LINKS(open_long_braces_break, 0), "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 62 }, +{ PROC_LINKS(if0_off, 0), "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 70 }, +{ PROC_LINKS(write_todo, 0), "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 76 }, +{ PROC_LINKS(write_hack, 0), "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 82 }, +{ PROC_LINKS(write_note, 0), "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 88 }, +{ PROC_LINKS(write_block, 0), "write_block", 11, "At the cursor, insert a block comment.", 38, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 94 }, +{ PROC_LINKS(write_zero_struct, 0), "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 100 }, +{ PROC_LINKS(comment_line, 0), "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 125 }, +{ PROC_LINKS(uncomment_line, 0), "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 137 }, +{ PROC_LINKS(comment_line_toggle, 0), "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 149 }, +{ PROC_LINKS(snippet_lister, 0), "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 235 }, +{ PROC_LINKS(set_bindings_choose, 0), "set_bindings_choose", 19, "Remap keybindings using the 'choose' mapping rule.", 50, "w:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 41 }, +{ PROC_LINKS(set_bindings_default, 0), "set_bindings_default", 20, "Remap keybindings using the 'default' mapping rule.", 51, "w:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 51 }, +{ PROC_LINKS(set_bindings_mac_default, 0), "set_bindings_mac_default", 24, "Remap keybindings using the 'mac-default' mapping rule.", 55, "w:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 66 }, +{ PROC_LINKS(miblo_increment_basic, 0), "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 29 }, +{ PROC_LINKS(miblo_decrement_basic, 0), "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 44 }, +{ PROC_LINKS(miblo_increment_time_stamp, 0), "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 231 }, +{ PROC_LINKS(miblo_decrement_time_stamp, 0), "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 237 }, +{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 243 }, +{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 249 }, +{ PROC_LINKS(kill_rect, 0), "kill_rect", 9, "Delete characters in a rectangular region. Range testing is done by unwrapped-xy coordinates.", 93, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 44 }, +{ PROC_LINKS(multi_line_edit, 0), "multi_line_edit", 15, "Begin multi-line mode. In multi-line mode characters are inserted at every line between the mark and cursor. All characters are inserted at the same character offset into the line. This mode uses line_char coordinates.", 221, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 125 }, +{ PROC_LINKS(rename_parameter, 0), "rename_parameter", 16, "If the cursor is found to be on the name of a function parameter in the signature of a function definition, all occurences within the scope of the function will be replaced with a new provided string.", 200, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 386 }, +{ PROC_LINKS(write_explicit_enum_values, 0), "write_explicit_enum_values", 26, "If the cursor is found to be on the '{' of an enum definition, the values of the enum will be filled in sequentially starting from zero. Existing values are overwritten.", 170, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 693 }, }; static int32_t fcoder_metacmd_ID_write_explicit_enum_flags = 0; -static int32_t fcoder_metacmd_ID_parse_the_log = 1; -static int32_t fcoder_metacmd_ID_seek_beginning_of_textual_line = 2; -static int32_t fcoder_metacmd_ID_seek_end_of_textual_line = 3; -static int32_t fcoder_metacmd_ID_seek_beginning_of_line = 4; -static int32_t fcoder_metacmd_ID_seek_end_of_line = 5; -static int32_t fcoder_metacmd_ID_goto_beginning_of_file = 6; -static int32_t fcoder_metacmd_ID_goto_end_of_file = 7; -static int32_t fcoder_metacmd_ID_change_active_panel = 8; -static int32_t fcoder_metacmd_ID_change_active_panel_backwards = 9; -static int32_t fcoder_metacmd_ID_open_panel_vsplit = 10; -static int32_t fcoder_metacmd_ID_open_panel_hsplit = 11; -static int32_t fcoder_metacmd_ID_suppress_mouse = 12; -static int32_t fcoder_metacmd_ID_allow_mouse = 13; -static int32_t fcoder_metacmd_ID_toggle_mouse = 14; -static int32_t fcoder_metacmd_ID_set_mode_to_original = 15; -static int32_t fcoder_metacmd_ID_set_mode_to_notepad_like = 16; -static int32_t fcoder_metacmd_ID_toggle_highlight_line_at_cursor = 17; -static int32_t fcoder_metacmd_ID_toggle_highlight_enclosing_scopes = 18; -static int32_t fcoder_metacmd_ID_toggle_paren_matching_helper = 19; -static int32_t fcoder_metacmd_ID_toggle_fullscreen = 20; -static int32_t fcoder_metacmd_ID_remap_interactive = 21; -static int32_t fcoder_metacmd_ID_write_character = 22; -static int32_t fcoder_metacmd_ID_write_underscore = 23; -static int32_t fcoder_metacmd_ID_delete_char = 24; -static int32_t fcoder_metacmd_ID_backspace_char = 25; -static int32_t fcoder_metacmd_ID_set_mark = 26; -static int32_t fcoder_metacmd_ID_cursor_mark_swap = 27; -static int32_t fcoder_metacmd_ID_delete_range = 28; -static int32_t fcoder_metacmd_ID_backspace_alpha_numeric_boundary = 29; -static int32_t fcoder_metacmd_ID_delete_alpha_numeric_boundary = 30; -static int32_t fcoder_metacmd_ID_snipe_backward_whitespace_or_token_boundary = 31; -static int32_t fcoder_metacmd_ID_snipe_forward_whitespace_or_token_boundary = 32; -static int32_t fcoder_metacmd_ID_center_view = 33; -static int32_t fcoder_metacmd_ID_left_adjust_view = 34; -static int32_t fcoder_metacmd_ID_click_set_cursor_and_mark = 35; -static int32_t fcoder_metacmd_ID_click_set_cursor = 36; -static int32_t fcoder_metacmd_ID_click_set_cursor_if_lbutton = 37; -static int32_t fcoder_metacmd_ID_click_set_mark = 38; -static int32_t fcoder_metacmd_ID_mouse_wheel_scroll = 39; -static int32_t fcoder_metacmd_ID_move_up = 40; -static int32_t fcoder_metacmd_ID_move_down = 41; -static int32_t fcoder_metacmd_ID_move_up_10 = 42; -static int32_t fcoder_metacmd_ID_move_down_10 = 43; -static int32_t fcoder_metacmd_ID_move_down_textual = 44; -static int32_t fcoder_metacmd_ID_page_up = 45; -static int32_t fcoder_metacmd_ID_page_down = 46; -static int32_t fcoder_metacmd_ID_move_up_to_blank_line = 47; -static int32_t fcoder_metacmd_ID_move_down_to_blank_line = 48; -static int32_t fcoder_metacmd_ID_move_up_to_blank_line_skip_whitespace = 49; -static int32_t fcoder_metacmd_ID_move_down_to_blank_line_skip_whitespace = 50; -static int32_t fcoder_metacmd_ID_move_up_to_blank_line_end = 51; -static int32_t fcoder_metacmd_ID_move_down_to_blank_line_end = 52; -static int32_t fcoder_metacmd_ID_move_left = 53; -static int32_t fcoder_metacmd_ID_move_right = 54; -static int32_t fcoder_metacmd_ID_move_right_whitespace_boundary = 55; -static int32_t fcoder_metacmd_ID_move_left_whitespace_boundary = 56; -static int32_t fcoder_metacmd_ID_move_right_token_boundary = 57; -static int32_t fcoder_metacmd_ID_move_left_token_boundary = 58; -static int32_t fcoder_metacmd_ID_move_right_whitespace_or_token_boundary = 59; -static int32_t fcoder_metacmd_ID_move_left_whitespace_or_token_boundary = 60; -static int32_t fcoder_metacmd_ID_move_right_alpha_numeric_boundary = 61; -static int32_t fcoder_metacmd_ID_move_left_alpha_numeric_boundary = 62; -static int32_t fcoder_metacmd_ID_move_right_alpha_numeric_or_camel_boundary = 63; -static int32_t fcoder_metacmd_ID_move_left_alpha_numeric_or_camel_boundary = 64; -static int32_t fcoder_metacmd_ID_select_all = 65; -static int32_t fcoder_metacmd_ID_to_uppercase = 66; -static int32_t fcoder_metacmd_ID_to_lowercase = 67; -static int32_t fcoder_metacmd_ID_clean_all_lines = 68; -static int32_t fcoder_metacmd_ID_basic_change_active_panel = 69; -static int32_t fcoder_metacmd_ID_close_panel = 70; -static int32_t fcoder_metacmd_ID_show_scrollbar = 71; -static int32_t fcoder_metacmd_ID_hide_scrollbar = 72; -static int32_t fcoder_metacmd_ID_show_filebar = 73; -static int32_t fcoder_metacmd_ID_hide_filebar = 74; -static int32_t fcoder_metacmd_ID_toggle_filebar = 75; -static int32_t fcoder_metacmd_ID_toggle_line_wrap = 76; -static int32_t fcoder_metacmd_ID_toggle_fps_meter = 77; -static int32_t fcoder_metacmd_ID_increase_line_wrap = 78; -static int32_t fcoder_metacmd_ID_decrease_line_wrap = 79; -static int32_t fcoder_metacmd_ID_increase_face_size = 80; -static int32_t fcoder_metacmd_ID_decrease_face_size = 81; -static int32_t fcoder_metacmd_ID_mouse_wheel_change_face_size = 82; -static int32_t fcoder_metacmd_ID_toggle_virtual_whitespace = 83; -static int32_t fcoder_metacmd_ID_toggle_show_whitespace = 84; -static int32_t fcoder_metacmd_ID_toggle_line_numbers = 85; -static int32_t fcoder_metacmd_ID_eol_dosify = 86; -static int32_t fcoder_metacmd_ID_eol_nixify = 87; -static int32_t fcoder_metacmd_ID_exit_4coder = 88; -static int32_t fcoder_metacmd_ID_goto_line = 89; -static int32_t fcoder_metacmd_ID_search = 90; -static int32_t fcoder_metacmd_ID_reverse_search = 91; -static int32_t fcoder_metacmd_ID_search_identifier = 92; -static int32_t fcoder_metacmd_ID_reverse_search_identifier = 93; -static int32_t fcoder_metacmd_ID_replace_in_range = 94; -static int32_t fcoder_metacmd_ID_replace_in_buffer = 95; -static int32_t fcoder_metacmd_ID_replace_in_all_buffers = 96; -static int32_t fcoder_metacmd_ID_query_replace = 97; -static int32_t fcoder_metacmd_ID_query_replace_identifier = 98; -static int32_t fcoder_metacmd_ID_query_replace_selection = 99; -static int32_t fcoder_metacmd_ID_save_all_dirty_buffers = 100; -static int32_t fcoder_metacmd_ID_delete_file_query = 101; -static int32_t fcoder_metacmd_ID_save_to_query = 102; -static int32_t fcoder_metacmd_ID_rename_file_query = 103; -static int32_t fcoder_metacmd_ID_make_directory_query = 104; -static int32_t fcoder_metacmd_ID_move_line_up = 105; -static int32_t fcoder_metacmd_ID_move_line_down = 106; -static int32_t fcoder_metacmd_ID_duplicate_line = 107; -static int32_t fcoder_metacmd_ID_delete_line = 108; -static int32_t fcoder_metacmd_ID_open_file_in_quotes = 109; -static int32_t fcoder_metacmd_ID_open_matching_file_cpp = 110; -static int32_t fcoder_metacmd_ID_view_buffer_other_panel = 111; -static int32_t fcoder_metacmd_ID_swap_buffers_between_panels = 112; -static int32_t fcoder_metacmd_ID_kill_buffer = 113; -static int32_t fcoder_metacmd_ID_save = 114; -static int32_t fcoder_metacmd_ID_reopen = 115; -static int32_t fcoder_metacmd_ID_undo = 116; -static int32_t fcoder_metacmd_ID_redo = 117; -static int32_t fcoder_metacmd_ID_undo_all_buffers = 118; -static int32_t fcoder_metacmd_ID_redo_all_buffers = 119; -static int32_t fcoder_metacmd_ID_open_in_other = 120; -static int32_t fcoder_metacmd_ID_lister__quit = 121; -static int32_t fcoder_metacmd_ID_lister__activate = 122; -static int32_t fcoder_metacmd_ID_lister__write_character = 123; -static int32_t fcoder_metacmd_ID_lister__backspace_text_field = 124; -static int32_t fcoder_metacmd_ID_lister__move_up = 125; -static int32_t fcoder_metacmd_ID_lister__move_down = 126; -static int32_t fcoder_metacmd_ID_lister__wheel_scroll = 127; -static int32_t fcoder_metacmd_ID_lister__mouse_press = 128; -static int32_t fcoder_metacmd_ID_lister__mouse_release = 129; -static int32_t fcoder_metacmd_ID_lister__repaint = 130; -static int32_t fcoder_metacmd_ID_lister__write_character__default = 131; -static int32_t fcoder_metacmd_ID_lister__backspace_text_field__default = 132; -static int32_t fcoder_metacmd_ID_lister__move_up__default = 133; -static int32_t fcoder_metacmd_ID_lister__move_down__default = 134; -static int32_t fcoder_metacmd_ID_lister__write_character__file_path = 135; -static int32_t fcoder_metacmd_ID_lister__backspace_text_field__file_path = 136; -static int32_t fcoder_metacmd_ID_lister__write_character__fixed_list = 137; -static int32_t fcoder_metacmd_ID_interactive_switch_buffer = 138; -static int32_t fcoder_metacmd_ID_interactive_kill_buffer = 139; -static int32_t fcoder_metacmd_ID_interactive_open_or_new = 140; -static int32_t fcoder_metacmd_ID_interactive_new = 141; -static int32_t fcoder_metacmd_ID_interactive_open = 142; -static int32_t fcoder_metacmd_ID_command_lister = 143; -static int32_t fcoder_metacmd_ID_auto_tab_whole_file = 144; -static int32_t fcoder_metacmd_ID_auto_tab_line_at_cursor = 145; -static int32_t fcoder_metacmd_ID_auto_tab_range = 146; -static int32_t fcoder_metacmd_ID_write_and_auto_tab = 147; -static int32_t fcoder_metacmd_ID_list_all_locations = 148; -static int32_t fcoder_metacmd_ID_list_all_substring_locations = 149; -static int32_t fcoder_metacmd_ID_list_all_locations_case_insensitive = 150; -static int32_t fcoder_metacmd_ID_list_all_substring_locations_case_insensitive = 151; -static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier = 152; -static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier_case_insensitive = 153; -static int32_t fcoder_metacmd_ID_list_all_locations_of_selection = 154; -static int32_t fcoder_metacmd_ID_list_all_locations_of_selection_case_insensitive = 155; -static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition = 156; -static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition_of_identifier = 157; -static int32_t fcoder_metacmd_ID_word_complete = 158; -static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_direct = 159; -static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_same_panel_direct = 160; -static int32_t fcoder_metacmd_ID_goto_next_jump_direct = 161; -static int32_t fcoder_metacmd_ID_goto_prev_jump_direct = 162; -static int32_t fcoder_metacmd_ID_goto_next_jump_no_skips_direct = 163; -static int32_t fcoder_metacmd_ID_goto_prev_jump_no_skips_direct = 164; -static int32_t fcoder_metacmd_ID_goto_first_jump_direct = 165; -static int32_t fcoder_metacmd_ID_newline_or_goto_position_direct = 166; -static int32_t fcoder_metacmd_ID_newline_or_goto_position_same_panel_direct = 167; -static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_sticky = 168; -static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_same_panel_sticky = 169; -static int32_t fcoder_metacmd_ID_goto_next_jump_sticky = 170; -static int32_t fcoder_metacmd_ID_goto_prev_jump_sticky = 171; -static int32_t fcoder_metacmd_ID_goto_next_jump_no_skips_sticky = 172; -static int32_t fcoder_metacmd_ID_goto_prev_jump_no_skips_sticky = 173; -static int32_t fcoder_metacmd_ID_goto_first_jump_sticky = 174; -static int32_t fcoder_metacmd_ID_goto_first_jump_same_panel_sticky = 175; -static int32_t fcoder_metacmd_ID_newline_or_goto_position_sticky = 176; -static int32_t fcoder_metacmd_ID_newline_or_goto_position_same_panel_sticky = 177; -static int32_t fcoder_metacmd_ID_view_jump_list_with_lister = 178; -static int32_t fcoder_metacmd_ID_copy = 179; -static int32_t fcoder_metacmd_ID_cut = 180; -static int32_t fcoder_metacmd_ID_paste = 181; -static int32_t fcoder_metacmd_ID_paste_next = 182; -static int32_t fcoder_metacmd_ID_paste_and_indent = 183; -static int32_t fcoder_metacmd_ID_paste_next_and_indent = 184; -static int32_t fcoder_metacmd_ID_execute_previous_cli = 185; -static int32_t fcoder_metacmd_ID_execute_any_cli = 186; -static int32_t fcoder_metacmd_ID_build_search = 187; -static int32_t fcoder_metacmd_ID_build_in_build_panel = 188; -static int32_t fcoder_metacmd_ID_close_build_panel = 189; -static int32_t fcoder_metacmd_ID_change_to_build_panel = 190; -static int32_t fcoder_metacmd_ID_close_all_code = 191; -static int32_t fcoder_metacmd_ID_open_all_code = 192; -static int32_t fcoder_metacmd_ID_open_all_code_recursive = 193; -static int32_t fcoder_metacmd_ID_load_project = 194; -static int32_t fcoder_metacmd_ID_project_fkey_command = 195; -static int32_t fcoder_metacmd_ID_project_go_to_root_directory = 196; -static int32_t fcoder_metacmd_ID_setup_new_project = 197; -static int32_t fcoder_metacmd_ID_setup_build_bat = 198; -static int32_t fcoder_metacmd_ID_setup_build_sh = 199; -static int32_t fcoder_metacmd_ID_setup_build_bat_and_sh = 200; -static int32_t fcoder_metacmd_ID_project_command_lister = 201; -static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer = 202; -static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 203; -static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers = 204; -static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 205; -static int32_t fcoder_metacmd_ID_select_surrounding_scope = 206; -static int32_t fcoder_metacmd_ID_select_next_scope_absolute = 207; -static int32_t fcoder_metacmd_ID_select_prev_scope_absolute = 208; -static int32_t fcoder_metacmd_ID_place_in_scope = 209; -static int32_t fcoder_metacmd_ID_delete_current_scope = 210; -static int32_t fcoder_metacmd_ID_scope_absorb_down = 211; -static int32_t fcoder_metacmd_ID_open_long_braces = 212; -static int32_t fcoder_metacmd_ID_open_long_braces_semicolon = 213; -static int32_t fcoder_metacmd_ID_open_long_braces_break = 214; -static int32_t fcoder_metacmd_ID_if0_off = 215; -static int32_t fcoder_metacmd_ID_write_todo = 216; -static int32_t fcoder_metacmd_ID_write_hack = 217; -static int32_t fcoder_metacmd_ID_write_note = 218; -static int32_t fcoder_metacmd_ID_write_block = 219; -static int32_t fcoder_metacmd_ID_write_zero_struct = 220; -static int32_t fcoder_metacmd_ID_comment_line = 221; -static int32_t fcoder_metacmd_ID_uncomment_line = 222; -static int32_t fcoder_metacmd_ID_comment_line_toggle = 223; -static int32_t fcoder_metacmd_ID_snippet_lister = 224; -static int32_t fcoder_metacmd_ID_set_bindings_choose = 225; -static int32_t fcoder_metacmd_ID_set_bindings_default = 226; -static int32_t fcoder_metacmd_ID_set_bindings_mac_default = 227; -static int32_t fcoder_metacmd_ID_miblo_increment_basic = 228; -static int32_t fcoder_metacmd_ID_miblo_decrement_basic = 229; -static int32_t fcoder_metacmd_ID_miblo_increment_time_stamp = 230; -static int32_t fcoder_metacmd_ID_miblo_decrement_time_stamp = 231; -static int32_t fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 232; -static int32_t fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 233; -static int32_t fcoder_metacmd_ID_kill_rect = 234; -static int32_t fcoder_metacmd_ID_multi_line_edit = 235; -static int32_t fcoder_metacmd_ID_rename_parameter = 236; -static int32_t fcoder_metacmd_ID_write_explicit_enum_values = 237; +static int32_t fcoder_metacmd_ID_seek_beginning_of_textual_line = 1; +static int32_t fcoder_metacmd_ID_seek_end_of_textual_line = 2; +static int32_t fcoder_metacmd_ID_seek_beginning_of_line = 3; +static int32_t fcoder_metacmd_ID_seek_end_of_line = 4; +static int32_t fcoder_metacmd_ID_goto_beginning_of_file = 5; +static int32_t fcoder_metacmd_ID_goto_end_of_file = 6; +static int32_t fcoder_metacmd_ID_change_active_panel = 7; +static int32_t fcoder_metacmd_ID_change_active_panel_backwards = 8; +static int32_t fcoder_metacmd_ID_open_panel_vsplit = 9; +static int32_t fcoder_metacmd_ID_open_panel_hsplit = 10; +static int32_t fcoder_metacmd_ID_suppress_mouse = 11; +static int32_t fcoder_metacmd_ID_allow_mouse = 12; +static int32_t fcoder_metacmd_ID_toggle_mouse = 13; +static int32_t fcoder_metacmd_ID_set_mode_to_original = 14; +static int32_t fcoder_metacmd_ID_set_mode_to_notepad_like = 15; +static int32_t fcoder_metacmd_ID_toggle_highlight_line_at_cursor = 16; +static int32_t fcoder_metacmd_ID_toggle_highlight_enclosing_scopes = 17; +static int32_t fcoder_metacmd_ID_toggle_paren_matching_helper = 18; +static int32_t fcoder_metacmd_ID_toggle_fullscreen = 19; +static int32_t fcoder_metacmd_ID_remap_interactive = 20; +static int32_t fcoder_metacmd_ID_write_character = 21; +static int32_t fcoder_metacmd_ID_write_underscore = 22; +static int32_t fcoder_metacmd_ID_delete_char = 23; +static int32_t fcoder_metacmd_ID_backspace_char = 24; +static int32_t fcoder_metacmd_ID_set_mark = 25; +static int32_t fcoder_metacmd_ID_cursor_mark_swap = 26; +static int32_t fcoder_metacmd_ID_delete_range = 27; +static int32_t fcoder_metacmd_ID_backspace_alpha_numeric_boundary = 28; +static int32_t fcoder_metacmd_ID_delete_alpha_numeric_boundary = 29; +static int32_t fcoder_metacmd_ID_snipe_backward_whitespace_or_token_boundary = 30; +static int32_t fcoder_metacmd_ID_snipe_forward_whitespace_or_token_boundary = 31; +static int32_t fcoder_metacmd_ID_center_view = 32; +static int32_t fcoder_metacmd_ID_left_adjust_view = 33; +static int32_t fcoder_metacmd_ID_click_set_cursor_and_mark = 34; +static int32_t fcoder_metacmd_ID_click_set_cursor = 35; +static int32_t fcoder_metacmd_ID_click_set_cursor_if_lbutton = 36; +static int32_t fcoder_metacmd_ID_click_set_mark = 37; +static int32_t fcoder_metacmd_ID_mouse_wheel_scroll = 38; +static int32_t fcoder_metacmd_ID_move_up = 39; +static int32_t fcoder_metacmd_ID_move_down = 40; +static int32_t fcoder_metacmd_ID_move_up_10 = 41; +static int32_t fcoder_metacmd_ID_move_down_10 = 42; +static int32_t fcoder_metacmd_ID_move_down_textual = 43; +static int32_t fcoder_metacmd_ID_page_up = 44; +static int32_t fcoder_metacmd_ID_page_down = 45; +static int32_t fcoder_metacmd_ID_move_up_to_blank_line = 46; +static int32_t fcoder_metacmd_ID_move_down_to_blank_line = 47; +static int32_t fcoder_metacmd_ID_move_up_to_blank_line_skip_whitespace = 48; +static int32_t fcoder_metacmd_ID_move_down_to_blank_line_skip_whitespace = 49; +static int32_t fcoder_metacmd_ID_move_up_to_blank_line_end = 50; +static int32_t fcoder_metacmd_ID_move_down_to_blank_line_end = 51; +static int32_t fcoder_metacmd_ID_move_left = 52; +static int32_t fcoder_metacmd_ID_move_right = 53; +static int32_t fcoder_metacmd_ID_move_right_whitespace_boundary = 54; +static int32_t fcoder_metacmd_ID_move_left_whitespace_boundary = 55; +static int32_t fcoder_metacmd_ID_move_right_token_boundary = 56; +static int32_t fcoder_metacmd_ID_move_left_token_boundary = 57; +static int32_t fcoder_metacmd_ID_move_right_whitespace_or_token_boundary = 58; +static int32_t fcoder_metacmd_ID_move_left_whitespace_or_token_boundary = 59; +static int32_t fcoder_metacmd_ID_move_right_alpha_numeric_boundary = 60; +static int32_t fcoder_metacmd_ID_move_left_alpha_numeric_boundary = 61; +static int32_t fcoder_metacmd_ID_move_right_alpha_numeric_or_camel_boundary = 62; +static int32_t fcoder_metacmd_ID_move_left_alpha_numeric_or_camel_boundary = 63; +static int32_t fcoder_metacmd_ID_select_all = 64; +static int32_t fcoder_metacmd_ID_to_uppercase = 65; +static int32_t fcoder_metacmd_ID_to_lowercase = 66; +static int32_t fcoder_metacmd_ID_clean_all_lines = 67; +static int32_t fcoder_metacmd_ID_basic_change_active_panel = 68; +static int32_t fcoder_metacmd_ID_close_panel = 69; +static int32_t fcoder_metacmd_ID_show_scrollbar = 70; +static int32_t fcoder_metacmd_ID_hide_scrollbar = 71; +static int32_t fcoder_metacmd_ID_show_filebar = 72; +static int32_t fcoder_metacmd_ID_hide_filebar = 73; +static int32_t fcoder_metacmd_ID_toggle_filebar = 74; +static int32_t fcoder_metacmd_ID_toggle_line_wrap = 75; +static int32_t fcoder_metacmd_ID_toggle_fps_meter = 76; +static int32_t fcoder_metacmd_ID_increase_line_wrap = 77; +static int32_t fcoder_metacmd_ID_decrease_line_wrap = 78; +static int32_t fcoder_metacmd_ID_increase_face_size = 79; +static int32_t fcoder_metacmd_ID_decrease_face_size = 80; +static int32_t fcoder_metacmd_ID_mouse_wheel_change_face_size = 81; +static int32_t fcoder_metacmd_ID_toggle_virtual_whitespace = 82; +static int32_t fcoder_metacmd_ID_toggle_show_whitespace = 83; +static int32_t fcoder_metacmd_ID_toggle_line_numbers = 84; +static int32_t fcoder_metacmd_ID_eol_dosify = 85; +static int32_t fcoder_metacmd_ID_eol_nixify = 86; +static int32_t fcoder_metacmd_ID_exit_4coder = 87; +static int32_t fcoder_metacmd_ID_goto_line = 88; +static int32_t fcoder_metacmd_ID_search = 89; +static int32_t fcoder_metacmd_ID_reverse_search = 90; +static int32_t fcoder_metacmd_ID_search_identifier = 91; +static int32_t fcoder_metacmd_ID_reverse_search_identifier = 92; +static int32_t fcoder_metacmd_ID_replace_in_range = 93; +static int32_t fcoder_metacmd_ID_replace_in_buffer = 94; +static int32_t fcoder_metacmd_ID_replace_in_all_buffers = 95; +static int32_t fcoder_metacmd_ID_query_replace = 96; +static int32_t fcoder_metacmd_ID_query_replace_identifier = 97; +static int32_t fcoder_metacmd_ID_query_replace_selection = 98; +static int32_t fcoder_metacmd_ID_save_all_dirty_buffers = 99; +static int32_t fcoder_metacmd_ID_delete_file_query = 100; +static int32_t fcoder_metacmd_ID_save_to_query = 101; +static int32_t fcoder_metacmd_ID_rename_file_query = 102; +static int32_t fcoder_metacmd_ID_make_directory_query = 103; +static int32_t fcoder_metacmd_ID_move_line_up = 104; +static int32_t fcoder_metacmd_ID_move_line_down = 105; +static int32_t fcoder_metacmd_ID_duplicate_line = 106; +static int32_t fcoder_metacmd_ID_delete_line = 107; +static int32_t fcoder_metacmd_ID_open_file_in_quotes = 108; +static int32_t fcoder_metacmd_ID_open_matching_file_cpp = 109; +static int32_t fcoder_metacmd_ID_view_buffer_other_panel = 110; +static int32_t fcoder_metacmd_ID_swap_buffers_between_panels = 111; +static int32_t fcoder_metacmd_ID_kill_buffer = 112; +static int32_t fcoder_metacmd_ID_save = 113; +static int32_t fcoder_metacmd_ID_reopen = 114; +static int32_t fcoder_metacmd_ID_undo = 115; +static int32_t fcoder_metacmd_ID_redo = 116; +static int32_t fcoder_metacmd_ID_undo_all_buffers = 117; +static int32_t fcoder_metacmd_ID_redo_all_buffers = 118; +static int32_t fcoder_metacmd_ID_open_in_other = 119; +static int32_t fcoder_metacmd_ID_lister__quit = 120; +static int32_t fcoder_metacmd_ID_lister__activate = 121; +static int32_t fcoder_metacmd_ID_lister__write_character = 122; +static int32_t fcoder_metacmd_ID_lister__backspace_text_field = 123; +static int32_t fcoder_metacmd_ID_lister__move_up = 124; +static int32_t fcoder_metacmd_ID_lister__move_down = 125; +static int32_t fcoder_metacmd_ID_lister__wheel_scroll = 126; +static int32_t fcoder_metacmd_ID_lister__mouse_press = 127; +static int32_t fcoder_metacmd_ID_lister__mouse_release = 128; +static int32_t fcoder_metacmd_ID_lister__repaint = 129; +static int32_t fcoder_metacmd_ID_lister__write_character__default = 130; +static int32_t fcoder_metacmd_ID_lister__backspace_text_field__default = 131; +static int32_t fcoder_metacmd_ID_lister__move_up__default = 132; +static int32_t fcoder_metacmd_ID_lister__move_down__default = 133; +static int32_t fcoder_metacmd_ID_lister__write_character__file_path = 134; +static int32_t fcoder_metacmd_ID_lister__backspace_text_field__file_path = 135; +static int32_t fcoder_metacmd_ID_lister__write_character__fixed_list = 136; +static int32_t fcoder_metacmd_ID_interactive_switch_buffer = 137; +static int32_t fcoder_metacmd_ID_interactive_kill_buffer = 138; +static int32_t fcoder_metacmd_ID_interactive_open_or_new = 139; +static int32_t fcoder_metacmd_ID_interactive_new = 140; +static int32_t fcoder_metacmd_ID_interactive_open = 141; +static int32_t fcoder_metacmd_ID_command_lister = 142; +static int32_t fcoder_metacmd_ID_auto_tab_whole_file = 143; +static int32_t fcoder_metacmd_ID_auto_tab_line_at_cursor = 144; +static int32_t fcoder_metacmd_ID_auto_tab_range = 145; +static int32_t fcoder_metacmd_ID_write_and_auto_tab = 146; +static int32_t fcoder_metacmd_ID_list_all_locations = 147; +static int32_t fcoder_metacmd_ID_list_all_substring_locations = 148; +static int32_t fcoder_metacmd_ID_list_all_locations_case_insensitive = 149; +static int32_t fcoder_metacmd_ID_list_all_substring_locations_case_insensitive = 150; +static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier = 151; +static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier_case_insensitive = 152; +static int32_t fcoder_metacmd_ID_list_all_locations_of_selection = 153; +static int32_t fcoder_metacmd_ID_list_all_locations_of_selection_case_insensitive = 154; +static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition = 155; +static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition_of_identifier = 156; +static int32_t fcoder_metacmd_ID_word_complete = 157; +static int32_t fcoder_metacmd_ID_goto_jump_at_cursor = 158; +static int32_t fcoder_metacmd_ID_goto_jump_at_cursor_same_panel = 159; +static int32_t fcoder_metacmd_ID_goto_next_jump = 160; +static int32_t fcoder_metacmd_ID_goto_prev_jump = 161; +static int32_t fcoder_metacmd_ID_goto_next_jump_no_skips = 162; +static int32_t fcoder_metacmd_ID_goto_prev_jump_no_skips = 163; +static int32_t fcoder_metacmd_ID_goto_first_jump = 164; +static int32_t fcoder_metacmd_ID_goto_first_jump_same_panel_sticky = 165; +static int32_t fcoder_metacmd_ID_newline_or_goto_position = 166; +static int32_t fcoder_metacmd_ID_newline_or_goto_position_same_panel = 167; +static int32_t fcoder_metacmd_ID_view_jump_list_with_lister = 168; +static int32_t fcoder_metacmd_ID_log_graph__escape = 169; +static int32_t fcoder_metacmd_ID_log_graph__scroll_wheel = 170; +static int32_t fcoder_metacmd_ID_log_graph__page_up = 171; +static int32_t fcoder_metacmd_ID_log_graph__page_down = 172; +static int32_t fcoder_metacmd_ID_log_graph__click_select_event = 173; +static int32_t fcoder_metacmd_ID_log_graph__click_jump_to_event_source = 174; +static int32_t fcoder_metacmd_ID_show_the_log_graph = 175; +static int32_t fcoder_metacmd_ID_copy = 176; +static int32_t fcoder_metacmd_ID_cut = 177; +static int32_t fcoder_metacmd_ID_paste = 178; +static int32_t fcoder_metacmd_ID_paste_next = 179; +static int32_t fcoder_metacmd_ID_paste_and_indent = 180; +static int32_t fcoder_metacmd_ID_paste_next_and_indent = 181; +static int32_t fcoder_metacmd_ID_execute_previous_cli = 182; +static int32_t fcoder_metacmd_ID_execute_any_cli = 183; +static int32_t fcoder_metacmd_ID_build_search = 184; +static int32_t fcoder_metacmd_ID_build_in_build_panel = 185; +static int32_t fcoder_metacmd_ID_close_build_panel = 186; +static int32_t fcoder_metacmd_ID_change_to_build_panel = 187; +static int32_t fcoder_metacmd_ID_close_all_code = 188; +static int32_t fcoder_metacmd_ID_open_all_code = 189; +static int32_t fcoder_metacmd_ID_open_all_code_recursive = 190; +static int32_t fcoder_metacmd_ID_load_project = 191; +static int32_t fcoder_metacmd_ID_project_fkey_command = 192; +static int32_t fcoder_metacmd_ID_project_go_to_root_directory = 193; +static int32_t fcoder_metacmd_ID_setup_new_project = 194; +static int32_t fcoder_metacmd_ID_setup_build_bat = 195; +static int32_t fcoder_metacmd_ID_setup_build_sh = 196; +static int32_t fcoder_metacmd_ID_setup_build_bat_and_sh = 197; +static int32_t fcoder_metacmd_ID_project_command_lister = 198; +static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer = 199; +static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 200; +static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers = 201; +static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 202; +static int32_t fcoder_metacmd_ID_select_surrounding_scope = 203; +static int32_t fcoder_metacmd_ID_select_next_scope_absolute = 204; +static int32_t fcoder_metacmd_ID_select_prev_scope_absolute = 205; +static int32_t fcoder_metacmd_ID_place_in_scope = 206; +static int32_t fcoder_metacmd_ID_delete_current_scope = 207; +static int32_t fcoder_metacmd_ID_scope_absorb_down = 208; +static int32_t fcoder_metacmd_ID_open_long_braces = 209; +static int32_t fcoder_metacmd_ID_open_long_braces_semicolon = 210; +static int32_t fcoder_metacmd_ID_open_long_braces_break = 211; +static int32_t fcoder_metacmd_ID_if0_off = 212; +static int32_t fcoder_metacmd_ID_write_todo = 213; +static int32_t fcoder_metacmd_ID_write_hack = 214; +static int32_t fcoder_metacmd_ID_write_note = 215; +static int32_t fcoder_metacmd_ID_write_block = 216; +static int32_t fcoder_metacmd_ID_write_zero_struct = 217; +static int32_t fcoder_metacmd_ID_comment_line = 218; +static int32_t fcoder_metacmd_ID_uncomment_line = 219; +static int32_t fcoder_metacmd_ID_comment_line_toggle = 220; +static int32_t fcoder_metacmd_ID_snippet_lister = 221; +static int32_t fcoder_metacmd_ID_set_bindings_choose = 222; +static int32_t fcoder_metacmd_ID_set_bindings_default = 223; +static int32_t fcoder_metacmd_ID_set_bindings_mac_default = 224; +static int32_t fcoder_metacmd_ID_miblo_increment_basic = 225; +static int32_t fcoder_metacmd_ID_miblo_decrement_basic = 226; +static int32_t fcoder_metacmd_ID_miblo_increment_time_stamp = 227; +static int32_t fcoder_metacmd_ID_miblo_decrement_time_stamp = 228; +static int32_t fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 229; +static int32_t fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 230; +static int32_t fcoder_metacmd_ID_kill_rect = 231; +static int32_t fcoder_metacmd_ID_multi_line_edit = 232; +static int32_t fcoder_metacmd_ID_rename_parameter = 233; +static int32_t fcoder_metacmd_ID_write_explicit_enum_values = 234; #endif diff --git a/4coder_generated/remapping.h b/4coder_generated/remapping.h index e3d293cc..497e511c 100644 --- a/4coder_generated/remapping.h +++ b/4coder_generated/remapping.h @@ -15,9 +15,9 @@ bind(context, key_pause, MDFR_NONE, toggle_filebar); bind(context, key_caps, MDFR_NONE, toggle_filebar); bind(context, '.', MDFR_ALT, change_to_build_panel); bind(context, ',', MDFR_ALT, close_build_panel); -bind(context, 'n', MDFR_ALT, goto_next_jump_sticky); -bind(context, 'N', MDFR_ALT, goto_prev_jump_sticky); -bind(context, 'M', MDFR_ALT, goto_first_jump_sticky); +bind(context, 'n', MDFR_ALT, goto_next_jump); +bind(context, 'N', MDFR_ALT, goto_prev_jump); +bind(context, 'M', MDFR_ALT, goto_first_jump); bind(context, 'm', MDFR_ALT, build_in_build_panel); bind(context, 'b', MDFR_ALT, toggle_filebar); bind(context, 'z', MDFR_ALT, execute_any_cli); @@ -120,8 +120,8 @@ bind(context, 'y', MDFR_CTRL, redo); bind(context, 'z', MDFR_CTRL, undo); bind(context, '1', MDFR_CTRL, view_buffer_other_panel); bind(context, '2', MDFR_CTRL, swap_buffers_between_panels); -bind(context, '\n', MDFR_NONE, newline_or_goto_position_sticky); -bind(context, '\n', MDFR_SHIFT, newline_or_goto_position_same_panel_sticky); +bind(context, '\n', MDFR_NONE, newline_or_goto_position); +bind(context, '\n', MDFR_SHIFT, newline_or_goto_position_same_panel); bind(context, '>', MDFR_CTRL, view_jump_list_with_lister); bind(context, ' ', MDFR_SHIFT, write_character); end_map(context); @@ -200,9 +200,9 @@ bind(context, 'h', MDFR_CMND, project_go_to_root_directory); bind(context, 'S', MDFR_CMND, save_all_dirty_buffers); bind(context, '.', MDFR_CTRL, change_to_build_panel); bind(context, ',', MDFR_CTRL, close_build_panel); -bind(context, 'n', MDFR_CTRL, goto_next_jump_sticky); -bind(context, 'N', MDFR_CTRL, goto_prev_jump_sticky); -bind(context, 'M', MDFR_CTRL, goto_first_jump_sticky); +bind(context, 'n', MDFR_CTRL, goto_next_jump); +bind(context, 'N', MDFR_CTRL, goto_prev_jump); +bind(context, 'M', MDFR_CTRL, goto_first_jump); bind(context, 'm', MDFR_CTRL, build_in_build_panel); bind(context, 'b', MDFR_CTRL, toggle_filebar); bind(context, 'z', MDFR_CTRL, execute_any_cli); @@ -304,8 +304,8 @@ bind(context, 'y', MDFR_CMND, redo); bind(context, 'z', MDFR_CMND, undo); bind(context, '1', MDFR_CMND, view_buffer_other_panel); bind(context, '2', MDFR_CMND, swap_buffers_between_panels); -bind(context, '\n', MDFR_NONE, newline_or_goto_position_sticky); -bind(context, '\n', MDFR_SHIFT, newline_or_goto_position_same_panel_sticky); +bind(context, '\n', MDFR_NONE, newline_or_goto_position); +bind(context, '\n', MDFR_SHIFT, newline_or_goto_position_same_panel); bind(context, '>', MDFR_CMND, view_jump_list_with_lister); bind(context, ' ', MDFR_SHIFT, write_character); end_map(context); @@ -417,9 +417,9 @@ static Meta_Key_Bind fcoder_binds_for_default_mapid_global[43] = { {0, 55313, 0, "toggle_filebar", 14, LINK_PROCS(toggle_filebar)}, {0, 46, 2, "change_to_build_panel", 21, LINK_PROCS(change_to_build_panel)}, {0, 44, 2, "close_build_panel", 17, LINK_PROCS(close_build_panel)}, -{0, 110, 2, "goto_next_jump_sticky", 21, LINK_PROCS(goto_next_jump_sticky)}, -{0, 78, 2, "goto_prev_jump_sticky", 21, LINK_PROCS(goto_prev_jump_sticky)}, -{0, 77, 2, "goto_first_jump_sticky", 22, LINK_PROCS(goto_first_jump_sticky)}, +{0, 110, 2, "goto_next_jump", 14, LINK_PROCS(goto_next_jump)}, +{0, 78, 2, "goto_prev_jump", 14, LINK_PROCS(goto_prev_jump)}, +{0, 77, 2, "goto_first_jump", 15, LINK_PROCS(goto_first_jump)}, {0, 109, 2, "build_in_build_panel", 20, LINK_PROCS(build_in_build_panel)}, {0, 98, 2, "toggle_filebar", 14, LINK_PROCS(toggle_filebar)}, {0, 122, 2, "execute_any_cli", 15, LINK_PROCS(execute_any_cli)}, @@ -522,8 +522,8 @@ static Meta_Key_Bind fcoder_binds_for_default_mapid_file[78] = { {0, 122, 1, "undo", 4, LINK_PROCS(undo)}, {0, 49, 1, "view_buffer_other_panel", 23, LINK_PROCS(view_buffer_other_panel)}, {0, 50, 1, "swap_buffers_between_panels", 27, LINK_PROCS(swap_buffers_between_panels)}, -{0, 10, 0, "newline_or_goto_position_sticky", 31, LINK_PROCS(newline_or_goto_position_sticky)}, -{0, 10, 8, "newline_or_goto_position_same_panel_sticky", 42, LINK_PROCS(newline_or_goto_position_same_panel_sticky)}, +{0, 10, 0, "newline_or_goto_position", 24, LINK_PROCS(newline_or_goto_position)}, +{0, 10, 8, "newline_or_goto_position_same_panel", 35, LINK_PROCS(newline_or_goto_position_same_panel)}, {0, 62, 1, "view_jump_list_with_lister", 26, LINK_PROCS(view_jump_list_with_lister)}, {0, 32, 8, "write_character", 15, LINK_PROCS(write_character)}, }; @@ -605,9 +605,9 @@ static Meta_Key_Bind fcoder_binds_for_mac_default_mapid_global[40] = { {0, 83, 4, "save_all_dirty_buffers", 22, LINK_PROCS(save_all_dirty_buffers)}, {0, 46, 1, "change_to_build_panel", 21, LINK_PROCS(change_to_build_panel)}, {0, 44, 1, "close_build_panel", 17, LINK_PROCS(close_build_panel)}, -{0, 110, 1, "goto_next_jump_sticky", 21, LINK_PROCS(goto_next_jump_sticky)}, -{0, 78, 1, "goto_prev_jump_sticky", 21, LINK_PROCS(goto_prev_jump_sticky)}, -{0, 77, 1, "goto_first_jump_sticky", 22, LINK_PROCS(goto_first_jump_sticky)}, +{0, 110, 1, "goto_next_jump", 14, LINK_PROCS(goto_next_jump)}, +{0, 78, 1, "goto_prev_jump", 14, LINK_PROCS(goto_prev_jump)}, +{0, 77, 1, "goto_first_jump", 15, LINK_PROCS(goto_first_jump)}, {0, 109, 1, "build_in_build_panel", 20, LINK_PROCS(build_in_build_panel)}, {0, 98, 1, "toggle_filebar", 14, LINK_PROCS(toggle_filebar)}, {0, 122, 1, "execute_any_cli", 15, LINK_PROCS(execute_any_cli)}, @@ -709,8 +709,8 @@ static Meta_Key_Bind fcoder_binds_for_mac_default_mapid_file[77] = { {0, 122, 4, "undo", 4, LINK_PROCS(undo)}, {0, 49, 4, "view_buffer_other_panel", 23, LINK_PROCS(view_buffer_other_panel)}, {0, 50, 4, "swap_buffers_between_panels", 27, LINK_PROCS(swap_buffers_between_panels)}, -{0, 10, 0, "newline_or_goto_position_sticky", 31, LINK_PROCS(newline_or_goto_position_sticky)}, -{0, 10, 8, "newline_or_goto_position_same_panel_sticky", 42, LINK_PROCS(newline_or_goto_position_same_panel_sticky)}, +{0, 10, 0, "newline_or_goto_position", 24, LINK_PROCS(newline_or_goto_position)}, +{0, 10, 8, "newline_or_goto_position_same_panel", 35, LINK_PROCS(newline_or_goto_position_same_panel)}, {0, 62, 4, "view_jump_list_with_lister", 26, LINK_PROCS(view_jump_list_with_lister)}, {0, 32, 8, "write_character", 15, LINK_PROCS(write_character)}, }; diff --git a/4coder_helper.cpp b/4coder_helper.cpp index a3d064af..942d9a64 100644 --- a/4coder_helper.cpp +++ b/4coder_helper.cpp @@ -2482,6 +2482,29 @@ split_rect(f32_Rect rect, View_Split_Kind kind, Coordinate coord, Side from_side //////////////////////////////// +static int_color +get_margin_color(i32 level){ + int_color margin = 0; + switch (level){ + default: + case UIActivation_None: + { + margin = Stag_List_Item; + }break; + case UIActivation_Hover: + { + margin = Stag_List_Item_Hover; + }break; + case UIActivation_Active: + { + margin = Stag_List_Item_Active; + }break; + } + return(margin); +} + +//////////////////////////////// + internal f32 get_dpi_scaling_value(Application_Links *app){ // TODO(casey): Allen, this should return the multiplier for the display relative to whatever 4coder @@ -2492,6 +2515,13 @@ get_dpi_scaling_value(Application_Links *app){ //////////////////////////////// +UI_QUIT_FUNCTION(ui_quit_clear_render_hook){ + Managed_Scope scope = view_get_managed_scope(app, view); + managed_variable_set(app, scope, view_render_hook, 0); +} + +//////////////////////////////// + // TODO(allen): REWRITE THIS EXACTLY HOW YOU WANT IT --- start --- internal Child_Process_Set_Target_Flags diff --git a/4coder_jump_direct.cpp b/4coder_jump_direct.cpp deleted file mode 100644 index baf437d4..00000000 --- a/4coder_jump_direct.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* -4coder_direct_jump.cpp - Commands and helpers for parsing jump locations from -compiler errors and jumping to them in the corresponding buffer. -*/ - -// TOP - -CUSTOM_COMMAND_SIG(goto_jump_at_cursor_direct) -CUSTOM_DOC("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.") -{ - Arena *scratch = context_get_arena(app); - Temp_Memory temp = begin_temp(scratch); - View_ID view = get_active_view(app, AccessProtected); - Buffer_ID buffer = view_get_buffer(app, view, AccessProtected); - i64 pos = view_get_cursor_pos(app, view); - Full_Cursor cursor = view_compute_cursor(app, view, seek_pos(pos)); - - Parsed_Jump jump = parse_jump_from_buffer_line(app, scratch, buffer, cursor.line, false); - if (jump.success){ - change_active_panel(app); - View_ID target_view = get_active_view(app, AccessAll); - if (get_jump_buffer(app, &buffer, &jump.location)){ - switch_to_existing_view(app, target_view, buffer); - jump_to_location(app, target_view, buffer, jump.location); - } - } - - end_temp(temp); -} - -CUSTOM_COMMAND_SIG(goto_jump_at_cursor_same_panel_direct) -CUSTOM_DOC("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..") -{ - Arena *scratch = context_get_arena(app); - Temp_Memory temp = begin_temp(scratch); - View_ID view = get_active_view(app, AccessProtected); - Buffer_ID buffer = view_get_buffer(app, view, AccessProtected); - i64 pos = view_get_cursor_pos(app, view); - Full_Cursor cursor = view_compute_cursor(app, view, seek_pos(pos)); - - Parsed_Jump jump = parse_jump_from_buffer_line(app, scratch, buffer, cursor.line, false); - if (jump.success){ - View_ID target_view = view; - if (get_jump_buffer(app, &buffer, &jump.location)){ - jump_to_location(app, target_view, buffer, jump.location); - } - } - - end_temp(temp); -} - -CUSTOM_COMMAND_SIG(goto_next_jump_direct) -CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.") -{ - b32 skip_repeats = true; - b32 skip_sub_errors = true; - i32 dir = 1; - seek_jump(app, skip_repeats, skip_sub_errors, dir); -} - -CUSTOM_COMMAND_SIG(goto_prev_jump_direct) -CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.") -{ - b32 skip_repeats = true; - b32 skip_sub_errors = true; - i32 dir = -1; - seek_jump(app, skip_repeats, skip_sub_errors, dir); -} - -CUSTOM_COMMAND_SIG(goto_next_jump_no_skips_direct) -CUSTOM_DOC("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.") -{ - b32 skip_repeats = false; - b32 skip_sub_errors = true; - i32 dir = 1; - seek_jump(app, skip_repeats, skip_sub_errors, dir); -} - -CUSTOM_COMMAND_SIG(goto_prev_jump_no_skips_direct) -CUSTOM_DOC("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.") -{ - b32 skip_repeats = false; - b32 skip_sub_errors = true; - i32 dir = -1; - seek_jump(app, skip_repeats, skip_sub_errors, dir); -} - -CUSTOM_COMMAND_SIG(goto_first_jump_direct) -CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.") -{ - View_ID view = get_view_for_locked_jump_buffer(app); - if (view != 0){ - view_set_cursor(app, view, seek_pos(0), true); - memset(&prev_location, 0, sizeof(prev_location)); - seek_jump(app, false, true, 1); - } -} - -// -// Insert Newline or Tigger Jump on Read Only Buffer -// - -CUSTOM_COMMAND_SIG(newline_or_goto_position_direct) -CUSTOM_DOC("If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.") -{ - View_ID view = get_active_view(app, AccessProtected); - Buffer_ID buffer = view_get_buffer(app, view, AccessOpen); - if (buffer != 0){ - write_character(app); - } - else{ - buffer = view_get_buffer(app, view, AccessProtected); - if (buffer != 0){ - goto_jump_at_cursor_direct(app); - lock_jump_buffer(app, buffer); - } - } -} - -CUSTOM_COMMAND_SIG(newline_or_goto_position_same_panel_direct) -CUSTOM_DOC("If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.") -{ - View_ID view = get_active_view(app, AccessProtected); - Buffer_ID buffer = view_get_buffer(app, view, AccessOpen); - if (buffer != 0){ - write_character(app); - } - else{ - buffer = view_get_buffer(app, view, AccessProtected); - if (buffer != 0){ - goto_jump_at_cursor_same_panel_direct(app); - lock_jump_buffer(app, buffer); - } - } -} - -// BOTTOM - diff --git a/4coder_jump_sticky.cpp b/4coder_jump_sticky.cpp index bd0dd0a3..906b9fa3 100644 --- a/4coder_jump_sticky.cpp +++ b/4coder_jump_sticky.cpp @@ -5,12 +5,12 @@ compiler errors, sticking markers on jump locations, and jumping to them. // TOP -static Marker_List_Node *marker_list_first = 0; -static Marker_List_Node *marker_list_last = 0; +global Marker_List_Node *marker_list_first = 0; +global Marker_List_Node *marker_list_last = 0; //////////////////////////////// -static i32 +internal i32 binary_search(i64 *array, i32 stride, i32 count, i64 x){ u8 *raw = (u8*)array; i32 i = 0; @@ -38,7 +38,7 @@ binary_search(i64 *array, i32 stride, i32 count, i64 x){ return(i); } -static Sticky_Jump_Array +internal Sticky_Jump_Array parse_buffer_to_jump_array(Application_Links *app, Arena *arena, Buffer_ID buffer){ Sticky_Jump_Node *jump_first = 0;; Sticky_Jump_Node *jump_last = 0; @@ -101,7 +101,7 @@ parse_buffer_to_jump_array(Application_Links *app, Arena *arena, Buffer_ID buffe return(result); } -static void +internal void init_marker_list(Application_Links *app, Heap *heap, Buffer_ID buffer, Marker_List *list){ Arena *scratch = context_get_arena(app); Temp_Memory temp = begin_temp(scratch); @@ -185,17 +185,17 @@ init_marker_list(Application_Links *app, Heap *heap, Buffer_ID buffer, Marker_Li end_temp(temp); } -static void +internal void delete_marker_list(Marker_List_Node *node){ zdll_remove(marker_list_first, marker_list_last, node); } -static void +internal void delete_marker_list(Marker_List *list){ delete_marker_list(CastFromMember(Marker_List_Node, list, list)); } -static Marker_List* +internal Marker_List* make_new_marker_list_for_buffer(Heap *heap, i32 buffer_id){ Marker_List_Node *new_node = heap_array(heap, Marker_List_Node, 1); zdll_push_back(marker_list_first, marker_list_last, new_node); @@ -205,7 +205,7 @@ make_new_marker_list_for_buffer(Heap *heap, i32 buffer_id){ return(result); } -static Marker_List* +internal Marker_List* get_marker_list_for_buffer(Buffer_ID buffer_id){ for (Marker_List_Node *node = marker_list_first; node != 0; @@ -217,7 +217,7 @@ get_marker_list_for_buffer(Buffer_ID buffer_id){ return(0); } -static Marker_List* +internal Marker_List* get_or_make_list_for_buffer(Application_Links *app, Heap *heap, Buffer_ID buffer_id){ Marker_List *result = get_marker_list_for_buffer(buffer_id); if (result != 0){ @@ -239,7 +239,7 @@ get_or_make_list_for_buffer(Application_Links *app, Heap *heap, Buffer_ID buffer return(result); } -static b32 +internal b32 get_stored_jump_from_list(Application_Links *app, Marker_List *list, i32 index, Sticky_Jump_Stored *stored_out){ Sticky_Jump_Stored stored = {}; @@ -252,7 +252,7 @@ get_stored_jump_from_list(Application_Links *app, Marker_List *list, i32 index, return(false); } -static Sticky_Jump_Stored* +internal Sticky_Jump_Stored* get_all_stored_jumps_from_list(Application_Links *app, Arena *arena, Marker_List *list){ Sticky_Jump_Stored *stored = 0; if (list != 0){ @@ -268,7 +268,7 @@ get_all_stored_jumps_from_list(Application_Links *app, Arena *arena, Marker_List return(stored); } -static b32 +internal b32 get_jump_from_list(Application_Links *app, Marker_List *list, i32 index, ID_Pos_Jump_Location *location){ b32 result = false; Sticky_Jump_Stored stored = {}; @@ -292,7 +292,7 @@ get_jump_from_list(Application_Links *app, Marker_List *list, i32 index, ID_Pos_ return(result); } -static i64 +internal i64 get_line_from_list(Application_Links *app, Marker_List *list, i32 index){ i64 result = 0; if (list != 0){ @@ -304,7 +304,7 @@ get_line_from_list(Application_Links *app, Marker_List *list, i32 index){ return(result); } -static b32 +internal b32 get_is_sub_error_from_list(Application_Links *app, Marker_List *list, i32 index){ b32 result = false; if (list != 0){ @@ -316,7 +316,7 @@ get_is_sub_error_from_list(Application_Links *app, Marker_List *list, i32 index) return(result); } -static i32 +internal i32 get_index_nearest_from_list(Application_Links *app, Marker_List *list, i64 line){ i32 result = -1; if (list != 0){ @@ -331,7 +331,7 @@ get_index_nearest_from_list(Application_Links *app, Marker_List *list, i64 line) return(result); } -static i32 +internal i32 get_index_exact_from_list(Application_Links *app, Marker_List *list, i64 line){ i32 result = -1; if (list != 0){ @@ -349,7 +349,7 @@ get_index_exact_from_list(Application_Links *app, Marker_List *list, i64 line){ return(result); } -CUSTOM_COMMAND_SIG(goto_jump_at_cursor_sticky) +CUSTOM_COMMAND_SIG(goto_jump_at_cursor) CUSTOM_DOC("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.") { Heap *heap = &global_heap; @@ -376,7 +376,7 @@ CUSTOM_DOC("If the cursor is found to be on a jump location, parses the jump loc } } -CUSTOM_COMMAND_SIG(goto_jump_at_cursor_same_panel_sticky) +CUSTOM_COMMAND_SIG(goto_jump_at_cursor_same_panel) CUSTOM_DOC("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.") { Heap *heap = &global_heap; @@ -401,7 +401,7 @@ CUSTOM_DOC("If the cursor is found to be on a jump location, parses the jump loc } } -static void +internal void goto_jump_in_order(Application_Links *app, Marker_List *list, View_ID jump_view, ID_Pos_Jump_Location location){ Buffer_ID buffer = {}; if (get_jump_buffer(app, &buffer, &location)){ @@ -412,26 +412,16 @@ goto_jump_in_order(Application_Links *app, Marker_List *list, View_ID jump_view, } switch_to_existing_view(app, target_view, buffer); jump_to_location(app, target_view, buffer, location); - prev_location.buffer_id = location.buffer_id; - prev_location.line = location.pos; - prev_location.column = 0; + prev_location = location; } } -static b32 -jump_is_repeat(ID_Line_Column_Jump_Location prev, ID_Pos_Jump_Location location){ - b32 skip = false; - // NOTE(allen): This looks wrong, but it is correct. The prev_location is a line column type - // because that is how the old-style direct jumps worked, and they are still supported. All code paths - // in the sticky jump system treat line as the field for pos and ignore column. When the time has - // passed and the direct jump legacy system is gone then this can be corrected. - if (prev.buffer_id == location.buffer_id && prev.line == location.pos){ - skip = true; - } - return(skip); +internal b32 +jump_is_repeat(ID_Pos_Jump_Location prev, ID_Pos_Jump_Location location){ + return(prev.buffer_id == location.buffer_id && prev.pos == location.pos); } -static void +internal void goto_next_filtered_jump(Application_Links *app, Marker_List *list, View_ID jump_view, i32 list_index, i32 direction, b32 skip_repeats, b32 skip_sub_errors){ Assert(direction == 1 || direction == -1); @@ -460,7 +450,7 @@ goto_next_filtered_jump(Application_Links *app, Marker_List *list, View_ID jump_ } } -static Locked_Jump_State +internal Locked_Jump_State get_locked_jump_state(Application_Links *app, Heap *heap){ Locked_Jump_State result = {}; result.view = get_view_for_locked_jump_buffer(app); @@ -475,7 +465,7 @@ get_locked_jump_state(Application_Links *app, Heap *heap){ return(result); } -CUSTOM_COMMAND_SIG(goto_next_jump_sticky) +CUSTOM_COMMAND_SIG(goto_next_jump) CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.") { Heap *heap = &global_heap; @@ -492,7 +482,7 @@ CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to th } } -CUSTOM_COMMAND_SIG(goto_prev_jump_sticky) +CUSTOM_COMMAND_SIG(goto_prev_jump) CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations."){ Heap *heap = &global_heap; @@ -505,7 +495,7 @@ CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to th } } -CUSTOM_COMMAND_SIG(goto_next_jump_no_skips_sticky) +CUSTOM_COMMAND_SIG(goto_next_jump_no_skips) CUSTOM_DOC("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.") { Heap *heap = &global_heap; @@ -522,7 +512,7 @@ CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to th } } -CUSTOM_COMMAND_SIG(goto_prev_jump_no_skips_sticky) +CUSTOM_COMMAND_SIG(goto_prev_jump_no_skips) CUSTOM_DOC("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.") { Heap *heap = &global_heap; @@ -536,7 +526,7 @@ CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to th } } -CUSTOM_COMMAND_SIG(goto_first_jump_sticky) +CUSTOM_COMMAND_SIG(goto_first_jump) CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.") { Heap *heap = &global_heap; @@ -575,7 +565,7 @@ CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to th // Insert Newline or Tigger Jump on Read Only Buffer // -CUSTOM_COMMAND_SIG(newline_or_goto_position_sticky) +CUSTOM_COMMAND_SIG(newline_or_goto_position) CUSTOM_DOC("If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.") { View_ID view = get_active_view(app, AccessProtected); @@ -586,13 +576,13 @@ CUSTOM_DOC("If the buffer in the active view is writable, inserts a character, o else{ buffer = view_get_buffer(app, view, AccessProtected); if (buffer != 0){ - goto_jump_at_cursor_sticky(app); + goto_jump_at_cursor(app); lock_jump_buffer(app, buffer); } } } -CUSTOM_COMMAND_SIG(newline_or_goto_position_same_panel_sticky) +CUSTOM_COMMAND_SIG(newline_or_goto_position_same_panel) CUSTOM_DOC("If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.") { View_ID view = get_active_view(app, AccessProtected); @@ -603,7 +593,7 @@ CUSTOM_DOC("If the buffer in the active view is writable, inserts a character, o else{ buffer = view_get_buffer(app, view, AccessProtected); if (buffer != 0){ - goto_jump_at_cursor_same_panel_sticky(app); + goto_jump_at_cursor_same_panel(app); lock_jump_buffer(app, buffer); } } diff --git a/4coder_jumping.cpp b/4coder_jumping.cpp index 8f8b6c31..22b60b88 100644 --- a/4coder_jumping.cpp +++ b/4coder_jumping.cpp @@ -324,6 +324,7 @@ skip_this_jump(ID_Line_Column_Jump_Location prev, ID_Line_Column_Jump_Location j return(result); } +#if 0 static b32 advance_cursor_in_jump_view(Application_Links *app, View_ID view, b32 skip_repeats, b32 skip_sub_error, Scan_Direction direction, Name_Line_Column_Location *location_out){ b32 result = true; @@ -360,7 +361,7 @@ advance_cursor_in_jump_view(Application_Links *app, View_ID view, b32 skip_repea } static b32 -seek_jump(Application_Links *app, b32 skip_repeats, b32 skip_sub_errors, i32 direction){ +seek_jump_(Application_Links *app, b32 skip_repeats, b32 skip_sub_errors, i32 direction){ b32 result = false; View_ID view = get_view_for_locked_jump_buffer(app); @@ -383,41 +384,7 @@ seek_jump(Application_Links *app, b32 skip_repeats, b32 skip_sub_errors, i32 dir return(result); } - -//////////////////////////////// - -#if defined(USE_OLD_STYLE_JUMPS) - -#define goto_jump_at_cursor CUSTOM_ALIAS(goto_jump_at_cursor_direct) -#define goto_jump_at_cursor_same_panel CUSTOM_ALIAS(goto_jump_at_cursor_same_panel_direct) -#define goto_next_jump CUSTOM_ALIAS(goto_next_jump_direct) -#define goto_prev_jump CUSTOM_ALIAS(goto_prev_jump_direct) -#define goto_next_jump_no_skips CUSTOM_ALIAS(goto_next_jump_no_skips_direct) -#define goto_prev_jump_no_skips CUSTOM_ALIAS(goto_prev_jump_no_skips_direct) -#define goto_first_jump CUSTOM_ALIAS(goto_first_jump_direct) -#define newline_or_goto_position CUSTOM_ALIAS(newline_or_goto_position_direct) -#define newline_or_goto_position_same_panel CUSTOM_ALIAS(newline_or_goto_position_same_panel_direct) - -#else - -#define goto_jump_at_cursor CUSTOM_ALIAS(goto_jump_at_cursor_sticky) -#define goto_jump_at_cursor_same_panel CUSTOM_ALIAS(goto_jump_at_cursor_same_panel_sticky) -#define goto_next_jump CUSTOM_ALIAS(goto_next_jump_sticky) -#define goto_prev_jump CUSTOM_ALIAS(goto_prev_jump_sticky) -#define goto_next_jump_no_skips CUSTOM_ALIAS(goto_next_jump_no_skips_sticky) -#define goto_prev_jump_no_skips CUSTOM_ALIAS(goto_prev_jump_no_skips_sticky) -#define goto_first_jump CUSTOM_ALIAS(goto_first_jump_sticky) -#define newline_or_goto_position CUSTOM_ALIAS(newline_or_goto_position_sticky) -#define newline_or_goto_position_same_panel CUSTOM_ALIAS(newline_or_goto_position_same_panel_sticky) - #endif -#define seek_error CUSTOM_ALIAS(seek_jump) -#define goto_next_error CUSTOM_ALIAS(goto_next_jump) -#define goto_prev_error CUSTOM_ALIAS(goto_prev_jump) -#define goto_next_error_no_skips CUSTOM_ALIAS(goto_next_jump_no_skips) -#define goto_prev_error_no_skips CUSTOM_ALIAS(goto_prev_jump_no_skips) -#define goto_first_error CUSTOM_ALIAS(goto_first_jump) - // BOTTOM diff --git a/4coder_log_parser.cpp b/4coder_log_parser.cpp index 893d8c1b..42108a1f 100644 --- a/4coder_log_parser.cpp +++ b/4coder_log_parser.cpp @@ -136,6 +136,18 @@ log_parse__get_or_make_list_tag_value(Log_Parse *parse, Log_Tag *tag){ return(result); } +internal Log_Event_List* +log_parse_get_list_tag_name(Log_Parse *parse, u64 name){ + Log_Event_List *result = 0; + Table_Lookup lookup = table_lookup(&parse->tag_name_to_event_list_table, name); + if (lookup.found_match){ + u64 val = 0; + table_read(&parse->tag_name_to_event_list_table, lookup, &val); + result = (Log_Event_List*)IntAsPtr(val); + } + return(result); +} + internal Log_Event_List* log_parse__get_or_make_list_tag_name(Log_Parse *parse, Log_Tag *tag){ Log_Event_List *result = 0; @@ -354,65 +366,690 @@ log_event_array_from_list(Arena *arena, Log_Event_List list){ //////////////////////////////// -CUSTOM_COMMAND_SIG(parse_the_log) -CUSTOM_DOC("Tests the log parser") -{ - Buffer_ID log_buffer = get_buffer_by_name(app, string_u8_litexpr("*log*"), AccessAll); - Scratch_Block scratch(app); - String_Const_u8 log_text = push_whole_buffer(app, scratch, log_buffer); - Log_Parse parse = make_log_parse(scratch, log_text); - - u64 buffer_code = log_parse__string_code(&parse, string_u8_litexpr("buffer"), - LogParse_ExternalString); - u64 thread_code = log_parse__string_code(&parse, string_u8_litexpr("thread"), - LogParse_ExternalString); - - Log_Tag_Value value = {}; - value.kind = LogTagKind_Integer; - value.value_s = 10; - Log_Event_List *list = log_parse_get_list_tag_value(&parse, buffer_code, value); - - Log_Event_Ptr_Array array = log_event_array_from_list(scratch, *list); - log_events_sort_by_tag(scratch, array, thread_code); - - for (i32 i = 0; i < array.count; i += 1){ - Log_Event *event = array.events[i]; - String_Const_u8 src_name = log_parse__get_string(&parse, event->src_file_name); - String_Const_u8 event_name = log_parse__get_string(&parse, event->event_name); - u64 line_number = event->line_number; - - List_String_Const_u8 line = {}; - string_list_pushf(scratch, &line, "%.*s:%llu: %.*s", - string_expand(src_name), line_number, string_expand(event_name)); - - for (Log_Tag *node = event->first_tag; - node != 0; - node = node->next){ - String_Const_u8 tag_name = log_parse__get_string(&parse, node->name); - - switch (node->value.kind){ - case LogTagKind_Integer: - { - string_list_pushf(scratch, &line, " [%.*s:%lld]", - string_expand(tag_name), node->value.value_s); - }break; - - case LogTagKind_String: - { - String_Const_u8 string_value = log_parse__get_string(&parse, node->value.value); - string_list_pushf(scratch, &line, " [%.*s:%.*s]", - string_expand(tag_name), string_expand(string_value)); - }break; - } - } - - string_list_push(scratch, &line, string_u8_litexpr("\n")); - - String_Const_u8 line_string = string_list_flatten(scratch, line); - print_message(app, line_string); +global View_ID log_view = 0; +global Arena log_arena = {}; +global Log_Parse log_parse = {}; +global Log_Graph log_graph = {}; +global Log_Filter_Set log_filter_set = {}; +global Log_Filter_Set log_preview_set = {}; + +internal void +log_filter_set_init(Log_Filter_Set *set){ + block_zero_struct(set); + for (i32 i = ArrayCount(set->filters_memory) - 1; i >= 0; i -= 1){ + sll_stack_push(set->free_filters, &set->filters_memory[i]); } } +internal Log_Filter_Set* +log_filter_set_from_tab(Log_Graph_List_Tab tab){ + Log_Filter_Set *result = 0; + switch (tab){ + case LogTab_Filters: + { + result = &log_filter_set; + }break; + case LogTab_Previews: + { + result = &log_preview_set; + }break; + } + return(result); +} + +internal Log_Filter* +log_filter_set__new_filter(Log_Filter_Set *set, Log_Filter *prototype){ + Log_Filter *result = set->free_filters; + if (result != 0){ + for (Log_Filter *filter = set->first; + filter != 0; + filter = filter->next){ + if (filter->kind == prototype->kind && + filter->tag_name_code == prototype->tag_name_code && + block_match_struct(&filter->tag_value, &prototype->tag_value)){ + result = 0; + break; + } + } + if (result != 0){ + sll_stack_pop(set->free_filters); + block_copy_struct(result, prototype); + zdll_push_back(set->first, set->last, result); + set->count += 1; + set->alter_counter += 1; + } + } + return(result); +} + +internal void +log_filter_set__free_filter(Log_Filter_Set *set, Log_Filter *filter){ + zdll_remove(set->first, set->last, filter); + set->count -= 1; + set->alter_counter += 1; + sll_stack_push(set->free_filters, filter); +} + +internal void +log_graph_fill(Application_Links *app, Rect_f32 layout_region, Face_ID face_id){ + if (log_parse.arena != 0){ + if (log_graph.holding_temp){ + end_temp(log_graph.temp); + } + block_zero_struct(&log_graph); + log_graph.holding_temp = true; + log_graph.temp = begin_temp(&log_arena); + log_graph.layout_region = layout_region; + log_graph.face_id = face_id; + log_graph.filter_alter_counter = log_filter_set.alter_counter; + log_graph.preview_alter_counter = log_preview_set.alter_counter; + log_graph.tab = LogTab_Filters; + + f32 details_h = rect_height(layout_region)*.22f; + details_h = clamp_top(details_h, 250.f); + + Rect_f32 details_region = Rf32(layout_region.x0, layout_region.y0, + layout_region.x1, layout_region.y0 + details_h); + Rect_f32 event_list_region = Rf32(layout_region.x0, layout_region.y0 + details_h, + layout_region.x1, layout_region.y1); + + log_graph.details_region = details_region; + log_graph.details_region.p0 -= layout_region.p0; + log_graph.details_region.p1 -= layout_region.p0; + + u64 thread_code = log_parse__string_code(&log_parse, string_u8_litexpr("thread"), + LogParse_ExternalString); + + if (log_filter_set.count == 0){ + // NOTE(allen): everything goes into the filtered list + for (Log_Event *event = log_parse.first_event; + event != 0; + event = event->next){ + Log_Event_Ptr_Node *node = push_array(&log_arena, Log_Event_Ptr_Node, 1); + node->event = event; + sll_queue_push(log_graph.filtered_list.first, log_graph.filtered_list.last, node); + log_graph.filtered_list.count += 1; + } + } + else{ + for (Log_Filter *filter = log_filter_set.first; + filter != 0; + filter = filter->next){ + Log_Event_List *filter_list = 0; + if (filter->kind == LogFilter_TagValue){ + filter_list = log_parse_get_list_tag_value(&log_parse, filter->tag_name_code, + filter->tag_value); + } + else if (filter->kind == LogFilter_Tag){ + filter_list = log_parse_get_list_tag_name(&log_parse, filter->tag_name_code); + } + + // NOTE(allen): combine with existing result + if (filter == log_filter_set.first){ + for (Log_Event_Ptr_Node *node = filter_list->first; + node != 0; + node = node->next){ + Log_Event_Ptr_Node *new_node = push_array(&log_arena, Log_Event_Ptr_Node, 1); + new_node->event = node->event; + sll_queue_push(log_graph.filtered_list.first, log_graph.filtered_list.last, new_node); + log_graph.filtered_list.count += 1; + } + } + else{ + Log_Event_Ptr_Node **fixup_ptr = &log_graph.filtered_list.first; + log_graph.filtered_list.last = 0; + for (Log_Event_Ptr_Node *node_a = log_graph.filtered_list.first, *next = 0; + node_a != 0; + node_a = next){ + next = node_a->next; + + b32 remove_node_a = true; + for (Log_Event_Ptr_Node *node_b = filter_list->first; + node_b != 0; + node_b = node_b->next){ + if (node_a->event == node_b->event){ + remove_node_a = false; + break; + } + } + + if (remove_node_a){ + *fixup_ptr = next; + } + else{ + fixup_ptr = &node_a->next; + log_graph.filtered_list.last = node_a; + } + } + } + } + } + + log_graph.event_array = log_event_array_from_list(&log_arena, + log_graph.filtered_list); + log_events_sort_by_tag(&log_arena, log_graph.event_array, thread_code); + + b32 had_a_tag = true; + u64 thread_id_value = 0; + Log_Graph_Thread_Bucket *prev_bucket = 0; + + for (i32 i = 0; i < log_graph.event_array.count; i += 1){ + Table_u64_u64 *tag_table = &log_graph.event_array.events[i]->tag_name_to_tag_ptr_table; + Table_Lookup lookup = table_lookup(tag_table, thread_code); + + b32 emit_next_bucket = false; + if (!lookup.found_match){ + if (had_a_tag){ + had_a_tag = false; + thread_id_value = 0; + emit_next_bucket = true; + } + } + else{ + u64 read_val = 0; + table_read(tag_table, lookup, &read_val); + Log_Tag *tag = (Log_Tag*)IntAsPtr(read_val); + if (!had_a_tag){ + had_a_tag = true; + thread_id_value = tag->value.value; + emit_next_bucket = true; + } + else if (thread_id_value != tag->value.value){ + thread_id_value = tag->value.value; + emit_next_bucket = true; + } + } + + if (emit_next_bucket){ + Log_Graph_Thread_Bucket *bucket = push_array(&log_arena, Log_Graph_Thread_Bucket, 1); + sll_queue_push(log_graph.first_bucket, log_graph.last_bucket, bucket); + log_graph.bucket_count += 1; + bucket->range.first = i; + bucket->had_a_tag = had_a_tag; + bucket->thread_id_value = thread_id_value; + if (prev_bucket != 0){ + prev_bucket->range.one_past_last = i; + } + prev_bucket = bucket; + } + } + if (prev_bucket != 0){ + prev_bucket->range.one_past_last = log_graph.event_array.count; + } + + Face_Metrics metrics = get_face_metrics(app, face_id); + f32 line_height = metrics.line_height; + f32 box_h = f32_floor32(line_height*1.5f); + f32 box_w = f32_floor32(rect_width(event_list_region)/log_graph.bucket_count); + f32 y_cursor = event_list_region.y0 - layout_region.y0; + + if (log_graph.bucket_count > 0){ + f32 y_bottom = 0.f; + + for (;;){ + i32 smallest_event_number = max_i32; + i32 bucket_with_next_event_index = -1; + Log_Graph_Thread_Bucket *bucket_with_next_event = 0; + Log_Event *next_event = 0; + i32 iteration_counter = 0; + for (Log_Graph_Thread_Bucket *bucket = log_graph.first_bucket; + bucket != 0; + bucket = bucket->next, iteration_counter += 1){ + if (bucket->range.first < bucket->range.one_past_last){ + Log_Event *event = log_graph.event_array.events[bucket->range.first]; + if (event->event_number < smallest_event_number){ + smallest_event_number = event->event_number; + bucket_with_next_event_index = iteration_counter; + bucket_with_next_event = bucket; + next_event = event; + } + } + } + + if (bucket_with_next_event == 0){ + break; + } + + bucket_with_next_event->range.first += 1; + + Log_Graph_Box *box_node = push_array(&log_arena, Log_Graph_Box, 1); + sll_queue_push(log_graph.first_box, log_graph.last_box, box_node); + log_graph.box_count += 1; + Rect_f32 rect = Rf32(box_w*bucket_with_next_event_index , y_cursor, + box_w*(bucket_with_next_event_index + 1), y_cursor + box_h); + box_node->rect = rect; + box_node->event = next_event; + + y_bottom = Max(y_bottom, rect.y1); + + y_cursor += box_h; + } + + log_graph.max_y_scroll = clamp_bot(line_height, y_bottom - rect_height(event_list_region)*0.5f); + } + } +} + +internal void +log_parse_fill(Application_Links *app, Buffer_ID buffer){ + if (log_arena.base_allocator == 0){ + log_arena = make_arena_app_links(app); + } + + linalloc_clear(&log_arena); + block_zero_struct(&log_graph); + log_filter_set_init(&log_filter_set); + log_filter_set_init(&log_preview_set); + + String_Const_u8 log_text = push_whole_buffer(app, &log_arena, buffer); + log_parse = make_log_parse(&log_arena, log_text); +} + +internal void +log_graph_render__tag(Arena *arena, Fancy_String_List *line, Log_Parse *log_parse, Log_Tag *tag){ + String_Const_u8 tag_name = log_parse__get_string(log_parse, tag->name); + push_fancy_stringf(arena, line, white, "["); + push_fancy_string(arena, line, green, tag_name); + push_fancy_stringf(arena, line, white, "="); + if (tag->value.kind == LogTagKind_Integer){ + push_fancy_stringf(arena, line, pink, "0x%llx", tag->value.value_s); + } + else if (tag->value.kind == LogTagKind_String){ + String_Const_u8 value = log_parse__get_string(log_parse, tag->value.value); + push_fancy_string(arena, line, pink, value); + } + push_fancy_stringf(arena, line, white, "]"); +} + +internal void +log_graph_render(Application_Links *app, View_ID view, Frame_Info frame_info, Rect_f32 inner){ + if (log_parse.arena != 0){ + Face_ID face_id = get_face_id(app, 0); + f32 y_scroll = log_graph.y_scroll; + Log_Event *selected_event = log_graph.selected_event; + if (!log_graph.holding_temp || + inner != log_graph.layout_region || + face_id != log_graph.face_id || + log_filter_set.alter_counter != log_graph.filter_alter_counter){ + log_graph_fill(app, inner, face_id); + } + log_graph.y_scroll = clamp(0.f, y_scroll, log_graph.max_y_scroll); + log_graph.selected_event = selected_event; + + Mouse_State mouse = get_mouse_state(app); + Vec2_f32 m_p = V2f32(mouse.p) - inner.p0; + + Face_Metrics metrics = get_face_metrics(app, log_graph.face_id); + f32 line_height = metrics.line_height; + + Log_Event *hover_event = 0; + + b32 in_details_region = (rect_contains_point(log_graph.details_region, m_p)); + + for (Log_Graph_Box *box_node = log_graph.first_box; + box_node != 0; + box_node = box_node->next){ + Scratch_Block scratch(app); + + Rect_f32 box = box_node->rect; + box.y0 -= log_graph.y_scroll; + box.y1 -= log_graph.y_scroll; + + Rect_f32 box_inner = rect_inner(box, 3.f); + + Fancy_Color margin_color = dark_gray; + if (!in_details_region && hover_event == 0 && rect_contains_point(box, m_p)){ + margin_color = gray; + hover_event = box_node->event; + } + if (box_node->event == log_graph.selected_event){ + margin_color = light_gray; + } + + draw_rectangle(app, box , margin_color); + draw_rectangle(app, box_inner, black ); + + Log_Event *event = box_node->event; + + String_Const_u8 event_name = log_parse__get_string(&log_parse, event->event_name); + Fancy_String_List line = {}; + push_fancy_string(scratch, &line, white, event_name); + + for (Log_Filter *filter = log_preview_set.first; + filter != 0; + filter = filter->next){ + Table_u64_u64 *table = &event->tag_name_to_tag_ptr_table; + Table_Lookup lookup = table_lookup(table, filter->tag_name_code); + if (lookup.found_match){ + u64 val = 0; + table_read(table, lookup, &val); + Log_Tag *tag = (Log_Tag*)IntAsPtr(val); + push_fancy_string(scratch, &line, string_u8_litexpr(" ")); + log_graph_render__tag(scratch, &line, &log_parse, tag); + } + } + + + Vec2_f32 p = V2f32(box_inner.x0 + 3.f, + (f32_round32((box_inner.y0 + box_inner.y1 - line_height)*0.5f))); + draw_fancy_string(app, log_graph.face_id, line.first, p, 0, 0, 0, V2f32(1.f, 0.f)); + } + + { + Scratch_Block scratch(app); + + Rect_f32 box = log_graph.details_region; + Rect_f32 box_inner = rect_inner(box, 3.f); + + Log_Graph_List_Tab current_tab = log_graph.tab; + Log_Filter_Set *viewing_filter_set = log_filter_set_from_tab(current_tab); + + draw_rectangle(app, box , dark_gray); + draw_rectangle(app, box_inner, black ); + + { + f32 y_cursor = box_inner.y0 + 3.f; + if (y_cursor + line_height > box_inner.y1) goto finish_list_display; + + { + f32 x_cursor = box_inner.x0 + 3.f; + for (i32 i = LogTab_ERROR + 1; i < LogTab_COUNT; i += 1){ + Fancy_Color color = (i == current_tab)?white:gray; + Fancy_String_List line = {}; + switch (i){ + case LogTab_Filters: + { + push_fancy_stringf(scratch, &line, color, "filters"); + }break; + case LogTab_Previews: + { + push_fancy_stringf(scratch, &line, color, "previews"); + }break; + } + + Vec2_f32 p = V2f32(x_cursor, y_cursor); + f32 advance = get_fancy_string_advance(app, log_graph.face_id, line.first); + draw_fancy_string(app, log_graph.face_id, line.first, p, + Stag_Default, Stag_Back, 0, V2f32(1.f, 0.f)); + x_cursor += advance + metrics.typical_character_width; + + if (log_graph.has_unused_click){ + Rect_f32 click_rect = Rf32(p.x, p.y, p.x + advance, p.y + line_height); + if (rect_contains_point(click_rect, log_graph.unused_click)){ + log_graph.has_unused_click = false; + log_graph.tab = i; + } + } + } + } + + if (viewing_filter_set != 0){ + for (Log_Filter *filter = viewing_filter_set->first, *next = 0; + filter != 0; + filter = next){ + next = filter->next; + + y_cursor += line_height; + if (y_cursor + line_height > box_inner.y1) goto finish_list_display; + + Fancy_String_List line = {}; + + if (filter->kind == LogFilter_TagValue){ + push_fancy_stringf(scratch, &line, white, "val ["); + String_Const_u8 tag_name = log_parse__get_string(&log_parse, filter->tag_name_code); + push_fancy_stringf(scratch, &line, green, "%.*s", string_expand(tag_name)); + push_fancy_stringf(scratch, &line, white, "="); + if (filter->tag_value.kind == LogTagKind_Integer){ + push_fancy_stringf(scratch, &line, pink, "0x%llx", filter->tag_value.value_s); + } + else if (filter->tag_value.kind == LogTagKind_String){ + String_Const_u8 value = log_parse__get_string(&log_parse, filter->tag_value.value); + push_fancy_stringf(scratch, &line, pink, "%.*s", string_expand(value)); + } + push_fancy_stringf(scratch, &line, white, "]"); + } + else{ + push_fancy_stringf(scratch, &line, white, "name ["); + String_Const_u8 tag_name = log_parse__get_string(&log_parse, filter->tag_name_code); + push_fancy_stringf(scratch, &line, green, "%.*s", string_expand(tag_name)); + push_fancy_stringf(scratch, &line, white, "]"); + } + + Vec2_f32 p = V2f32(box_inner.x0 + 3.f, y_cursor); + f32 advance = get_fancy_string_advance(app, log_graph.face_id, line.first); + draw_fancy_string(app, log_graph.face_id, line.first, p, Stag_Default, Stag_Back, + 0, V2f32(1.f, 0.f)); + + if (log_graph.has_unused_click){ + Rect_f32 click_rect = Rf32(p.x, p.y, p.x + advance, p.y + line_height); + if (rect_contains_point(click_rect, log_graph.unused_click)){ + log_graph.has_unused_click = false; + log_filter_set__free_filter(viewing_filter_set, filter); + } + } + } + } + + finish_list_display:; + } + + Log_Event *view_event = (hover_event!=0)?hover_event:log_graph.selected_event; + if (view_event != 0){ + f32 y_cursor = box_inner.y0 + 3.f; + if (y_cursor + line_height > box_inner.y1) goto finish_event_display; + + { + Fancy_String_List line = {}; + String_Const_u8 file_name = log_parse__get_string(&log_parse, view_event->src_file_name); + push_fancy_stringf(scratch, &line, green, "[%d] ", view_event->event_number); + push_fancy_stringf(scratch, &line, white, "%.*s:", string_expand(file_name)); + push_fancy_stringf(scratch, &line, pink, "%llu", view_event->line_number); + + Vec2_f32 right_p = V2f32(box_inner.x1 - 3.f, y_cursor); + f32 advance = get_fancy_string_advance(app, log_graph.face_id, line.first); + Vec2 p = V2f32(right_p.x - advance, right_p.y); + draw_fancy_string(app, log_graph.face_id, line.first, p, Stag_Default, Stag_Back, + 0, V2(1.f, 0.f)); + } + + for (Log_Tag *tag = view_event->first_tag; + tag != 0; + tag = tag->next){ + y_cursor += line_height; + if (y_cursor + line_height > box_inner.y1) goto finish_event_display; + + { + Fancy_String_List line = {}; + log_graph_render__tag(scratch, &line, &log_parse, tag); + + Vec2_f32 right_p = V2f32(box_inner.x1 - 3.f, y_cursor); + f32 advance = get_fancy_string_advance(app, log_graph.face_id, line.first); + Vec2 p = V2f32(right_p.x - advance, right_p.y); + draw_fancy_string(app, log_graph.face_id, line.first, p, + Stag_Default, Stag_Back, 0, V2(1.f, 0.f)); + + if (log_graph.has_unused_click){ + Rect_f32 click_rect = Rf32(p.x, p.y, right_p.x, p.y + line_height); + if (rect_contains_point(click_rect, log_graph.unused_click)){ + log_graph.has_unused_click = false; + Log_Filter filter = {}; + switch (log_graph.tab){ + case LogTab_Filters: + { + filter.kind = LogFilter_TagValue; + filter.tag_name_code = tag->name; + filter.tag_value = tag->value; + }break; + case LogTab_Previews: + { + filter.kind = LogFilter_Tag; + filter.tag_name_code = tag->name; + }break; + } + if (filter.kind != LogTab_ERROR){ + log_filter_set__new_filter(viewing_filter_set, &filter); + animate_in_n_milliseconds(app, 0); + } + } + } + } + } + + finish_event_display:; + } + } + + log_graph.has_unused_click = false; + } +} + +CUSTOM_COMMAND_SIG(log_graph__escape) +CUSTOM_DOC("Ends the log grapher") +{ + if (log_view != 0){ + Managed_Scope scope = view_get_managed_scope(app, log_view); + managed_variable_set(app, scope, view_render_hook, 0); + view_end_ui_mode(app, log_view); + log_view = 0; + } +} + +CUSTOM_COMMAND_SIG(log_graph__scroll_wheel) +CUSTOM_DOC("Scrolls the log graph") +{ + if (log_view != 0){ + Mouse_State mouse = get_mouse_state(app); + if (mouse.wheel != 0){ + log_graph.y_scroll += mouse.wheel; + } + } +} + +CUSTOM_COMMAND_SIG(log_graph__page_up) +CUSTOM_DOC("Scroll the log graph up one whole page") +{ + if (log_view != 0){ + log_graph.y_scroll -= get_page_jump(app, log_view); + } +} + +CUSTOM_COMMAND_SIG(log_graph__page_down) +CUSTOM_DOC("Scroll the log graph down one whole page") +{ + if (log_view != 0){ + log_graph.y_scroll += get_page_jump(app, log_view); + } +} + +internal Log_Graph_Box* +log_graph__get_box_at_point(Log_Graph *log_graph, Vec2_f32 p){ + Log_Graph_Box *result = 0; + if (!rect_contains_point(log_graph->details_region, p)){ + for (Log_Graph_Box *box_node = log_graph->first_box; + box_node != 0; + box_node = box_node->next){ + Rect_f32 box = box_node->rect; + box.y0 -= log_graph->y_scroll; + box.y1 -= log_graph->y_scroll; + if (rect_contains_point(box, p)){ + result = box_node; + break; + } + } + } + return(result); +} + +internal Log_Graph_Box* +log_graph__get_box_at_mouse_point(Application_Links *app, Log_Graph *log_graph){ + Mouse_State mouse = get_mouse_state(app); + Vec2_f32 m_p = V2f32(mouse.p) - log_graph->layout_region.p0; + return(log_graph__get_box_at_point(log_graph, m_p)); +} + +CUSTOM_COMMAND_SIG(log_graph__click_select_event) +CUSTOM_DOC("Select the event record at the mouse point in the log graph") +{ + if (log_view != 0){ + if (log_graph.holding_temp){ + Mouse_State mouse = get_mouse_state(app); + Vec2_f32 m_p = V2f32(mouse.p) - log_graph.layout_region.p0; + Log_Graph_Box *box_node = log_graph__get_box_at_point(&log_graph, m_p); + if (box_node != 0){ + log_graph.selected_event = box_node->event; + } + else{ + log_graph.has_unused_click = true; + log_graph.unused_click = m_p; + } + } + } +} + +CUSTOM_COMMAND_SIG(log_graph__click_jump_to_event_source) +CUSTOM_DOC("Jump to the code that logged the event record at the mouse point in the log graph") +{ + if (log_view != 0){ + if (log_graph.holding_temp){ + Mouse_State mouse = get_mouse_state(app); + Vec2_f32 m_p = V2f32(mouse.p) - log_graph.layout_region.p0; + Log_Graph_Box *box_node = log_graph__get_box_at_point(&log_graph, m_p); + if (box_node != 0){ + Log_Event *event = box_node->event; + log_graph.selected_event = event; + + View_ID target_view = get_next_view_looped_primary_panels(app, log_view, AccessProtected); + if (target_view != 0){ + String_Const_u8 file_name = log_parse__get_string(&log_parse, event->src_file_name); + Buffer_ID target_buffer = get_buffer_by_file_name(app, file_name, AccessAll); + if (target_buffer == 0){ + target_buffer = get_buffer_by_name(app, file_name, AccessAll); + } + if (target_buffer != 0){ + if (target_view == log_view){ + view_end_ui_mode(app, target_view); + } + set_view_to_location(app, target_view, target_buffer, + seek_line_char(event->line_number, 1)); + } + } + } + else{ + log_graph.has_unused_click = true; + log_graph.unused_click = m_p; + } + } + } +} + +internal void +fill_log_graph_command_map(Bind_Helper *context){ + begin_map(context, default_log_graph_map); + bind(context, key_esc, MDFR_NONE, log_graph__escape); + bind(context, key_mouse_wheel, MDFR_NONE, log_graph__scroll_wheel); + bind(context, key_mouse_left, MDFR_NONE, log_graph__click_jump_to_event_source); + bind(context, key_mouse_right, MDFR_NONE, log_graph__click_select_event); + bind(context, key_page_up, MDFR_NONE, log_graph__page_up); + bind(context, key_page_down, MDFR_NONE, log_graph__page_down); + end_map(context); +} + +CUSTOM_COMMAND_SIG(show_the_log_graph) +CUSTOM_DOC("Parser *log* and displays the 'log graph' UI") +{ + Buffer_ID log_buffer = get_buffer_by_name(app, string_u8_litexpr("*log*"), AccessAll); + log_parse_fill(app, log_buffer); + + if (log_view == 0){ + log_view = get_active_view(app, AccessAll); + } + Managed_Scope scope = view_get_managed_scope(app, log_view); + u64 render_hook_value = (u64)PtrAsInt(log_graph_render); + managed_variable_set(app, scope, view_render_hook, render_hook_value); + view_set_setting(app, log_view, ViewSetting_UICommandMap, default_log_graph_map); + view_begin_ui_mode(app, log_view); + view_set_quit_ui_handler(app, log_view, ui_quit_clear_render_hook); +} // BOTTOM diff --git a/4coder_log_parser.h b/4coder_log_parser.h index b9557754..3f4993b2 100644 --- a/4coder_log_parser.h +++ b/4coder_log_parser.h @@ -100,6 +100,77 @@ struct Log_Parse{ Table_u64_u64 tag_name_to_event_list_table; }; +//////////////////////////////// + +struct Log_Graph_Thread_Bucket{ + Log_Graph_Thread_Bucket *next; + Range_i32 range; + b32 had_a_tag; + u64 thread_id_value; +}; + +struct Log_Graph_Box{ + Log_Graph_Box *next; + Rect_f32 rect; + Log_Event *event; +}; + +typedef i32 Log_Filter_Kind; +enum{ + LogFilter_ERROR, + LogFilter_TagValue, + LogFilter_Tag, +}; + +struct Log_Filter{ + Log_Filter *next; + Log_Filter *prev; + Log_Filter_Kind kind; + u64 tag_name_code; + Log_Tag_Value tag_value; +}; + +struct Log_Filter_Set{ + Log_Filter filters_memory[20]; + Log_Filter *free_filters; + Log_Filter *first; + Log_Filter *last; + i32 count; + i32 alter_counter; +}; + +typedef i32 Log_Graph_List_Tab; +enum{ + LogTab_ERROR, + LogTab_Filters, + LogTab_Previews, + LogTab_COUNT, +}; + +struct Log_Graph{ + b32 holding_temp; + Temp_Memory temp; + Rect_f32 layout_region; + Face_ID face_id; + i32 filter_alter_counter; + i32 preview_alter_counter; + Log_Graph_List_Tab tab; + Rect_f32 details_region; + Log_Event_List filtered_list; + Log_Event_Ptr_Array event_array; + Log_Graph_Thread_Bucket *first_bucket; + Log_Graph_Thread_Bucket *last_bucket; + i32 bucket_count; + Log_Graph_Box *first_box; + Log_Graph_Box *last_box; + i32 box_count; + f32 y_scroll; + f32 max_y_scroll; + Log_Event *selected_event; + b32 has_unused_click; + Vec2_f32 unused_click; +}; + #endif // BOTTOM diff --git a/4coder_remapping_commands.cpp b/4coder_remapping_commands.cpp index 837e3c0e..3bb9aaed 100644 --- a/4coder_remapping_commands.cpp +++ b/4coder_remapping_commands.cpp @@ -17,11 +17,13 @@ in the set of default maps. void default_keys(Bind_Helper *context){ fill_keys_default(context); + fill_log_graph_command_map(context); } void mac_default_keys(Bind_Helper *context){ fill_keys_mac_default(context); + fill_log_graph_command_map(context); } diff --git a/4coder_ui_helper.cpp b/4coder_ui_helper.cpp index 63c7233f..6522862d 100644 --- a/4coder_ui_helper.cpp +++ b/4coder_ui_helper.cpp @@ -365,33 +365,42 @@ lister_update_ui(Application_Links *app, View_ID view, Lister_State *state){ Lister_Node_Ptr_Array substring_matches = {}; substring_matches.node_ptrs = push_array(scratch, Lister_Node*, node_count); - String_Const_u8 key = state->lister.data.key_string.string; - List_String_Const_u8 absolutes = {}; - string_list_push(scratch, &absolutes, string_u8_litexpr("")); - List_String_Const_u8 splits = string_split(scratch, key, (u8*)"*", 1); - b32 has_wildcard = (splits.node_count > 1); - string_list_push(&absolutes, &splits); - string_list_push(scratch, &absolutes, string_u8_litexpr("")); - - for (Lister_Node *node = state->lister.data.options.first; - node != 0; - node = node->next){ - if (key.size == 0 || - string_wildcard_match_insensitive(absolutes, node->string)){ + { + Temp_Memory temp = begin_temp(scratch); + String_Const_u8 key = state->lister.data.key_string.string; + key = push_string_copy(scratch, key); + string_mod_replace_character(key, '_', '*'); + string_mod_replace_character(key, ' ', '*'); + + List_String_Const_u8 absolutes = {}; + string_list_push(scratch, &absolutes, string_u8_litexpr("")); + List_String_Const_u8 splits = string_split(scratch, key, (u8*)"*", 1); + b32 has_wildcard = (splits.node_count > 1); + string_list_push(&absolutes, &splits); + string_list_push(scratch, &absolutes, string_u8_litexpr("")); + + for (Lister_Node *node = state->lister.data.options.first; + node != 0; + node = node->next){ String_Const_u8 node_string = node->string; - if (string_match_insensitive(node_string, key) && exact_matches.count == 0){ - exact_matches.node_ptrs[exact_matches.count++] = node; - } - else if (!has_wildcard && - string_match_insensitive(string_prefix(node_string, key.size), key) && - node->string.size > key.size && - node->string.str[key.size] == '.'){ - before_extension_matches.node_ptrs[before_extension_matches.count++] = node; - } - else{ - substring_matches.node_ptrs[substring_matches.count++] = node; + + if (key.size == 0 || string_wildcard_match_insensitive(absolutes, node_string)){ + if (string_match_insensitive(node_string, key) && exact_matches.count == 0){ + exact_matches.node_ptrs[exact_matches.count++] = node; + } + else if (!has_wildcard && + string_match_insensitive(string_prefix(node_string, key.size), key) && + node->string.size > key.size && + node->string.str[key.size] == '.'){ + before_extension_matches.node_ptrs[before_extension_matches.count++] = node; + } + else{ + substring_matches.node_ptrs[substring_matches.count++] = node; + } } } + + end_temp(temp); } Lister_Node_Ptr_Array node_ptr_arrays[] = { diff --git a/4ed_buffer.cpp b/4ed_buffer.cpp index e692d089..ac8aec95 100644 --- a/4ed_buffer.cpp +++ b/4ed_buffer.cpp @@ -14,9 +14,9 @@ // internal void -write_cursor_with_index(Cursor_With_Index *positions, i32 *count, i32 pos){ - positions[(*count)].index = *count; - positions[(*count)].pos = pos; +write_cursor_with_index(Cursor_With_Index *positions, i32 *count, i64 pos){ + positions[*count].index = *count; + positions[*count].pos = pos; ++(*count); } @@ -29,7 +29,7 @@ write_cursor_with_index(Cursor_With_Index *positions, i32 *count, i32 pos){ internal void buffer_quick_sort_cursors(Cursor_With_Index *positions, i32 start, i32 pivot){ i32 mid = start; - i32 pivot_pos = positions[pivot].pos; + i64 pivot_pos = positions[pivot].pos; for (i32 i = mid; i < pivot; ++i){ if (positions[i].pos < pivot_pos){ CursorSwap__(positions[mid], positions[i]); diff --git a/4ed_buffer.h b/4ed_buffer.h index 2f05bc97..9c30bcda 100644 --- a/4ed_buffer.h +++ b/4ed_buffer.h @@ -19,7 +19,7 @@ enum{ }; struct Cursor_With_Index{ - i32 pos; + i64 pos; i32 index; }; diff --git a/4ed_edit.cpp b/4ed_edit.cpp index 66244905..45631501 100644 --- a/4ed_edit.cpp +++ b/4ed_edit.cpp @@ -167,7 +167,7 @@ edit_fix_markers(System_Functions *system, Models *models, Editing_File *file, E panel = layout_get_next_open_panel(layout, panel)){ View *view = panel->view; if (view->file == file){ - i32 cursor_pos = cursors[cursor_count++].pos; + i64 cursor_pos = cursors[cursor_count++].pos; Full_Cursor new_cursor = file_compute_cursor(models, file, seek_pos(cursor_pos)); File_Edit_Positions edit_pos = view_get_edit_pos(view); @@ -176,8 +176,8 @@ edit_fix_markers(System_Functions *system, Models *models, Editing_File *file, E view->mark = cursors[cursor_count++].pos; i32 line_height = (i32)face->height; - i32 top_left_pos = cursors[cursor_count++].pos; - i32 top_left_target_pos = cursors[cursor_count++].pos; + i64 top_left_pos = cursors[cursor_count++].pos; + i64 top_left_target_pos = cursors[cursor_count++].pos; f32 new_y_val_aligned = 0; if (view->temp_view_top_left_pos != top_left_pos){ Full_Cursor new_position_cursor = file_compute_cursor(models, file, seek_pos(top_left_pos)); diff --git a/4ed_file.cpp b/4ed_file.cpp index 555c88b4..7fcc7532 100644 --- a/4ed_file.cpp +++ b/4ed_file.cpp @@ -482,7 +482,7 @@ file_create_from_string(System_Functions *system, Models *models, Editing_File * String_Const_u8 name = SCu8(file->unique_name.name_space, file->unique_name.name_size); name = string_escape(scratch, name); LogEventF(log_string(M), scratch, file->id, 0, system->thread_get_id(), - "init file [last_write_time=0x%llx] [name=\"%.*s\"]", + "init file [lwt=0x%llx] [name=\"%.*s\"]", attributes.last_write_time, string_expand(name)); end_temp(temp); } diff --git a/4ed_view.cpp b/4ed_view.cpp index 80daccff..9c40daa0 100644 --- a/4ed_view.cpp +++ b/4ed_view.cpp @@ -742,6 +742,7 @@ view_quit_ui(System_Functions *system, Models *models, View *view){ view->ui_mode = false; if (view->ui_quit != 0){ view->ui_quit(&models->app_links, view_get_id(&models->live_set, view)); + view->ui_quit = 0; } } diff --git a/4ed_working_set.cpp b/4ed_working_set.cpp index ed471bc1..fbb2a6a5 100644 --- a/4ed_working_set.cpp +++ b/4ed_working_set.cpp @@ -28,7 +28,7 @@ file_change_notification_check(System_Functions *system, Arena *scratch, Working file_add_dirty_flag(file, DirtyState_UnloadedChanges); if (file->external_mod_node.next == 0){ LogEventF(log_string(M), &working_set->arena, file->id, 0, system->thread_get_id(), - "external modification [last_write_time=0x%llx]", attributes.last_write_time); + "external modification [lwt=0x%llx]", attributes.last_write_time); dll_insert_back(&working_set->has_external_mod_sentinel, &file->external_mod_node); system->signal_step(0); } diff --git a/meta/4ed_metagen.cpp b/meta/4ed_metagen.cpp index 2abafaa1..d84a48b6 100644 --- a/meta/4ed_metagen.cpp +++ b/meta/4ed_metagen.cpp @@ -452,9 +452,9 @@ generate_remapping_code_and_data(Arena *arena){ bind(arena, mappings, '.', MDFR_ALT, change_to_build_panel); bind(arena, mappings, ',', MDFR_ALT, close_build_panel); - bind(arena, mappings, 'n', MDFR_ALT, goto_next_jump_sticky); - bind(arena, mappings, 'N', MDFR_ALT, goto_prev_jump_sticky); - bind(arena, mappings, 'M', MDFR_ALT, goto_first_jump_sticky); + bind(arena, mappings, 'n', MDFR_ALT, goto_next_jump); + bind(arena, mappings, 'N', MDFR_ALT, goto_prev_jump); + bind(arena, mappings, 'M', MDFR_ALT, goto_first_jump); bind(arena, mappings, 'm', MDFR_ALT, build_in_build_panel); bind(arena, mappings, 'b', MDFR_ALT, toggle_filebar); @@ -579,8 +579,8 @@ generate_remapping_code_and_data(Arena *arena){ bind(arena, mappings, '1', MDFR_CTRL, view_buffer_other_panel); bind(arena, mappings, '2', MDFR_CTRL, swap_buffers_between_panels); - bind(arena, mappings, '\n', MDFR_NONE, newline_or_goto_position_sticky); - bind(arena, mappings, '\n', MDFR_SHIFT, newline_or_goto_position_same_panel_sticky); + bind(arena, mappings, '\n', MDFR_NONE, newline_or_goto_position); + bind(arena, mappings, '\n', MDFR_SHIFT, newline_or_goto_position_same_panel); bind(arena, mappings, '>', MDFR_CTRL, view_jump_list_with_lister); bind(arena, mappings, ' ', MDFR_SHIFT, write_character); @@ -680,9 +680,9 @@ generate_remapping_code_and_data(Arena *arena){ bind(arena, mappings, '.', MDFR_CTRL, change_to_build_panel); bind(arena, mappings, ',', MDFR_CTRL, close_build_panel); - bind(arena, mappings, 'n', MDFR_CTRL, goto_next_jump_sticky); - bind(arena, mappings, 'N', MDFR_CTRL, goto_prev_jump_sticky); - bind(arena, mappings, 'M', MDFR_CTRL, goto_first_jump_sticky); + bind(arena, mappings, 'n', MDFR_CTRL, goto_next_jump); + bind(arena, mappings, 'N', MDFR_CTRL, goto_prev_jump); + bind(arena, mappings, 'M', MDFR_CTRL, goto_first_jump); bind(arena, mappings, 'm', MDFR_CTRL, build_in_build_panel); bind(arena, mappings, 'b', MDFR_CTRL, toggle_filebar); @@ -806,8 +806,8 @@ generate_remapping_code_and_data(Arena *arena){ bind(arena, mappings, '1', MDFR_CMND, view_buffer_other_panel); bind(arena, mappings, '2', MDFR_CMND, swap_buffers_between_panels); - bind(arena, mappings, '\n', MDFR_NONE, newline_or_goto_position_sticky); - bind(arena, mappings, '\n', MDFR_SHIFT, newline_or_goto_position_same_panel_sticky); + bind(arena, mappings, '\n', MDFR_NONE, newline_or_goto_position); + bind(arena, mappings, '\n', MDFR_SHIFT, newline_or_goto_position_same_panel); bind(arena, mappings, '>', MDFR_CMND, view_jump_list_with_lister); bind(arena, mappings, ' ', MDFR_SHIFT, write_character); diff --git a/platform_win32/win32_4ed.cpp b/platform_win32/win32_4ed.cpp index 59223c45..b1303a64 100644 --- a/platform_win32/win32_4ed.cpp +++ b/platform_win32/win32_4ed.cpp @@ -914,8 +914,10 @@ win32_thread_wrapper(void *ptr){ Win32_Object *object = (Win32_Object*)ptr; Thread_Function *proc = object->thread.proc; void *object_ptr = object->thread.ptr; + EnterCriticalSection(&win32vars.thread_launch_mutex); win32vars.waiting_for_launch = false; WakeConditionVariable(&win32vars.thread_launch_cv); + LeaveCriticalSection(&win32vars.thread_launch_mutex); proc(object_ptr); return(0); }