From bf47b2cb09f128b5e1bbf333b03f605fa1c28b61 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Sat, 9 Nov 2019 14:41:18 -0800 Subject: [PATCH] 6 slides ready; virtual whitespace toggle hacked in for nowsies --- 4ed_render_target.cpp | 10 +- custom/4coder_base_commands.cpp | 9 - custom/4coder_code_index.cpp | 19 ++ custom/4coder_tutorial.cpp | 445 +++++++++++++++++++--------- custom/generated/command_metadata.h | 228 +++++++------- custom/generated/remapping.h | 2 +- 6 files changed, 443 insertions(+), 270 deletions(-) diff --git a/4ed_render_target.cpp b/4ed_render_target.cpp index afe13a3a..ab10cbf5 100644 --- a/4ed_render_target.cpp +++ b/4ed_render_target.cpp @@ -248,11 +248,13 @@ draw_string(Render_Target *target, Face *face, String_Const_u8 string, Vec2_f32 if (behavior.do_codepoint_advance){ u32 codepoint = step.value; 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, - &face->metrics, - codepoint); + draw_font_glyph(target, face, draw_codepoint, point, color, flags); + } + f32 d = font_get_glyph_advance(&face->advance_map, &face->metrics, codepoint); point += d*delta; total_delta += d; } diff --git a/custom/4coder_base_commands.cpp b/custom/4coder_base_commands.cpp index 64eecdb9..17b3dc89 100644 --- a/custom/4coder_base_commands.cpp +++ b/custom/4coder_base_commands.cpp @@ -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_DOC("Toggles the current buffer's whitespace visibility status.") { diff --git a/custom/4coder_code_index.cpp b/custom/4coder_code_index.cpp index 217767f2..61fa6003 100644 --- a/custom/4coder_code_index.cpp +++ b/custom/4coder_code_index.cpp @@ -769,12 +769,15 @@ layout_index_unwrapped__inner(Application_Links *app, Arena *arena, Buffer_ID bu return(list); } + + function Layout_Item_List layout_virt_indent_index_unwrapped(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){ Layout_Item_List result = {}; + if (global_config.enable_virtual_whitespace){ code_index_lock(); Code_Index_File *file = code_index_get_file(buffer); if (file != 0){ @@ -784,9 +787,25 @@ layout_virt_indent_index_unwrapped(Application_Links *app, Arena *arena, if (file == 0){ 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); } +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 diff --git a/custom/4coder_tutorial.cpp b/custom/4coder_tutorial.cpp index a0b83f2c..192f9d92 100644 --- a/custom/4coder_tutorial.cpp +++ b/custom/4coder_tutorial.cpp @@ -86,7 +86,7 @@ tutorial_init_title_face(Application_Links *app){ } 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); tutorial_init_title_face(app); 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; 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; } @@ -197,11 +197,11 @@ default_4coder_tutorial_render(Application_Links *app, Frame_Info frame_info, Vi } 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_Context ctx = view_current_context(app, view); - ctx.render_caller = default_4coder_tutorial_render; + ctx.render_caller = tutorial_render; ctx.hides_buffer = true; View_Context_Block ctx_block(app, view, &ctx); @@ -277,10 +277,31 @@ default_4coder_tutorial_run(Application_Links *app) 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"); 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); 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!")); @@ -288,7 +309,7 @@ default_4coder_tutorial_short_details(Application_Links *app, Arena *arena, Fanc } 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); 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, " push_fancy_string(arena, line, string_u8_litexpr(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("")); } +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 -default_4coder_tutorial_slide_1(Application_Links *app, Arena *arena){ +hms_demo_tutorial_slide_1(Application_Links *app, Arena *arena){ Tutorial_Slide result = {}; Face_ID face = get_face_id(app, 0); 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; - 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:")); - // - push_fancy_line(arena, long_details, face, fcolor_id(Stag_Keyword), string_u8_litexpr("Let's start with a few navigation commands:")); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Control", "Comma", "change active panel"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "change active panel"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "", "*AnyArrow*", "move cursor one character or line"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - 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, + "Control", "*AnyArrow*", "move cursor by 'chunks'"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "move cursor by 'chunks'"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "", "Home/End", "move cursor to the first/last character of the line"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ", "); - push_fancy_stringf(arena, line, "move cursor to the first/last character of the line"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "", "PageUp/PageDown", "move cursor by full pages up/down"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ", "); - push_fancy_stringf(arena, line, "move cursor by full pages up/down"); + push_fancy_line(arena, long_details, face, fcolor_id(Stag_Pop1), string_u8_litexpr("Available in code files:")); - // - push_fancy_line(arena, long_details, face, fcolor_id(Stag_Keyword), 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 ", ""); - push_fancy_stringf(arena, line, "move cursor and mark to surrounding scope"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Alt", "LeftBracket", "move cursor and mark to surrounding scope"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "move cursor and mark to previous scope"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Alt", "RightBracket", "move cursor and mark to previous scope"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "move cursor and mark to next scope"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Alt", "Quote", "move cursor and mark to next scope"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "move cursor and mark to previous top-level scope"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Alt Shift", "RightBracket", "move cursor and mark to previous top-level scope"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "move cursor and mark to next top-level scope"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Alt Shift", "Quote", "move cursor and mark to next scope at the same level as the current scope"); return(result); } 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 = {}; Face_ID face = get_face_id(app, 0); 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; - 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:")); - // - 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:")); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "", "TextInsert", "non-modal text insertion works in any user-writable buffers at the cursor"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - 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, + "", "Backspace/Delete", "delete the previous/next character from the cursor"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", "/"); - push_fancy_stringf(arena, line, "delete the previous/next character from the cursor"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Control", "Z", "undo the last edit"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "moves the mark to the cursor cursor"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Control", "Y", "redo the last undone edit"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "delete the cursor to mark range"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Control", "L", "duplicate the current line"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "copy the cursor to mark range to the clipboard"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Alt", "Up/Down", "move the current line"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "cut 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 ", ""); - push_fancy_stringf(arena, line, "paste the clipboard to the buffer"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Control", "Space", "moves the mark to the cursor cursor"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - 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, + "Control", "D", "delete the range"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "undo the last edit"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Control", "C", "copy the range"); - // - line = push_fancy_line(arena, long_details, face, fcolor_id(Stag_Default)); - push_fancy_stringf(arena, line, fcolor_id(Stag_Pop2), - "%40s ", ""); - push_fancy_stringf(arena, line, "redo the last undone edit"); + hms_demo_tutorial_binding_line(app, arena, long_details, face, + "Control", "X", "cut the range"); + 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); } -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.") { - 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[] = { - default_4coder_tutorial_slide_1, - default_4coder_tutorial_slide_2, - }; - tutorial.slide_index = 0; - tutorial.slide_func_ptrs = slides; - tutorial.slide_count = ArrayCount(slides); - - view_enqueue_command_function(app, tutorial.view, default_4coder_tutorial_run); - } + local_persist Tutorial_Slide_Function *slides[] = { + // basic navigation + 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, + }; + run_tutorial(app, slides, ArrayCount(slides)); } // BOTTOM diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index 75ce21b1..e1c9f676 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -19,6 +19,7 @@ CUSTOM_COMMAND_SIG(seek_beginning_of_line); CUSTOM_COMMAND_SIG(seek_end_of_line); CUSTOM_COMMAND_SIG(goto_beginning_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_backwards); 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(decrease_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_line_numbers); 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(profile_inspect); 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_try_exit); #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(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(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_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 }, @@ -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(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(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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 1548 }, -{ 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, 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, 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, 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, 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, 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, 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, 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, 2020 }, +{ 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_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(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 735 }, +{ 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(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(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(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(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(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_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_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(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_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_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(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(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(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(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(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(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_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(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(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(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_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(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(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(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1563 }, +{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1571 }, +{ 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(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(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(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(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(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(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(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_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(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(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_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_goto_beginning_of_file = 8; static i32 fcoder_metacmd_ID_goto_end_of_file = 9; -static i32 fcoder_metacmd_ID_change_active_panel = 10; -static i32 fcoder_metacmd_ID_change_active_panel_backwards = 11; -static i32 fcoder_metacmd_ID_open_panel_vsplit = 12; -static i32 fcoder_metacmd_ID_open_panel_hsplit = 13; -static i32 fcoder_metacmd_ID_suppress_mouse = 14; -static i32 fcoder_metacmd_ID_allow_mouse = 15; -static i32 fcoder_metacmd_ID_toggle_mouse = 16; -static i32 fcoder_metacmd_ID_set_mode_to_original = 17; -static i32 fcoder_metacmd_ID_set_mode_to_notepad_like = 18; -static i32 fcoder_metacmd_ID_toggle_highlight_line_at_cursor = 19; -static i32 fcoder_metacmd_ID_toggle_highlight_enclosing_scopes = 20; -static i32 fcoder_metacmd_ID_toggle_paren_matching_helper = 21; -static i32 fcoder_metacmd_ID_toggle_fullscreen = 22; -static i32 fcoder_metacmd_ID_write_text_input = 23; -static i32 fcoder_metacmd_ID_write_space = 24; -static i32 fcoder_metacmd_ID_write_underscore = 25; -static i32 fcoder_metacmd_ID_delete_char = 26; -static i32 fcoder_metacmd_ID_backspace_char = 27; -static i32 fcoder_metacmd_ID_set_mark = 28; -static i32 fcoder_metacmd_ID_cursor_mark_swap = 29; -static i32 fcoder_metacmd_ID_delete_range = 30; -static i32 fcoder_metacmd_ID_backspace_alpha_numeric_boundary = 31; -static i32 fcoder_metacmd_ID_delete_alpha_numeric_boundary = 32; -static i32 fcoder_metacmd_ID_snipe_backward_whitespace_or_token_boundary = 33; -static i32 fcoder_metacmd_ID_snipe_forward_whitespace_or_token_boundary = 34; -static i32 fcoder_metacmd_ID_center_view = 35; -static i32 fcoder_metacmd_ID_left_adjust_view = 36; -static i32 fcoder_metacmd_ID_click_set_cursor_and_mark = 37; -static i32 fcoder_metacmd_ID_click_set_cursor = 38; -static i32 fcoder_metacmd_ID_click_set_cursor_if_lbutton = 39; -static i32 fcoder_metacmd_ID_click_set_mark = 40; -static i32 fcoder_metacmd_ID_mouse_wheel_scroll = 41; -static i32 fcoder_metacmd_ID_move_up = 42; -static i32 fcoder_metacmd_ID_move_down = 43; -static i32 fcoder_metacmd_ID_move_up_10 = 44; -static i32 fcoder_metacmd_ID_move_down_10 = 45; -static i32 fcoder_metacmd_ID_move_down_textual = 46; -static i32 fcoder_metacmd_ID_page_up = 47; -static i32 fcoder_metacmd_ID_page_down = 48; -static i32 fcoder_metacmd_ID_move_up_to_blank_line = 49; -static i32 fcoder_metacmd_ID_move_down_to_blank_line = 50; -static i32 fcoder_metacmd_ID_move_up_to_blank_line_skip_whitespace = 51; -static i32 fcoder_metacmd_ID_move_down_to_blank_line_skip_whitespace = 52; -static i32 fcoder_metacmd_ID_move_up_to_blank_line_end = 53; -static i32 fcoder_metacmd_ID_move_down_to_blank_line_end = 54; -static i32 fcoder_metacmd_ID_move_left = 55; -static i32 fcoder_metacmd_ID_move_right = 56; -static i32 fcoder_metacmd_ID_move_right_whitespace_boundary = 57; -static i32 fcoder_metacmd_ID_move_left_whitespace_boundary = 58; -static i32 fcoder_metacmd_ID_move_right_token_boundary = 59; -static i32 fcoder_metacmd_ID_move_left_token_boundary = 60; -static i32 fcoder_metacmd_ID_move_right_whitespace_or_token_boundary = 61; -static i32 fcoder_metacmd_ID_move_left_whitespace_or_token_boundary = 62; -static i32 fcoder_metacmd_ID_move_right_alpha_numeric_boundary = 63; -static i32 fcoder_metacmd_ID_move_left_alpha_numeric_boundary = 64; -static i32 fcoder_metacmd_ID_move_right_alpha_numeric_or_camel_boundary = 65; -static i32 fcoder_metacmd_ID_move_left_alpha_numeric_or_camel_boundary = 66; -static i32 fcoder_metacmd_ID_select_all = 67; -static i32 fcoder_metacmd_ID_to_uppercase = 68; -static i32 fcoder_metacmd_ID_to_lowercase = 69; -static i32 fcoder_metacmd_ID_clean_all_lines = 70; -static i32 fcoder_metacmd_ID_basic_change_active_panel = 71; -static i32 fcoder_metacmd_ID_close_panel = 72; -static i32 fcoder_metacmd_ID_show_scrollbar = 73; -static i32 fcoder_metacmd_ID_hide_scrollbar = 74; -static i32 fcoder_metacmd_ID_show_filebar = 75; -static i32 fcoder_metacmd_ID_hide_filebar = 76; -static i32 fcoder_metacmd_ID_toggle_filebar = 77; -static i32 fcoder_metacmd_ID_toggle_fps_meter = 78; -static i32 fcoder_metacmd_ID_increase_face_size = 79; -static i32 fcoder_metacmd_ID_decrease_face_size = 80; -static i32 fcoder_metacmd_ID_mouse_wheel_change_face_size = 81; -static i32 fcoder_metacmd_ID_toggle_virtual_whitespace = 82; +static i32 fcoder_metacmd_ID_toggle_virtual_whitespace = 10; +static i32 fcoder_metacmd_ID_change_active_panel = 11; +static i32 fcoder_metacmd_ID_change_active_panel_backwards = 12; +static i32 fcoder_metacmd_ID_open_panel_vsplit = 13; +static i32 fcoder_metacmd_ID_open_panel_hsplit = 14; +static i32 fcoder_metacmd_ID_suppress_mouse = 15; +static i32 fcoder_metacmd_ID_allow_mouse = 16; +static i32 fcoder_metacmd_ID_toggle_mouse = 17; +static i32 fcoder_metacmd_ID_set_mode_to_original = 18; +static i32 fcoder_metacmd_ID_set_mode_to_notepad_like = 19; +static i32 fcoder_metacmd_ID_toggle_highlight_line_at_cursor = 20; +static i32 fcoder_metacmd_ID_toggle_highlight_enclosing_scopes = 21; +static i32 fcoder_metacmd_ID_toggle_paren_matching_helper = 22; +static i32 fcoder_metacmd_ID_toggle_fullscreen = 23; +static i32 fcoder_metacmd_ID_write_text_input = 24; +static i32 fcoder_metacmd_ID_write_space = 25; +static i32 fcoder_metacmd_ID_write_underscore = 26; +static i32 fcoder_metacmd_ID_delete_char = 27; +static i32 fcoder_metacmd_ID_backspace_char = 28; +static i32 fcoder_metacmd_ID_set_mark = 29; +static i32 fcoder_metacmd_ID_cursor_mark_swap = 30; +static i32 fcoder_metacmd_ID_delete_range = 31; +static i32 fcoder_metacmd_ID_backspace_alpha_numeric_boundary = 32; +static i32 fcoder_metacmd_ID_delete_alpha_numeric_boundary = 33; +static i32 fcoder_metacmd_ID_snipe_backward_whitespace_or_token_boundary = 34; +static i32 fcoder_metacmd_ID_snipe_forward_whitespace_or_token_boundary = 35; +static i32 fcoder_metacmd_ID_center_view = 36; +static i32 fcoder_metacmd_ID_left_adjust_view = 37; +static i32 fcoder_metacmd_ID_click_set_cursor_and_mark = 38; +static i32 fcoder_metacmd_ID_click_set_cursor = 39; +static i32 fcoder_metacmd_ID_click_set_cursor_if_lbutton = 40; +static i32 fcoder_metacmd_ID_click_set_mark = 41; +static i32 fcoder_metacmd_ID_mouse_wheel_scroll = 42; +static i32 fcoder_metacmd_ID_move_up = 43; +static i32 fcoder_metacmd_ID_move_down = 44; +static i32 fcoder_metacmd_ID_move_up_10 = 45; +static i32 fcoder_metacmd_ID_move_down_10 = 46; +static i32 fcoder_metacmd_ID_move_down_textual = 47; +static i32 fcoder_metacmd_ID_page_up = 48; +static i32 fcoder_metacmd_ID_page_down = 49; +static i32 fcoder_metacmd_ID_move_up_to_blank_line = 50; +static i32 fcoder_metacmd_ID_move_down_to_blank_line = 51; +static i32 fcoder_metacmd_ID_move_up_to_blank_line_skip_whitespace = 52; +static i32 fcoder_metacmd_ID_move_down_to_blank_line_skip_whitespace = 53; +static i32 fcoder_metacmd_ID_move_up_to_blank_line_end = 54; +static i32 fcoder_metacmd_ID_move_down_to_blank_line_end = 55; +static i32 fcoder_metacmd_ID_move_left = 56; +static i32 fcoder_metacmd_ID_move_right = 57; +static i32 fcoder_metacmd_ID_move_right_whitespace_boundary = 58; +static i32 fcoder_metacmd_ID_move_left_whitespace_boundary = 59; +static i32 fcoder_metacmd_ID_move_right_token_boundary = 60; +static i32 fcoder_metacmd_ID_move_left_token_boundary = 61; +static i32 fcoder_metacmd_ID_move_right_whitespace_or_token_boundary = 62; +static i32 fcoder_metacmd_ID_move_left_whitespace_or_token_boundary = 63; +static i32 fcoder_metacmd_ID_move_right_alpha_numeric_boundary = 64; +static i32 fcoder_metacmd_ID_move_left_alpha_numeric_boundary = 65; +static i32 fcoder_metacmd_ID_move_right_alpha_numeric_or_camel_boundary = 66; +static i32 fcoder_metacmd_ID_move_left_alpha_numeric_or_camel_boundary = 67; +static i32 fcoder_metacmd_ID_select_all = 68; +static i32 fcoder_metacmd_ID_to_uppercase = 69; +static i32 fcoder_metacmd_ID_to_lowercase = 70; +static i32 fcoder_metacmd_ID_clean_all_lines = 71; +static i32 fcoder_metacmd_ID_basic_change_active_panel = 72; +static i32 fcoder_metacmd_ID_close_panel = 73; +static i32 fcoder_metacmd_ID_show_scrollbar = 74; +static i32 fcoder_metacmd_ID_hide_scrollbar = 75; +static i32 fcoder_metacmd_ID_show_filebar = 76; +static i32 fcoder_metacmd_ID_hide_filebar = 77; +static i32 fcoder_metacmd_ID_toggle_filebar = 78; +static i32 fcoder_metacmd_ID_toggle_fps_meter = 79; +static i32 fcoder_metacmd_ID_increase_face_size = 80; +static i32 fcoder_metacmd_ID_decrease_face_size = 81; +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_line_numbers = 84; 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_profile_inspect = 211; 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_try_exit = 215; #endif diff --git a/custom/generated/remapping.h b/custom/generated/remapping.h index 97d3095a..b4a40d21 100644 --- a/custom/generated/remapping.h +++ b/custom/generated/remapping.h @@ -32,7 +32,7 @@ setup_default_mapping(Mapping *mapping){ Bind(execute_previous_cli, KeyCode_Z, KeyCode_Alt, KeyCode_Shift); Bind(command_lister, KeyCode_X, KeyCode_Alt); 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_F2); Bind(project_fkey_command, KeyCode_F3);