6 slides ready; virtual whitespace toggle hacked in for nowsies
							parent
							
								
									9129e5898b
								
							
						
					
					
						commit
						bf47b2cb09
					
				| 
						 | 
					@ -248,11 +248,13 @@ draw_string(Render_Target *target, Face *face, String_Const_u8 string, Vec2_f32
 | 
				
			||||||
                if (behavior.do_codepoint_advance){
 | 
					                if (behavior.do_codepoint_advance){
 | 
				
			||||||
                    u32 codepoint = step.value;
 | 
					                    u32 codepoint = step.value;
 | 
				
			||||||
                    if (color != 0){
 | 
					                    if (color != 0){
 | 
				
			||||||
                        draw_font_glyph(target, face, codepoint, point, color, flags);
 | 
					                    u32 draw_codepoint = step.value;
 | 
				
			||||||
 | 
					                    if (draw_codepoint == '\t'){
 | 
				
			||||||
 | 
					                        draw_codepoint = ' ';
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    f32 d = font_get_glyph_advance(&face->advance_map,
 | 
					                        draw_font_glyph(target, face, draw_codepoint, point, color, flags);
 | 
				
			||||||
                                                   &face->metrics,
 | 
					                    }
 | 
				
			||||||
                                                   codepoint);
 | 
					                    f32 d = font_get_glyph_advance(&face->advance_map, &face->metrics, codepoint);
 | 
				
			||||||
                    point += d*delta;
 | 
					                    point += d*delta;
 | 
				
			||||||
                    total_delta += d;
 | 
					                    total_delta += d;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -717,15 +717,6 @@ CUSTOM_DOC("Reads the state of the mouse wheel and uses it to either increase or
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CUSTOM_COMMAND_SIG(toggle_virtual_whitespace)
 | 
					 | 
				
			||||||
CUSTOM_DOC("Toggles the current buffer's virtual whitespace status.")
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    View_ID view = get_active_view(app, Access_ReadVisible);
 | 
					 | 
				
			||||||
    Buffer_ID buffer = view_get_buffer(app, view, Access_ReadVisible);
 | 
					 | 
				
			||||||
    (void)buffer;
 | 
					 | 
				
			||||||
    NotImplemented;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CUSTOM_COMMAND_SIG(toggle_show_whitespace)
 | 
					CUSTOM_COMMAND_SIG(toggle_show_whitespace)
 | 
				
			||||||
CUSTOM_DOC("Toggles the current buffer's whitespace visibility status.")
 | 
					CUSTOM_DOC("Toggles the current buffer's whitespace visibility status.")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -769,12 +769,15 @@ layout_index_unwrapped__inner(Application_Links *app, Arena *arena, Buffer_ID bu
 | 
				
			||||||
    return(list);
 | 
					    return(list);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function Layout_Item_List
 | 
					function Layout_Item_List
 | 
				
			||||||
layout_virt_indent_index_unwrapped(Application_Links *app, Arena *arena,
 | 
					layout_virt_indent_index_unwrapped(Application_Links *app, Arena *arena,
 | 
				
			||||||
                                   Buffer_ID buffer, Range_i64 range, Face_ID face,
 | 
					                                   Buffer_ID buffer, Range_i64 range, Face_ID face,
 | 
				
			||||||
                                   f32 width){
 | 
					                                   f32 width){
 | 
				
			||||||
    Layout_Item_List result = {};
 | 
					    Layout_Item_List result = {};
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    if (global_config.enable_virtual_whitespace){
 | 
				
			||||||
    code_index_lock();
 | 
					    code_index_lock();
 | 
				
			||||||
    Code_Index_File *file = code_index_get_file(buffer);
 | 
					    Code_Index_File *file = code_index_get_file(buffer);
 | 
				
			||||||
    if (file != 0){
 | 
					    if (file != 0){
 | 
				
			||||||
| 
						 | 
					@ -784,9 +787,25 @@ layout_virt_indent_index_unwrapped(Application_Links *app, Arena *arena,
 | 
				
			||||||
    if (file == 0){
 | 
					    if (file == 0){
 | 
				
			||||||
        result = layout_virt_indent_literal_unwrapped(app, arena, buffer, range, face, width);
 | 
					        result = layout_virt_indent_literal_unwrapped(app, arena, buffer, range, face, width);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else{
 | 
				
			||||||
 | 
					        result = layout_wrap_whitespace(app, arena, buffer, range, face, width);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    return(result);
 | 
					    return(result);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CUSTOM_COMMAND_SIG(toggle_virtual_whitespace)
 | 
				
			||||||
 | 
					CUSTOM_DOC("Toggles the current buffer's virtual whitespace status.")
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    global_config.enable_virtual_whitespace = !global_config.enable_virtual_whitespace;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    for (Buffer_ID buffer = get_buffer_next(app, 0, Access_Always);
 | 
				
			||||||
 | 
					         buffer != 0;
 | 
				
			||||||
 | 
					         buffer = get_buffer_next(app, buffer, Access_Always)){
 | 
				
			||||||
 | 
					        buffer_clear_layout_cache(app, buffer);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// BOTTOM
 | 
					// BOTTOM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -86,7 +86,7 @@ tutorial_init_title_face(Application_Links *app){
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function void
 | 
					function void
 | 
				
			||||||
default_4coder_tutorial_render(Application_Links *app, Frame_Info frame_info, View_ID view_id){
 | 
					tutorial_render(Application_Links *app, Frame_Info frame_info, View_ID view_id){
 | 
				
			||||||
    Face_ID face = get_face_id(app, 0);
 | 
					    Face_ID face = get_face_id(app, 0);
 | 
				
			||||||
    tutorial_init_title_face(app);
 | 
					    tutorial_init_title_face(app);
 | 
				
			||||||
    Face_Metrics metrics = get_face_metrics(app, face);
 | 
					    Face_Metrics metrics = get_face_metrics(app, face);
 | 
				
			||||||
| 
						 | 
					@ -179,7 +179,7 @@ default_4coder_tutorial_render(Application_Links *app, Frame_Info frame_info, Vi
 | 
				
			||||||
            Rect_f32 restart_box = pair.min;
 | 
					            Rect_f32 restart_box = pair.min;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        if (tutorial.slide_index == tutorial.slide_count - 1){
 | 
					        if (tutorial.slide_index == tutorial.slide_count - 1){
 | 
				
			||||||
            if (draw_button(app, exit_box, m_p, face, string_u8_litexpr("exit"))){
 | 
					            if (draw_button(app, exit_box, m_p, face, string_u8_litexpr("end"))){
 | 
				
			||||||
                tutorial.hover_action = TutorialAction_Exit;
 | 
					                tutorial.hover_action = TutorialAction_Exit;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
| 
						 | 
					@ -197,11 +197,11 @@ default_4coder_tutorial_render(Application_Links *app, Frame_Info frame_info, Vi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function void
 | 
					function void
 | 
				
			||||||
default_4coder_tutorial_run(Application_Links *app)
 | 
					tutorial_run_loop(Application_Links *app)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    View_ID view = get_this_ctx_view(app, Access_Always);
 | 
					    View_ID view = get_this_ctx_view(app, Access_Always);
 | 
				
			||||||
    View_Context ctx = view_current_context(app, view);
 | 
					    View_Context ctx = view_current_context(app, view);
 | 
				
			||||||
    ctx.render_caller = default_4coder_tutorial_render;
 | 
					    ctx.render_caller = tutorial_render;
 | 
				
			||||||
    ctx.hides_buffer = true;
 | 
					    ctx.hides_buffer = true;
 | 
				
			||||||
    View_Context_Block ctx_block(app, view, &ctx);
 | 
					    View_Context_Block ctx_block(app, view, &ctx);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					@ -277,10 +277,31 @@ default_4coder_tutorial_run(Application_Links *app)
 | 
				
			||||||
    tutorial.in_tutorial = false;
 | 
					    tutorial.in_tutorial = false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function void
 | 
				
			||||||
 | 
					run_tutorial(Application_Links *app, Tutorial_Slide_Function **slides, i32 slide_count){
 | 
				
			||||||
 | 
					    if (slide_count > 0){
 | 
				
			||||||
 | 
					        kill_tutorial(app);
 | 
				
			||||||
 | 
					        Panel_ID root_panel = panel_get_root(app);
 | 
				
			||||||
 | 
					        if (panel_split(app, root_panel, Dimension_Y)){
 | 
				
			||||||
 | 
					            panel_swap_children(app, root_panel);
 | 
				
			||||||
 | 
					            Panel_ID tutorial_panel = panel_get_child(app, root_panel, Side_Min);
 | 
				
			||||||
 | 
					            tutorial.view = panel_get_view(app, tutorial_panel, Access_Always);
 | 
				
			||||||
 | 
					            view_set_passive(app, tutorial.view, true);
 | 
				
			||||||
 | 
					            tutorial_activate(app);
 | 
				
			||||||
 | 
					            tutorial.slide_index = 0;
 | 
				
			||||||
 | 
					            tutorial.slide_func_ptrs = slides;
 | 
				
			||||||
 | 
					            tutorial.slide_count = slide_count;
 | 
				
			||||||
 | 
					            view_enqueue_command_function(app, tutorial.view, tutorial_run_loop);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
global String_Const_u8 hms_title = string_u8_litexpr("Handmade Seattle Demo");
 | 
					global String_Const_u8 hms_title = string_u8_litexpr("Handmade Seattle Demo");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function void
 | 
					function void
 | 
				
			||||||
default_4coder_tutorial_short_details(Application_Links *app, Arena *arena, Fancy_Line *short_details){
 | 
					hms_demo_tutorial_short_details(Application_Links *app, Arena *arena, Fancy_Line *short_details){
 | 
				
			||||||
    Face_ID face = get_face_id(app, 0);
 | 
					    Face_ID face = get_face_id(app, 0);
 | 
				
			||||||
    push_fancy_string(arena, short_details, tutorial.face, fcolor_id(Stag_Pop1), hms_title);
 | 
					    push_fancy_string(arena, short_details, tutorial.face, fcolor_id(Stag_Pop1), hms_title);
 | 
				
			||||||
    push_fancy_string(arena, short_details, face, fcolor_id(Stag_Default), 8.f, 8.f, string_u8_litexpr("Welcome to Handmade Seattle and to this 4coder demo!"));
 | 
					    push_fancy_string(arena, short_details, face, fcolor_id(Stag_Default), 8.f, 8.f, string_u8_litexpr("Welcome to Handmade Seattle and to this 4coder demo!"));
 | 
				
			||||||
| 
						 | 
					@ -288,7 +309,7 @@ default_4coder_tutorial_short_details(Application_Links *app, Arena *arena, Fanc
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function void
 | 
					function void
 | 
				
			||||||
default_4coder_tutorial_long_start(Application_Links *app, Arena *arena, Fancy_Block *long_details){
 | 
					hms_demo_tutorial_long_start(Application_Links *app, Arena *arena, Fancy_Block *long_details){
 | 
				
			||||||
    Fancy_Line *line = push_fancy_line(arena, long_details, tutorial.face, fcolor_id(Stag_Pop1), hms_title);
 | 
					    Fancy_Line *line = push_fancy_line(arena, long_details, tutorial.face, fcolor_id(Stag_Pop1), hms_title);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Face_ID face = get_face_id(app, 0);
 | 
					    Face_ID face = get_face_id(app, 0);
 | 
				
			||||||
| 
						 | 
					@ -297,199 +318,339 @@ default_4coder_tutorial_long_start(Application_Links *app, Arena *arena, Fancy_B
 | 
				
			||||||
#define M "If there are any features you'd like to know about or try out, "
 | 
					#define M "If there are any features you'd like to know about or try out, "
 | 
				
			||||||
    push_fancy_string(arena, line, string_u8_litexpr(M));
 | 
					    push_fancy_string(arena, line, string_u8_litexpr(M));
 | 
				
			||||||
#undef M
 | 
					#undef M
 | 
				
			||||||
    push_fancy_string(arena, line, fcolor_id(Stag_Keyword), string_u8_litexpr("ask!"));
 | 
					    push_fancy_string(arena, line, fcolor_id(Stag_Pop2), string_u8_litexpr("ask!"));
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr(""));
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr(""));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function void
 | 
				
			||||||
 | 
					hms_demo_tutorial_binding_line(Application_Links *app, Arena *arena, Fancy_Block *long_details, Face_ID face, char *modifiers, char *key, char *description){
 | 
				
			||||||
 | 
					    String_Const_u8 m = SCu8(modifiers);
 | 
				
			||||||
 | 
					    String_Const_u8 k = SCu8(key);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    f32 fill_size = (f32)k.size;
 | 
				
			||||||
 | 
					    if (m.size > 0){
 | 
				
			||||||
 | 
					        fill_size += (f32)m.size + 0.5f;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    f32 pad_size = 0.f;
 | 
				
			||||||
 | 
					    if (fill_size < 40.f){
 | 
				
			||||||
 | 
					    pad_size = 40.f - fill_size;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Fancy_Line *line = line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
				
			||||||
 | 
					    push_fancy_stringf(arena, line, pad_size, 0.5f, "<");
 | 
				
			||||||
 | 
					    if (m.size > 0){
 | 
				
			||||||
 | 
					        push_fancy_stringf(arena, line, fcolor_id(Stag_Keyword), 0.f, 0.5f, "%s", modifiers);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), "%s", key);
 | 
				
			||||||
 | 
					    push_fancy_stringf(arena, line, 0.5f, 1.f, ">");
 | 
				
			||||||
 | 
					    push_fancy_stringf(arena, line, "%s", description);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function Tutorial_Slide
 | 
					function Tutorial_Slide
 | 
				
			||||||
default_4coder_tutorial_slide_1(Application_Links *app, Arena *arena){
 | 
					hms_demo_tutorial_slide_1(Application_Links *app, Arena *arena){
 | 
				
			||||||
    Tutorial_Slide result = {};
 | 
					    Tutorial_Slide result = {};
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Face_ID face = get_face_id(app, 0);
 | 
					    Face_ID face = get_face_id(app, 0);
 | 
				
			||||||
    tutorial_init_title_face(app);
 | 
					    tutorial_init_title_face(app);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    default_4coder_tutorial_short_details(app, arena, &result.short_details);
 | 
					    hms_demo_tutorial_short_details(app, arena, &result.short_details);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Fancy_Block *long_details = &result.long_details;
 | 
					    Fancy_Block *long_details = &result.long_details;
 | 
				
			||||||
    default_4coder_tutorial_long_start(app, arena, long_details);
 | 
					    hms_demo_tutorial_long_start(app, arena, long_details);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Fancy_Line *line = 0;
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Let's start with a few navigation commands:"));
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Keyword), string_u8_litexpr("Let's start with a few navigation commands:"));
 | 
					                                   "Control", "Comma", "change active panel");
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "", "*AnyArrow*", "move cursor one character or line");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Control Comma>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "change active panel");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Control", "*AnyArrow*", "move cursor by 'chunks'");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<*AnyArrow*>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "move cursor one character or line");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "", "Home/End", "move cursor to the first/last character of the line");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Control *AnyArrow*>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "move cursor by 'chunks'");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "", "PageUp/PageDown", "move cursor by full pages up/down");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Home>, <End>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "move cursor to the first/last character of the line");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Available in code files:"));
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<PageUp>, <PageDown>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "move cursor by full pages up/down");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Keyword), string_u8_litexpr("Available in code files:"));
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Alt", "LeftBracket", "move cursor and mark to surrounding scope");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Alt OpenBracket>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "move cursor and mark to surrounding scope");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Alt", "RightBracket", "move cursor and mark to previous scope");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Alt CloseBracket>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "move cursor and mark to previous scope");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Alt", "Quote", "move cursor and mark to next scope");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Alt SingleQuote>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "move cursor and mark to next scope");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Alt Shift", "RightBracket", "move cursor and mark to previous top-level scope");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Alt Shift CloseBracket>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "move cursor and mark to previous top-level scope");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Alt Shift", "Quote", "move cursor and mark to next scope at the same level as the current scope");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Alt Shift SingleQuote>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "move cursor and mark to next top-level scope");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    return(result);
 | 
					    return(result);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function Tutorial_Slide
 | 
					function Tutorial_Slide
 | 
				
			||||||
default_4coder_tutorial_slide_2(Application_Links *app, Arena *arena){
 | 
					hms_demo_tutorial_slide_2(Application_Links *app, Arena *arena){
 | 
				
			||||||
    Tutorial_Slide result = {};
 | 
					    Tutorial_Slide result = {};
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Face_ID face = get_face_id(app, 0);
 | 
					    Face_ID face = get_face_id(app, 0);
 | 
				
			||||||
    tutorial_init_title_face(app);
 | 
					    tutorial_init_title_face(app);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    default_4coder_tutorial_short_details(app, arena, &result.short_details);
 | 
					    hms_demo_tutorial_short_details(app, arena, &result.short_details);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Fancy_Block *long_details = &result.long_details;
 | 
					    Fancy_Block *long_details = &result.long_details;
 | 
				
			||||||
    default_4coder_tutorial_long_start(app, arena, long_details);
 | 
					    hms_demo_tutorial_long_start(app, arena, long_details);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Fancy_Line *line = 0;
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Now a look at basic editing:"));
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Keyword), string_u8_litexpr("4coder's default editing paradigm is emacs-like but with some differences:"));
 | 
					                                   "", "TextInsert", "non-modal text insertion works in any user-writable buffers at the cursor");
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "", "Backspace/Delete", "delete the previous/next character from the cursor");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<TextInsert>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "non-modal text insertion works in any user-writable buffers at the cursor");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Control", "Z", "undo the last edit");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Backspace>/<Delete>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "delete the previous/next character from the cursor");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Control", "Y", "redo the last undone edit");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Control Space>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "moves the mark to the cursor cursor");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Control", "L", "duplicate the current line");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Control D>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "delete the cursor to mark range");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Alt", "Up/Down", "move the current line");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Control C>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "copy the cursor to mark range to the clipboard");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Range commands based on a cursor and mark (emacs style):"));
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Control X>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "cut the cursor to mark range to the clipboard");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Control", "Space", "moves the mark to the cursor cursor");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Control V>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "paste the clipboard to the buffer");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Control", "D", "delete the range");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Control Shift V>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "paste the clipboard to the buffer cycling through the clipboard's 'clips'");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Control", "C", "copy the range");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Control Z>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "undo the last edit");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
    line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
					                                   "Control", "X", "cut the range");
 | 
				
			||||||
    push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2),
 | 
					 | 
				
			||||||
                       "%40s ", "<Control Y>");
 | 
					 | 
				
			||||||
    push_fancy_stringf(arena, line, "redo the last undone edit");
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Paste options with a multi-stage clipboard:"));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Control", "V", "paste the clipboard to the buffer");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Control Shift", "V", "paste the clipboard to the buffer cycling through the clipboard's 'clips'");
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    return(result);
 | 
					    return(result);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CUSTOM_COMMAND_SIG(default_4coder_tutorial)
 | 
					function Tutorial_Slide
 | 
				
			||||||
 | 
					hms_demo_tutorial_slide_3(Application_Links *app, Arena *arena){
 | 
				
			||||||
 | 
					    Tutorial_Slide result = {};
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Face_ID face = get_face_id(app, 0);
 | 
				
			||||||
 | 
					    tutorial_init_title_face(app);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_short_details(app, arena, &result.short_details);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Fancy_Block *long_details = &result.long_details;
 | 
				
			||||||
 | 
					    hms_demo_tutorial_long_start(app, arena, long_details);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Now try beginning a file lister:"));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Control", "N", "begin a file lister for exploring the file system - always creating a new file");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Control", "O", "begin a file lister for exploring the file system - ultimiately opening or creating a file");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Alt", "O", "same as previous option but opens in the other panel");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Inside a file lister:"));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "TextInsert", "narrows the lister down to options with substrings matching the text field");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "Backspace", "backspace the end of the text field");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "Up/Down", "move the highlighted option up/down");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "PageUp/PageDown", "move the highlighted option up/down by a 'large chunk'");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "Return/Tab", "select the highlighted option;  when a folder is highlighted it is opened in the lister");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "Escape", "cancel the operation");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("There are also buffer listers for operations on buffers that are already open:"));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Control", "I", "begin a buffer lister and switch to the selected buffer");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Control", "K", "begin a buffer lister and try to kill the selected buffer");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function Tutorial_Slide
 | 
				
			||||||
 | 
					hms_demo_tutorial_slide_4(Application_Links *app, Arena *arena){
 | 
				
			||||||
 | 
					    Tutorial_Slide result = {};
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Face_ID face = get_face_id(app, 0);
 | 
				
			||||||
 | 
					    tutorial_init_title_face(app);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_short_details(app, arena, &result.short_details);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Fancy_Block *long_details = &result.long_details;
 | 
				
			||||||
 | 
					    hms_demo_tutorial_long_start(app, arena, long_details);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("The command lister makes all commands available in one place:"));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Alt", "X", "a lister of all commands");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Try some of these commands from the command lister:"));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "toggle_filebar", "toggle the panel's filebar");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "toggle_line_numbers", "toggle the panel's line number");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "set_eol_mode_*", "change how a buffer prefers to fixup it's line endings");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "close_panel", "close the current panel");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "open_panel_vsplit", "create a vertical split in the current panel");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "", "open_panel_hsplit", "create a horizontal split in the current panel");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function Tutorial_Slide
 | 
				
			||||||
 | 
					hms_demo_tutorial_slide_5(Application_Links *app, Arena *arena){
 | 
				
			||||||
 | 
					    Tutorial_Slide result = {};
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Face_ID face = get_face_id(app, 0);
 | 
				
			||||||
 | 
					    tutorial_init_title_face(app);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_short_details(app, arena, &result.short_details);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Fancy_Block *long_details = &result.long_details;
 | 
				
			||||||
 | 
					    hms_demo_tutorial_long_start(app, arena, long_details);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Fast navigation by jump lists:"));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Alt", "F", "after the user answers a query for a string generate a jump list of matches");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Control Shift", "T", "extract an identifier from the text under cursor and generate a jump list of matches");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Control Shift", "I", "parse the current buffer as a C/C++ source and generate a jump list of functions");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("After generating a jump list it is bound as the active jump list enabling these commands:"));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Alt", "N", "jump to the next jump location");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Alt Shift", "N", "jump to the previous jump location");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Alt Shift", "M", "jump to the first jump");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function Tutorial_Slide
 | 
				
			||||||
 | 
					hms_demo_tutorial_slide_6(Application_Links *app, Arena *arena){
 | 
				
			||||||
 | 
					    Tutorial_Slide result = {};
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Face_ID face = get_face_id(app, 0);
 | 
				
			||||||
 | 
					    tutorial_init_title_face(app);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_short_details(app, arena, &result.short_details);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Fancy_Block *long_details = &result.long_details;
 | 
				
			||||||
 | 
					    hms_demo_tutorial_long_start(app, arena, long_details);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Virtual whitespace:"));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default),
 | 
				
			||||||
 | 
					                    string_u8_litexpr("\tBuffers that are indexed with information about nest structures can be equiped with the virtual whitespace layout algorithm."));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default),
 | 
				
			||||||
 | 
					                    string_u8_litexpr("\tTry inserting new scopes and parenthetical sections in a code file."));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default),
 | 
				
			||||||
 | 
					                    string_u8_litexpr("\tObserve that indentation is updated automatically."));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default),
 | 
				
			||||||
 | 
					                    string_u8_litexpr("\tTry creating a line that is long enough to wrap around the edge."));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default),
 | 
				
			||||||
 | 
					                    string_u8_litexpr("\tObserve that wrapped lines obey the same indentation rules as literal lines."));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default),
 | 
				
			||||||
 | 
					                    string_u8_litexpr("\tThe on screen layout of text is independent of the actual whitespace contents of the underlying text."));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Fancy_Line *line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default));
 | 
				
			||||||
 | 
					        push_fancy_stringf(arena, line, "\tUse the command ");
 | 
				
			||||||
 | 
					        push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), "toggle_virtual_whitespace");
 | 
				
			||||||
 | 
					        push_fancy_stringf(arena, line, " to turn this feature on and off");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Auto Indentation:"));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hms_demo_tutorial_binding_line(app, arena, long_details, face,
 | 
				
			||||||
 | 
					                                   "Control", "Tab", "auto indent the lines marked by the cursor-mark range; this command only observable when virtual whitespace is off.");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CUSTOM_COMMAND_SIG(hms_demo_tutorial)
 | 
				
			||||||
