6 slides ready; virtual whitespace toggle hacked in for nowsies

This commit is contained in:
Allen Webster 2019-11-09 14:41:18 -08:00
parent 9129e5898b
commit bf47b2cb09
6 changed files with 443 additions and 270 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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