CUSTOM_DOC("Tutorial for built in 4coder bindings and features.")
 | 
					CUSTOM_DOC("Tutorial for built in 4coder bindings and features.")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    kill_tutorial(app);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    Panel_ID root_panel = panel_get_root(app);
 | 
					 | 
				
			||||||
    if (panel_split(app, root_panel, Dimension_Y)){
 | 
					 | 
				
			||||||
        panel_swap_children(app, root_panel);
 | 
					 | 
				
			||||||
        Panel_ID tutorial_panel = panel_get_child(app, root_panel, Side_Min);
 | 
					 | 
				
			||||||
        tutorial.view = panel_get_view(app, tutorial_panel, Access_Always);
 | 
					 | 
				
			||||||
        view_set_passive(app, tutorial.view, true);
 | 
					 | 
				
			||||||
        tutorial_activate(app);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    local_persist Tutorial_Slide_Function *slides[] = {
 | 
					    local_persist Tutorial_Slide_Function *slides[] = {
 | 
				
			||||||
            default_4coder_tutorial_slide_1,
 | 
					        // basic navigation
 | 
				
			||||||
            default_4coder_tutorial_slide_2,
 | 
					        hms_demo_tutorial_slide_1,
 | 
				
			||||||
 | 
					        // basic editing
 | 
				
			||||||
 | 
					        hms_demo_tutorial_slide_2,
 | 
				
			||||||
 | 
					        // file and buffer lister
 | 
				
			||||||
 | 
					        hms_demo_tutorial_slide_3,
 | 
				
			||||||
 | 
					        // command lister
 | 
				
			||||||
 | 
					        hms_demo_tutorial_slide_4,
 | 
				
			||||||
 | 
					        // advanced navigation
 | 
				
			||||||
 | 
					        hms_demo_tutorial_slide_5,
 | 
				
			||||||
 | 
					        // virtual whitespace
 | 
				
			||||||
 | 
					        hms_demo_tutorial_slide_6,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
        tutorial.slide_index = 0;
 | 
					    run_tutorial(app, slides, ArrayCount(slides));
 | 
				
			||||||
        tutorial.slide_func_ptrs = slides;
 | 
					 | 
				
			||||||
        tutorial.slide_count = ArrayCount(slides);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        view_enqueue_command_function(app, tutorial.view, default_4coder_tutorial_run);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// BOTTOM
 | 
					// BOTTOM
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@ CUSTOM_COMMAND_SIG(seek_beginning_of_line);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(seek_end_of_line);
 | 
					CUSTOM_COMMAND_SIG(seek_end_of_line);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(goto_beginning_of_file);
 | 
					CUSTOM_COMMAND_SIG(goto_beginning_of_file);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(goto_end_of_file);
 | 
					CUSTOM_COMMAND_SIG(goto_end_of_file);
 | 
				
			||||||
 | 
					CUSTOM_COMMAND_SIG(toggle_virtual_whitespace);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(change_active_panel);
 | 
					CUSTOM_COMMAND_SIG(change_active_panel);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(change_active_panel_backwards);
 | 
					CUSTOM_COMMAND_SIG(change_active_panel_backwards);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(open_panel_vsplit);
 | 
					CUSTOM_COMMAND_SIG(open_panel_vsplit);
 | 
				
			||||||
| 
						 | 
					@ -91,7 +92,6 @@ CUSTOM_COMMAND_SIG(toggle_fps_meter);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(increase_face_size);
 | 
					CUSTOM_COMMAND_SIG(increase_face_size);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(decrease_face_size);
 | 
					CUSTOM_COMMAND_SIG(decrease_face_size);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(mouse_wheel_change_face_size);
 | 
					CUSTOM_COMMAND_SIG(mouse_wheel_change_face_size);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(toggle_virtual_whitespace);
 | 
					 | 
				
			||||||
CUSTOM_COMMAND_SIG(toggle_show_whitespace);
 | 
					CUSTOM_COMMAND_SIG(toggle_show_whitespace);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(toggle_line_numbers);
 | 
					CUSTOM_COMMAND_SIG(toggle_line_numbers);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(exit_4coder);
 | 
					CUSTOM_COMMAND_SIG(exit_4coder);
 | 
				
			||||||
| 
						 | 
					@ -222,7 +222,7 @@ CUSTOM_COMMAND_SIG(miblo_increment_time_stamp_minute);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(miblo_decrement_time_stamp_minute);
 | 
					CUSTOM_COMMAND_SIG(miblo_decrement_time_stamp_minute);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(profile_inspect);
 | 
					CUSTOM_COMMAND_SIG(profile_inspect);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(kill_tutorial);
 | 
					CUSTOM_COMMAND_SIG(kill_tutorial);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(default_4coder_tutorial);
 | 
					CUSTOM_COMMAND_SIG(hms_demo_tutorial);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(default_startup);
 | 
					CUSTOM_COMMAND_SIG(default_startup);
 | 
				
			||||||
CUSTOM_COMMAND_SIG(default_try_exit);
 | 
					CUSTOM_COMMAND_SIG(default_try_exit);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -248,6 +248,7 @@ static Command_Metadata fcoder_metacmd_table[216] = {
 | 
				
			||||||
{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2175 },
 | 
					{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2175 },
 | 
				
			||||||
{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2181 },
 | 
					{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2181 },
 | 
				
			||||||
{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2189 },
 | 
					{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2189 },
 | 
				
			||||||
 | 
					{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\custom\\4coder_code_index.cpp", 40, 798 },
 | 
				
			||||||
{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 284 },
 | 
					{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 284 },
 | 
				
			||||||
{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 290 },
 | 
					{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 290 },
 | 
				
			||||||
{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 300 },
 | 
					{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 300 },
 | 
				
			||||||
| 
						 | 
					@ -320,43 +321,42 @@ static Command_Metadata fcoder_metacmd_table[216] = {
 | 
				
			||||||
{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 681 },
 | 
					{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 681 },
 | 
				
			||||||
{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 692 },
 | 
					{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 692 },
 | 
				
			||||||
{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 703 },
 | 
					{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 703 },
 | 
				
			||||||
{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 720 },
 | 
					{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 720 },
 | 
				
			||||||
{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 729 },
 | 
					{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 729 },
 | 
				
			||||||
{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 738 },
 | 
					{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 735 },
 | 
				
			||||||
{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 744 },
 | 
					{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 743 },
 | 
				
			||||||
{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 752 },
 | 
					{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 971 },
 | 
				
			||||||
{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 980 },
 | 
					{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 977 },
 | 
				
			||||||
{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 986 },
 | 
					{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 983 },
 | 
				
			||||||
{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 992 },
 | 
					{ PROC_LINKS(reverse_search_identifier, 0), false, "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 989 },
 | 
				
			||||||
{ PROC_LINKS(reverse_search_identifier, 0), false, "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 998 },
 | 
					{ PROC_LINKS(replace_in_range, 0), false, "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1036 },
 | 
				
			||||||
{ PROC_LINKS(replace_in_range, 0), false, "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1045 },
 | 
					{ PROC_LINKS(replace_in_buffer, 0), false, "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1045 },
 | 
				
			||||||
{ PROC_LINKS(replace_in_buffer, 0), false, "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1054 },
 | 
					{ PROC_LINKS(replace_in_all_buffers, 0), false, "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1054 },
 | 
				
			||||||
{ PROC_LINKS(replace_in_all_buffers, 0), false, "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1063 },
 | 
					{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1144 },
 | 
				
			||||||
{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1153 },
 | 
					{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1165 },
 | 
				
			||||||
{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1174 },
 | 
					{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1181 },
 | 
				
			||||||
{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1190 },
 | 
					{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1217 },
 | 
				
			||||||
{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1226 },
 | 
					{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1242 },
 | 
				
			||||||
{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1251 },
 | 
					{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1286 },
 | 
				
			||||||
{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1295 },
 | 
					{ PROC_LINKS(rename_file_query, 0), false, "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1319 },
 | 
				
			||||||
{ PROC_LINKS(rename_file_query, 0), false, "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1328 },
 | 
					{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1357 },
 | 
				
			||||||
{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1366 },
 | 
					{ PROC_LINKS(move_line_up, 0), false, "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1391 },
 | 
				
			||||||
{ PROC_LINKS(move_line_up, 0), false, "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1400 },
 | 
					{ PROC_LINKS(move_line_down, 0), false, "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1397 },
 | 
				
			||||||
{ PROC_LINKS(move_line_down, 0), false, "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1406 },
 | 
					{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1403 },
 | 
				
			||||||
{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1412 },
 | 
					{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1417 },
 | 
				
			||||||
{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1426 },
 | 
					{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1482 },
 | 
				
			||||||
{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1491 },
 | 
					{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1514 },
 | 
				
			||||||
{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1523 },
 | 
					{ PROC_LINKS(view_buffer_other_panel, 0), false, "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1527 },
 | 
				
			||||||
{ PROC_LINKS(view_buffer_other_panel, 0), false, "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1536 },
 | 
					{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1539 },
 | 
				
			||||||
{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1548 },
 | 
					{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1563 },
 | 
				
			||||||
{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1572 },
 | 
					{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1571 },
 | 
				
			||||||
{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1580 },
 | 
					{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1581 },
 | 
				
			||||||
{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1590 },
 | 
					{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1806 },
 | 
				
			||||||
{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1815 },
 | 
					{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1819 },
 | 
				
			||||||
{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1828 },
 | 
					{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1833 },
 | 
				
			||||||
{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1842 },
 | 
					{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1904 },
 | 
				
			||||||
{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1913 },
 | 
					{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2005 },
 | 
				
			||||||
{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2014 },
 | 
					{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2011 },
 | 
				
			||||||
{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2020 },
 | 
					 | 
				
			||||||
{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 86 },
 | 
					{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 86 },
 | 
				
			||||||
{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 97 },
 | 
					{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 97 },
 | 
				
			||||||
{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 108 },
 | 
					{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 108 },
 | 
				
			||||||
| 
						 | 
					@ -451,7 +451,7 @@ static Command_Metadata fcoder_metacmd_table[216] = {
 | 
				
			||||||
{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 },
 | 
					{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 },
 | 
				
			||||||
{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "w:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 779 },
 | 
					{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "w:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 779 },
 | 
				
			||||||
{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 9 },
 | 
					{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 9 },
 | 
				
			||||||
{ PROC_LINKS(default_4coder_tutorial, 0), false, "default_4coder_tutorial", 23, "Tutorial for built in 4coder bindings and features.", 51, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 470 },
 | 
					{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 636 },
 | 
				
			||||||
{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 },
 | 
					{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 },
 | 
				
			||||||
{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 22 },
 | 
					{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 22 },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -465,79 +465,79 @@ static i32 fcoder_metacmd_ID_seek_beginning_of_line = 6;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_seek_end_of_line = 7;
 | 
					static i32 fcoder_metacmd_ID_seek_end_of_line = 7;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_goto_beginning_of_file = 8;
 | 
					static i32 fcoder_metacmd_ID_goto_beginning_of_file = 8;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_goto_end_of_file = 9;
 | 
					static i32 fcoder_metacmd_ID_goto_end_of_file = 9;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_change_active_panel = 10;
 | 
					static i32 fcoder_metacmd_ID_toggle_virtual_whitespace = 10;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_change_active_panel_backwards = 11;
 | 
					static i32 fcoder_metacmd_ID_change_active_panel = 11;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_open_panel_vsplit = 12;
 | 
					static i32 fcoder_metacmd_ID_change_active_panel_backwards = 12;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_open_panel_hsplit = 13;
 | 
					static i32 fcoder_metacmd_ID_open_panel_vsplit = 13;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_suppress_mouse = 14;
 | 
					static i32 fcoder_metacmd_ID_open_panel_hsplit = 14;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_allow_mouse = 15;
 | 
					static i32 fcoder_metacmd_ID_suppress_mouse = 15;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_toggle_mouse = 16;
 | 
					static i32 fcoder_metacmd_ID_allow_mouse = 16;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_set_mode_to_original = 17;
 | 
					static i32 fcoder_metacmd_ID_toggle_mouse = 17;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_set_mode_to_notepad_like = 18;
 | 
					static i32 fcoder_metacmd_ID_set_mode_to_original = 18;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_toggle_highlight_line_at_cursor = 19;
 | 
					static i32 fcoder_metacmd_ID_set_mode_to_notepad_like = 19;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_toggle_highlight_enclosing_scopes = 20;
 | 
					static i32 fcoder_metacmd_ID_toggle_highlight_line_at_cursor = 20;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_toggle_paren_matching_helper = 21;
 | 
					static i32 fcoder_metacmd_ID_toggle_highlight_enclosing_scopes = 21;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_toggle_fullscreen = 22;
 | 
					static i32 fcoder_metacmd_ID_toggle_paren_matching_helper = 22;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_write_text_input = 23;
 | 
					static i32 fcoder_metacmd_ID_toggle_fullscreen = 23;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_write_space = 24;
 | 
					static i32 fcoder_metacmd_ID_write_text_input = 24;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_write_underscore = 25;
 | 
					static i32 fcoder_metacmd_ID_write_space = 25;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_delete_char = 26;
 | 
					static i32 fcoder_metacmd_ID_write_underscore = 26;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_backspace_char = 27;
 | 
					static i32 fcoder_metacmd_ID_delete_char = 27;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_set_mark = 28;
 | 
					static i32 fcoder_metacmd_ID_backspace_char = 28;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_cursor_mark_swap = 29;
 | 
					static i32 fcoder_metacmd_ID_set_mark = 29;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_delete_range = 30;
 | 
					static i32 fcoder_metacmd_ID_cursor_mark_swap = 30;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_backspace_alpha_numeric_boundary = 31;
 | 
					static i32 fcoder_metacmd_ID_delete_range = 31;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_delete_alpha_numeric_boundary = 32;
 | 
					static i32 fcoder_metacmd_ID_backspace_alpha_numeric_boundary = 32;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_snipe_backward_whitespace_or_token_boundary = 33;
 | 
					static i32 fcoder_metacmd_ID_delete_alpha_numeric_boundary = 33;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_snipe_forward_whitespace_or_token_boundary = 34;
 | 
					static i32 fcoder_metacmd_ID_snipe_backward_whitespace_or_token_boundary = 34;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_center_view = 35;
 | 
					static i32 fcoder_metacmd_ID_snipe_forward_whitespace_or_token_boundary = 35;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_left_adjust_view = 36;
 | 
					static i32 fcoder_metacmd_ID_center_view = 36;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_click_set_cursor_and_mark = 37;
 | 
					static i32 fcoder_metacmd_ID_left_adjust_view = 37;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_click_set_cursor = 38;
 | 
					static i32 fcoder_metacmd_ID_click_set_cursor_and_mark = 38;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_click_set_cursor_if_lbutton = 39;
 | 
					static i32 fcoder_metacmd_ID_click_set_cursor = 39;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_click_set_mark = 40;
 | 
					static i32 fcoder_metacmd_ID_click_set_cursor_if_lbutton = 40;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_mouse_wheel_scroll = 41;
 | 
					static i32 fcoder_metacmd_ID_click_set_mark = 41;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_up = 42;
 | 
					static i32 fcoder_metacmd_ID_mouse_wheel_scroll = 42;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_down = 43;
 | 
					static i32 fcoder_metacmd_ID_move_up = 43;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_up_10 = 44;
 | 
					static i32 fcoder_metacmd_ID_move_down = 44;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_down_10 = 45;
 | 
					static i32 fcoder_metacmd_ID_move_up_10 = 45;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_down_textual = 46;
 | 
					static i32 fcoder_metacmd_ID_move_down_10 = 46;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_page_up = 47;
 | 
					static i32 fcoder_metacmd_ID_move_down_textual = 47;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_page_down = 48;
 | 
					static i32 fcoder_metacmd_ID_page_up = 48;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_up_to_blank_line = 49;
 | 
					static i32 fcoder_metacmd_ID_page_down = 49;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_down_to_blank_line = 50;
 | 
					static i32 fcoder_metacmd_ID_move_up_to_blank_line = 50;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_up_to_blank_line_skip_whitespace = 51;
 | 
					static i32 fcoder_metacmd_ID_move_down_to_blank_line = 51;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_down_to_blank_line_skip_whitespace = 52;
 | 
					static i32 fcoder_metacmd_ID_move_up_to_blank_line_skip_whitespace = 52;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_up_to_blank_line_end = 53;
 | 
					static i32 fcoder_metacmd_ID_move_down_to_blank_line_skip_whitespace = 53;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_down_to_blank_line_end = 54;
 | 
					static i32 fcoder_metacmd_ID_move_up_to_blank_line_end = 54;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_left = 55;
 | 
					static i32 fcoder_metacmd_ID_move_down_to_blank_line_end = 55;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_right = 56;
 | 
					static i32 fcoder_metacmd_ID_move_left = 56;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_right_whitespace_boundary = 57;
 | 
					static i32 fcoder_metacmd_ID_move_right = 57;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_left_whitespace_boundary = 58;
 | 
					static i32 fcoder_metacmd_ID_move_right_whitespace_boundary = 58;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_right_token_boundary = 59;
 | 
					static i32 fcoder_metacmd_ID_move_left_whitespace_boundary = 59;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_left_token_boundary = 60;
 | 
					static i32 fcoder_metacmd_ID_move_right_token_boundary = 60;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_right_whitespace_or_token_boundary = 61;
 | 
					static i32 fcoder_metacmd_ID_move_left_token_boundary = 61;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_left_whitespace_or_token_boundary = 62;
 | 
					static i32 fcoder_metacmd_ID_move_right_whitespace_or_token_boundary = 62;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_right_alpha_numeric_boundary = 63;
 | 
					static i32 fcoder_metacmd_ID_move_left_whitespace_or_token_boundary = 63;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_left_alpha_numeric_boundary = 64;
 | 
					static i32 fcoder_metacmd_ID_move_right_alpha_numeric_boundary = 64;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_right_alpha_numeric_or_camel_boundary = 65;
 | 
					static i32 fcoder_metacmd_ID_move_left_alpha_numeric_boundary = 65;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_move_left_alpha_numeric_or_camel_boundary = 66;
 | 
					static i32 fcoder_metacmd_ID_move_right_alpha_numeric_or_camel_boundary = 66;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_select_all = 67;
 | 
					static i32 fcoder_metacmd_ID_move_left_alpha_numeric_or_camel_boundary = 67;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_to_uppercase = 68;
 | 
					static i32 fcoder_metacmd_ID_select_all = 68;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_to_lowercase = 69;
 | 
					static i32 fcoder_metacmd_ID_to_uppercase = 69;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_clean_all_lines = 70;
 | 
					static i32 fcoder_metacmd_ID_to_lowercase = 70;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_basic_change_active_panel = 71;
 | 
					static i32 fcoder_metacmd_ID_clean_all_lines = 71;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_close_panel = 72;
 | 
					static i32 fcoder_metacmd_ID_basic_change_active_panel = 72;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_show_scrollbar = 73;
 | 
					static i32 fcoder_metacmd_ID_close_panel = 73;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_hide_scrollbar = 74;
 | 
					static i32 fcoder_metacmd_ID_show_scrollbar = 74;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_show_filebar = 75;
 | 
					static i32 fcoder_metacmd_ID_hide_scrollbar = 75;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_hide_filebar = 76;
 | 
					static i32 fcoder_metacmd_ID_show_filebar = 76;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_toggle_filebar = 77;
 | 
					static i32 fcoder_metacmd_ID_hide_filebar = 77;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_toggle_fps_meter = 78;
 | 
					static i32 fcoder_metacmd_ID_toggle_filebar = 78;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_increase_face_size = 79;
 | 
					static i32 fcoder_metacmd_ID_toggle_fps_meter = 79;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_decrease_face_size = 80;
 | 
					static i32 fcoder_metacmd_ID_increase_face_size = 80;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_mouse_wheel_change_face_size = 81;
 | 
					static i32 fcoder_metacmd_ID_decrease_face_size = 81;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_toggle_virtual_whitespace = 82;
 | 
					static i32 fcoder_metacmd_ID_mouse_wheel_change_face_size = 82;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_toggle_show_whitespace = 83;
 | 
					static i32 fcoder_metacmd_ID_toggle_show_whitespace = 83;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_toggle_line_numbers = 84;
 | 
					static i32 fcoder_metacmd_ID_toggle_line_numbers = 84;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_exit_4coder = 85;
 | 
					static i32 fcoder_metacmd_ID_exit_4coder = 85;
 | 
				
			||||||
| 
						 | 
					@ -668,7 +668,7 @@ static i32 fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 209;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 210;
 | 
					static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 210;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_profile_inspect = 211;
 | 
					static i32 fcoder_metacmd_ID_profile_inspect = 211;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_kill_tutorial = 212;
 | 
					static i32 fcoder_metacmd_ID_kill_tutorial = 212;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_default_4coder_tutorial = 213;
 | 
					static i32 fcoder_metacmd_ID_hms_demo_tutorial = 213;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_default_startup = 214;
 | 
					static i32 fcoder_metacmd_ID_default_startup = 214;
 | 
				
			||||||
static i32 fcoder_metacmd_ID_default_try_exit = 215;
 | 
					static i32 fcoder_metacmd_ID_default_try_exit = 215;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,7 +32,7 @@ setup_default_mapping(Mapping *mapping){
 | 
				
			||||||
    Bind(execute_previous_cli,          KeyCode_Z, KeyCode_Alt, KeyCode_Shift);
 | 
					    Bind(execute_previous_cli,          KeyCode_Z, KeyCode_Alt, KeyCode_Shift);
 | 
				
			||||||
    Bind(command_lister,                KeyCode_X, KeyCode_Alt);
 | 
					    Bind(command_lister,                KeyCode_X, KeyCode_Alt);
 | 
				
			||||||
    Bind(project_command_lister,        KeyCode_X, KeyCode_Alt, KeyCode_Shift);
 | 
					    Bind(project_command_lister,        KeyCode_X, KeyCode_Alt, KeyCode_Shift);
 | 
				
			||||||
    Bind(list_all_functions_all_buffers_lister, KeyCode_I, KeyCode_Control, KeyCode_Shift);
 | 
					    Bind(list_all_functions_current_buffer, KeyCode_I, KeyCode_Control, KeyCode_Shift);
 | 
				
			||||||
    Bind(project_fkey_command, KeyCode_F1);
 | 
					    Bind(project_fkey_command, KeyCode_F1);
 | 
				
			||||||
    Bind(project_fkey_command, KeyCode_F2);
 | 
					    Bind(project_fkey_command, KeyCode_F2);
 | 
				
			||||||
    Bind(project_fkey_command, KeyCode_F3);
 | 
					    Bind(project_fkey_command, KeyCode_F3);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue