From 956b70c0970709c86b644bb2ca2aa964ab49eeb2 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Sun, 1 Mar 2020 17:47:58 -0800 Subject: [PATCH 01/10] Split itchio push script for 32-bit --- bin/itchio_push_linux-x86.sh | 22 ++++++++++++++++++++++ bin/itchio_push_linux.sh | 2 -- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 bin/itchio_push_linux-x86.sh diff --git a/bin/itchio_push_linux-x86.sh b/bin/itchio_push_linux-x86.sh new file mode 100644 index 00000000..d98b1b19 --- /dev/null +++ b/bin/itchio_push_linux-x86.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +if [ "$#" -lt "3" ] +then +echo need 3 parameters +exit +else + +fake=$1 +maj=$2 +min=$3 + +vr=$fake.$maj.$min +fv=$fake-$maj-$min + +flags="--fix-permissions --userversion=$vr" +dir=../current_dist_all_os + +butler push $flags $dir/demo_x86/4coder-$fv-demo-linux-x86.zip 4coder/4coder:linux-x86-demo +butler push $flags $dir/super_x86/4coder-$fv-super-linux-x86.zip 4coder/4coder:linux-x86 + +fi diff --git a/bin/itchio_push_linux.sh b/bin/itchio_push_linux.sh index 8c612a2c..8a829168 100644 --- a/bin/itchio_push_linux.sh +++ b/bin/itchio_push_linux.sh @@ -17,8 +17,6 @@ flags="--fix-permissions --userversion=$vr" dir=../current_dist_all_os butler push $flags $dir/demo_x64/4coder-$fv-demo-linux-x64.zip 4coder/4coder:linux-x64-demo -butler push $flags $dir/demo_x64/4coder-$fv-demo-linux-x86.zip 4coder/4coder:linux-x86-demo butler push $flags $dir/super_x64/4coder-$fv-super-linux-x64.zip 4coder/4coder:linux-x64 -butler push $flags $dir/super_x64/4coder-$fv-super-linux-x86.zip 4coder/4coder:linux-x86 fi From e1698bd28aeb46d855be0551785e855cec3121f0 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Tue, 3 Mar 2020 12:25:04 -0800 Subject: [PATCH 02/10] Fix compilation on windows --- custom/4coder_examples.cpp | 2 +- custom/generated/command_metadata.h | 484 ++++++++++++++-------------- opengl/4ed_opengl_defines.h | 10 - opengl/4ed_opengl_render.cpp | 437 +++++++++++++------------ 4 files changed, 459 insertions(+), 474 deletions(-) diff --git a/custom/4coder_examples.cpp b/custom/4coder_examples.cpp index 59de7980..5ab80a51 100644 --- a/custom/4coder_examples.cpp +++ b/custom/4coder_examples.cpp @@ -148,7 +148,7 @@ isn't happening, so command bindings don't trigger unless you trigger them yours } u8 buffer[256]; - u32 size = 0; + u64 size = 0; for (;;){ User_Input in = get_next_input(app, EventPropertyGroup_Any, EventProperty_Escape); diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index e424f1d4..01209b1f 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -264,248 +264,248 @@ i32 source_name_len; i32 line_number; }; static Command_Metadata fcoder_metacmd_table[242] = { -{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "../code/custom/4coder_default_framework.cpp", 43, 409 }, -{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "../code/custom/4coder_auto_indent.cpp", 37, 413 }, -{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "../code/custom/4coder_auto_indent.cpp", 37, 423 }, -{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "../code/custom/4coder_auto_indent.cpp", 37, 404 }, -{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "../code/custom/4coder_base_commands.cpp", 39, 154 }, -{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "../code/custom/4coder_base_commands.cpp", 39, 96 }, -{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "../code/custom/4coder_base_commands.cpp", 39, 647 }, -{ PROC_LINKS(begin_clipboard_collection_mode, 0), true, "begin_clipboard_collection_mode", 31, "Allows the user to copy multiple strings from other applications before switching to 4coder and pasting them all.", 113, "../code/custom/4coder_clipboard.cpp", 35, 68 }, -{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "../code/custom/4coder_build_commands.cpp", 40, 159 }, -{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "../code/custom/4coder_build_commands.cpp", 40, 122 }, -{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "../code/custom/4coder_base_commands.cpp", 39, 197 }, -{ 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, "../code/custom/4coder_default_framework.cpp", 43, 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, "../code/custom/4coder_default_framework.cpp", 43, 290 }, -{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "../code/custom/4coder_build_commands.cpp", 40, 180 }, -{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "../code/custom/4coder_base_commands.cpp", 39, 636 }, -{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "../code/custom/4coder_default_framework.cpp", 43, 480 }, -{ PROC_LINKS(clear_clipboard, 0), false, "clear_clipboard", 15, "Clears the history of the clipboard", 35, "../code/custom/4coder_clipboard.cpp", 35, 216 }, -{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "../code/custom/4coder_base_commands.cpp", 39, 233 }, -{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "../code/custom/4coder_base_commands.cpp", 39, 223 }, -{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "../code/custom/4coder_base_commands.cpp", 39, 243 }, -{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "../code/custom/4coder_base_commands.cpp", 39, 255 }, -{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "../code/custom/4coder_clipboard.cpp", 35, 7 }, -{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "../code/custom/4coder_project_commands.cpp", 42, 843 }, -{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "../code/custom/4coder_build_commands.cpp", 40, 174 }, -{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "../code/custom/4coder_base_commands.cpp", 39, 655 }, -{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "../code/custom/4coder_docs.cpp", 30, 190 }, -{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "../code/custom/4coder_lists.cpp", 31, 761 }, -{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "../code/custom/4coder_combined_write_commands.cpp", 49, 125 }, -{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "../code/custom/4coder_combined_write_commands.cpp", 49, 149 }, -{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "../code/custom/4coder_clipboard.cpp", 35, 107 }, -{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "../code/custom/4coder_base_commands.cpp", 39, 124 }, -{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "../code/custom/4coder_docs.cpp", 30, 175 }, -{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "../code/custom/4coder_clipboard.cpp", 35, 116 }, -{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "../code/custom/4coder_base_commands.cpp", 39, 738 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1897 }, -{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "../code/custom/4coder_default_hooks.cpp", 39, 7 }, -{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "../code/custom/4coder_default_hooks.cpp", 39, 23 }, -{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "../code/custom/4coder_default_hooks.cpp", 39, 51 }, -{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "../code/custom/4coder_base_commands.cpp", 39, 162 }, -{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "../code/custom/4coder_base_commands.cpp", 39, 79 }, -{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "../code/custom/4coder_scope_commands.cpp", 40, 112 }, -{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "../code/custom/4coder_base_commands.cpp", 39, 1323 }, -{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "../code/custom/4coder_base_commands.cpp", 39, 1495 }, -{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "../code/custom/4coder_base_commands.cpp", 39, 134 }, -{ PROC_LINKS(display_key_codes, 0), false, "display_key_codes", 17, "Example of input handling loop", 30, "../code/custom/4coder_examples.cpp", 34, 90 }, -{ PROC_LINKS(display_text_input, 0), false, "display_text_input", 18, "Example of to_writable and leave_current_input_unhandled", 56, "../code/custom/4coder_examples.cpp", 34, 134 }, -{ PROC_LINKS(double_backspace, 0), false, "double_backspace", 16, "Example of history group helpers", 32, "../code/custom/4coder_examples.cpp", 34, 10 }, -{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "../code/custom/4coder_base_commands.cpp", 39, 1481 }, -{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "../code/custom/4coder_cli_command.cpp", 37, 22 }, -{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "../code/custom/4coder_cli_command.cpp", 37, 7 }, -{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "../code/custom/4coder_base_commands.cpp", 39, 825 }, -{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "../code/custom/4coder_helper.cpp", 32, 2224 }, -{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "../code/custom/4coder_helper.cpp", 32, 2232 }, -{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "../code/custom/4coder_jump_sticky.cpp", 37, 525 }, -{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "../code/custom/4coder_jump_sticky.cpp", 37, 542 }, -{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "../code/custom/4coder_jump_sticky.cpp", 37, 348 }, -{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "../code/custom/4coder_jump_sticky.cpp", 37, 375 }, -{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "../code/custom/4coder_base_commands.cpp", 39, 833 }, -{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "../code/custom/4coder_jump_sticky.cpp", 37, 464 }, -{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "../code/custom/4coder_jump_sticky.cpp", 37, 494 }, -{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "../code/custom/4coder_jump_sticky.cpp", 37, 481 }, -{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "../code/custom/4coder_jump_sticky.cpp", 37, 511 }, -{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "../code/custom/4coder_base_commands.cpp", 39, 685 }, -{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "../code/custom/4coder_base_commands.cpp", 39, 671 }, -{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "../code/custom/4coder_tutorial.cpp", 34, 869 }, -{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "../code/custom/4coder_combined_write_commands.cpp", 49, 70 }, -{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "../code/custom/4coder_jump_sticky.cpp", 37, 564 }, -{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "../code/custom/4coder_jump_sticky.cpp", 37, 581 }, -{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "../code/custom/4coder_base_commands.cpp", 39, 727 }, -{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "../code/custom/4coder_lists.cpp", 31, 520 }, -{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "../code/custom/4coder_lists.cpp", 31, 661 }, -{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "../code/custom/4coder_lists.cpp", 31, 715 }, -{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "../code/custom/4coder_lists.cpp", 31, 612 }, -{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "../code/custom/4coder_lists.cpp", 31, 510 }, -{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "../code/custom/4coder_code_index_listers.cpp", 44, 12 }, -{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "../code/custom/4coder_keyboard_macro.cpp", 40, 54 }, -{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "../code/custom/4coder_keyboard_macro.cpp", 40, 77 }, -{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "../code/custom/4coder_keyboard_macro.cpp", 40, 41 }, -{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "../code/custom/4coder_base_commands.cpp", 39, 1641 }, -{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "../code/custom/4coder_tutorial.cpp", 34, 9 }, -{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "../code/custom/4coder_base_commands.cpp", 39, 211 }, -{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "../code/custom/4coder_function_list.cpp", 39, 295 }, -{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), true, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "../code/custom/4coder_function_list.cpp", 39, 301 }, -{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "../code/custom/4coder_function_list.cpp", 39, 267 }, -{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), true, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "../code/custom/4coder_function_list.cpp", 39, 277 }, -{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "../code/custom/4coder_search.cpp", 32, 165 }, -{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "../code/custom/4coder_search.cpp", 32, 177 }, -{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "../code/custom/4coder_search.cpp", 32, 189 }, -{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "../code/custom/4coder_search.cpp", 32, 195 }, -{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "../code/custom/4coder_search.cpp", 32, 201 }, -{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "../code/custom/4coder_search.cpp", 32, 207 }, -{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "../code/custom/4coder_search.cpp", 32, 213 }, -{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "../code/custom/4coder_search.cpp", 32, 221 }, -{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "../code/custom/4coder_search.cpp", 32, 171 }, -{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "../code/custom/4coder_search.cpp", 32, 183 }, -{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "../code/custom/4coder_project_commands.cpp", 42, 863 }, -{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "../code/custom/4coder_config.cpp", 32, 1627 }, -{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "../code/custom/4coder_default_framework.cpp", 43, 457 }, -{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "../code/custom/4coder_default_framework.cpp", 43, 469 }, -{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "../code/custom/4coder_base_commands.cpp", 39, 1435 }, -{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "../code/custom/4coder_miblo_numbers.cpp", 39, 44 }, -{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 237 }, -{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 249 }, -{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "../code/custom/4coder_miblo_numbers.cpp", 39, 29 }, -{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 231 }, -{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 243 }, -{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "../code/custom/4coder_base_commands.cpp", 39, 780 }, -{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "../code/custom/4coder_base_commands.cpp", 39, 265 }, -{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "../code/custom/4coder_base_commands.cpp", 39, 336 }, -{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "../code/custom/4coder_base_commands.cpp", 39, 348 }, -{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "../code/custom/4coder_base_commands.cpp", 39, 354 }, -{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "../code/custom/4coder_base_commands.cpp", 39, 407 }, -{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "../code/custom/4coder_base_commands.cpp", 39, 431 }, -{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "../code/custom/4coder_base_commands.cpp", 39, 419 }, -{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "../code/custom/4coder_base_commands.cpp", 39, 437 }, -{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "../code/custom/4coder_base_commands.cpp", 39, 514 }, -{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "../code/custom/4coder_base_commands.cpp", 39, 528 }, -{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "../code/custom/4coder_base_commands.cpp", 39, 486 }, -{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "../code/custom/4coder_base_commands.cpp", 39, 471 }, -{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "../code/custom/4coder_base_commands.cpp", 39, 500 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1475 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1469 }, -{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "../code/custom/4coder_base_commands.cpp", 39, 445 }, -{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "../code/custom/4coder_base_commands.cpp", 39, 507 }, -{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "../code/custom/4coder_base_commands.cpp", 39, 521 }, -{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "../code/custom/4coder_base_commands.cpp", 39, 479 }, -{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "../code/custom/4coder_base_commands.cpp", 39, 463 }, -{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "../code/custom/4coder_base_commands.cpp", 39, 493 }, -{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "../code/custom/4coder_base_commands.cpp", 39, 330 }, -{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "../code/custom/4coder_base_commands.cpp", 39, 342 }, -{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "../code/custom/4coder_base_commands.cpp", 39, 401 }, -{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "../code/custom/4coder_base_commands.cpp", 39, 425 }, -{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "../code/custom/4coder_base_commands.cpp", 39, 413 }, -{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "../code/custom/4coder_clipboard.cpp", 35, 364 }, -{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "../code/custom/4coder_clipboard.cpp", 35, 373 }, -{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "../code/custom/4coder_project_commands.cpp", 42, 849 }, -{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "../code/custom/4coder_project_commands.cpp", 42, 855 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1560 }, -{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "../code/custom/4coder_base_commands.cpp", 39, 1891 }, -{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "../code/custom/4coder_combined_write_commands.cpp", 49, 46 }, -{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "../code/custom/4coder_combined_write_commands.cpp", 49, 62 }, -{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "../code/custom/4coder_combined_write_commands.cpp", 49, 54 }, -{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "../code/custom/4coder_base_commands.cpp", 39, 1592 }, -{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "../code/custom/4coder_default_framework.cpp", 43, 310 }, -{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "../code/custom/4coder_default_framework.cpp", 43, 300 }, -{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "../code/custom/4coder_base_commands.cpp", 39, 372 }, -{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "../code/custom/4coder_base_commands.cpp", 39, 364 }, -{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "../code/custom/4coder_clipboard.cpp", 35, 127 }, -{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "../code/custom/4coder_clipboard.cpp", 35, 202 }, -{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "../code/custom/4coder_clipboard.cpp", 35, 161 }, -{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "../code/custom/4coder_clipboard.cpp", 35, 209 }, -{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "../code/custom/4coder_scope_commands.cpp", 40, 106 }, -{ PROC_LINKS(play_with_a_counter, 0), false, "play_with_a_counter", 19, "Example of query bar", 20, "../code/custom/4coder_examples.cpp", 34, 29 }, -{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "../code/custom/4coder_profile.cpp", 33, 226 }, -{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "../code/custom/4coder_profile.cpp", 33, 219 }, -{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "../code/custom/4coder_profile.cpp", 33, 212 }, -{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "../code/custom/4coder_profile_inspect.cpp", 41, 886 }, -{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "../code/custom/4coder_project_commands.cpp", 42, 1290 }, -{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "../code/custom/4coder_project_commands.cpp", 42, 871 }, -{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "../code/custom/4coder_project_commands.cpp", 42, 897 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1251 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1272 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1288 }, -{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "../code/custom/4coder_base_commands.cpp", 39, 1730 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1815 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1400 }, -{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "../code/custom/4coder_base_commands.cpp", 39, 1659 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1161 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1152 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1143 }, -{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "../code/custom/4coder_base_commands.cpp", 39, 1084 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1096 }, -{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "../code/custom/4coder_base_commands.cpp", 39, 1649 }, -{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "../code/custom/4coder_default_framework.cpp", 43, 382 }, -{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "../code/custom/4coder_base_commands.cpp", 39, 1367 }, -{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "../code/custom/4coder_base_commands.cpp", 39, 1078 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1090 }, -{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "../code/custom/4coder_helper.cpp", 32, 2212 }, -{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "../code/custom/4coder_helper.cpp", 32, 2200 }, -{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "../code/custom/4coder_helper.cpp", 32, 2218 }, -{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "../code/custom/4coder_helper.cpp", 32, 2206 }, -{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "../code/custom/4coder_base_commands.cpp", 39, 537 }, -{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "../code/custom/4coder_scope_commands.cpp", 40, 57 }, -{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "../code/custom/4coder_scope_commands.cpp", 40, 66 }, -{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "../code/custom/4coder_scope_commands.cpp", 40, 82 }, -{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "../code/custom/4coder_scope_commands.cpp", 40, 99 }, -{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "../code/custom/4coder_scope_commands.cpp", 40, 27 }, -{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "../code/custom/4coder_scope_commands.cpp", 40, 39 }, -{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "../code/custom/4coder_eol.cpp", 29, 125 }, -{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "../code/custom/4coder_eol.cpp", 29, 112 }, -{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "../code/custom/4coder_eol.cpp", 29, 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, "../code/custom/4coder_eol.cpp", 29, 99 }, -{ PROC_LINKS(set_face_size, 0), false, "set_face_size", 13, "Set face size of the face used by the current buffer.", 53, "../code/custom/4coder_base_commands.cpp", 39, 707 }, -{ PROC_LINKS(set_face_size_this_buffer, 0), false, "set_face_size_this_buffer", 25, "Set face size of the face used by the current buffer; if any other buffers are using the same face a new face is created so that only this buffer is effected", 157, "../code/custom/4coder_base_commands.cpp", 39, 749 }, -{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "../code/custom/4coder_base_commands.cpp", 39, 115 }, -{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "../code/custom/4coder_default_framework.cpp", 43, 427 }, -{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "../code/custom/4coder_default_framework.cpp", 43, 421 }, -{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "../code/custom/4coder_project_commands.cpp", 42, 1238 }, -{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "../code/custom/4coder_project_commands.cpp", 42, 1250 }, -{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "../code/custom/4coder_project_commands.cpp", 42, 1244 }, -{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "../code/custom/4coder_project_commands.cpp", 42, 1231 }, -{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "../code/custom/4coder_base_commands.cpp", 39, 678 }, -{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "../code/custom/4coder_base_commands.cpp", 39, 664 }, -{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "../code/custom/4coder_log_parser.cpp", 36, 994 }, -{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "../code/custom/4coder_base_commands.cpp", 39, 179 }, -{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "../code/custom/4coder_base_commands.cpp", 39, 187 }, -{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "../code/custom/4coder_combined_write_commands.cpp", 49, 237 }, -{ PROC_LINKS(string_repeat, 0), false, "string_repeat", 13, "Example of query_user_string and query_user_number", 50, "../code/custom/4coder_examples.cpp", 34, 176 }, -{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "../code/custom/4coder_default_framework.cpp", 43, 403 }, -{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "../code/custom/4coder_base_commands.cpp", 39, 1617 }, -{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "../code/custom/4coder_lists.cpp", 31, 785 }, -{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "../code/custom/4coder_base_commands.cpp", 39, 563 }, -{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "../code/custom/4coder_base_commands.cpp", 39, 550 }, -{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "../code/custom/4coder_base_commands.cpp", 39, 692 }, -{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "../code/custom/4coder_base_commands.cpp", 39, 701 }, -{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "../code/custom/4coder_default_framework.cpp", 43, 451 }, -{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "../code/custom/4coder_default_framework.cpp", 43, 439 }, -{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "../code/custom/4coder_default_framework.cpp", 43, 433 }, -{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "../code/custom/4coder_base_commands.cpp", 39, 806 }, -{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "../code/custom/4coder_base_commands.cpp", 39, 812 }, -{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "../code/custom/4coder_default_framework.cpp", 43, 415 }, -{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "../code/custom/4coder_default_framework.cpp", 43, 445 }, -{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "../code/custom/4coder_base_commands.cpp", 39, 797 }, -{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles virtual whitespace for all files.", 41, "../code/custom/4coder_code_index.cpp", 36, 1176 }, -{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "../code/custom/4coder_tutorial.cpp", 34, 20 }, -{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "../code/custom/4coder_tutorial.cpp", 34, 34 }, -{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "../code/custom/4coder_combined_write_commands.cpp", 49, 137 }, -{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "../code/custom/4coder_base_commands.cpp", 39, 1717 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1744 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1605 }, -{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "../code/custom/4coder_jump_lister.cpp", 37, 59 }, -{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "../code/custom/4coder_search.cpp", 32, 395 }, -{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "../code/custom/4coder_search.cpp", 32, 642 }, -{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "../code/custom/4coder_combined_write_commands.cpp", 49, 94 }, -{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "../code/custom/4coder_combined_write_commands.cpp", 49, 82 }, -{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "../code/custom/4coder_combined_write_commands.cpp", 49, 88 }, -{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "../code/custom/4coder_base_commands.cpp", 39, 67 }, -{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "../code/custom/4coder_auto_indent.cpp", 37, 433 }, -{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "../code/custom/4coder_base_commands.cpp", 39, 59 }, -{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "../code/custom/4coder_combined_write_commands.cpp", 49, 76 }, -{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "../code/custom/4coder_base_commands.cpp", 39, 73 }, -{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "../code/custom/4coder_combined_write_commands.cpp", 49, 100 }, +{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 409 }, +{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 413 }, +{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 423 }, +{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 404 }, +{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 154 }, +{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 96 }, +{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 647 }, +{ PROC_LINKS(begin_clipboard_collection_mode, 0), true, "begin_clipboard_collection_mode", 31, "Allows the user to copy multiple strings from other applications before switching to 4coder and pasting them all.", 113, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 68 }, +{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "c:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 159 }, +{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "c:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 122 }, +{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 197 }, +{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 284 }, +{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 290 }, +{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "c:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 180 }, +{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 636 }, +{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 480 }, +{ PROC_LINKS(clear_clipboard, 0), false, "clear_clipboard", 15, "Clears the history of the clipboard", 35, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 216 }, +{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 233 }, +{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 223 }, +{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 243 }, +{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 255 }, +{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 7 }, +{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 843 }, +{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "c:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 174 }, +{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 655 }, +{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "c:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 190 }, +{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 761 }, +{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 125 }, +{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 149 }, +{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 107 }, +{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 124 }, +{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "c:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 175 }, +{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 116 }, +{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 738 }, +{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1897 }, +{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "c:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 }, +{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "c:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 23 }, +{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "c:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 51 }, +{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 162 }, +{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 79 }, +{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 112 }, +{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1323 }, +{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1495 }, +{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 134 }, +{ PROC_LINKS(display_key_codes, 0), false, "display_key_codes", 17, "Example of input handling loop", 30, "c:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 90 }, +{ PROC_LINKS(display_text_input, 0), false, "display_text_input", 18, "Example of to_writable and leave_current_input_unhandled", 56, "c:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 134 }, +{ PROC_LINKS(double_backspace, 0), false, "double_backspace", 16, "Example of history group helpers", 32, "c:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 10 }, +{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1481 }, +{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "c:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 22 }, +{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "c:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 7 }, +{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 825 }, +{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2224 }, +{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2232 }, +{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 525 }, +{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 542 }, +{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 348 }, +{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 375 }, +{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 833 }, +{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 464 }, +{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 494 }, +{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 481 }, +{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 511 }, +{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 685 }, +{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 671 }, +{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 869 }, +{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 70 }, +{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 564 }, +{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 581 }, +{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 727 }, +{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 520 }, +{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 661 }, +{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 715 }, +{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 612 }, +{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 510 }, +{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "c:\\4ed\\code\\custom\\4coder_code_index_listers.cpp", 48, 12 }, +{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "c:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 54 }, +{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "c:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 77 }, +{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "c:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 41 }, +{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1641 }, +{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 9 }, +{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 211 }, +{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "c:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 295 }, +{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), true, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "c:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 301 }, +{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "c:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 267 }, +{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), true, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "c:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 277 }, +{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 165 }, +{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 177 }, +{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 189 }, +{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 195 }, +{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 201 }, +{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 207 }, +{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 213 }, +{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 221 }, +{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 171 }, +{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 183 }, +{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 863 }, +{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "c:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1627 }, +{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 457 }, +{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 469 }, +{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1435 }, +{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 44 }, +{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 237 }, +{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 }, +{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 29 }, +{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 231 }, +{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 243 }, +{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 780 }, +{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 265 }, +{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 336 }, +{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 348 }, +{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 354 }, +{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 407 }, +{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 431 }, +{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 419 }, +{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 437 }, +{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 514 }, +{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 528 }, +{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 486 }, +{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 471 }, +{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 500 }, +{ PROC_LINKS(move_line_down, 0), false, "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1475 }, +{ PROC_LINKS(move_line_up, 0), false, "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1469 }, +{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 445 }, +{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 507 }, +{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 521 }, +{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 479 }, +{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 463 }, +{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 493 }, +{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 330 }, +{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 342 }, +{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 401 }, +{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 425 }, +{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 413 }, +{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 364 }, +{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 373 }, +{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 849 }, +{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 855 }, +{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1560 }, +{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1891 }, +{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 46 }, +{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 62 }, +{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 54 }, +{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1592 }, +{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 310 }, +{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 300 }, +{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 372 }, +{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 364 }, +{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 127 }, +{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 202 }, +{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 161 }, +{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 209 }, +{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 106 }, +{ PROC_LINKS(play_with_a_counter, 0), false, "play_with_a_counter", 19, "Example of query bar", 20, "c:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 29 }, +{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "c:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 226 }, +{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "c:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 219 }, +{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "c:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 212 }, +{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "c:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 886 }, +{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1290 }, +{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 871 }, +{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 897 }, +{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1251 }, +{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1272 }, +{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1288 }, +{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1730 }, +{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1815 }, +{ PROC_LINKS(rename_file_query, 0), false, "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1400 }, +{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1659 }, +{ PROC_LINKS(replace_in_all_buffers, 0), false, "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1161 }, +{ PROC_LINKS(replace_in_buffer, 0), false, "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1152 }, +{ PROC_LINKS(replace_in_range, 0), false, "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1143 }, +{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1084 }, +{ PROC_LINKS(reverse_search_identifier, 0), false, "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1096 }, +{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1649 }, +{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 382 }, +{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1367 }, +{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1078 }, +{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1090 }, +{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2212 }, +{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2200 }, +{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2218 }, +{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2206 }, +{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 537 }, +{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 57 }, +{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 66 }, +{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 82 }, +{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 99 }, +{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 27 }, +{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 39 }, +{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 125 }, +{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 112 }, +{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 86 }, +{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 99 }, +{ PROC_LINKS(set_face_size, 0), false, "set_face_size", 13, "Set face size of the face used by the current buffer.", 53, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 707 }, +{ PROC_LINKS(set_face_size_this_buffer, 0), false, "set_face_size_this_buffer", 25, "Set face size of the face used by the current buffer; if any other buffers are using the same face a new face is created so that only this buffer is effected", 157, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 749 }, +{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 115 }, +{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 427 }, +{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 421 }, +{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1238 }, +{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1250 }, +{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1244 }, +{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1231 }, +{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 678 }, +{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 664 }, +{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "c:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 994 }, +{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 179 }, +{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 187 }, +{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 237 }, +{ PROC_LINKS(string_repeat, 0), false, "string_repeat", 13, "Example of query_user_string and query_user_number", 50, "c:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 176 }, +{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 403 }, +{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1617 }, +{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 785 }, +{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 563 }, +{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 550 }, +{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 692 }, +{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 701 }, +{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 451 }, +{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 439 }, +{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 433 }, +{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 806 }, +{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 812 }, +{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 415 }, +{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 445 }, +{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 797 }, +{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles virtual whitespace for all files.", 41, "c:\\4ed\\code\\custom\\4coder_code_index.cpp", 40, 1176 }, +{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 20 }, +{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 34 }, +{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 137 }, +{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1717 }, +{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1744 }, +{ PROC_LINKS(view_buffer_other_panel, 0), false, "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1605 }, +{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "c:\\4ed\\code\\custom\\4coder_jump_lister.cpp", 41, 59 }, +{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 395 }, +{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 642 }, +{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 94 }, +{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 82 }, +{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 88 }, +{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 67 }, +{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 433 }, +{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 59 }, +{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 76 }, +{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 73 }, +{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 100 }, }; static i32 fcoder_metacmd_ID_allow_mouse = 0; static i32 fcoder_metacmd_ID_auto_indent_line_at_cursor = 1; diff --git a/opengl/4ed_opengl_defines.h b/opengl/4ed_opengl_defines.h index b3ba33ef..03de2224 100644 --- a/opengl/4ed_opengl_defines.h +++ b/opengl/4ed_opengl_defines.h @@ -216,7 +216,6 @@ typedef ptrdiff_t GLsizeiptr; typedef ptrdiff_t GLintptr; #endif -#if OS_LINUX typedef void GL_Debug_Function(GLenum src, GLenum type, GLuint id, @@ -224,15 +223,6 @@ typedef void GL_Debug_Function(GLenum src, GLsizei length, const GLchar* message, const void *user_data); -#else -typedef void GL_Debug_Function(GLenum src, - GLenum type, - GLuint id, - GLenum severity, - GLsizei length, - GLchar *message, - void *user_data); -#endif typedef GL_Debug_Function *GLDEBUGPROC; diff --git a/opengl/4ed_opengl_render.cpp b/opengl/4ed_opengl_render.cpp index c68a0eb2..0713539d 100644 --- a/opengl/4ed_opengl_render.cpp +++ b/opengl/4ed_opengl_render.cpp @@ -54,28 +54,24 @@ gl__fill_texture(Texture_Kind texture_kind, u32 texture, Vec3_i32 p, Vec3_i32 di } internal void -#ifdef OS_LINUX gl__error_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char *message, const void *userParam){ -#else - gl__error_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, char *message, void *userParam){ -#endif - switch (id){ - case 131218: - { - // NOTE(allen): performance warning, do nothing. - }break; - - default: - { - InvalidPath; - }break; - } + switch (id){ + case 131218: + { + // NOTE(allen): performance warning, do nothing. + }break; + + default: + { + InvalidPath; + }break; } - - char *gl__header = R"foo(#version 130 +} + +char *gl__header = R"foo(#version 130 )foo"; - - char *gl__vertex = R"foo( + +char *gl__vertex = R"foo( uniform vec2 view_t; uniform mat2x2 view_m; in vec2 vertex_p; @@ -102,8 +98,8 @@ gl__error_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsiz xy = vertex_p; } )foo"; - - char *gl__fragment = R"foo( + +char *gl__fragment = R"foo( smooth in vec4 fragment_color; smooth in vec3 uvw; smooth in vec2 xy; @@ -136,226 +132,225 @@ gl__error_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsiz out_color = vec4(fragment_color.xyz, fragment_color.a*(sample_value + shape_value)); } )foo"; - + #define AttributeList(X) \ - X(vertex_p) \ - X(vertex_t) \ - X(vertex_c) \ - X(vertex_ht) - +X(vertex_p) \ +X(vertex_t) \ +X(vertex_c) \ +X(vertex_ht) + #define UniformList(X) \ - X(view_t) \ - X(view_m) \ - X(sampler) - - struct GL_Program{ - u32 program; +X(view_t) \ +X(view_m) \ +X(sampler) + +struct GL_Program{ + u32 program; #define GetAttributeLocation(N) i32 N; - AttributeList(GetAttributeLocation) + AttributeList(GetAttributeLocation) #undef GetAttributeLocation #define GetUniformLocation(N) i32 N; - UniformList(GetUniformLocation) + UniformList(GetUniformLocation) #undef GetUniformLocation - }; +}; + +internal GL_Program +gl__make_program(char *header, char *vertex, char *fragment){ + if (header == 0){ + header = ""; + } - internal GL_Program - gl__make_program(char *header, char *vertex, char *fragment){ - if (header == 0){ - header = ""; - } - - GLuint vertex_shader = glCreateShader(GL_VERTEX_SHADER); - GLchar *vertex_source_array[] = { header, vertex }; - glShaderSource(vertex_shader, ArrayCount(vertex_source_array), vertex_source_array, 0); - glCompileShader(vertex_shader); - - GLuint fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); - GLchar *fragment_source_array[] = { header, fragment }; - glShaderSource(fragment_shader, ArrayCount(fragment_source_array), fragment_source_array, 0); - glCompileShader(fragment_shader); - - GLuint program = glCreateProgram(); - glAttachShader(program, vertex_shader); - glAttachShader(program, fragment_shader); - glLinkProgram(program); - glValidateProgram(program); - - GLint success = false; - glGetProgramiv(program, GL_LINK_STATUS, &success); - if (!success){ - GLsizei ignore = 0; - char vertex_errors[KB(4)]; - char fragment_errors[KB(4)]; - char program_errors[KB(4)]; - glGetShaderInfoLog(vertex_shader, sizeof(vertex_errors), &ignore, vertex_errors); - glGetShaderInfoLog(fragment_shader, sizeof(fragment_errors), &ignore, fragment_errors); - glGetProgramInfoLog(program, sizeof(program_errors), &ignore, program_errors); + GLuint vertex_shader = glCreateShader(GL_VERTEX_SHADER); + GLchar *vertex_source_array[] = { header, vertex }; + glShaderSource(vertex_shader, ArrayCount(vertex_source_array), vertex_source_array, 0); + glCompileShader(vertex_shader); + + GLuint fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); + GLchar *fragment_source_array[] = { header, fragment }; + glShaderSource(fragment_shader, ArrayCount(fragment_source_array), fragment_source_array, 0); + glCompileShader(fragment_shader); + + GLuint program = glCreateProgram(); + glAttachShader(program, vertex_shader); + glAttachShader(program, fragment_shader); + glLinkProgram(program); + glValidateProgram(program); + + GLint success = false; + glGetProgramiv(program, GL_LINK_STATUS, &success); + if (!success){ + GLsizei ignore = 0; + char vertex_errors[KB(4)]; + char fragment_errors[KB(4)]; + char program_errors[KB(4)]; + glGetShaderInfoLog(vertex_shader, sizeof(vertex_errors), &ignore, vertex_errors); + glGetShaderInfoLog(fragment_shader, sizeof(fragment_errors), &ignore, fragment_errors); + glGetProgramInfoLog(program, sizeof(program_errors), &ignore, program_errors); #if SHIP_MODE - os_popup_error("Error", "Shader compilation failed."); + os_popup_error("Error", "Shader compilation failed."); #endif - InvalidPath; - } - - glDeleteShader(vertex_shader); - glDeleteShader(fragment_shader); - - GL_Program result = {}; - result.program = program; + InvalidPath; + } + + glDeleteShader(vertex_shader); + glDeleteShader(fragment_shader); + + GL_Program result = {}; + result.program = program; #define GetAttributeLocation(N) result.N = glGetAttribLocation(program, #N); - AttributeList(GetAttributeLocation) + AttributeList(GetAttributeLocation) #undef GetAttributeLocation #define GetUniformLocation(N) result.N = glGetUniformLocation(program, #N); - UniformList(GetUniformLocation) + UniformList(GetUniformLocation) #undef GetUniformLocation - return(result); - } - + return(result); +} + #define GLOffsetStruct(p,m) ((void*)(OffsetOfMemberStruct(p,m))) #define GLOffset(S,m) ((void*)(OffsetOfMember(S,m))) + +internal void +gl_render(Render_Target *t){ + Font_Set *font_set = (Font_Set*)t->font_set; - internal void - gl_render(Render_Target *t){ - Font_Set *font_set = (Font_Set*)t->font_set; + local_persist b32 first_opengl_call = true; + local_persist u32 attribute_buffer = 0; + local_persist GL_Program gpu_program = {}; + + if (first_opengl_call){ + first_opengl_call = false; - local_persist b32 first_opengl_call = true; - local_persist u32 attribute_buffer = 0; - local_persist GL_Program gpu_program = {}; - - if (first_opengl_call){ - first_opengl_call = false; - #if !SHIP_MODE - glEnable(GL_DEBUG_OUTPUT); - glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); - if (glDebugMessageControl){ - glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_NOTIFICATION, 0, 0, false); - glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_LOW, 0, 0, false); - glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, 0, 0, true); - glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, 0, true); - } - - if (glDebugMessageCallback){ - glDebugMessageCallback(gl__error_callback, 0); - } + glEnable(GL_DEBUG_OUTPUT); + glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); + if (glDebugMessageControl){ + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_NOTIFICATION, 0, 0, false); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_LOW, 0, 0, false); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, 0, 0, true); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, 0, true); + } + + if (glDebugMessageCallback){ + glDebugMessageCallback(gl__error_callback, 0); + } #endif - - //////////////////////////////// - - GLuint dummy_vao = 0; - glGenVertexArrays(1, &dummy_vao); - glBindVertexArray(dummy_vao); - - //////////////////////////////// - - glGenBuffers(1, &attribute_buffer); - glBindBuffer(GL_ARRAY_BUFFER, attribute_buffer); - - //////////////////////////////// - - glEnable(GL_SCISSOR_TEST); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - //////////////////////////////// - - gpu_program = gl__make_program(gl__header, gl__vertex, gl__fragment); - glUseProgram(gpu_program.program); - - //////////////////////////////// - - { - t->fallback_texture_id = gl__get_texture(V3i32(2, 2, 1), TextureKind_Mono); - u8 white_block[] = { 0xFF, 0xFF, 0xFF, 0xFF, }; - gl__fill_texture(TextureKind_Mono, 0, V3i32(0, 0, 0), V3i32(2, 2, 1), white_block); - } + + //////////////////////////////// + + GLuint dummy_vao = 0; + glGenVertexArrays(1, &dummy_vao); + glBindVertexArray(dummy_vao); + + //////////////////////////////// + + glGenBuffers(1, &attribute_buffer); + glBindBuffer(GL_ARRAY_BUFFER, attribute_buffer); + + //////////////////////////////// + + glEnable(GL_SCISSOR_TEST); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + //////////////////////////////// + + gpu_program = gl__make_program(gl__header, gl__vertex, gl__fragment); + glUseProgram(gpu_program.program); + + //////////////////////////////// + + { + t->fallback_texture_id = gl__get_texture(V3i32(2, 2, 1), TextureKind_Mono); + u8 white_block[] = { 0xFF, 0xFF, 0xFF, 0xFF, }; + gl__fill_texture(TextureKind_Mono, 0, V3i32(0, 0, 0), V3i32(2, 2, 1), white_block); } - - i32 width = t->width; - i32 height = t->height; - - glViewport(0, 0, width, height); - glScissor(0, 0, width, height); - glClearColor(1.f, 0.f, 1.f, 1.f); - glClear(GL_COLOR_BUFFER_BIT); - - glBindTexture(GL_TEXTURE_2D, 0); - t->bound_texture = 0; - - for (Render_Free_Texture *free_texture = t->free_texture_first; - free_texture != 0; - free_texture = free_texture->next){ - glDeleteTextures(1, &free_texture->tex_id); - } - t->free_texture_first = 0; - t->free_texture_last = 0; - - for (Render_Group *group = t->group_first; - group != 0; - group = group->next){ - Rect_i32 box = Ri32(group->clip_box); - - Rect_i32 scissor_box = { - box.x0, height - box.y1, box.x1 - box.x0, box.y1 - box.y0, - }; - scissor_box.x0 = clamp_bot(0, scissor_box.x0); - scissor_box.y0 = clamp_bot(0, scissor_box.y0); - scissor_box.x1 = clamp_bot(0, scissor_box.x1); - scissor_box.y1 = clamp_bot(0, scissor_box.y1); - glScissor(scissor_box.x0, scissor_box.y0, scissor_box.x1, scissor_box.y1); - - i32 vertex_count = group->vertex_list.vertex_count; - if (vertex_count > 0){ - Face *face = font_set_face_from_id(font_set, group->face_id); - if (face != 0){ - gl__bind_texture(t, face->texture); - } - else{ - gl__bind_any_texture(t); - } - - glBufferData(GL_ARRAY_BUFFER, vertex_count*sizeof(Render_Vertex), 0, GL_STREAM_DRAW); - i32 cursor = 0; - for (Render_Vertex_Array_Node *node = group->vertex_list.first; - node != 0; - node = node->next){ - i32 size = node->vertex_count*sizeof(*node->vertices); - glBufferSubData(GL_ARRAY_BUFFER, cursor, size, node->vertices); - cursor += size; - } - - glEnableVertexAttribArray(gpu_program.vertex_p); - glEnableVertexAttribArray(gpu_program.vertex_t); - glEnableVertexAttribArray(gpu_program.vertex_c); - glEnableVertexAttribArray(gpu_program.vertex_ht); - - glVertexAttribPointer(gpu_program.vertex_p, 2, GL_FLOAT, true, sizeof(Render_Vertex), - GLOffset(Render_Vertex, xy)); - glVertexAttribPointer(gpu_program.vertex_t, 3, GL_FLOAT, true, sizeof(Render_Vertex), - GLOffset(Render_Vertex, uvw)); - glVertexAttribIPointer(gpu_program.vertex_c, 1, GL_UNSIGNED_INT, sizeof(Render_Vertex), - GLOffset(Render_Vertex, color)); - glVertexAttribPointer(gpu_program.vertex_ht, 1, GL_FLOAT, true, sizeof(Render_Vertex), - GLOffset(Render_Vertex, half_thickness)); - - glUniform2f(gpu_program.view_t, width/2.f, height/2.f); - f32 m[4] = { - 2.f/width, 0.f, - 0.f, -2.f/height, - }; - glUniformMatrix2fv(gpu_program.view_m, 1, GL_FALSE, m); - glUniform1i(gpu_program.sampler, 0); - - glDrawArrays(GL_TRIANGLES, 0, vertex_count); - glDisableVertexAttribArray(gpu_program.vertex_p); - glDisableVertexAttribArray(gpu_program.vertex_t); - glDisableVertexAttribArray(gpu_program.vertex_c); - glDisableVertexAttribArray(gpu_program.vertex_ht); - } - } - - glFlush(); } - // BOTTOM + i32 width = t->width; + i32 height = t->height; - \ No newline at end of file + glViewport(0, 0, width, height); + glScissor(0, 0, width, height); + glClearColor(1.f, 0.f, 1.f, 1.f); + glClear(GL_COLOR_BUFFER_BIT); + + glBindTexture(GL_TEXTURE_2D, 0); + t->bound_texture = 0; + + for (Render_Free_Texture *free_texture = t->free_texture_first; + free_texture != 0; + free_texture = free_texture->next){ + glDeleteTextures(1, &free_texture->tex_id); + } + t->free_texture_first = 0; + t->free_texture_last = 0; + + for (Render_Group *group = t->group_first; + group != 0; + group = group->next){ + Rect_i32 box = Ri32(group->clip_box); + + Rect_i32 scissor_box = { + box.x0, height - box.y1, box.x1 - box.x0, box.y1 - box.y0, + }; + scissor_box.x0 = clamp_bot(0, scissor_box.x0); + scissor_box.y0 = clamp_bot(0, scissor_box.y0); + scissor_box.x1 = clamp_bot(0, scissor_box.x1); + scissor_box.y1 = clamp_bot(0, scissor_box.y1); + glScissor(scissor_box.x0, scissor_box.y0, scissor_box.x1, scissor_box.y1); + + i32 vertex_count = group->vertex_list.vertex_count; + if (vertex_count > 0){ + Face *face = font_set_face_from_id(font_set, group->face_id); + if (face != 0){ + gl__bind_texture(t, face->texture); + } + else{ + gl__bind_any_texture(t); + } + + glBufferData(GL_ARRAY_BUFFER, vertex_count*sizeof(Render_Vertex), 0, GL_STREAM_DRAW); + i32 cursor = 0; + for (Render_Vertex_Array_Node *node = group->vertex_list.first; + node != 0; + node = node->next){ + i32 size = node->vertex_count*sizeof(*node->vertices); + glBufferSubData(GL_ARRAY_BUFFER, cursor, size, node->vertices); + cursor += size; + } + + glEnableVertexAttribArray(gpu_program.vertex_p); + glEnableVertexAttribArray(gpu_program.vertex_t); + glEnableVertexAttribArray(gpu_program.vertex_c); + glEnableVertexAttribArray(gpu_program.vertex_ht); + + glVertexAttribPointer(gpu_program.vertex_p, 2, GL_FLOAT, true, sizeof(Render_Vertex), + GLOffset(Render_Vertex, xy)); + glVertexAttribPointer(gpu_program.vertex_t, 3, GL_FLOAT, true, sizeof(Render_Vertex), + GLOffset(Render_Vertex, uvw)); + glVertexAttribIPointer(gpu_program.vertex_c, 1, GL_UNSIGNED_INT, sizeof(Render_Vertex), + GLOffset(Render_Vertex, color)); + glVertexAttribPointer(gpu_program.vertex_ht, 1, GL_FLOAT, true, sizeof(Render_Vertex), + GLOffset(Render_Vertex, half_thickness)); + + glUniform2f(gpu_program.view_t, width/2.f, height/2.f); + f32 m[4] = { + 2.f/width, 0.f, + 0.f, -2.f/height, + }; + glUniformMatrix2fv(gpu_program.view_m, 1, GL_FALSE, m); + glUniform1i(gpu_program.sampler, 0); + + glDrawArrays(GL_TRIANGLES, 0, vertex_count); + glDisableVertexAttribArray(gpu_program.vertex_p); + glDisableVertexAttribArray(gpu_program.vertex_t); + glDisableVertexAttribArray(gpu_program.vertex_c); + glDisableVertexAttribArray(gpu_program.vertex_ht); + } + } + + glFlush(); +} + +// BOTTOM + From 0a29e6df6a5ff50d0f9e53c26c96d9f59a8fd0e9 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Tue, 3 Mar 2020 16:57:40 -0800 Subject: [PATCH 03/10] More robust footer panel manipulator functions --- custom/4coder_default_framework.cpp | 30 +- custom/generated/command_metadata.h | 484 ++++++++++++++-------------- custom/metadata_generator | Bin 0 -> 490048 bytes 3 files changed, 257 insertions(+), 257 deletions(-) create mode 100755 custom/metadata_generator diff --git a/custom/4coder_default_framework.cpp b/custom/4coder_default_framework.cpp index dc5daa24..cd494599 100644 --- a/custom/4coder_default_framework.cpp +++ b/custom/4coder_default_framework.cpp @@ -103,15 +103,15 @@ open_footer_panel(Application_Links *app, View_ID view){ function void close_build_footer_panel(Application_Links *app){ - if (build_footer_panel_view_id != 0){ + if (view_exists(app, build_footer_panel_view_id)){ view_close(app, build_footer_panel_view_id); - build_footer_panel_view_id = 0; } + build_footer_panel_view_id = 0; } function View_ID open_build_footer_panel(Application_Links *app){ - if (build_footer_panel_view_id == 0){ + if (!view_exists(app, build_footer_panel_view_id)){ View_ID view = get_active_view(app, Access_Always); build_footer_panel_view_id = open_footer_panel(app, view); view_set_active(app, view); @@ -497,18 +497,18 @@ function void default_4coder_initialize(Application_Links *app, String_Const_u8_Array file_names, i32 override_font_size, b32 override_hinting){ #define M \ - "Welcome to " VERSION "\n" \ - "If you're new to 4coder there is a built in tutorial\n" \ - "Use the key combination [ X Alt ] (on mac [ X Control ])\n" \ - "Type in 'hms_demo_tutorial' and press enter\n" \ - "\n" \ - "Direct bug reports and feature requests to https://github.com/4coder-editor/4coder/issues\n" \ - "\n" \ - "Other questions and discussion can be directed to editor@4coder.net or 4coder.handmade.network\n" \ - "\n" \ - "The change log can be found in CHANGES.txt\n" \ - "\n" - print_message(app, string_u8_litexpr(M)); +"Welcome to " VERSION "\n" \ +"If you're new to 4coder there is a built in tutorial\n" \ +"Use the key combination [ X Alt ] (on mac [ X Control ])\n" \ +"Type in 'hms_demo_tutorial' and press enter\n" \ +"\n" \ +"Direct bug reports and feature requests to https://github.com/4coder-editor/4coder/issues\n" \ +"\n" \ +"Other questions and discussion can be directed to editor@4coder.net or 4coder.handmade.network\n" \ +"\n" \ +"The change log can be found in CHANGES.txt\n" \ +"\n" + print_message(app, string_u8_litexpr(M)); #undef M load_config_and_apply(app, global_config_arena, &global_config, override_font_size, override_hinting); diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index 01209b1f..e424f1d4 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -264,248 +264,248 @@ i32 source_name_len; i32 line_number; }; static Command_Metadata fcoder_metacmd_table[242] = { -{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 409 }, -{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 413 }, -{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 423 }, -{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 404 }, -{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 154 }, -{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 96 }, -{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 647 }, -{ PROC_LINKS(begin_clipboard_collection_mode, 0), true, "begin_clipboard_collection_mode", 31, "Allows the user to copy multiple strings from other applications before switching to 4coder and pasting them all.", 113, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 68 }, -{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "c:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 159 }, -{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "c:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 122 }, -{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 197 }, -{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 284 }, -{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 290 }, -{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "c:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 180 }, -{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 636 }, -{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 480 }, -{ PROC_LINKS(clear_clipboard, 0), false, "clear_clipboard", 15, "Clears the history of the clipboard", 35, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 216 }, -{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 233 }, -{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 223 }, -{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 243 }, -{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 255 }, -{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 7 }, -{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 843 }, -{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "c:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 174 }, -{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 655 }, -{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "c:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 190 }, -{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 761 }, -{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 125 }, -{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 149 }, -{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 107 }, -{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 124 }, -{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "c:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 175 }, -{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 116 }, -{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 738 }, -{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1897 }, -{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "c:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 }, -{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "c:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 23 }, -{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "c:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 51 }, -{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 162 }, -{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 79 }, -{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 112 }, -{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1323 }, -{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1495 }, -{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 134 }, -{ PROC_LINKS(display_key_codes, 0), false, "display_key_codes", 17, "Example of input handling loop", 30, "c:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 90 }, -{ PROC_LINKS(display_text_input, 0), false, "display_text_input", 18, "Example of to_writable and leave_current_input_unhandled", 56, "c:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 134 }, -{ PROC_LINKS(double_backspace, 0), false, "double_backspace", 16, "Example of history group helpers", 32, "c:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 10 }, -{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1481 }, -{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "c:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 22 }, -{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "c:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 7 }, -{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 825 }, -{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2224 }, -{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2232 }, -{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 525 }, -{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 542 }, -{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 348 }, -{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 375 }, -{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 833 }, -{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 464 }, -{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 494 }, -{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 481 }, -{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 511 }, -{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 685 }, -{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 671 }, -{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 869 }, -{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 70 }, -{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 564 }, -{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "c:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 581 }, -{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 727 }, -{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 520 }, -{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 661 }, -{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 715 }, -{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 612 }, -{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 510 }, -{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "c:\\4ed\\code\\custom\\4coder_code_index_listers.cpp", 48, 12 }, -{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "c:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 54 }, -{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "c:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 77 }, -{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "c:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 41 }, -{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1641 }, -{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 9 }, -{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 211 }, -{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "c:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 295 }, -{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), true, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "c:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 301 }, -{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "c:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 267 }, -{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), true, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "c:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 277 }, -{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 165 }, -{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 177 }, -{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 189 }, -{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 195 }, -{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 201 }, -{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 207 }, -{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 213 }, -{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 221 }, -{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 171 }, -{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 183 }, -{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 863 }, -{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "c:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1627 }, -{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 457 }, -{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 469 }, -{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1435 }, -{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 44 }, -{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 237 }, -{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 }, -{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 29 }, -{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 231 }, -{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "c:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 243 }, -{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 780 }, -{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 265 }, -{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 336 }, -{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 348 }, -{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 354 }, -{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 407 }, -{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 431 }, -{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 419 }, -{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 437 }, -{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 514 }, -{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 528 }, -{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 486 }, -{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 471 }, -{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 500 }, -{ PROC_LINKS(move_line_down, 0), false, "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1475 }, -{ PROC_LINKS(move_line_up, 0), false, "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1469 }, -{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 445 }, -{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 507 }, -{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 521 }, -{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 479 }, -{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 463 }, -{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 493 }, -{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 330 }, -{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 342 }, -{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 401 }, -{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 425 }, -{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 413 }, -{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 364 }, -{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 373 }, -{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 849 }, -{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 855 }, -{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1560 }, -{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1891 }, -{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 46 }, -{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 62 }, -{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 54 }, -{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1592 }, -{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 310 }, -{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 300 }, -{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 372 }, -{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 364 }, -{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 127 }, -{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 202 }, -{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 161 }, -{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "c:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 209 }, -{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 106 }, -{ PROC_LINKS(play_with_a_counter, 0), false, "play_with_a_counter", 19, "Example of query bar", 20, "c:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 29 }, -{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "c:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 226 }, -{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "c:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 219 }, -{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "c:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 212 }, -{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "c:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 886 }, -{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1290 }, -{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 871 }, -{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 897 }, -{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1251 }, -{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1272 }, -{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1288 }, -{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1730 }, -{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1815 }, -{ PROC_LINKS(rename_file_query, 0), false, "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1400 }, -{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1659 }, -{ PROC_LINKS(replace_in_all_buffers, 0), false, "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1161 }, -{ PROC_LINKS(replace_in_buffer, 0), false, "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1152 }, -{ PROC_LINKS(replace_in_range, 0), false, "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1143 }, -{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1084 }, -{ PROC_LINKS(reverse_search_identifier, 0), false, "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1096 }, -{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1649 }, -{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 382 }, -{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1367 }, -{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1078 }, -{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1090 }, -{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2212 }, -{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2200 }, -{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2218 }, -{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "c:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2206 }, -{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 537 }, -{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 57 }, -{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 66 }, -{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 82 }, -{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 99 }, -{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 27 }, -{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "c:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 39 }, -{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 125 }, -{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 112 }, -{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 86 }, -{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "c:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 99 }, -{ PROC_LINKS(set_face_size, 0), false, "set_face_size", 13, "Set face size of the face used by the current buffer.", 53, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 707 }, -{ PROC_LINKS(set_face_size_this_buffer, 0), false, "set_face_size_this_buffer", 25, "Set face size of the face used by the current buffer; if any other buffers are using the same face a new face is created so that only this buffer is effected", 157, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 749 }, -{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 115 }, -{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 427 }, -{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 421 }, -{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1238 }, -{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1250 }, -{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1244 }, -{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "c:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1231 }, -{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 678 }, -{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 664 }, -{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "c:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 994 }, -{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 179 }, -{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 187 }, -{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 237 }, -{ PROC_LINKS(string_repeat, 0), false, "string_repeat", 13, "Example of query_user_string and query_user_number", 50, "c:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 176 }, -{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 403 }, -{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1617 }, -{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "c:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 785 }, -{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 563 }, -{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 550 }, -{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 692 }, -{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 701 }, -{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 451 }, -{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 439 }, -{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 433 }, -{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 806 }, -{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 812 }, -{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 415 }, -{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "c:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 445 }, -{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 797 }, -{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles virtual whitespace for all files.", 41, "c:\\4ed\\code\\custom\\4coder_code_index.cpp", 40, 1176 }, -{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 20 }, -{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "c:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 34 }, -{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 137 }, -{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1717 }, -{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1744 }, -{ PROC_LINKS(view_buffer_other_panel, 0), false, "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1605 }, -{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "c:\\4ed\\code\\custom\\4coder_jump_lister.cpp", 41, 59 }, -{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 395 }, -{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "c:\\4ed\\code\\custom\\4coder_search.cpp", 36, 642 }, -{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 94 }, -{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 82 }, -{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 88 }, -{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 67 }, -{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "c:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 433 }, -{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 59 }, -{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 76 }, -{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "c:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 73 }, -{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "c:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 100 }, +{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "../code/custom/4coder_default_framework.cpp", 43, 409 }, +{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "../code/custom/4coder_auto_indent.cpp", 37, 413 }, +{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "../code/custom/4coder_auto_indent.cpp", 37, 423 }, +{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "../code/custom/4coder_auto_indent.cpp", 37, 404 }, +{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "../code/custom/4coder_base_commands.cpp", 39, 154 }, +{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "../code/custom/4coder_base_commands.cpp", 39, 96 }, +{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "../code/custom/4coder_base_commands.cpp", 39, 647 }, +{ PROC_LINKS(begin_clipboard_collection_mode, 0), true, "begin_clipboard_collection_mode", 31, "Allows the user to copy multiple strings from other applications before switching to 4coder and pasting them all.", 113, "../code/custom/4coder_clipboard.cpp", 35, 68 }, +{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "../code/custom/4coder_build_commands.cpp", 40, 159 }, +{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "../code/custom/4coder_build_commands.cpp", 40, 122 }, +{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "../code/custom/4coder_base_commands.cpp", 39, 197 }, +{ 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, "../code/custom/4coder_default_framework.cpp", 43, 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, "../code/custom/4coder_default_framework.cpp", 43, 290 }, +{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "../code/custom/4coder_build_commands.cpp", 40, 180 }, +{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "../code/custom/4coder_base_commands.cpp", 39, 636 }, +{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "../code/custom/4coder_default_framework.cpp", 43, 480 }, +{ PROC_LINKS(clear_clipboard, 0), false, "clear_clipboard", 15, "Clears the history of the clipboard", 35, "../code/custom/4coder_clipboard.cpp", 35, 216 }, +{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "../code/custom/4coder_base_commands.cpp", 39, 233 }, +{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "../code/custom/4coder_base_commands.cpp", 39, 223 }, +{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "../code/custom/4coder_base_commands.cpp", 39, 243 }, +{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "../code/custom/4coder_base_commands.cpp", 39, 255 }, +{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "../code/custom/4coder_clipboard.cpp", 35, 7 }, +{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "../code/custom/4coder_project_commands.cpp", 42, 843 }, +{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "../code/custom/4coder_build_commands.cpp", 40, 174 }, +{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "../code/custom/4coder_base_commands.cpp", 39, 655 }, +{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "../code/custom/4coder_docs.cpp", 30, 190 }, +{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "../code/custom/4coder_lists.cpp", 31, 761 }, +{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "../code/custom/4coder_combined_write_commands.cpp", 49, 125 }, +{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "../code/custom/4coder_combined_write_commands.cpp", 49, 149 }, +{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "../code/custom/4coder_clipboard.cpp", 35, 107 }, +{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "../code/custom/4coder_base_commands.cpp", 39, 124 }, +{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "../code/custom/4coder_docs.cpp", 30, 175 }, +{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "../code/custom/4coder_clipboard.cpp", 35, 116 }, +{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "../code/custom/4coder_base_commands.cpp", 39, 738 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1897 }, +{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "../code/custom/4coder_default_hooks.cpp", 39, 7 }, +{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "../code/custom/4coder_default_hooks.cpp", 39, 23 }, +{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "../code/custom/4coder_default_hooks.cpp", 39, 51 }, +{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "../code/custom/4coder_base_commands.cpp", 39, 162 }, +{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "../code/custom/4coder_base_commands.cpp", 39, 79 }, +{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "../code/custom/4coder_scope_commands.cpp", 40, 112 }, +{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "../code/custom/4coder_base_commands.cpp", 39, 1323 }, +{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "../code/custom/4coder_base_commands.cpp", 39, 1495 }, +{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "../code/custom/4coder_base_commands.cpp", 39, 134 }, +{ PROC_LINKS(display_key_codes, 0), false, "display_key_codes", 17, "Example of input handling loop", 30, "../code/custom/4coder_examples.cpp", 34, 90 }, +{ PROC_LINKS(display_text_input, 0), false, "display_text_input", 18, "Example of to_writable and leave_current_input_unhandled", 56, "../code/custom/4coder_examples.cpp", 34, 134 }, +{ PROC_LINKS(double_backspace, 0), false, "double_backspace", 16, "Example of history group helpers", 32, "../code/custom/4coder_examples.cpp", 34, 10 }, +{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "../code/custom/4coder_base_commands.cpp", 39, 1481 }, +{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "../code/custom/4coder_cli_command.cpp", 37, 22 }, +{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "../code/custom/4coder_cli_command.cpp", 37, 7 }, +{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "../code/custom/4coder_base_commands.cpp", 39, 825 }, +{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "../code/custom/4coder_helper.cpp", 32, 2224 }, +{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "../code/custom/4coder_helper.cpp", 32, 2232 }, +{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "../code/custom/4coder_jump_sticky.cpp", 37, 525 }, +{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "../code/custom/4coder_jump_sticky.cpp", 37, 542 }, +{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "../code/custom/4coder_jump_sticky.cpp", 37, 348 }, +{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "../code/custom/4coder_jump_sticky.cpp", 37, 375 }, +{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "../code/custom/4coder_base_commands.cpp", 39, 833 }, +{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "../code/custom/4coder_jump_sticky.cpp", 37, 464 }, +{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "../code/custom/4coder_jump_sticky.cpp", 37, 494 }, +{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "../code/custom/4coder_jump_sticky.cpp", 37, 481 }, +{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "../code/custom/4coder_jump_sticky.cpp", 37, 511 }, +{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "../code/custom/4coder_base_commands.cpp", 39, 685 }, +{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "../code/custom/4coder_base_commands.cpp", 39, 671 }, +{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "../code/custom/4coder_tutorial.cpp", 34, 869 }, +{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "../code/custom/4coder_combined_write_commands.cpp", 49, 70 }, +{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "../code/custom/4coder_jump_sticky.cpp", 37, 564 }, +{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "../code/custom/4coder_jump_sticky.cpp", 37, 581 }, +{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "../code/custom/4coder_base_commands.cpp", 39, 727 }, +{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "../code/custom/4coder_lists.cpp", 31, 520 }, +{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "../code/custom/4coder_lists.cpp", 31, 661 }, +{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "../code/custom/4coder_lists.cpp", 31, 715 }, +{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "../code/custom/4coder_lists.cpp", 31, 612 }, +{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "../code/custom/4coder_lists.cpp", 31, 510 }, +{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "../code/custom/4coder_code_index_listers.cpp", 44, 12 }, +{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "../code/custom/4coder_keyboard_macro.cpp", 40, 54 }, +{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "../code/custom/4coder_keyboard_macro.cpp", 40, 77 }, +{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "../code/custom/4coder_keyboard_macro.cpp", 40, 41 }, +{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "../code/custom/4coder_base_commands.cpp", 39, 1641 }, +{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "../code/custom/4coder_tutorial.cpp", 34, 9 }, +{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "../code/custom/4coder_base_commands.cpp", 39, 211 }, +{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "../code/custom/4coder_function_list.cpp", 39, 295 }, +{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), true, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "../code/custom/4coder_function_list.cpp", 39, 301 }, +{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "../code/custom/4coder_function_list.cpp", 39, 267 }, +{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), true, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "../code/custom/4coder_function_list.cpp", 39, 277 }, +{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "../code/custom/4coder_search.cpp", 32, 165 }, +{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "../code/custom/4coder_search.cpp", 32, 177 }, +{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "../code/custom/4coder_search.cpp", 32, 189 }, +{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "../code/custom/4coder_search.cpp", 32, 195 }, +{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "../code/custom/4coder_search.cpp", 32, 201 }, +{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "../code/custom/4coder_search.cpp", 32, 207 }, +{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "../code/custom/4coder_search.cpp", 32, 213 }, +{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "../code/custom/4coder_search.cpp", 32, 221 }, +{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "../code/custom/4coder_search.cpp", 32, 171 }, +{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "../code/custom/4coder_search.cpp", 32, 183 }, +{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "../code/custom/4coder_project_commands.cpp", 42, 863 }, +{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "../code/custom/4coder_config.cpp", 32, 1627 }, +{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "../code/custom/4coder_default_framework.cpp", 43, 457 }, +{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "../code/custom/4coder_default_framework.cpp", 43, 469 }, +{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "../code/custom/4coder_base_commands.cpp", 39, 1435 }, +{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "../code/custom/4coder_miblo_numbers.cpp", 39, 44 }, +{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 237 }, +{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 249 }, +{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "../code/custom/4coder_miblo_numbers.cpp", 39, 29 }, +{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 231 }, +{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 243 }, +{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "../code/custom/4coder_base_commands.cpp", 39, 780 }, +{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "../code/custom/4coder_base_commands.cpp", 39, 265 }, +{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "../code/custom/4coder_base_commands.cpp", 39, 336 }, +{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "../code/custom/4coder_base_commands.cpp", 39, 348 }, +{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "../code/custom/4coder_base_commands.cpp", 39, 354 }, +{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "../code/custom/4coder_base_commands.cpp", 39, 407 }, +{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "../code/custom/4coder_base_commands.cpp", 39, 431 }, +{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "../code/custom/4coder_base_commands.cpp", 39, 419 }, +{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "../code/custom/4coder_base_commands.cpp", 39, 437 }, +{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "../code/custom/4coder_base_commands.cpp", 39, 514 }, +{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "../code/custom/4coder_base_commands.cpp", 39, 528 }, +{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "../code/custom/4coder_base_commands.cpp", 39, 486 }, +{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "../code/custom/4coder_base_commands.cpp", 39, 471 }, +{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "../code/custom/4coder_base_commands.cpp", 39, 500 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1475 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1469 }, +{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "../code/custom/4coder_base_commands.cpp", 39, 445 }, +{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "../code/custom/4coder_base_commands.cpp", 39, 507 }, +{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "../code/custom/4coder_base_commands.cpp", 39, 521 }, +{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "../code/custom/4coder_base_commands.cpp", 39, 479 }, +{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "../code/custom/4coder_base_commands.cpp", 39, 463 }, +{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "../code/custom/4coder_base_commands.cpp", 39, 493 }, +{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "../code/custom/4coder_base_commands.cpp", 39, 330 }, +{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "../code/custom/4coder_base_commands.cpp", 39, 342 }, +{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "../code/custom/4coder_base_commands.cpp", 39, 401 }, +{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "../code/custom/4coder_base_commands.cpp", 39, 425 }, +{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "../code/custom/4coder_base_commands.cpp", 39, 413 }, +{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "../code/custom/4coder_clipboard.cpp", 35, 364 }, +{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "../code/custom/4coder_clipboard.cpp", 35, 373 }, +{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "../code/custom/4coder_project_commands.cpp", 42, 849 }, +{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "../code/custom/4coder_project_commands.cpp", 42, 855 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1560 }, +{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "../code/custom/4coder_base_commands.cpp", 39, 1891 }, +{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "../code/custom/4coder_combined_write_commands.cpp", 49, 46 }, +{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "../code/custom/4coder_combined_write_commands.cpp", 49, 62 }, +{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "../code/custom/4coder_combined_write_commands.cpp", 49, 54 }, +{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "../code/custom/4coder_base_commands.cpp", 39, 1592 }, +{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "../code/custom/4coder_default_framework.cpp", 43, 310 }, +{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "../code/custom/4coder_default_framework.cpp", 43, 300 }, +{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "../code/custom/4coder_base_commands.cpp", 39, 372 }, +{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "../code/custom/4coder_base_commands.cpp", 39, 364 }, +{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "../code/custom/4coder_clipboard.cpp", 35, 127 }, +{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "../code/custom/4coder_clipboard.cpp", 35, 202 }, +{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "../code/custom/4coder_clipboard.cpp", 35, 161 }, +{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "../code/custom/4coder_clipboard.cpp", 35, 209 }, +{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "../code/custom/4coder_scope_commands.cpp", 40, 106 }, +{ PROC_LINKS(play_with_a_counter, 0), false, "play_with_a_counter", 19, "Example of query bar", 20, "../code/custom/4coder_examples.cpp", 34, 29 }, +{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "../code/custom/4coder_profile.cpp", 33, 226 }, +{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "../code/custom/4coder_profile.cpp", 33, 219 }, +{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "../code/custom/4coder_profile.cpp", 33, 212 }, +{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "../code/custom/4coder_profile_inspect.cpp", 41, 886 }, +{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "../code/custom/4coder_project_commands.cpp", 42, 1290 }, +{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "../code/custom/4coder_project_commands.cpp", 42, 871 }, +{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "../code/custom/4coder_project_commands.cpp", 42, 897 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1251 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1272 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1288 }, +{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "../code/custom/4coder_base_commands.cpp", 39, 1730 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1815 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1400 }, +{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "../code/custom/4coder_base_commands.cpp", 39, 1659 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1161 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1152 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1143 }, +{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "../code/custom/4coder_base_commands.cpp", 39, 1084 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1096 }, +{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "../code/custom/4coder_base_commands.cpp", 39, 1649 }, +{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "../code/custom/4coder_default_framework.cpp", 43, 382 }, +{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "../code/custom/4coder_base_commands.cpp", 39, 1367 }, +{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "../code/custom/4coder_base_commands.cpp", 39, 1078 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1090 }, +{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "../code/custom/4coder_helper.cpp", 32, 2212 }, +{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "../code/custom/4coder_helper.cpp", 32, 2200 }, +{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "../code/custom/4coder_helper.cpp", 32, 2218 }, +{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "../code/custom/4coder_helper.cpp", 32, 2206 }, +{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "../code/custom/4coder_base_commands.cpp", 39, 537 }, +{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "../code/custom/4coder_scope_commands.cpp", 40, 57 }, +{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "../code/custom/4coder_scope_commands.cpp", 40, 66 }, +{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "../code/custom/4coder_scope_commands.cpp", 40, 82 }, +{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "../code/custom/4coder_scope_commands.cpp", 40, 99 }, +{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "../code/custom/4coder_scope_commands.cpp", 40, 27 }, +{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "../code/custom/4coder_scope_commands.cpp", 40, 39 }, +{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "../code/custom/4coder_eol.cpp", 29, 125 }, +{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "../code/custom/4coder_eol.cpp", 29, 112 }, +{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "../code/custom/4coder_eol.cpp", 29, 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, "../code/custom/4coder_eol.cpp", 29, 99 }, +{ PROC_LINKS(set_face_size, 0), false, "set_face_size", 13, "Set face size of the face used by the current buffer.", 53, "../code/custom/4coder_base_commands.cpp", 39, 707 }, +{ PROC_LINKS(set_face_size_this_buffer, 0), false, "set_face_size_this_buffer", 25, "Set face size of the face used by the current buffer; if any other buffers are using the same face a new face is created so that only this buffer is effected", 157, "../code/custom/4coder_base_commands.cpp", 39, 749 }, +{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "../code/custom/4coder_base_commands.cpp", 39, 115 }, +{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "../code/custom/4coder_default_framework.cpp", 43, 427 }, +{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "../code/custom/4coder_default_framework.cpp", 43, 421 }, +{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "../code/custom/4coder_project_commands.cpp", 42, 1238 }, +{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "../code/custom/4coder_project_commands.cpp", 42, 1250 }, +{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "../code/custom/4coder_project_commands.cpp", 42, 1244 }, +{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "../code/custom/4coder_project_commands.cpp", 42, 1231 }, +{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "../code/custom/4coder_base_commands.cpp", 39, 678 }, +{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "../code/custom/4coder_base_commands.cpp", 39, 664 }, +{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "../code/custom/4coder_log_parser.cpp", 36, 994 }, +{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "../code/custom/4coder_base_commands.cpp", 39, 179 }, +{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "../code/custom/4coder_base_commands.cpp", 39, 187 }, +{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "../code/custom/4coder_combined_write_commands.cpp", 49, 237 }, +{ PROC_LINKS(string_repeat, 0), false, "string_repeat", 13, "Example of query_user_string and query_user_number", 50, "../code/custom/4coder_examples.cpp", 34, 176 }, +{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "../code/custom/4coder_default_framework.cpp", 43, 403 }, +{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "../code/custom/4coder_base_commands.cpp", 39, 1617 }, +{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "../code/custom/4coder_lists.cpp", 31, 785 }, +{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "../code/custom/4coder_base_commands.cpp", 39, 563 }, +{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "../code/custom/4coder_base_commands.cpp", 39, 550 }, +{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "../code/custom/4coder_base_commands.cpp", 39, 692 }, +{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "../code/custom/4coder_base_commands.cpp", 39, 701 }, +{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "../code/custom/4coder_default_framework.cpp", 43, 451 }, +{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "../code/custom/4coder_default_framework.cpp", 43, 439 }, +{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "../code/custom/4coder_default_framework.cpp", 43, 433 }, +{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "../code/custom/4coder_base_commands.cpp", 39, 806 }, +{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "../code/custom/4coder_base_commands.cpp", 39, 812 }, +{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "../code/custom/4coder_default_framework.cpp", 43, 415 }, +{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "../code/custom/4coder_default_framework.cpp", 43, 445 }, +{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "../code/custom/4coder_base_commands.cpp", 39, 797 }, +{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles virtual whitespace for all files.", 41, "../code/custom/4coder_code_index.cpp", 36, 1176 }, +{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "../code/custom/4coder_tutorial.cpp", 34, 20 }, +{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "../code/custom/4coder_tutorial.cpp", 34, 34 }, +{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "../code/custom/4coder_combined_write_commands.cpp", 49, 137 }, +{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "../code/custom/4coder_base_commands.cpp", 39, 1717 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1744 }, +{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1605 }, +{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "../code/custom/4coder_jump_lister.cpp", 37, 59 }, +{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "../code/custom/4coder_search.cpp", 32, 395 }, +{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "../code/custom/4coder_search.cpp", 32, 642 }, +{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "../code/custom/4coder_combined_write_commands.cpp", 49, 94 }, +{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "../code/custom/4coder_combined_write_commands.cpp", 49, 82 }, +{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "../code/custom/4coder_combined_write_commands.cpp", 49, 88 }, +{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "../code/custom/4coder_base_commands.cpp", 39, 67 }, +{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "../code/custom/4coder_auto_indent.cpp", 37, 433 }, +{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "../code/custom/4coder_base_commands.cpp", 39, 59 }, +{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "../code/custom/4coder_combined_write_commands.cpp", 49, 76 }, +{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "../code/custom/4coder_base_commands.cpp", 39, 73 }, +{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "../code/custom/4coder_combined_write_commands.cpp", 49, 100 }, }; static i32 fcoder_metacmd_ID_allow_mouse = 0; static i32 fcoder_metacmd_ID_auto_indent_line_at_cursor = 1; diff --git a/custom/metadata_generator b/custom/metadata_generator new file mode 100755 index 0000000000000000000000000000000000000000..3722d42ed473b5c9893b6d299d6e33fad24e266c GIT binary patch literal 490048 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�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 N2EyNt2%=)|{{yq@rLh12 literal 0 HcmV?d00001 From bc2b834f3bda0b3d844683d3547a4f503359db68 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Tue, 3 Mar 2020 17:37:55 -0800 Subject: [PATCH 04/10] Whole screen render hook --- 4ed.cpp | 4 ++++ 4ed_api_implementation.cpp | 4 ++++ 4ed_app_models.h | 1 + custom/4coder_config.cpp | 2 +- custom/4coder_default_hooks.cpp | 15 +++++++++++++++ custom/4coder_types.h | 4 ++++ custom/bin/buildsuper_x64-linux.sh | 2 +- custom/metadata_generator | Bin 490048 -> 0 bytes ship_files/changes.txt | 3 ++- 9 files changed, 32 insertions(+), 3 deletions(-) delete mode 100755 custom/metadata_generator diff --git a/4ed.cpp b/4ed.cpp index a4efdd4f..17f37875 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -748,6 +748,10 @@ App_Step_Sig(app_step){ } } + if (models->whole_screen_render_caller != 0){ + models->whole_screen_render_caller(&app, frame); + } + models->in_render_mode = false; end_render_section(target); } diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index 10539c10..aa5efd9f 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -2234,6 +2234,10 @@ set_custom_hook(Application_Links *app, Hook_ID hook_id, Void_Func *func_ptr){ { models->render_caller = (Render_Caller_Function*)func_ptr; }break; + case HookID_WholeScreenRenderCaller: + { + models->whole_screen_render_caller = (Whole_Screen_Render_Caller_Function*)func_ptr; + }break; case HookID_BufferNameResolver: { models->buffer_name_resolver = (Buffer_Name_Resolver_Function*)func_ptr; diff --git a/4ed_app_models.h b/4ed_app_models.h index 71ea3254..daf24b34 100644 --- a/4ed_app_models.h +++ b/4ed_app_models.h @@ -62,6 +62,7 @@ struct Models{ Tick_Function *tick; Render_Caller_Function *render_caller; + Whole_Screen_Render_Caller_Function *whole_screen_render_caller; Delta_Rule_Function *delta_rule; u64 delta_rule_memory_size; diff --git a/custom/4coder_config.cpp b/custom/4coder_config.cpp index aef8a748..d2134b86 100644 --- a/custom/4coder_config.cpp +++ b/custom/4coder_config.cpp @@ -1367,7 +1367,7 @@ config_parse__file_name(Application_Links *app, Arena *arena, char *file_name, C if (data.data != 0){ parsed = config_parse__data(app, arena, SCu8(file_name), SCu8(data), config); - success = true; + success = true; } } if (!success){ diff --git a/custom/4coder_default_hooks.cpp b/custom/4coder_default_hooks.cpp index 16d8f335..4756c8e2 100644 --- a/custom/4coder_default_hooks.cpp +++ b/custom/4coder_default_hooks.cpp @@ -474,6 +474,20 @@ default_render_caller(Application_Links *app, Frame_Info frame_info, View_ID vie draw_set_clip(app, prev_clip); } +function void +default_whole_screen_render_caller(Application_Links *app, Frame_Info frame_info){ +#if 0 + Rect_f32 region = global_get_screen_rectangle(app); + Vec2_f32 center = rect_center(region); + + Face_ID face_id = get_face_id(app, 0); + Scratch_Block scratch(app); + draw_string_oriented(app, face_id, finalize_color(defcolor_text_default, 0), + SCu8("Hello, World!"), center, + GlyphFlag_Rotate90, V2f32(0.f, 1.f)); +#endif +} + HOOK_SIG(default_view_adjust){ // NOTE(allen): Called whenever the view layout/sizes have been modified, // including by full window resize. @@ -1022,6 +1036,7 @@ set_all_default_hooks(Application_Links *app){ set_custom_hook(app, HookID_ViewEventHandler, default_view_input_handler); set_custom_hook(app, HookID_Tick, default_tick); set_custom_hook(app, HookID_RenderCaller, default_render_caller); + set_custom_hook(app, HookID_WholeScreenRenderCaller, default_whole_screen_render_caller); #if 0 set_custom_hook(app, HookID_DeltaRule, original_delta); set_custom_hook_memory_size(app, HookID_DeltaRule, diff --git a/custom/4coder_types.h b/custom/4coder_types.h index e979bd8c..0898ad28 100644 --- a/custom/4coder_types.h +++ b/custom/4coder_types.h @@ -638,6 +638,7 @@ typedef i32 Hook_ID; enum{ HookID_Tick, HookID_RenderCaller, + HookID_WholeScreenRenderCaller, HookID_DeltaRule, HookID_BufferViewerUpdate, HookID_ViewEventHandler, @@ -695,6 +696,9 @@ typedef void Tick_Function(Application_Links *app, Frame_Info frame_info); api(custom) typedef void Render_Caller_Function(Application_Links *app, Frame_Info frame_info, View_ID view); +api(custom) +typedef void Whole_Screen_Render_Caller_Function(Application_Links *app, Frame_Info frame_info); + api(custom) typedef u32 Layout_Item_Flag; enum{ diff --git a/custom/bin/buildsuper_x64-linux.sh b/custom/bin/buildsuper_x64-linux.sh index 7b975b16..d6f0a00e 100755 --- a/custom/bin/buildsuper_x64-linux.sh +++ b/custom/bin/buildsuper_x64-linux.sh @@ -13,7 +13,7 @@ SOURCE="$1" if [ -z "$SOURCE" ]; then SOURCE="$(readlink -f "$CODE_HOME/4coder_default_bindings.cpp")" fi - +echo SOURCE = $SOURCE opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_LINUX=1 -DOS_WINDOWS=0 -DOS_MAC=1" arch=-m64 diff --git a/custom/metadata_generator b/custom/metadata_generator deleted file mode 100755 index 3722d42ed473b5c9893b6d299d6e33fad24e266c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 490048 zcmeEv3w&HvwfCg7kU~pRgiBO}D55PWgon_INO+74-sUr+qXk=99t}larOlLrrc?r& zF;*iY)^|bgwJKh!VjB_LX(?pDDg*XnzybqSJZS<9rIZ0H`Tqa4_c^oAo^xg<#Ex{NJdb+P`^?+WoE8<@Ula>rEY_0QT=8x}5v#a>(Ct`dQG=_#YB;B;x)? zBK305dgQhH4)whIj>84+{^m5H8SfA<{?y9_*<-!5u9w#J+~0c5zx(UTN7?xQC-rmt z_e?zFKlhhq`LFr!trzpU_f=KV{=K-Kr6Ljc*RA())FYpj{;Smm&(ZY4^b%9*inzbj zBmW(9`K1@0c)~H4U;O^dFTFCc`2CBgp7{O~PdIwvRYxBuauYwxp7np?EFK{mtqOU5 zpoZ~z?dtTZ+kbP_F%KW}nddehxZk!P&Hvd?SoU4`-)%Qs;-*$$yqxlmuehec+oFGe z0_1=qDC`sngWzWYPI~sg=Ku&Q|4ImaYzY3=kn#tGl)pZt{2?Lb6Cv=|L-1@4fnOT} z|9J>}T?l-B2tU6HDSvoK`M-yhKQ*NMv=I1_A@DUJ`0opWe<}nItvtw14gX`62k}PxUqu+@Bl*KQ08%{(w)4yfu<~K*c{dUPa)~3tKO~=%}OU!zV^&&%We} ztFD~Au=Rokt+QuGW}p4Zrr8(IT`>2OOBc4zUGT}KGcLdC%DJDs;KIx2s%ODZW?!;+ z@$C6?7c9K$$_p;PwDsEAiyBDi3Pt0hs}{CIuDI&rmX^rEORsF*4&$r;GYxq(N?&`V2g1dU|vf!?sms{|-#=pXX zU#Q_LE%=ohzRH5Tdh52}i*@;w1@F-Cv;|+T;Ta45Qw{I6;CE|y)`D-+aL0l_so^;b z{-TEGE%?~`Rl7%i=eP4Z4X?J~@6+&F3x1l0*IDpSXn4H^Z_)6{7W`TbZ?NFYG<>QB zzfHp%E%<5;k6G~hG`!h@dv*mMd9ejQRKu5A@MAQ* z!-Aiw;awK|Tn%4t!LQQr6&Cy^4PR-&Z`JTs7X0TL-fh8C8lJM?k7{_@f)8kT#)7}5 z;k_1od|K%(Yr*R@+_B*G8lJP@lQleV!5cI@a*yBsr)qe$1#i^wS_>Z2@Hz{Aj)vD; z@EICD*@9oF;SCo23JsrX!53+GqXqwhhQ}=UO&Z>8!8dCMt1S3mG`!n_ zKc(R*3%*su(-yp6!!s5{8cUkbSYWQ*s{!I;E zVZpzn;VUip3JqUn!GEgZ-4=Y6hNmp}Y7I|Y@O2uVvEcV=c&`P2K*O^Z{7)M0Sn$mn zp0nUjXn5X&|6Ri)YyI}`Xn3^+e@??|E%=KXUT48~YIwZ`e^tXLTkyz(%6}Uy_&ypw z)q?M*;f)r2l7`1D_@Nr!Y{4gM_zVkvf`-qr;Ad+1JPZCY4WDnp;~Ku$f}f}1OD*^X z8s1^SFV*la3x1V`FSp=}HGG8y|AL0EwBQ{YzRH5%tl`}j{5u++vfw|~@U#X0xrS#f z_%AiQ*MfIzc-Dfi({RUv->>003;st9&s*^S)$qtVzx_X<;nf!WSq-nX;4f%+odtKt zq4gI06KF5Nu(D0=e{6`wzWx;={;j1k8Dh*Fr@ZV~9#)7ZY@T>*D zPs4K-`~eNG-Qd^HpESJQf99t^%lHZ!<#L5t%lFB;0J5?d<$N$;Y%&}WDW1K;0+p{vEWlRJZr%} ztl>Ee9@Fspjeb2eYj}eNpP}K67W{k-Z?@nUYxq(NeyN6cS@0`0e1!#1Xn4kgU#H<& z3x2(Z=PY=ahDYx6%ez9u8!Y&LYxo=s{tFFXYQcZ0;awKITf;LJJf-3F_xt(DXn2DK ze@w$0E%+7SC z!1wi_kx0ydV*%0o*KEKic+f~>h5^Tdp!aW%0pH()Mk4bJc#Q#{Z@{^p=>A)5z$dvt z{4O=%=K6bw0e_28zRQ4f&x-qRxdA`O1>$#w0sjvJzS4jnY`|9;@HzwDZNT4Zz*7eN zZ3aATz`ZR@c%Cuf?=;HC+6Ss*o#UQM9v+F^lxiI_n2EJ-tiCrg_<_ee4v!2Tu?2r? z4r{~}@8_{*Uv?1xj(CLkG~K?8+&{>BnrvT6?lRToEALKnvr*DPaAIE!|OkbDWAIW=~O5akse;4m*B7O7a{%yRcY4pvJ z`vZ7Sljv)f`+a#&Q|N1y`!Tq0>B7DIJNCJ=lMkOCOFk28-F~&on#0b7A1^!Q>$e>qiN}_WOX4>+Egwt%z4fgym0zI@O=aS& z!EDRXHHUH6KqNBjURp`v9`!%YddoiWQ9(21b<~foe|@i5G8bF#oEodTKlbqJt#v?n ztwuP32*dC#J>{Li6GN zd^k5kum^;?SEw_(D;dp`x4cu0$CRr?k<-f;S?nv4d@Y&li0|r%=4)2R@qctzRi@pk z>WJ>DS>3d&W-Wf#Ci35Y<@ID{%KBtl;L%-5MWyPperjg|7&lJlwOOYn8Q;|cscP1M z;u=j6fL%3fKyn>^*BK<$g9__Mcil~UX?Z1)Pi9)C5T#eMZC5gp?~LXlUR87#6#MO0 z+E5CGaIGa$W#TBN^Z=%CDL4hCSvZz#gF7X1vCe2N2Bfj7Xdc)3*tcV^wB=&SOl*n* zDBOkOaaPI4st}}63yR>a(1^VPbaq8k%|mGts=a&@3{m41C^%fN6=<@&_DZSB^((re ziUD4`wqLQU3QhU2GhUi>y)(wW80%hCyBD>%Xom%Ob^&*6K>PKgxic5XI>#Qt{Yh-O zV^e55fTLObX7KCa7uRw8Hsvpl9X~;ewvKa-ebw{rWSav-tbt$HPNx_|mIk4WAs0J2 znqRm-3gqqwo%U$1s^96-X4F1V8%x6QUW_Fll=;M6It{}22h|JZaZcg&r6Wz)b2vx{3k+3D$FuXPxb%fFP z7I5ckR!638XdMp>j63}kgkz<|hdQHMJ=gd2(i6?HWTmvuRJ0;Bt24MFIXLx{4arP0 zy0yJ+YozsH{#~+9HwEY)*Nv7Rgf;pY`4!aXF(Rgy%ydMz5VIB&qC&%#{Y_E?<6ERL zV1j?QREG$gjBY}yOgprTWMaQ=iq;c3^fnPN6MI+_@bsFCEjy61I|X7&rw0&-4q;PE zl1=Z7>ECKoi)&JQ1(Je8D`9-JZX!cL^k`*HXMB^QHn#s+i<&lJNVZQ1Ipjbz5g)nx z!pMnuu%~oP5v(qVr$S3!dXgkOBiZCkPXenlzHDsD285C<2<2i`>tme~H+q?PNgo22 z{}WxlZCAnNLoiNHHqnN%v6?%@zKPRuZ)oVf?hS}H;eR)fv5RZVpPdBr566-loTw3A z+6NjD7}3n&D;bBCr>7^^tH_k14mDBN4p4~QT|5Qs8QK7NfiR-TlzYPhX%t9NcJzi) zCP_8m35qI-JO61)Jk`%dQwBOD4j*CCyofpwmv%`Ly4<7P8Q%;5JV1D$ZnxMhA@LJ4K2XZdFTAnj}J2+ z*Q+dKpd;#7j3c)LbSHkCj_51Mw|3fH--&)iFCuuo))5~_KG+dQm92sJwkv!u;b&_{ zbO+FGN3eMrw>v;Z;tUd2+&{7^5*wev_0EpX`1=YVvGvc?#*P>qj11xlJcc?s!R?2C z`l6we`eZu!YDd#R^2LrOry~wZ*+6b~C~im|WhiSFTy#?7e(eA0$ByJ0$?gC+FVfnY zD8UrW!S7DN<4|F!|V92vrJk`YC;NeFU zw%Vf8YZ%Y_ zQZCAE7|Gc3eZq$_fH5d&o6=KX&Du2Xgu_2UU0aE6c?VtxL1&dL-TC~Q*a?_oGMzM9}N}xdzag`nJQ|D zA$lY|eHM4|9SDW>2!%|6c5~8p%d=(l zDfTa|vaM#F#LMLpna+Rtjb;3=fA=$9GP2Sjwt{^)nBsoLjyIP3clfyXoVnr{tjtoy z;B|!VL+0T{n) zVJsi3X+Dm`7MK!aHBnCtK;7s=?KN&ikyeZrK;R0{!Gko^tga63o6(?r$? zW_qpU8S(jXm7_kUa@1Zo0s9Nl$#`amPK-FB3>o*GRhACM>8gu+Tm{o!<*`=}h04=e zLp6{_MLwi#wp1APbT)BLO9J-9q0nga(eO-|@d=@{SF6G%$YcUTulGrlU_AIfiA=bA zpUP&xj2VK8mHFCJhL}MEr_xbm329k5-%orf1B?=#9a4~xDDu7ljByKNnJCgUfI)p{ z0@DduIPqUGO<=P))`!qjd zrQ;drz%aK3ZfYh!EJn~xK)3S{<~@9PhSfd?d3r5S*poTNAP5c2W$7yKDm9G zw|%(XCb!SfBWAG2s6vVCK66#$~XfW zLc;{1yTwF@4iesso~|u}6(K|gM3%JfbJLawbjA^AQpB5)h2xF9+{~0an&xFMr~w(f zZ7d-91`U3jKEULl0io_}&Jo{_<>2Yb9<{no7mNd0lP~bW4Y8jFR7ft{8RsGuFSm;H zy}VS?Z{cO=n$pdi4TUyH4un5Vw#PG?A+3_hUbXVfyCx)DwOs#EAf;jm&#+1jbQN*6oi--{GxpVJ{>44KB4}%Vq=tW_5HY3E44p(&ux5*}ZY{>@l2%wdns#>Vo=4&zCq)m&bvAj1yi(tU~#wPPUgqehJNh$_?|7%SqZ(bAGf)to%gJWFK^ z-95a1iW1PZm=;BoO+}H+OrQ#Ue43i9Bt7N6D>EZ|P5}Z_)TjRFMq*~ZVaW$pn#Iqv z3X_qfDu9uuD!?cvs;BrkER(1z>PD)n07kN^07km106_`sy_-zk1XFesM~7(qDXWGA zC9RkGFo$W~OIkH1BW=|XBXM=<@6putwm+B}8dW(839PF}I1!?gKjW*fgaMVp5{;Y2 zZB;ia$FflV@j*kT<{_uC3bRgR)s0SN)lE^#RG0zxixxHcXc$g1s|f0JR^8}?R^8~7 zR^3n+S?um9Qt|H}F!WI}spVW@Z4*KvU)sS2CLPFXn-BvPNGUulsr`gWX;hM0+0oR5 zSwKZzQd~)6k<==Xq`1hjYq>v4fr?tF!ld?=w5zBQC$+=loBEci5+t=sl;I?`f9xrr z)QZUjrnSbCvWcxx)}MgBXgsk}(Cy}B2r6{nDTeBma%W?`i#Hz^+?jY8UMqHHde_)aNGd^Mz)>wv_! zsP=%bwn}_mkd@N$<;&p2w+JhG3np+$#gkw~cdtN#RVBVI$V}HbA~X`;2m=ig-`jny_kLrHvvV%EUxrzk<6N?Q8d}~ z65mE9zMKRp@M&ri*=dra>*p~OY0X}6CK9{W2WsxzpwnLOE->fq-{1ynceWR=Z;lx2 zH+@+7a#;fV+XHybdfeeE`m}e4tLQV{-7`plxN)0Pz0Ztns`sDkO?jE6QQm-829Vds zw~7`e!}snaz4z`$F}J_K$5}FuIp{!@kulZ0E@SG>WlY^|gR1(ylKlbc;)^L$6U^wL z2&~=sUPc5K3?Sl;C_;u3-kppiygM00cy~b~h%fl*Q9h0lY=Um0PciVkkmqZ_wg6Gy z<3~+VShX0no={h)3p45z4;6w&Cx2My(~?+nFxy#~<3y zSDUyBF0c$ZO=B(#iyIi8`W83*8@E5;qZmuRn#?8fHYeVM!FZ~OBC&6hC4kN93hVB@ z>Z)jbQy78zDc<`#Ltl9J2D&fgOc~D62a<*QvGPE&xYA^Ch1Hxb3RW1ESTFmW;}PTt zYO1VNt5x@xC}%7=3-1rdQmF90`i^g6(m8{5*5 zp>T!fTzOYWy{m&tP09ctMV`FY?Iaj^3K8=6km_h z%E6VanCaV%ybV_@nlptU1^2IbZ^kTCOrAJ+d&&L94akJ_fIlb_v(z zsDLF+5XHX_rhSc%SM(iu=3DL>6f&nB=und~k}52Z`N8%i!Y~nVam+$I2J9NkZljEt zOJf#6d&+?Mn$m^4IOb`?o-`=v$sOw#<_sk78#bQ8oPj~y9(?aM65fn~Pe5zJK(AVM zM$migP}ZVX${NQSpdzN#VrOO5IvcA^RMuRh2*2tpS!;kM2&0+?p`*tK3}EM4$~VAJ$y_3a*eqI!F?f{fHkq=S|5Mtvb2)P)NzQh7Sq`U`(!+3BE!tsMwA zMH!)lJUn?_KPj0M4i$~0hOE>E3WF|%QrY1sQjj#!#@AdbQ$%EJDk#ZF6d6JbIx3SV z4iO8pM26&ohJb&poj@ZHx_RiR;b(?uBePeOyz~sw!cGtkP!Yp!f@qYH^{>vxu?9$0 zLsnQ)1%@9@%+F9u>dWTAQlRm3pNF)Z?VPzTQXY-VxizLu<8V{ zfTPjS0A8j-UXZ{+jPcizwC$R@A@LSm590b?xb{wM5R;+UdIydsb;fbF z=Z+Fmp!eY}@Enc}#Y6%2SbL{p;KW93IYHI8cgA;Mx>lhBVy6T;drNnYvkI7&$#PSq zhw%sxBXDbsiq(No++3&SVlCHaaj+NuH05v{?sfI}lXyE}y9nDs*aX6Y+s*5J{d=(? zYMzsCIUd~xcC{YT$bX5NG@G(SeF9M*L)Z?&wh~rgLD+H#tAqu;TM;^n=gF73of-;@ zTcl$oeTJWOft>>B0z0CSfpY8=`|kw!lJ?)$U^S{{_4#j|;lD(n{Wk z@ZSSHZv#5zZK3EY^WQ@~jKHn^SFsBJ4Z$7ezi*{gA4sb%`0qHt!qC7^QgoJK`tSQm zZnEEr3M>?ys1g>2=)b3t^oRVU3+xm~7uYHIZwYqT(WBs`Cc(fzg56mfhd3mt@z1zu0S9WP7n};9kieOBN3UOiMHtx-Q#egf}ccStS^Wl82r_aOD*&SL9kCRm`B{w0Whj9IG49l@LPp~U{7;P zIWRNgaw`R|EEE*6gj*6+1L(^?Hh%HRzpa^V9_vQt`-Zzp_yQJ;`u=09iI99e;EVoS}_t1 zDp>ABlw+%Li6Q57n+5BwjQP(DuDv(E&Rt(K`9bG%n86S(AW1KInTV@?;A?ZCXSS0N5l6bm15oerzdMO7zY z!?0BKs@Nuc-FMxV$7J17PwjuAzV6}ebr)EG#MPkS9V5M(X7+S=qhV|8V7}@ zI{BKp6v9xi1A@dmFbv?uEL_BS5yeH67fl_`?GGDmPBV71aC8X{<-P~l2&)^&?spvU|gk5FbyS!~$4J@h-SZo|Ebdfr48 z%S)BeGr3;{+});9v6li$#qvInt&Xn(A-F(-OS?E}I>}x1OJ?CB&I@DJ*V)%pD+4K2 zi4}eAPohkzZB{zfRHll)syq(jei-Dz247mOfc)zF3^kgV(1tcyAoY3j)60uI8SxsY zz*1w_av_Iy>eHt&5{nL8C*MGk%hq@3=QBBvtX^_pSABl*fz`$-`8?(t$Ym=>8VBKL zuBk!gaSfM^i3qs=S`i!%7G8y`OzbGCLEfB8>+3w=Ih?1yc%SVt9P814Pz;ln4{zh~ z@#8lTv|)SA3^XMMnr@+VaiIrM=z;Cvc6-fvaCDVwL@N5G1@RikNufJbXKb^C1huAsV&C?PQ3M=iORq!k?DeEWp?Sk=718{RS1g34$~qvd ziprSHK*(llsm~}8!E?@AfJgBOm9U5^FG=r?Mf-@@{hTEzWTpzbtACu}^AuZO{3=h* zoWx)Zk``8ucrV%m-tVR& z&Q?X`$O7@ABJ0aAQeIs5wIh7)1^dBdQ~n0$A=t`IshV4GYKz&ufqx0V6$q7p7Mq|l zmCPZOP&gi5%y-zA%)*7pBJQQ+7CZJ6l?9b#Tk)Q=P3xVyWJ((?uTz4{Ym)Q^UFo@_q$sXsQ7%O<3v&&@fm+p+- zg=bIM&zLblQ>y<2d32uY3k}F)5-VwOD`9%Pn7dNt7rZvoWoK&MA}3k`7KQ@{=(%9MIUXp^p$L%51F6Udt#V-99(tUTp3g4<3=Hwdbo^&uPz(X>Ehs z-}Gb6+g+LuzC&j$j>@1Y&WDt2gYY-*TOi&)Rw33WXY|jOB18fW1tA$XS6Ft-%WN-| z*#zW)<)@kDyI3-VKjYqGNKODpkSgY6FQiUpu6MqNu?n(zmfoactiB17VE`zp%H|;d zwrtJz@0DK@|DIu-=2Vfbkx5EA@l-IwiIeeen-I$Jmg2wO<$nu?4x0Z72LDhL9a~wZ z7~;5z^7!2K>u6%mp9}RiUm&`mxX!Wy`1cA7EVWD%6*|uZndR1w`@WPp7XfFct1YTh z5&WKdxZXM7>-=2MCiqW?AGNn_8dvkBEcikY#>acq2X&T>yZQJrkZ^!V&_PMwhaM68)cZ3mZ?p8om89eUBA-k7RHEDPGZn zyBLoT^{)Mo1y64mpMvZRZh9^3)YZ3}`IIKAo(A?SW$dnDna}PJ;&_~8@zGV-ye~6D z4wj@5JWq}ev`xUT!0?32)W|mcuLo@YiW@qCwgD*_QiMvrRF**+-`iFzUc^H*WZ;5; z9r8Z)6(b?DuwpWMn`G+Q8fs)?^>l0!J}|#;Auz;lXVHPYbiBt>Q0WeWviqX6zS*j; zbs9?K3-L)TH=7mzpd@q z(LgfLVTcgGNkIg6fNC50&rA$rz%VRCaSqRxYr}o}E{}?=P$zP-l2zHFdC65WC1Vh%erh?u_UTN9HFuTt#d_1U08QJjtWGj^d7Xm<@j!8sCc#r>GcIMsD;k zGBdm6pc1*m;t(PcyV+p=HuO@?SAFUjV-$4&D4#l)??Lqp%8Q&uKM@lv6@W|w|uQ% zG7iZ&AUM07QSVrMLWC(86odc$UH*r^;6_An(^x!rno)_mEK#J(rxhtQKpH2-XE0UM ztLGZ08cd&t=Ny=%*+6&^Dc;*ZR#m}j8DG}}^L#%kLog?VMC=}Zx`MesrnLap7VZ}$ zv2?c!@_U30SNo^V zLCUSno%8r88HLowu|sadqJr&kFo_YR^B>^a?Rk_Dxii>k4Bzl1x5VJx>t)&3T%0c!VNwOzW5-k%d*2!>0hl~NGBhcz=@qFqJOOtwQA}(w*sZBe_zk9 z`;BORT6D+fYZybLJFX9oH6=O^>MGj%d45V6%8d3FVJP2oC=?4k6xY~HXcVFj4jP#P z6vCz2;DksS-4U|Ei77R^NS~-75q=1w7GW5=s6`z^#iEAw3g{8kCuiiCr|2&Eu2y^7 zu1L+<{4lOD$!>gNUB^ZpAE(GSiIGT1-B^2DJ`zK1bo}@qN_2Z-0Q4u?L+Td_OCVxA zU=ZO7t~vq@OPDXD&~UpJ?aeE-8pnA7F?Me`z$a6CstRHZTP#$k93v7<<0vCu?Zj86 zb8=J7Bv&Y^9(qa8Ln@B`_m=}kSVL4SXg!A>4Gp4aW>koJd`P9=@|=lV`xjC$G_pAr z^9dAlLx^uG1`UG~KQPY24so0j%!&ikqPv(uFsGow$;(^8DJZf7S?NQUFIx)qXXx2U z_ac-y(w9pYkI;fn18{Wn@!k+OD~C>c)Npj#L~-f^?Gz>|y9RXQ@lN_bm5{N-fMKov zH`HAJXhSB>S*>XsYJR}AGZ$Xmg6wmcbyi&N)&f4a)$~*v`sbQ&6rSqP*WR`xl5o3A zy~-9C>G1XC_O>mN1iPlJbbd~Vy5aM)obckpRJN zS0^Izlm%a;tM8GRhW8QLYGfA>&XVJSp}YDgD&y0)P_{QrZ79wFz;fY;d89yjJ)I?1 zg}f7~VFH#WpMXyxZE>j|538e9W|(&}uSW%#q!%aq4*-lKhu#7VcZDJI2zj|7gcliO z43(G3V(9qOlyw&yFwk-}Uz7%Z(x82k=LX32)-U46;5pMQuAu{Z|62%jy+;EH(hZ|0 zojIwZ4M9QhF-Ry3K;(C9OxIWR*p?A#3g%*VOfjCQIS7nOjw%F&Xlie6>37|vt|L^d`>PB59`k;4MVD1J-(I}6OFI3`g+yf+@e?URQ4#A@}k$A$uI?Ou*3{>{W73G}2Re%rC) zopcnH6NT#a#NG6cU|^!iKqjeJ@3alq6TVk%1J>OIbh=r+ZG~x1QJ4G7L@3*mf;96i?E5y|L3d8*3TF5Z zq|moCZuU?!)l&&juyuV~V94Fu4KqY^FSQZy`pbO0LP_vbq&nuP-sF%D8%IAZUz*@{ z4W5CakL%~sN{)L(@iN8II|1XL>e$Y@iQln0af}GUhQ)J zg(Fa0RVxro+BZS{F_V+pQs%ttaf9celAbv~VwMbVQrj+4e=RUOY`gee7?M!OdRWcI z(}Qa6EN2{f&x&NFR+jc^y%(x?oK-qpKj`P4t5hhy8GoPneM*-&phSo z2w=PW93Lle_fj@m)K4O%&0ui}lWti~g(9KQAA3>2tps8~t3UdJGzleT*%jknM|xId zQ3T3NDu%)MrZ&@L1r(f)i<4OvN(xTwfZGa5^bpZMQ2Odcrf!EP5eXGZ*D2&f%FLe2oISbq2#J6mROTppnF)mu2Lu>3IX67ifkQp^?tH!;2E@KAS(=N|9 ztLHKaAde)^N_+Kt)pK~Enl8{^D)gRjQO_}m!V$kDP5Ky%SoDEaZNXLFaoplP*Yr^p z6BE!60w3atk<)e4|GQ!0yeOW8`1u8Jslp7)i1nx6Hum_l^{2l>={>jgN8iHtd%Wki z{*;n7dCz_N8;<;QisYZlQMYYFVlGf}e6#7fItPb2L^msY*{EI|lR@!jkIPM}m0=*N zm3m`6oJ+=Q8jaQZw^skw@mF*}L)a*%3eTca;+u^Ds#rH)Es3C}mYMd}oa#x?}HgrlT)b1^uI_-dS!m92N(#j!HSmg>dkxk#QiS z)XH=a!_M3w9c-RCA|1frW>(k=10fuoGa?R}w!j!^4|sk5VHul=ucVz%<3kt~S;x`; zbPM{eJt2I(%i{|xJXn}(&kwflk9WEfld#-}vk?aS zt8u~C(Yo+dt<9*COu_l`*M9vh$`VqPakNmBj#ya2ljWB@_AKJlzF02YC)OU#SM~n` ziuHCYjG#EyW|tipkyZkQHIWu_s7O2$MndYScZulxRhiC6p%&9smoc>jf>BI@;|O&1 z{+UfV8G^xs^NO{?gCqp$TPrjxH`cdIIlR@u#5&#*ys~Ec~1~|bjBW# zX4B zyx!QJ->c@vpW&|War|M&6WTej>Mv=(-_5_ih_#TktLXQaDVTS1r$)=5_%8)cm%a%@o zS)?<*k)E)To^Wo#6Z*6#d`>*!C-j6z3kJPHc>%hiB+eh{asF310>LW{M_46}@PqJr zW0Y+M*6Y7iTeMB=xKfo)2&r^oiAt^)`1A3XKOtT)qf#&6)DnjHQ`Am9zV*Q9j~+ra z^lLAL@plMc1CQxL=i0%*?51unTA=c-|R8C~BN90Xr{7(+k z`1dJclA*?be5p#KXZ-nQ+xY9QIH__JW_3(Cxxut;Zo6T6E|>@MPk z?&2}sT`ZLD;=AlF?)Qg%bQQ8;{}-ja<>ufz+e*~wzrcw2E)kt61@|ir0Tn)5!mZry zp@~V7m&rfcWP3=1@(`Fi1lvtD0&yj-L1&MgG6;^NOTeHIU(87MIh<9$8M+g z^7K7P?Mr)<+FMO(5@?E}8ium4#_;(=bna-bD4Vb@mOKr~|HpA11-8>RT@X%LmO^b!;BBR{lu{4BrJNFOClv$)`pG$)wRhvgsp+IJK~nyxN(q-$XYCM0gD=VqwjX~U6>%3ZTu+{&}Fv&ox|D9PN$m%zl1%j+TYZM5!`WMc$ zt-cX0>|4}TgMc�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
tFqMcD1o#MEIRZ=+A?FAfEM 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 N2EyNt2%=)|{{yq@rLh12 diff --git a/ship_files/changes.txt b/ship_files/changes.txt index 18c6edad..2c75b6d6 100644 --- a/ship_files/changes.txt +++ b/ship_files/changes.txt @@ -12,6 +12,7 @@ + Fix: never miss the most recent post to the clipboard on windows + Fix: command `load_theme_current_buffer` gaurds against destroying the active color palette when bad files are loaded + Fix: project deep copy routine copies strings in the whitelist and blacklist pattern arrays + + Fix: footer panel manipulation functions check if the view exists 4.1.3 + Unkillable buffer setting @@ -85,7 +86,7 @@ New in alpha 4.0.29: -Highlighting and marking API, supporting customizable line higlights, range highlights, cursors and marks -In config.4coder "use_line_highlight" enables the highlight at the cursor in the active view -In config.4coder "use_scope_highlight" enables background highlighting to distinguish scopes in code files --In config.4coder "use_paren_helper" enalbes distinct coloring for matching parentheses +-In config.4coder "use_paren_helper" enalbes distinct coloring for matching parentheses -In config.4coder "use_comment_keyword" enables special coloring for the strings 'TODO' and 'NOTE' anywhere they occur, in code or text -In config.4coder "mode" sets the editing mode "4coder" the default 4coder mode From 7933ec6bc90fc6ebae1c7defd190f42f75154b3e Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Tue, 3 Mar 2020 18:44:25 -0800 Subject: [PATCH 05/10] New keycodes; linux one time code execution; close file handle in save function --- 4ed_generate_keycodes.cpp | 13 +- bin/itchio_push_all.sh | 0 bin/itchio_push_linux-x86.sh | 0 bin/itchio_push_linux.sh | 0 bin/package-x86-linux.sh | 0 custom/bin/build_one_time.sh | 42 ++ custom/bin/buildsuper_x64-linux.sh | 4 +- custom/bin/buildsuper_x64-mac.sh | 2 + custom/bin/buildsuper_x86-linux.sh | 4 +- custom/generated/4coder_event_codes.h | 506 +++++++++++++++---------- platform_linux/linux_4ed.cpp | 4 +- platform_linux/linux_4ed_functions.cpp | 1 + project.4coder | 7 +- ship_files/changes.txt | 2 + 14 files changed, 377 insertions(+), 208 deletions(-) mode change 100644 => 100755 bin/itchio_push_all.sh mode change 100644 => 100755 bin/itchio_push_linux-x86.sh mode change 100644 => 100755 bin/itchio_push_linux.sh mode change 100644 => 100755 bin/package-x86-linux.sh create mode 100755 custom/bin/build_one_time.sh diff --git a/4ed_generate_keycodes.cpp b/4ed_generate_keycodes.cpp index 622da54b..b03a7583 100644 --- a/4ed_generate_keycodes.cpp +++ b/4ed_generate_keycodes.cpp @@ -123,9 +123,20 @@ make_key_list(Arena *arena){ add_code(arena, &list, string_u8_litexpr("Control")); add_code(arena, &list, string_u8_litexpr("Alt")); add_code(arena, &list, string_u8_litexpr("Command")); - for (u32 i = 1; i <= 16; i += 1){ + for (u32 i = 1; i <= 24; i += 1){ add_code(arena, &list, push_u8_stringf(arena, "F%d", i)); } + for (u32 i = '0'; i <= '9'; i += 1){ + add_code(arena, &list, push_u8_stringf(arena, "NumPad%c", i)); + } + add_code(arena, &list, string_u8_litexpr("NumPadStar")); + add_code(arena, &list, string_u8_litexpr("NumPadPlus")); + add_code(arena, &list, string_u8_litexpr("NumPadMinus")); + add_code(arena, &list, string_u8_litexpr("NumPadDot")); + add_code(arena, &list, string_u8_litexpr("NumPadSlash")); + for (i32 i = 0; i < 30; i += 1){ + add_code(arena, &list, push_u8_stringf(arena, "Ex%d", i)); + } return(list); } diff --git a/bin/itchio_push_all.sh b/bin/itchio_push_all.sh old mode 100644 new mode 100755 diff --git a/bin/itchio_push_linux-x86.sh b/bin/itchio_push_linux-x86.sh old mode 100644 new mode 100755 diff --git a/bin/itchio_push_linux.sh b/bin/itchio_push_linux.sh old mode 100644 new mode 100755 diff --git a/bin/package-x86-linux.sh b/bin/package-x86-linux.sh old mode 100644 new mode 100755 diff --git a/custom/bin/build_one_time.sh b/custom/bin/build_one_time.sh new file mode 100755 index 00000000..724c34f0 --- /dev/null +++ b/custom/bin/build_one_time.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# If any command errors, stop the script +set -e + +# Set up directories +ORIGINAL=$PWD +ME="$(readlink -f "$0")" +LOCATION="$(dirname "$ME")" +cd $LOCATION +cd .. +CUSTOM_ROOT=$PWD +cd $ORIGINAL + +target=$1 +if [ -z "$target" ] +then + echo error: no input file + exit 1 +fi + +full_target=$target +if [[ ${target:0:1} != "/" ]]; +then +full_target="$PWD/$target" +fi + +dst=$2 +if [[ $dst == "" ]]; +then +dst=. +fi + +debug=-g + +opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_LINUX=1 -DOS_WINDOWS=0 -DOS_MAC=0" + +pushd $dst +g++ -I"$CUSTOM_ROOT" $opts $full_target -o one_time +popd + + diff --git a/custom/bin/buildsuper_x64-linux.sh b/custom/bin/buildsuper_x64-linux.sh index d6f0a00e..d175b40a 100755 --- a/custom/bin/buildsuper_x64-linux.sh +++ b/custom/bin/buildsuper_x64-linux.sh @@ -15,9 +15,11 @@ if [ -z "$SOURCE" ]; then fi echo SOURCE = $SOURCE -opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_LINUX=1 -DOS_WINDOWS=0 -DOS_MAC=1" +opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_LINUX=1 -DOS_WINDOWS=0 -DOS_MAC=0" arch=-m64 +debug=-g + preproc_file=4coder_command_metadata.i meta_macros="-DMETA_PASS" g++ -I"$CODE_HOME" $meta_macros $arch $opts $debug -std=c++11 "$SOURCE" -E -o $preproc_file diff --git a/custom/bin/buildsuper_x64-mac.sh b/custom/bin/buildsuper_x64-mac.sh index 57a1f8cf..02aefcb2 100755 --- a/custom/bin/buildsuper_x64-mac.sh +++ b/custom/bin/buildsuper_x64-mac.sh @@ -18,6 +18,8 @@ fi opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_MAC=1 -DOS_WINDOWS=0 -DOS_LINUX=0" arch=-m64 +debug=-g + preproc_file=4coder_command_metadata.i meta_macros="-DMETA_PASS" clang++ -I"$CODE_HOME" $meta_macros $arch $opts $debug -std=c++11 "$SOURCE" -E -o $preproc_file diff --git a/custom/bin/buildsuper_x86-linux.sh b/custom/bin/buildsuper_x86-linux.sh index becc4c47..f635aebf 100755 --- a/custom/bin/buildsuper_x86-linux.sh +++ b/custom/bin/buildsuper_x86-linux.sh @@ -14,9 +14,11 @@ if [ -z "$SOURCE" ]; then SOURCE="$(readlink -f "$CODE_HOME/4coder_default_bindings.cpp")" fi -opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_LINUX=1 -DOS_WINDOWS=0 -DOS_MAC=1" +opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_LINUX=1 -DOS_WINDOWS=0 -DOS_MAC=0" arch=-m32 +debug=-g + preproc_file=4coder_command_metadata.i meta_macros="-DMETA_PASS" g++ -I"$CODE_HOME" $meta_macros $arch $opts $debug -std=c++11 "$SOURCE" -E -o $preproc_file diff --git a/custom/generated/4coder_event_codes.h b/custom/generated/4coder_event_codes.h index 633caf07..f94d29e7 100644 --- a/custom/generated/4coder_event_codes.h +++ b/custom/generated/4coder_event_codes.h @@ -1,212 +1,318 @@ enum{ - KeyCode_A = 1, - KeyCode_B = 2, - KeyCode_C = 3, - KeyCode_D = 4, - KeyCode_E = 5, - KeyCode_F = 6, - KeyCode_G = 7, - KeyCode_H = 8, - KeyCode_I = 9, - KeyCode_J = 10, - KeyCode_K = 11, - KeyCode_L = 12, - KeyCode_M = 13, - KeyCode_N = 14, - KeyCode_O = 15, - KeyCode_P = 16, - KeyCode_Q = 17, - KeyCode_R = 18, - KeyCode_S = 19, - KeyCode_T = 20, - KeyCode_U = 21, - KeyCode_V = 22, - KeyCode_W = 23, - KeyCode_X = 24, - KeyCode_Y = 25, - KeyCode_Z = 26, - KeyCode_0 = 27, - KeyCode_1 = 28, - KeyCode_2 = 29, - KeyCode_3 = 30, - KeyCode_4 = 31, - KeyCode_5 = 32, - KeyCode_6 = 33, - KeyCode_7 = 34, - KeyCode_8 = 35, - KeyCode_9 = 36, - KeyCode_Space = 37, - KeyCode_Tick = 38, - KeyCode_Minus = 39, - KeyCode_Equal = 40, - KeyCode_LeftBracket = 41, - KeyCode_RightBracket = 42, - KeyCode_Semicolon = 43, - KeyCode_Quote = 44, - KeyCode_Comma = 45, - KeyCode_Period = 46, - KeyCode_ForwardSlash = 47, - KeyCode_BackwardSlash = 48, - KeyCode_Tab = 49, - KeyCode_Escape = 50, - KeyCode_Pause = 51, - KeyCode_Up = 52, - KeyCode_Down = 53, - KeyCode_Left = 54, - KeyCode_Right = 55, - KeyCode_Backspace = 56, - KeyCode_Return = 57, - KeyCode_Delete = 58, - KeyCode_Insert = 59, - KeyCode_Home = 60, - KeyCode_End = 61, - KeyCode_PageUp = 62, - KeyCode_PageDown = 63, - KeyCode_CapsLock = 64, - KeyCode_NumLock = 65, - KeyCode_ScrollLock = 66, - KeyCode_Menu = 67, - KeyCode_Shift = 68, - KeyCode_Control = 69, - KeyCode_Alt = 70, - KeyCode_Command = 71, - KeyCode_F1 = 72, - KeyCode_F2 = 73, - KeyCode_F3 = 74, - KeyCode_F4 = 75, - KeyCode_F5 = 76, - KeyCode_F6 = 77, - KeyCode_F7 = 78, - KeyCode_F8 = 79, - KeyCode_F9 = 80, - KeyCode_F10 = 81, - KeyCode_F11 = 82, - KeyCode_F12 = 83, - KeyCode_F13 = 84, - KeyCode_F14 = 85, - KeyCode_F15 = 86, - KeyCode_F16 = 87, - KeyCode_COUNT = 88, +KeyCode_A = 1, +KeyCode_B = 2, +KeyCode_C = 3, +KeyCode_D = 4, +KeyCode_E = 5, +KeyCode_F = 6, +KeyCode_G = 7, +KeyCode_H = 8, +KeyCode_I = 9, +KeyCode_J = 10, +KeyCode_K = 11, +KeyCode_L = 12, +KeyCode_M = 13, +KeyCode_N = 14, +KeyCode_O = 15, +KeyCode_P = 16, +KeyCode_Q = 17, +KeyCode_R = 18, +KeyCode_S = 19, +KeyCode_T = 20, +KeyCode_U = 21, +KeyCode_V = 22, +KeyCode_W = 23, +KeyCode_X = 24, +KeyCode_Y = 25, +KeyCode_Z = 26, +KeyCode_0 = 27, +KeyCode_1 = 28, +KeyCode_2 = 29, +KeyCode_3 = 30, +KeyCode_4 = 31, +KeyCode_5 = 32, +KeyCode_6 = 33, +KeyCode_7 = 34, +KeyCode_8 = 35, +KeyCode_9 = 36, +KeyCode_Space = 37, +KeyCode_Tick = 38, +KeyCode_Minus = 39, +KeyCode_Equal = 40, +KeyCode_LeftBracket = 41, +KeyCode_RightBracket = 42, +KeyCode_Semicolon = 43, +KeyCode_Quote = 44, +KeyCode_Comma = 45, +KeyCode_Period = 46, +KeyCode_ForwardSlash = 47, +KeyCode_BackwardSlash = 48, +KeyCode_Tab = 49, +KeyCode_Escape = 50, +KeyCode_Pause = 51, +KeyCode_Up = 52, +KeyCode_Down = 53, +KeyCode_Left = 54, +KeyCode_Right = 55, +KeyCode_Backspace = 56, +KeyCode_Return = 57, +KeyCode_Delete = 58, +KeyCode_Insert = 59, +KeyCode_Home = 60, +KeyCode_End = 61, +KeyCode_PageUp = 62, +KeyCode_PageDown = 63, +KeyCode_CapsLock = 64, +KeyCode_NumLock = 65, +KeyCode_ScrollLock = 66, +KeyCode_Menu = 67, +KeyCode_Shift = 68, +KeyCode_Control = 69, +KeyCode_Alt = 70, +KeyCode_Command = 71, +KeyCode_F1 = 72, +KeyCode_F2 = 73, +KeyCode_F3 = 74, +KeyCode_F4 = 75, +KeyCode_F5 = 76, +KeyCode_F6 = 77, +KeyCode_F7 = 78, +KeyCode_F8 = 79, +KeyCode_F9 = 80, +KeyCode_F10 = 81, +KeyCode_F11 = 82, +KeyCode_F12 = 83, +KeyCode_F13 = 84, +KeyCode_F14 = 85, +KeyCode_F15 = 86, +KeyCode_F16 = 87, +KeyCode_F17 = 88, +KeyCode_F18 = 89, +KeyCode_F19 = 90, +KeyCode_F20 = 91, +KeyCode_F21 = 92, +KeyCode_F22 = 93, +KeyCode_F23 = 94, +KeyCode_F24 = 95, +KeyCode_NumPad0 = 96, +KeyCode_NumPad1 = 97, +KeyCode_NumPad2 = 98, +KeyCode_NumPad3 = 99, +KeyCode_NumPad4 = 100, +KeyCode_NumPad5 = 101, +KeyCode_NumPad6 = 102, +KeyCode_NumPad7 = 103, +KeyCode_NumPad8 = 104, +KeyCode_NumPad9 = 105, +KeyCode_NumPadStar = 106, +KeyCode_NumPadPlus = 107, +KeyCode_NumPadMinus = 108, +KeyCode_NumPadDot = 109, +KeyCode_NumPadSlash = 110, +KeyCode_Ex0 = 111, +KeyCode_Ex1 = 112, +KeyCode_Ex2 = 113, +KeyCode_Ex3 = 114, +KeyCode_Ex4 = 115, +KeyCode_Ex5 = 116, +KeyCode_Ex6 = 117, +KeyCode_Ex7 = 118, +KeyCode_Ex8 = 119, +KeyCode_Ex9 = 120, +KeyCode_Ex10 = 121, +KeyCode_Ex11 = 122, +KeyCode_Ex12 = 123, +KeyCode_Ex13 = 124, +KeyCode_Ex14 = 125, +KeyCode_Ex15 = 126, +KeyCode_Ex16 = 127, +KeyCode_Ex17 = 128, +KeyCode_Ex18 = 129, +KeyCode_Ex19 = 130, +KeyCode_Ex20 = 131, +KeyCode_Ex21 = 132, +KeyCode_Ex22 = 133, +KeyCode_Ex23 = 134, +KeyCode_Ex24 = 135, +KeyCode_Ex25 = 136, +KeyCode_Ex26 = 137, +KeyCode_Ex27 = 138, +KeyCode_Ex28 = 139, +KeyCode_Ex29 = 140, +KeyCode_COUNT = 141, }; global char* key_code_name[KeyCode_COUNT] = { - "None", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "Space", - "Tick", - "Minus", - "Equal", - "LeftBracket", - "RightBracket", - "Semicolon", - "Quote", - "Comma", - "Period", - "ForwardSlash", - "BackwardSlash", - "Tab", - "Escape", - "Pause", - "Up", - "Down", - "Left", - "Right", - "Backspace", - "Return", - "Delete", - "Insert", - "Home", - "End", - "PageUp", - "PageDown", - "CapsLock", - "NumLock", - "ScrollLock", - "Menu", - "Shift", - "Control", - "Alt", - "Command", - "F1", - "F2", - "F3", - "F4", - "F5", - "F6", - "F7", - "F8", - "F9", - "F10", - "F11", - "F12", - "F13", - "F14", - "F15", - "F16", +"None", +"A", +"B", +"C", +"D", +"E", +"F", +"G", +"H", +"I", +"J", +"K", +"L", +"M", +"N", +"O", +"P", +"Q", +"R", +"S", +"T", +"U", +"V", +"W", +"X", +"Y", +"Z", +"0", +"1", +"2", +"3", +"4", +"5", +"6", +"7", +"8", +"9", +"Space", +"Tick", +"Minus", +"Equal", +"LeftBracket", +"RightBracket", +"Semicolon", +"Quote", +"Comma", +"Period", +"ForwardSlash", +"BackwardSlash", +"Tab", +"Escape", +"Pause", +"Up", +"Down", +"Left", +"Right", +"Backspace", +"Return", +"Delete", +"Insert", +"Home", +"End", +"PageUp", +"PageDown", +"CapsLock", +"NumLock", +"ScrollLock", +"Menu", +"Shift", +"Control", +"Alt", +"Command", +"F1", +"F2", +"F3", +"F4", +"F5", +"F6", +"F7", +"F8", +"F9", +"F10", +"F11", +"F12", +"F13", +"F14", +"F15", +"F16", +"F17", +"F18", +"F19", +"F20", +"F21", +"F22", +"F23", +"F24", +"NumPad0", +"NumPad1", +"NumPad2", +"NumPad3", +"NumPad4", +"NumPad5", +"NumPad6", +"NumPad7", +"NumPad8", +"NumPad9", +"NumPadStar", +"NumPadPlus", +"NumPadMinus", +"NumPadDot", +"NumPadSlash", +"Ex0", +"Ex1", +"Ex2", +"Ex3", +"Ex4", +"Ex5", +"Ex6", +"Ex7", +"Ex8", +"Ex9", +"Ex10", +"Ex11", +"Ex12", +"Ex13", +"Ex14", +"Ex15", +"Ex16", +"Ex17", +"Ex18", +"Ex19", +"Ex20", +"Ex21", +"Ex22", +"Ex23", +"Ex24", +"Ex25", +"Ex26", +"Ex27", +"Ex28", +"Ex29", }; enum{ - MouseCode_Left = 1, - MouseCode_Middle = 2, - MouseCode_Right = 3, - MouseCode_COUNT = 4, +MouseCode_Left = 1, +MouseCode_Middle = 2, +MouseCode_Right = 3, +MouseCode_COUNT = 4, }; global char* mouse_code_name[MouseCode_COUNT] = { - "None", - "Left", - "Middle", - "Right", +"None", +"Left", +"Middle", +"Right", }; enum{ - CoreCode_Startup = 1, - CoreCode_Animate = 2, - CoreCode_ClickActivateView = 3, - CoreCode_ClickDeactivateView = 4, - CoreCode_TryExit = 5, - CoreCode_FileExternallyModified = 6, - CoreCode_NewClipboardContents = 7, - CoreCode_COUNT = 8, +CoreCode_Startup = 1, +CoreCode_Animate = 2, +CoreCode_ClickActivateView = 3, +CoreCode_ClickDeactivateView = 4, +CoreCode_TryExit = 5, +CoreCode_FileExternallyModified = 6, +CoreCode_NewClipboardContents = 7, +CoreCode_COUNT = 8, }; global char* core_code_name[CoreCode_COUNT] = { - "None", - "Startup", - "Animate", - "ClickActivateView", - "ClickDeactivateView", - "TryExit", - "FileExternallyModified", - "NewClipboardContents", +"None", +"Startup", +"Animate", +"ClickActivateView", +"ClickDeactivateView", +"TryExit", +"FileExternallyModified", +"NewClipboardContents", }; diff --git a/platform_linux/linux_4ed.cpp b/platform_linux/linux_4ed.cpp index 6f1fb3b4..6cd4a6de 100644 --- a/platform_linux/linux_4ed.cpp +++ b/platform_linux/linux_4ed.cpp @@ -1080,7 +1080,7 @@ linux_keycode_init(Display* dpy){ // Find the rest by their key label struct SymCode { KeySym sym; Key_Code code; }; - SymCode sym_table[100]; + SymCode sym_table[108]; SymCode* p = sym_table; *p++ = { XK_space, KeyCode_Space }; @@ -1112,7 +1112,7 @@ linux_keycode_init(Display* dpy){ *p++ = { XK_Super_L, KeyCode_Command }; *p++ = { XK_Super_R, KeyCode_Command }; - for(Key_Code k = KeyCode_F1; k <= KeyCode_F16; ++k) { + for (Key_Code k = KeyCode_F1; k <= KeyCode_F24; ++k){ *p++ = { XK_F1 + (k - KeyCode_F1), k }; } diff --git a/platform_linux/linux_4ed_functions.cpp b/platform_linux/linux_4ed_functions.cpp index 0be85ad0..b3b0bed9 100644 --- a/platform_linux/linux_4ed_functions.cpp +++ b/platform_linux/linux_4ed_functions.cpp @@ -233,6 +233,7 @@ system_save_file(Arena* scratch, char* file_name, String_Const_u8 data){ result = linux_file_attributes_from_struct_stat(&file_stat); } } + close(fd); } else { perror("open"); } diff --git a/project.4coder b/project.4coder index e24d066f..d548b124 100644 --- a/project.4coder +++ b/project.4coder @@ -53,8 +53,8 @@ command_list = { { .name = "run one time", .out = "*run*", .footer_panel = false, .save_dirty_files = false, .cmd = { { "pushd ..\\build & one_time", .os = "win" }, - { "pushd ../build & one_time", .os = "linux" }, - { "pushd ../build & one_time", .os = "mac" }, }, }, + { "cd ../build && ./one_time" , .os = "linux" }, + { "pushd ../build && ./one_time" , .os = "mac" }, }, }, { .name = "build custom api docs", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, @@ -92,7 +92,8 @@ command_list = { { .name = "build keycode generator", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, - .cmd = { { "custom\\bin\\build_one_time 4ed_generate_keycodes.cpp ..\\build", .os = "win" }, }, }, + .cmd = { { "custom\\bin\\build_one_time 4ed_generate_keycodes.cpp ..\\build", .os = "win" }, + { "custom/bin/build_one_time.sh 4ed_generate_keycodes.cpp ../build", .os = "linux" }, }, }, { .name = "build site render", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, diff --git a/ship_files/changes.txt b/ship_files/changes.txt index 2c75b6d6..ef1ccfd9 100644 --- a/ship_files/changes.txt +++ b/ship_files/changes.txt @@ -7,6 +7,8 @@ + in config.4coder the variable virtual_whitespace_regular_indent determines the number of space-widths to use as the regular indentation in a virtual whitespace layout + show whitespace mode implemented in 'default_render_buffer' + `set_face_size` and `set_face_size_this_buffer` commands + + `HookID_WholeScreenRenderCaller` hook runs once per frame after all views render + + Extended key codes list + Fix: tabs are measured with the correct amount of width for the user's settings + Fix: virtual whitespace toggling works when the config initially diabled virtual whitespace + Fix: never miss the most recent post to the clipboard on windows From 6749053db02bef74b4fa97247d06bce085980138 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Tue, 3 Mar 2020 22:57:21 -0800 Subject: [PATCH 06/10] Fix clipboard to work when catch all is set to false --- platform_linux/linux_4ed.cpp | 84 ++++++++++++++++++-------- platform_linux/linux_4ed_functions.cpp | 27 --------- 2 files changed, 60 insertions(+), 51 deletions(-) diff --git a/platform_linux/linux_4ed.cpp b/platform_linux/linux_4ed.cpp index 6cd4a6de..13e8f4bc 100644 --- a/platform_linux/linux_4ed.cpp +++ b/platform_linux/linux_4ed.cpp @@ -1218,6 +1218,32 @@ linux_clipboard_send(XSelectionRequestEvent* req) { XSendEvent(req->display, req->requestor, True, 0, (XEvent*)&rsp); } +internal String_Const_u8 +linux_clipboard_recv(Arena *arena){ + Atom type; + int fmt; + unsigned long nitems; + unsigned long bytes_left; + u8 *data; + + int result = XGetWindowProperty(linuxvars.dpy, + linuxvars.win, + linuxvars.atom_CLIPBOARD, + 0L, 0x20000000L, False, + linuxvars.atom_UTF8_STRING, + &type, &fmt, &nitems, + &bytes_left, &data); + + String_Const_u8 clip = {}; + if(result == Success && fmt == 8){ + clip= push_string_copy(arena, SCu8(data, nitems)); + XFree(data); + XDeleteProperty(linuxvars.dpy, linuxvars.win, linuxvars.atom_CLIPBOARD); + } + + return(clip); +} + internal void linux_clipboard_recv(XSelectionEvent* ev) { @@ -1227,31 +1253,42 @@ linux_clipboard_recv(XSelectionEvent* ev) { return; } - Atom type; - int fmt; - unsigned long nitems; - unsigned long bytes_left; - u8 *data; - - int result = XGetWindowProperty( - linuxvars.dpy, - linuxvars.win, - linuxvars.atom_CLIPBOARD, - 0L, 0x20000000L, False, - linuxvars.atom_UTF8_STRING, - &type, &fmt, &nitems, - &bytes_left, &data); - - if(result == Success && fmt == 8){ + Scratch_Block scratch(&linuxvars.tctx); + String_Const_u8 clip = linux_clipboard_recv(scratch); + if (clip.size > 0){ linalloc_clear(linuxvars.clipboard_arena); - linuxvars.clipboard_contents = push_u8_stringf(linuxvars.clipboard_arena, "%.*s", nitems, data); + linuxvars.clipboard_contents = push_string_copy(linuxvars.clipboard_arena, clip); linuxvars.received_new_clipboard = true; - XFree(data); - XDeleteProperty(linuxvars.dpy, linuxvars.win, linuxvars.atom_CLIPBOARD); linux_schedule_step(); } } +internal +system_get_clipboard_sig(){ + // TODO(inso): index? + return(push_string_copy(arena, linuxvars.clipboard_contents)); +} + +internal void +system_post_clipboard(String_Const_u8 str, i32 index){ + // TODO(inso): index? + //LINUX_FN_DEBUG("%.*s", string_expand(str)); + linalloc_clear(linuxvars.clipboard_arena); + linuxvars.clipboard_contents = push_u8_stringf(linuxvars.clipboard_arena, "%.*s", str.size, str.str); + XSetSelectionOwner(linuxvars.dpy, linuxvars.atom_CLIPBOARD, linuxvars.win, CurrentTime); +} + +internal void +system_set_clipboard_catch_all(b32 enabled){ + LINUX_FN_DEBUG("%d", enabled); + linuxvars.clipboard_catch_all = !!enabled; +} + +internal b32 +system_get_clipboard_catch_all(void){ + return linuxvars.clipboard_catch_all; +} + internal String_Const_u8 linux_filter_text(Arena* arena, u8* buf, int len) { u8* const result = push_array(arena, u8, len); @@ -1488,11 +1525,10 @@ linux_handle_x11_events() { default: { // clipboard update notification - ask for the new content - if (linuxvars.clipboard_catch_all && event.type == linuxvars.xfixes_selection_event) { + if (event.type == linuxvars.xfixes_selection_event) { XFixesSelectionNotifyEvent* sne = (XFixesSelectionNotifyEvent*)&event; if (sne->subtype == XFixesSelectionNotify && sne->owner != linuxvars.win){ - XConvertSelection( - linuxvars.dpy, + XConvertSelection(linuxvars.dpy, linuxvars.atom_CLIPBOARD, linuxvars.atom_UTF8_STRING, linuxvars.atom_CLIPBOARD, @@ -1768,10 +1804,10 @@ main(int argc, char **argv){ Application_Step_Input input = {}; - if (linuxvars.received_new_clipboard){ + if (linuxvars.received_new_clipboard && linuxvars.clipboard_catch_all){ input.clipboard = linuxvars.clipboard_contents; - linuxvars.received_new_clipboard = false; } + linuxvars.received_new_clipboard = false; input.first_step = first_step; input.dt = frame_useconds/1000000.f; // variable? diff --git a/platform_linux/linux_4ed_functions.cpp b/platform_linux/linux_4ed_functions.cpp index b3b0bed9..040d503f 100644 --- a/platform_linux/linux_4ed_functions.cpp +++ b/platform_linux/linux_4ed_functions.cpp @@ -335,33 +335,6 @@ system_sleep(u64 microseconds){ nanosleep(&requested, &remaining); } -internal String_Const_u8 -system_get_clipboard(Arena* arena, i32 index){ - // TODO(inso): index? - u8* ptr = push_array_write(arena, u8, linuxvars.clipboard_contents.size, linuxvars.clipboard_contents.str); - return SCu8(ptr, linuxvars.clipboard_contents.size); -} - -internal void -system_post_clipboard(String_Const_u8 str, i32 index){ - // TODO(inso): index? - //LINUX_FN_DEBUG("%.*s", string_expand(str)); - linalloc_clear(linuxvars.clipboard_arena); - linuxvars.clipboard_contents = push_u8_stringf(linuxvars.clipboard_arena, "%.*s", str.size, str.str); - XSetSelectionOwner(linuxvars.dpy, linuxvars.atom_CLIPBOARD, linuxvars.win, CurrentTime); -} - -internal void -system_set_clipboard_catch_all(b32 enabled){ - LINUX_FN_DEBUG("%d", enabled); - linuxvars.clipboard_catch_all = !!enabled; -} - -internal b32 -system_get_clipboard_catch_all(void){ - return linuxvars.clipboard_catch_all; -} - internal b32 system_cli_call(Arena* scratch, char* path, char* script, CLI_Handles* cli_out){ LINUX_FN_DEBUG("%s / %s", path, script); From 61b3341743390de946ea249355ad4aa41490296e Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Tue, 3 Mar 2020 23:43:20 -0800 Subject: [PATCH 07/10] Added win32 keycodes for numpad and extension --- custom/generated/command_metadata.h | 484 ++++++++++++++-------------- platform_win32/win32_4ed.cpp | 38 ++- 2 files changed, 276 insertions(+), 246 deletions(-) diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index e424f1d4..fc706980 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -264,248 +264,248 @@ i32 source_name_len; i32 line_number; }; static Command_Metadata fcoder_metacmd_table[242] = { -{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "../code/custom/4coder_default_framework.cpp", 43, 409 }, -{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "../code/custom/4coder_auto_indent.cpp", 37, 413 }, -{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "../code/custom/4coder_auto_indent.cpp", 37, 423 }, -{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "../code/custom/4coder_auto_indent.cpp", 37, 404 }, -{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "../code/custom/4coder_base_commands.cpp", 39, 154 }, -{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "../code/custom/4coder_base_commands.cpp", 39, 96 }, -{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "../code/custom/4coder_base_commands.cpp", 39, 647 }, -{ PROC_LINKS(begin_clipboard_collection_mode, 0), true, "begin_clipboard_collection_mode", 31, "Allows the user to copy multiple strings from other applications before switching to 4coder and pasting them all.", 113, "../code/custom/4coder_clipboard.cpp", 35, 68 }, -{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "../code/custom/4coder_build_commands.cpp", 40, 159 }, -{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "../code/custom/4coder_build_commands.cpp", 40, 122 }, -{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "../code/custom/4coder_base_commands.cpp", 39, 197 }, -{ 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, "../code/custom/4coder_default_framework.cpp", 43, 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, "../code/custom/4coder_default_framework.cpp", 43, 290 }, -{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "../code/custom/4coder_build_commands.cpp", 40, 180 }, -{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "../code/custom/4coder_base_commands.cpp", 39, 636 }, -{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "../code/custom/4coder_default_framework.cpp", 43, 480 }, -{ PROC_LINKS(clear_clipboard, 0), false, "clear_clipboard", 15, "Clears the history of the clipboard", 35, "../code/custom/4coder_clipboard.cpp", 35, 216 }, -{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "../code/custom/4coder_base_commands.cpp", 39, 233 }, -{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "../code/custom/4coder_base_commands.cpp", 39, 223 }, -{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "../code/custom/4coder_base_commands.cpp", 39, 243 }, -{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "../code/custom/4coder_base_commands.cpp", 39, 255 }, -{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "../code/custom/4coder_clipboard.cpp", 35, 7 }, -{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "../code/custom/4coder_project_commands.cpp", 42, 843 }, -{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "../code/custom/4coder_build_commands.cpp", 40, 174 }, -{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "../code/custom/4coder_base_commands.cpp", 39, 655 }, -{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "../code/custom/4coder_docs.cpp", 30, 190 }, -{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "../code/custom/4coder_lists.cpp", 31, 761 }, -{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "../code/custom/4coder_combined_write_commands.cpp", 49, 125 }, -{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "../code/custom/4coder_combined_write_commands.cpp", 49, 149 }, -{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "../code/custom/4coder_clipboard.cpp", 35, 107 }, -{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "../code/custom/4coder_base_commands.cpp", 39, 124 }, -{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "../code/custom/4coder_docs.cpp", 30, 175 }, -{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "../code/custom/4coder_clipboard.cpp", 35, 116 }, -{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "../code/custom/4coder_base_commands.cpp", 39, 738 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1897 }, -{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "../code/custom/4coder_default_hooks.cpp", 39, 7 }, -{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "../code/custom/4coder_default_hooks.cpp", 39, 23 }, -{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "../code/custom/4coder_default_hooks.cpp", 39, 51 }, -{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "../code/custom/4coder_base_commands.cpp", 39, 162 }, -{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "../code/custom/4coder_base_commands.cpp", 39, 79 }, -{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "../code/custom/4coder_scope_commands.cpp", 40, 112 }, -{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "../code/custom/4coder_base_commands.cpp", 39, 1323 }, -{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "../code/custom/4coder_base_commands.cpp", 39, 1495 }, -{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "../code/custom/4coder_base_commands.cpp", 39, 134 }, -{ PROC_LINKS(display_key_codes, 0), false, "display_key_codes", 17, "Example of input handling loop", 30, "../code/custom/4coder_examples.cpp", 34, 90 }, -{ PROC_LINKS(display_text_input, 0), false, "display_text_input", 18, "Example of to_writable and leave_current_input_unhandled", 56, "../code/custom/4coder_examples.cpp", 34, 134 }, -{ PROC_LINKS(double_backspace, 0), false, "double_backspace", 16, "Example of history group helpers", 32, "../code/custom/4coder_examples.cpp", 34, 10 }, -{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "../code/custom/4coder_base_commands.cpp", 39, 1481 }, -{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "../code/custom/4coder_cli_command.cpp", 37, 22 }, -{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "../code/custom/4coder_cli_command.cpp", 37, 7 }, -{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "../code/custom/4coder_base_commands.cpp", 39, 825 }, -{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "../code/custom/4coder_helper.cpp", 32, 2224 }, -{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "../code/custom/4coder_helper.cpp", 32, 2232 }, -{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "../code/custom/4coder_jump_sticky.cpp", 37, 525 }, -{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "../code/custom/4coder_jump_sticky.cpp", 37, 542 }, -{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "../code/custom/4coder_jump_sticky.cpp", 37, 348 }, -{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "../code/custom/4coder_jump_sticky.cpp", 37, 375 }, -{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "../code/custom/4coder_base_commands.cpp", 39, 833 }, -{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "../code/custom/4coder_jump_sticky.cpp", 37, 464 }, -{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "../code/custom/4coder_jump_sticky.cpp", 37, 494 }, -{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "../code/custom/4coder_jump_sticky.cpp", 37, 481 }, -{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "../code/custom/4coder_jump_sticky.cpp", 37, 511 }, -{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "../code/custom/4coder_base_commands.cpp", 39, 685 }, -{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "../code/custom/4coder_base_commands.cpp", 39, 671 }, -{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "../code/custom/4coder_tutorial.cpp", 34, 869 }, -{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "../code/custom/4coder_combined_write_commands.cpp", 49, 70 }, -{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "../code/custom/4coder_jump_sticky.cpp", 37, 564 }, -{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "../code/custom/4coder_jump_sticky.cpp", 37, 581 }, -{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "../code/custom/4coder_base_commands.cpp", 39, 727 }, -{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "../code/custom/4coder_lists.cpp", 31, 520 }, -{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "../code/custom/4coder_lists.cpp", 31, 661 }, -{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "../code/custom/4coder_lists.cpp", 31, 715 }, -{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "../code/custom/4coder_lists.cpp", 31, 612 }, -{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "../code/custom/4coder_lists.cpp", 31, 510 }, -{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "../code/custom/4coder_code_index_listers.cpp", 44, 12 }, -{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "../code/custom/4coder_keyboard_macro.cpp", 40, 54 }, -{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "../code/custom/4coder_keyboard_macro.cpp", 40, 77 }, -{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "../code/custom/4coder_keyboard_macro.cpp", 40, 41 }, -{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "../code/custom/4coder_base_commands.cpp", 39, 1641 }, -{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "../code/custom/4coder_tutorial.cpp", 34, 9 }, -{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "../code/custom/4coder_base_commands.cpp", 39, 211 }, -{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "../code/custom/4coder_function_list.cpp", 39, 295 }, -{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), true, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "../code/custom/4coder_function_list.cpp", 39, 301 }, -{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "../code/custom/4coder_function_list.cpp", 39, 267 }, -{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), true, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "../code/custom/4coder_function_list.cpp", 39, 277 }, -{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "../code/custom/4coder_search.cpp", 32, 165 }, -{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "../code/custom/4coder_search.cpp", 32, 177 }, -{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "../code/custom/4coder_search.cpp", 32, 189 }, -{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "../code/custom/4coder_search.cpp", 32, 195 }, -{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "../code/custom/4coder_search.cpp", 32, 201 }, -{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "../code/custom/4coder_search.cpp", 32, 207 }, -{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "../code/custom/4coder_search.cpp", 32, 213 }, -{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "../code/custom/4coder_search.cpp", 32, 221 }, -{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "../code/custom/4coder_search.cpp", 32, 171 }, -{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "../code/custom/4coder_search.cpp", 32, 183 }, -{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "../code/custom/4coder_project_commands.cpp", 42, 863 }, -{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "../code/custom/4coder_config.cpp", 32, 1627 }, -{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "../code/custom/4coder_default_framework.cpp", 43, 457 }, -{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "../code/custom/4coder_default_framework.cpp", 43, 469 }, -{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "../code/custom/4coder_base_commands.cpp", 39, 1435 }, -{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "../code/custom/4coder_miblo_numbers.cpp", 39, 44 }, -{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 237 }, -{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 249 }, -{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "../code/custom/4coder_miblo_numbers.cpp", 39, 29 }, -{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 231 }, -{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "../code/custom/4coder_miblo_numbers.cpp", 39, 243 }, -{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "../code/custom/4coder_base_commands.cpp", 39, 780 }, -{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "../code/custom/4coder_base_commands.cpp", 39, 265 }, -{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "../code/custom/4coder_base_commands.cpp", 39, 336 }, -{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "../code/custom/4coder_base_commands.cpp", 39, 348 }, -{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "../code/custom/4coder_base_commands.cpp", 39, 354 }, -{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "../code/custom/4coder_base_commands.cpp", 39, 407 }, -{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "../code/custom/4coder_base_commands.cpp", 39, 431 }, -{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "../code/custom/4coder_base_commands.cpp", 39, 419 }, -{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "../code/custom/4coder_base_commands.cpp", 39, 437 }, -{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "../code/custom/4coder_base_commands.cpp", 39, 514 }, -{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "../code/custom/4coder_base_commands.cpp", 39, 528 }, -{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "../code/custom/4coder_base_commands.cpp", 39, 486 }, -{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "../code/custom/4coder_base_commands.cpp", 39, 471 }, -{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "../code/custom/4coder_base_commands.cpp", 39, 500 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1475 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1469 }, -{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "../code/custom/4coder_base_commands.cpp", 39, 445 }, -{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "../code/custom/4coder_base_commands.cpp", 39, 507 }, -{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "../code/custom/4coder_base_commands.cpp", 39, 521 }, -{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "../code/custom/4coder_base_commands.cpp", 39, 479 }, -{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "../code/custom/4coder_base_commands.cpp", 39, 463 }, -{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "../code/custom/4coder_base_commands.cpp", 39, 493 }, -{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "../code/custom/4coder_base_commands.cpp", 39, 330 }, -{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "../code/custom/4coder_base_commands.cpp", 39, 342 }, -{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "../code/custom/4coder_base_commands.cpp", 39, 401 }, -{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "../code/custom/4coder_base_commands.cpp", 39, 425 }, -{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "../code/custom/4coder_base_commands.cpp", 39, 413 }, -{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "../code/custom/4coder_clipboard.cpp", 35, 364 }, -{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "../code/custom/4coder_clipboard.cpp", 35, 373 }, -{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "../code/custom/4coder_project_commands.cpp", 42, 849 }, -{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "../code/custom/4coder_project_commands.cpp", 42, 855 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1560 }, -{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "../code/custom/4coder_base_commands.cpp", 39, 1891 }, -{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "../code/custom/4coder_combined_write_commands.cpp", 49, 46 }, -{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "../code/custom/4coder_combined_write_commands.cpp", 49, 62 }, -{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "../code/custom/4coder_combined_write_commands.cpp", 49, 54 }, -{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "../code/custom/4coder_base_commands.cpp", 39, 1592 }, -{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "../code/custom/4coder_default_framework.cpp", 43, 310 }, -{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "../code/custom/4coder_default_framework.cpp", 43, 300 }, -{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "../code/custom/4coder_base_commands.cpp", 39, 372 }, -{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "../code/custom/4coder_base_commands.cpp", 39, 364 }, -{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "../code/custom/4coder_clipboard.cpp", 35, 127 }, -{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "../code/custom/4coder_clipboard.cpp", 35, 202 }, -{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "../code/custom/4coder_clipboard.cpp", 35, 161 }, -{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "../code/custom/4coder_clipboard.cpp", 35, 209 }, -{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "../code/custom/4coder_scope_commands.cpp", 40, 106 }, -{ PROC_LINKS(play_with_a_counter, 0), false, "play_with_a_counter", 19, "Example of query bar", 20, "../code/custom/4coder_examples.cpp", 34, 29 }, -{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "../code/custom/4coder_profile.cpp", 33, 226 }, -{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "../code/custom/4coder_profile.cpp", 33, 219 }, -{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "../code/custom/4coder_profile.cpp", 33, 212 }, -{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "../code/custom/4coder_profile_inspect.cpp", 41, 886 }, -{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "../code/custom/4coder_project_commands.cpp", 42, 1290 }, -{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "../code/custom/4coder_project_commands.cpp", 42, 871 }, -{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "../code/custom/4coder_project_commands.cpp", 42, 897 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1251 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1272 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1288 }, -{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "../code/custom/4coder_base_commands.cpp", 39, 1730 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1815 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1400 }, -{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "../code/custom/4coder_base_commands.cpp", 39, 1659 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1161 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1152 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1143 }, -{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "../code/custom/4coder_base_commands.cpp", 39, 1084 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1096 }, -{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "../code/custom/4coder_base_commands.cpp", 39, 1649 }, -{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "../code/custom/4coder_default_framework.cpp", 43, 382 }, -{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "../code/custom/4coder_base_commands.cpp", 39, 1367 }, -{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "../code/custom/4coder_base_commands.cpp", 39, 1078 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1090 }, -{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "../code/custom/4coder_helper.cpp", 32, 2212 }, -{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "../code/custom/4coder_helper.cpp", 32, 2200 }, -{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "../code/custom/4coder_helper.cpp", 32, 2218 }, -{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "../code/custom/4coder_helper.cpp", 32, 2206 }, -{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "../code/custom/4coder_base_commands.cpp", 39, 537 }, -{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "../code/custom/4coder_scope_commands.cpp", 40, 57 }, -{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "../code/custom/4coder_scope_commands.cpp", 40, 66 }, -{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "../code/custom/4coder_scope_commands.cpp", 40, 82 }, -{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "../code/custom/4coder_scope_commands.cpp", 40, 99 }, -{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "../code/custom/4coder_scope_commands.cpp", 40, 27 }, -{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "../code/custom/4coder_scope_commands.cpp", 40, 39 }, -{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "../code/custom/4coder_eol.cpp", 29, 125 }, -{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "../code/custom/4coder_eol.cpp", 29, 112 }, -{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "../code/custom/4coder_eol.cpp", 29, 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, "../code/custom/4coder_eol.cpp", 29, 99 }, -{ PROC_LINKS(set_face_size, 0), false, "set_face_size", 13, "Set face size of the face used by the current buffer.", 53, "../code/custom/4coder_base_commands.cpp", 39, 707 }, -{ PROC_LINKS(set_face_size_this_buffer, 0), false, "set_face_size_this_buffer", 25, "Set face size of the face used by the current buffer; if any other buffers are using the same face a new face is created so that only this buffer is effected", 157, "../code/custom/4coder_base_commands.cpp", 39, 749 }, -{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "../code/custom/4coder_base_commands.cpp", 39, 115 }, -{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "../code/custom/4coder_default_framework.cpp", 43, 427 }, -{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "../code/custom/4coder_default_framework.cpp", 43, 421 }, -{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "../code/custom/4coder_project_commands.cpp", 42, 1238 }, -{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "../code/custom/4coder_project_commands.cpp", 42, 1250 }, -{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "../code/custom/4coder_project_commands.cpp", 42, 1244 }, -{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "../code/custom/4coder_project_commands.cpp", 42, 1231 }, -{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "../code/custom/4coder_base_commands.cpp", 39, 678 }, -{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "../code/custom/4coder_base_commands.cpp", 39, 664 }, -{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "../code/custom/4coder_log_parser.cpp", 36, 994 }, -{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "../code/custom/4coder_base_commands.cpp", 39, 179 }, -{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "../code/custom/4coder_base_commands.cpp", 39, 187 }, -{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "../code/custom/4coder_combined_write_commands.cpp", 49, 237 }, -{ PROC_LINKS(string_repeat, 0), false, "string_repeat", 13, "Example of query_user_string and query_user_number", 50, "../code/custom/4coder_examples.cpp", 34, 176 }, -{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "../code/custom/4coder_default_framework.cpp", 43, 403 }, -{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "../code/custom/4coder_base_commands.cpp", 39, 1617 }, -{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "../code/custom/4coder_lists.cpp", 31, 785 }, -{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "../code/custom/4coder_base_commands.cpp", 39, 563 }, -{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "../code/custom/4coder_base_commands.cpp", 39, 550 }, -{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "../code/custom/4coder_base_commands.cpp", 39, 692 }, -{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "../code/custom/4coder_base_commands.cpp", 39, 701 }, -{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "../code/custom/4coder_default_framework.cpp", 43, 451 }, -{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "../code/custom/4coder_default_framework.cpp", 43, 439 }, -{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "../code/custom/4coder_default_framework.cpp", 43, 433 }, -{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "../code/custom/4coder_base_commands.cpp", 39, 806 }, -{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "../code/custom/4coder_base_commands.cpp", 39, 812 }, -{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "../code/custom/4coder_default_framework.cpp", 43, 415 }, -{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "../code/custom/4coder_default_framework.cpp", 43, 445 }, -{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "../code/custom/4coder_base_commands.cpp", 39, 797 }, -{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles virtual whitespace for all files.", 41, "../code/custom/4coder_code_index.cpp", 36, 1176 }, -{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "../code/custom/4coder_tutorial.cpp", 34, 20 }, -{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "../code/custom/4coder_tutorial.cpp", 34, 34 }, -{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "../code/custom/4coder_combined_write_commands.cpp", 49, 137 }, -{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "../code/custom/4coder_base_commands.cpp", 39, 1717 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1744 }, -{ 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, "../code/custom/4coder_base_commands.cpp", 39, 1605 }, -{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "../code/custom/4coder_jump_lister.cpp", 37, 59 }, -{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "../code/custom/4coder_search.cpp", 32, 395 }, -{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "../code/custom/4coder_search.cpp", 32, 642 }, -{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "../code/custom/4coder_combined_write_commands.cpp", 49, 94 }, -{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "../code/custom/4coder_combined_write_commands.cpp", 49, 82 }, -{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "../code/custom/4coder_combined_write_commands.cpp", 49, 88 }, -{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "../code/custom/4coder_base_commands.cpp", 39, 67 }, -{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "../code/custom/4coder_auto_indent.cpp", 37, 433 }, -{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "../code/custom/4coder_base_commands.cpp", 39, 59 }, -{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "../code/custom/4coder_combined_write_commands.cpp", 49, 76 }, -{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "../code/custom/4coder_base_commands.cpp", 39, 73 }, -{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "../code/custom/4coder_combined_write_commands.cpp", 49, 100 }, +{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 409 }, +{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "W:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 413 }, +{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "W:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 423 }, +{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "W:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 404 }, +{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 154 }, +{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 96 }, +{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 647 }, +{ PROC_LINKS(begin_clipboard_collection_mode, 0), true, "begin_clipboard_collection_mode", 31, "Allows the user to copy multiple strings from other applications before switching to 4coder and pasting them all.", 113, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 68 }, +{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "W:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 159 }, +{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "W:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 122 }, +{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 197 }, +{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 284 }, +{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 290 }, +{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "W:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 180 }, +{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 636 }, +{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 480 }, +{ PROC_LINKS(clear_clipboard, 0), false, "clear_clipboard", 15, "Clears the history of the clipboard", 35, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 216 }, +{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 233 }, +{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 223 }, +{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 243 }, +{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 255 }, +{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 7 }, +{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 843 }, +{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "W:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 174 }, +{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 655 }, +{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "W:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 190 }, +{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 761 }, +{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 125 }, +{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 149 }, +{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 107 }, +{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 124 }, +{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "W:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 175 }, +{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 116 }, +{ 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, 738 }, +{ 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, 1897 }, +{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "W:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 }, +{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "W:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 23 }, +{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "W:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 51 }, +{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 162 }, +{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 79 }, +{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 112 }, +{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1323 }, +{ 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, 1495 }, +{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 134 }, +{ PROC_LINKS(display_key_codes, 0), false, "display_key_codes", 17, "Example of input handling loop", 30, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 90 }, +{ PROC_LINKS(display_text_input, 0), false, "display_text_input", 18, "Example of to_writable and leave_current_input_unhandled", 56, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 134 }, +{ PROC_LINKS(double_backspace, 0), false, "double_backspace", 16, "Example of history group helpers", 32, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 10 }, +{ 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, 1481 }, +{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "W:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 22 }, +{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "W:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 7 }, +{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 825 }, +{ 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, 2224 }, +{ 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, 2232 }, +{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 525 }, +{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 542 }, +{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 348 }, +{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 375 }, +{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 833 }, +{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 464 }, +{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 494 }, +{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 481 }, +{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 511 }, +{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 685 }, +{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 671 }, +{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "W:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 869 }, +{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 70 }, +{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 564 }, +{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 581 }, +{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 727 }, +{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 520 }, +{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 661 }, +{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 715 }, +{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 612 }, +{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 510 }, +{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "W:\\4ed\\code\\custom\\4coder_code_index_listers.cpp", 48, 12 }, +{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "W:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 54 }, +{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "W:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 77 }, +{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "W:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 41 }, +{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1641 }, +{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "W:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 9 }, +{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 211 }, +{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "W:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 295 }, +{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), true, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "W:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 301 }, +{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "W:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 267 }, +{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), true, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "W:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 277 }, +{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 165 }, +{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 177 }, +{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 189 }, +{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 195 }, +{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 201 }, +{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 207 }, +{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 213 }, +{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 221 }, +{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 171 }, +{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 183 }, +{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 863 }, +{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "W:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1627 }, +{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 457 }, +{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 469 }, +{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1435 }, +{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 44 }, +{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 237 }, +{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 }, +{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 29 }, +{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 231 }, +{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 243 }, +{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 780 }, +{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 265 }, +{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 336 }, +{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 348 }, +{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 354 }, +{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 407 }, +{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 431 }, +{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 419 }, +{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 437 }, +{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 514 }, +{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 528 }, +{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 486 }, +{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 471 }, +{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 500 }, +{ 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, 1475 }, +{ 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, 1469 }, +{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 445 }, +{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 507 }, +{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 521 }, +{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 479 }, +{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 463 }, +{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 493 }, +{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 330 }, +{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 342 }, +{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 401 }, +{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 425 }, +{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 413 }, +{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 364 }, +{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 373 }, +{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 849 }, +{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 855 }, +{ 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, 1560 }, +{ 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, 1891 }, +{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 46 }, +{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 62 }, +{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 54 }, +{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1592 }, +{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 310 }, +{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 300 }, +{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 372 }, +{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 364 }, +{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 127 }, +{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 202 }, +{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 161 }, +{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 209 }, +{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 106 }, +{ PROC_LINKS(play_with_a_counter, 0), false, "play_with_a_counter", 19, "Example of query bar", 20, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 29 }, +{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 226 }, +{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 219 }, +{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 212 }, +{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "W:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 886 }, +{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1290 }, +{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 871 }, +{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 897 }, +{ 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, 1251 }, +{ 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, 1272 }, +{ 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, 1288 }, +{ 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, 1730 }, +{ 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, 1815 }, +{ 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, 1400 }, +{ 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, 1659 }, +{ 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, 1161 }, +{ 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, 1152 }, +{ 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, 1143 }, +{ 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, 1084 }, +{ 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, 1096 }, +{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1649 }, +{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 382 }, +{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1367 }, +{ 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, 1078 }, +{ 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, 1090 }, +{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2212 }, +{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2200 }, +{ 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, 2218 }, +{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2206 }, +{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 537 }, +{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 57 }, +{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 66 }, +{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 82 }, +{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 99 }, +{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 27 }, +{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 39 }, +{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "W:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 125 }, +{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "W:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 112 }, +{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "W:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 86 }, +{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "W:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 99 }, +{ PROC_LINKS(set_face_size, 0), false, "set_face_size", 13, "Set face size of the face used by the current buffer.", 53, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 707 }, +{ PROC_LINKS(set_face_size_this_buffer, 0), false, "set_face_size_this_buffer", 25, "Set face size of the face used by the current buffer; if any other buffers are using the same face a new face is created so that only this buffer is effected", 157, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 749 }, +{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 115 }, +{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 427 }, +{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 421 }, +{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1238 }, +{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1250 }, +{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1244 }, +{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1231 }, +{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 678 }, +{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 664 }, +{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "W:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 994 }, +{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 179 }, +{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 187 }, +{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 237 }, +{ PROC_LINKS(string_repeat, 0), false, "string_repeat", 13, "Example of query_user_string and query_user_number", 50, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 176 }, +{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 403 }, +{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1617 }, +{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 785 }, +{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 563 }, +{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 550 }, +{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 692 }, +{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 701 }, +{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 451 }, +{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 439 }, +{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 433 }, +{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 806 }, +{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 812 }, +{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 415 }, +{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 445 }, +{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 797 }, +{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles virtual whitespace for all files.", 41, "W:\\4ed\\code\\custom\\4coder_code_index.cpp", 40, 1176 }, +{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "W:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 20 }, +{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "W:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 34 }, +{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 137 }, +{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1717 }, +{ 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, 1744 }, +{ 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, 1605 }, +{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "W:\\4ed\\code\\custom\\4coder_jump_lister.cpp", 41, 59 }, +{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 395 }, +{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 642 }, +{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 94 }, +{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 82 }, +{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 88 }, +{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 67 }, +{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "W:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 433 }, +{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 59 }, +{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 76 }, +{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 73 }, +{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 100 }, }; static i32 fcoder_metacmd_ID_allow_mouse = 0; static i32 fcoder_metacmd_ID_auto_indent_line_at_cursor = 1; diff --git a/platform_win32/win32_4ed.cpp b/platform_win32/win32_4ed.cpp index 5631f44c..34381474 100644 --- a/platform_win32/win32_4ed.cpp +++ b/platform_win32/win32_4ed.cpp @@ -718,8 +718,8 @@ win32_keycode_init(void){ keycode_lookup_table[VK_F6] = KeyCode_F6; keycode_lookup_table[VK_F7] = KeyCode_F7; keycode_lookup_table[VK_F8] = KeyCode_F8; - keycode_lookup_table[VK_F9] = KeyCode_F9; + keycode_lookup_table[VK_F9] = KeyCode_F9; keycode_lookup_table[VK_F10] = KeyCode_F10; keycode_lookup_table[VK_F11] = KeyCode_F11; keycode_lookup_table[VK_F12] = KeyCode_F12; @@ -727,6 +727,36 @@ win32_keycode_init(void){ keycode_lookup_table[VK_F14] = KeyCode_F14; keycode_lookup_table[VK_F15] = KeyCode_F15; keycode_lookup_table[VK_F16] = KeyCode_F16; + + keycode_lookup_table[VK_F17] = KeyCode_F17; + keycode_lookup_table[VK_F18] = KeyCode_F18; + keycode_lookup_table[VK_F19] = KeyCode_F19; + keycode_lookup_table[VK_F20] = KeyCode_F20; + keycode_lookup_table[VK_F21] = KeyCode_F21; + keycode_lookup_table[VK_F22] = KeyCode_F22; + keycode_lookup_table[VK_F23] = KeyCode_F23; + keycode_lookup_table[VK_F24] = KeyCode_F24; + + keycode_lookup_table[VK_NUMPAD0] = KeyCode_NumPad0; + keycode_lookup_table[VK_NUMPAD1] = KeyCode_NumPad1; + keycode_lookup_table[VK_NUMPAD2] = KeyCode_NumPad2; + keycode_lookup_table[VK_NUMPAD3] = KeyCode_NumPad3; + keycode_lookup_table[VK_NUMPAD4] = KeyCode_NumPad4; + keycode_lookup_table[VK_NUMPAD5] = KeyCode_NumPad5; + keycode_lookup_table[VK_NUMPAD6] = KeyCode_NumPad6; + keycode_lookup_table[VK_NUMPAD7] = KeyCode_NumPad7; + keycode_lookup_table[VK_NUMPAD8] = KeyCode_NumPad8; + keycode_lookup_table[VK_NUMPAD9] = KeyCode_NumPad9; + + keycode_lookup_table[VK_MULTIPLY] = KeyCode_NumPadStar; + keycode_lookup_table[VK_ADD] = KeyCode_NumPadPlus; + keycode_lookup_table[VK_SUBTRACT] = KeyCode_NumPadMinus; + keycode_lookup_table[VK_DECIMAL] = KeyCode_NumPadDot; + keycode_lookup_table[VK_DIVIDE] = KeyCode_NumPadSlash; + + for (i32 i = 0xDF; i < 0xFF; i += 1){ + keycode_lookup_table[i] = KeyCode_Ex0 + 1; + } } internal void @@ -1343,9 +1373,9 @@ win32_gl_create_window(HWND *wnd_out, HGLRC *context_out, DWORD style, RECT rect // NOTE(allen): Load wgl extensions #define LoadWGL(f,l) Stmnt((f) = (f##_Function*)wglGetProcAddress(#f); \ -(l) = (l) && win32_wgl_good((Void_Func*)(f));) - - b32 load_success = true; + (l) = (l) && win32_wgl_good((Void_Func*)(f));) + + b32 load_success = true; LoadWGL(wglCreateContextAttribsARB, load_success); LoadWGL(wglChoosePixelFormatARB, load_success); LoadWGL(wglGetExtensionsStringEXT, load_success); From be3895b90f8b58c41a283e537d1f5b6eb6a5d1f3 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Sat, 7 Mar 2020 14:53:33 -0800 Subject: [PATCH 08/10] Not sure what I changed --- 4ed.cpp | 10 - 4ed_app_models.h | 2 - custom/generated/command_metadata.h | 484 ++++++++++++++-------------- 3 files changed, 242 insertions(+), 254 deletions(-) diff --git a/4ed.cpp b/4ed.cpp index 17f37875..b0549b03 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -45,8 +45,6 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings, case 'd': action = CLAct_CustomDLL; strict = false; break; case 'D': action = CLAct_CustomDLL; strict = true; break; - case 'i': action = CLAct_InitialFilePosition; break; - case 'w': action = CLAct_WindowSize; break; case 'W': action = CLAct_WindowMaximize; break; case 'p': action = CLAct_WindowPosition; break; @@ -73,14 +71,6 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings, action = CLAct_Nothing; }break; - case CLAct_InitialFilePosition: - { - if (i < argc){ - settings->initial_line = (i32)string_to_integer(SCu8(argv[i]), 10); - } - action = CLAct_Nothing; - }break; - case CLAct_WindowSize: { if (i + 1 < argc){ diff --git a/4ed_app_models.h b/4ed_app_models.h index daf24b34..af365508 100644 --- a/4ed_app_models.h +++ b/4ed_app_models.h @@ -20,7 +20,6 @@ struct App_Settings{ char **custom_flags; i32 custom_flags_count; - i32 initial_line; b32 lctrl_lalt_is_altgr; i32 font_size; @@ -175,7 +174,6 @@ enum Command_Line_Action{ CLAct_Ignore, CLAct_UserFile, CLAct_CustomDLL, - CLAct_InitialFilePosition, CLAct_WindowSize, CLAct_WindowMaximize, CLAct_WindowPosition, diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index fc706980..0afff020 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -264,248 +264,248 @@ i32 source_name_len; i32 line_number; }; static Command_Metadata fcoder_metacmd_table[242] = { -{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 409 }, -{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "W:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 413 }, -{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "W:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 423 }, -{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "W:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 404 }, -{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 154 }, -{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 96 }, -{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 647 }, -{ PROC_LINKS(begin_clipboard_collection_mode, 0), true, "begin_clipboard_collection_mode", 31, "Allows the user to copy multiple strings from other applications before switching to 4coder and pasting them all.", 113, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 68 }, -{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "W:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 159 }, -{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "W:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 122 }, -{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 197 }, -{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 284 }, -{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 290 }, -{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "W:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 180 }, -{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 636 }, -{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 480 }, -{ PROC_LINKS(clear_clipboard, 0), false, "clear_clipboard", 15, "Clears the history of the clipboard", 35, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 216 }, -{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 233 }, -{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 223 }, -{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 243 }, -{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 255 }, -{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 7 }, -{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 843 }, -{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "W:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 174 }, -{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 655 }, -{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "W:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 190 }, -{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 761 }, -{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 125 }, -{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 149 }, -{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 107 }, -{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 124 }, -{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "W:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 175 }, -{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 116 }, -{ 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, 738 }, -{ 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, 1897 }, -{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "W:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 }, -{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "W:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 23 }, -{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "W:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 51 }, -{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 162 }, -{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 79 }, -{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 112 }, -{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1323 }, -{ 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, 1495 }, -{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 134 }, -{ PROC_LINKS(display_key_codes, 0), false, "display_key_codes", 17, "Example of input handling loop", 30, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 90 }, -{ PROC_LINKS(display_text_input, 0), false, "display_text_input", 18, "Example of to_writable and leave_current_input_unhandled", 56, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 134 }, -{ PROC_LINKS(double_backspace, 0), false, "double_backspace", 16, "Example of history group helpers", 32, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 10 }, -{ 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, 1481 }, -{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "W:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 22 }, -{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "W:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 7 }, -{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 825 }, -{ 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, 2224 }, -{ 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, 2232 }, -{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 525 }, -{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 542 }, -{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 348 }, -{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 375 }, -{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 833 }, -{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 464 }, -{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 494 }, -{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 481 }, -{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 511 }, -{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 685 }, -{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 671 }, -{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "W:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 869 }, -{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 70 }, -{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 564 }, -{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "W:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 581 }, -{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 727 }, -{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 520 }, -{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 661 }, -{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 715 }, -{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 612 }, -{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 510 }, -{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "W:\\4ed\\code\\custom\\4coder_code_index_listers.cpp", 48, 12 }, -{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "W:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 54 }, -{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "W:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 77 }, -{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "W:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 41 }, -{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1641 }, -{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "W:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 9 }, -{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 211 }, -{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "W:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 295 }, -{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), true, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "W:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 301 }, -{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "W:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 267 }, -{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), true, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "W:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 277 }, -{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 165 }, -{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 177 }, -{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 189 }, -{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 195 }, -{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 201 }, -{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 207 }, -{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 213 }, -{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 221 }, -{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 171 }, -{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 183 }, -{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 863 }, -{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "W:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1627 }, -{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 457 }, -{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 469 }, -{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1435 }, -{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 44 }, -{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 237 }, -{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 }, -{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 29 }, -{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 231 }, -{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "W:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 243 }, -{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 780 }, -{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 265 }, -{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 336 }, -{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 348 }, -{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 354 }, -{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 407 }, -{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 431 }, -{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 419 }, -{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 437 }, -{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 514 }, -{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 528 }, -{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 486 }, -{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 471 }, -{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 500 }, -{ 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, 1475 }, -{ 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, 1469 }, -{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 445 }, -{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 507 }, -{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 521 }, -{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 479 }, -{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 463 }, -{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 493 }, -{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 330 }, -{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 342 }, -{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 401 }, -{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 425 }, -{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 413 }, -{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 364 }, -{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 373 }, -{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 849 }, -{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 855 }, -{ 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, 1560 }, -{ 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, 1891 }, -{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 46 }, -{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 62 }, -{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 54 }, -{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1592 }, -{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 310 }, -{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 300 }, -{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 372 }, -{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 364 }, -{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 127 }, -{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 202 }, -{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 161 }, -{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 209 }, -{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 106 }, -{ PROC_LINKS(play_with_a_counter, 0), false, "play_with_a_counter", 19, "Example of query bar", 20, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 29 }, -{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 226 }, -{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 219 }, -{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 212 }, -{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "W:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 886 }, -{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1290 }, -{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 871 }, -{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 897 }, -{ 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, 1251 }, -{ 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, 1272 }, -{ 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, 1288 }, -{ 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, 1730 }, -{ 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, 1815 }, -{ 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, 1400 }, -{ 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, 1659 }, -{ 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, 1161 }, -{ 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, 1152 }, -{ 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, 1143 }, -{ 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, 1084 }, -{ 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, 1096 }, -{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1649 }, -{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 382 }, -{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1367 }, -{ 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, 1078 }, -{ 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, 1090 }, -{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2212 }, -{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2200 }, -{ 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, 2218 }, -{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "W:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2206 }, -{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 537 }, -{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 57 }, -{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 66 }, -{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 82 }, -{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 99 }, -{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 27 }, -{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "W:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 39 }, -{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "W:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 125 }, -{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "W:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 112 }, -{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "W:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 86 }, -{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "W:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 99 }, -{ PROC_LINKS(set_face_size, 0), false, "set_face_size", 13, "Set face size of the face used by the current buffer.", 53, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 707 }, -{ PROC_LINKS(set_face_size_this_buffer, 0), false, "set_face_size_this_buffer", 25, "Set face size of the face used by the current buffer; if any other buffers are using the same face a new face is created so that only this buffer is effected", 157, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 749 }, -{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 115 }, -{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 427 }, -{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 421 }, -{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1238 }, -{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1250 }, -{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1244 }, -{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1231 }, -{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 678 }, -{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 664 }, -{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "W:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 994 }, -{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 179 }, -{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 187 }, -{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 237 }, -{ PROC_LINKS(string_repeat, 0), false, "string_repeat", 13, "Example of query_user_string and query_user_number", 50, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 176 }, -{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 403 }, -{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1617 }, -{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "W:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 785 }, -{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 563 }, -{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 550 }, -{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 692 }, -{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 701 }, -{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 451 }, -{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 439 }, -{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 433 }, -{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 806 }, -{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 812 }, -{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 415 }, -{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 445 }, -{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 797 }, -{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles virtual whitespace for all files.", 41, "W:\\4ed\\code\\custom\\4coder_code_index.cpp", 40, 1176 }, -{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "W:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 20 }, -{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "W:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 34 }, -{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 137 }, -{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1717 }, -{ 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, 1744 }, -{ 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, 1605 }, -{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "W:\\4ed\\code\\custom\\4coder_jump_lister.cpp", 41, 59 }, -{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 395 }, -{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 642 }, -{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 94 }, -{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 82 }, -{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 88 }, -{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 67 }, -{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "W:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 433 }, -{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 59 }, -{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 76 }, -{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 73 }, -{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 100 }, +{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 409 }, +{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "w:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 413 }, +{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "w:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 423 }, +{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "w:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 404 }, +{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 154 }, +{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 96 }, +{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 647 }, +{ PROC_LINKS(begin_clipboard_collection_mode, 0), true, "begin_clipboard_collection_mode", 31, "Allows the user to copy multiple strings from other applications before switching to 4coder and pasting them all.", 113, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 68 }, +{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "w:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 159 }, +{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "w:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 122 }, +{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 197 }, +{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 284 }, +{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 290 }, +{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "w:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 180 }, +{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 636 }, +{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 480 }, +{ PROC_LINKS(clear_clipboard, 0), false, "clear_clipboard", 15, "Clears the history of the clipboard", 35, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 216 }, +{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 233 }, +{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 223 }, +{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 243 }, +{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 255 }, +{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 7 }, +{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 843 }, +{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "w:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 174 }, +{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 655 }, +{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "w:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 190 }, +{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 761 }, +{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 125 }, +{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 149 }, +{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 107 }, +{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 124 }, +{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "w:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 175 }, +{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 116 }, +{ 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, 738 }, +{ 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, 1897 }, +{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 }, +{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 23 }, +{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 51 }, +{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 162 }, +{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 79 }, +{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 112 }, +{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1323 }, +{ 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, 1495 }, +{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 134 }, +{ PROC_LINKS(display_key_codes, 0), false, "display_key_codes", 17, "Example of input handling loop", 30, "w:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 90 }, +{ PROC_LINKS(display_text_input, 0), false, "display_text_input", 18, "Example of to_writable and leave_current_input_unhandled", 56, "w:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 134 }, +{ PROC_LINKS(double_backspace, 0), false, "double_backspace", 16, "Example of history group helpers", 32, "w:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 10 }, +{ 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, 1481 }, +{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "w:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 22 }, +{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "w:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 7 }, +{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 825 }, +{ 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, 2224 }, +{ 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, 2232 }, +{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 525 }, +{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 542 }, +{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 348 }, +{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 375 }, +{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 833 }, +{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 464 }, +{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 494 }, +{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 481 }, +{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 511 }, +{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 685 }, +{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 671 }, +{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 869 }, +{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 70 }, +{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 564 }, +{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 581 }, +{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 727 }, +{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 520 }, +{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 661 }, +{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 715 }, +{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 612 }, +{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 510 }, +{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "w:\\4ed\\code\\custom\\4coder_code_index_listers.cpp", 48, 12 }, +{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "w:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 54 }, +{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "w:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 77 }, +{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "w:\\4ed\\code\\custom\\4coder_keyboard_macro.cpp", 44, 41 }, +{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1641 }, +{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 9 }, +{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 211 }, +{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "w:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 295 }, +{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), true, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "w:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 301 }, +{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "w:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 267 }, +{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), true, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "w:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 277 }, +{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 165 }, +{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 177 }, +{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 189 }, +{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 195 }, +{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 201 }, +{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 207 }, +{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 213 }, +{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 221 }, +{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 171 }, +{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 183 }, +{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 863 }, +{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "w:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1627 }, +{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 457 }, +{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 469 }, +{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1435 }, +{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 44 }, +{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 237 }, +{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 }, +{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 29 }, +{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 231 }, +{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 243 }, +{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 780 }, +{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 265 }, +{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 336 }, +{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 348 }, +{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 354 }, +{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 407 }, +{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 431 }, +{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 419 }, +{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 437 }, +{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 514 }, +{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 528 }, +{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 486 }, +{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 471 }, +{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 500 }, +{ 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, 1475 }, +{ 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, 1469 }, +{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 445 }, +{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 507 }, +{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 521 }, +{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 479 }, +{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 463 }, +{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 493 }, +{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 330 }, +{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 342 }, +{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 401 }, +{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 425 }, +{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 413 }, +{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 364 }, +{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 373 }, +{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 849 }, +{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 855 }, +{ 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, 1560 }, +{ 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, 1891 }, +{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 46 }, +{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 62 }, +{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 54 }, +{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1592 }, +{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 310 }, +{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 300 }, +{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 372 }, +{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 364 }, +{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 127 }, +{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 202 }, +{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 161 }, +{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 209 }, +{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 106 }, +{ PROC_LINKS(play_with_a_counter, 0), false, "play_with_a_counter", 19, "Example of query bar", 20, "w:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 29 }, +{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "w:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 226 }, +{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "w:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 219 }, +{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "w:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 212 }, +{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "w:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 886 }, +{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1290 }, +{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 871 }, +{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 897 }, +{ 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, 1251 }, +{ 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, 1272 }, +{ 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, 1288 }, +{ 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, 1730 }, +{ 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, 1815 }, +{ 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, 1400 }, +{ 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, 1659 }, +{ 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, 1161 }, +{ 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, 1152 }, +{ 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, 1143 }, +{ 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, 1084 }, +{ 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, 1096 }, +{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1649 }, +{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 382 }, +{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1367 }, +{ 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, 1078 }, +{ 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, 1090 }, +{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2212 }, +{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2200 }, +{ 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, 2218 }, +{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2206 }, +{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 537 }, +{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 57 }, +{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 66 }, +{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 82 }, +{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 99 }, +{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 27 }, +{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "w:\\4ed\\code\\custom\\4coder_scope_commands.cpp", 44, 39 }, +{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 125 }, +{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 112 }, +{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 86 }, +{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 99 }, +{ PROC_LINKS(set_face_size, 0), false, "set_face_size", 13, "Set face size of the face used by the current buffer.", 53, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 707 }, +{ PROC_LINKS(set_face_size_this_buffer, 0), false, "set_face_size_this_buffer", 25, "Set face size of the face used by the current buffer; if any other buffers are using the same face a new face is created so that only this buffer is effected", 157, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 749 }, +{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 115 }, +{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 427 }, +{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 421 }, +{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1238 }, +{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1250 }, +{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1244 }, +{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1231 }, +{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 678 }, +{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 664 }, +{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "w:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 994 }, +{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 179 }, +{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 187 }, +{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 237 }, +{ PROC_LINKS(string_repeat, 0), false, "string_repeat", 13, "Example of query_user_string and query_user_number", 50, "w:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 176 }, +{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 403 }, +{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1617 }, +{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 785 }, +{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 563 }, +{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 550 }, +{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 692 }, +{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 701 }, +{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 451 }, +{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 439 }, +{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 433 }, +{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 806 }, +{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 812 }, +{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 415 }, +{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 445 }, +{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 797 }, +{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles virtual whitespace for all files.", 41, "w:\\4ed\\code\\custom\\4coder_code_index.cpp", 40, 1176 }, +{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 20 }, +{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 34 }, +{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 137 }, +{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1717 }, +{ 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, 1744 }, +{ 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, 1605 }, +{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "w:\\4ed\\code\\custom\\4coder_jump_lister.cpp", 41, 59 }, +{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 395 }, +{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "w:\\4ed\\code\\custom\\4coder_search.cpp", 36, 642 }, +{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 94 }, +{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 82 }, +{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 88 }, +{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 67 }, +{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "w:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 433 }, +{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 59 }, +{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 76 }, +{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 73 }, +{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 100 }, }; static i32 fcoder_metacmd_ID_allow_mouse = 0; static i32 fcoder_metacmd_ID_auto_indent_line_at_cursor = 1; From d72636138d6871acfb022a0e48af64afba1c7df9 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Sat, 7 Mar 2020 14:54:52 -0800 Subject: [PATCH 09/10] Normal count type in Color_Table --- custom/4coder_config.cpp | 2 +- custom/4coder_default_colors.cpp | 4 ++-- custom/4coder_types.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/custom/4coder_config.cpp b/custom/4coder_config.cpp index d2134b86..52bc6a14 100644 --- a/custom/4coder_config.cpp +++ b/custom/4coder_config.cpp @@ -1643,7 +1643,7 @@ CUSTOM_DOC("Parse the current buffer as a theme file and add the theme to the th if (color_table.count < defcolor_line_numbers_text){ problem_score = defcolor_line_numbers_text - color_table.count; } - for (u32 i = 0; i < color_table.count; i += 1){ + for (i32 i = 0; i < color_table.count; i += 1){ if (color_table.arrays[i].count == 0){ problem_score += 1; } diff --git a/custom/4coder_default_colors.cpp b/custom/4coder_default_colors.cpp index 94554e66..21b73903 100644 --- a/custom/4coder_default_colors.cpp +++ b/custom/4coder_default_colors.cpp @@ -1,4 +1,4 @@ -/* +/* * Default color slots */ @@ -94,7 +94,7 @@ make_color_table(Application_Links *app, Arena *arena){ result.arrays = push_array(arena, Color_Array, result.count); u32 *dummy = push_array(arena, u32, 1); *dummy = 0xFF990099; - for (u32 i = 0; i < result.count; i += 1){ + for (i32 i = 0; i < result.count; i += 1){ result.arrays[i].vals = dummy; result.arrays[i].count = 1; } diff --git a/custom/4coder_types.h b/custom/4coder_types.h index 0898ad28..cc148f46 100644 --- a/custom/4coder_types.h +++ b/custom/4coder_types.h @@ -55,7 +55,7 @@ struct Color_Array{ api(custom) struct Color_Table{ Color_Array *arrays; - u32 count; + i32 count; }; api(custom) From 8b2281e09382efd871c6aa4d24e56b3d16926ee1 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Mon, 9 Mar 2020 21:05:45 -0700 Subject: [PATCH 10/10] Bindings only do strict-matching now so ordering is less important and less confusing --- custom/4coder_command_map.cpp | 25 ++++++++++++++++++------- custom/4coder_default_map.cpp | 2 +- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/custom/4coder_command_map.cpp b/custom/4coder_command_map.cpp index 0d0ae016..eec9e109 100644 --- a/custom/4coder_command_map.cpp +++ b/custom/4coder_command_map.cpp @@ -208,9 +208,11 @@ map_get_binding_non_recursive(Command_Map *map, Input_Event *event){ } else if (map != 0){ b32 do_table_lookup = false; - Input_Modifier_Set *mods = 0; + Input_Modifier_Set *mod_set = 0; u64 key = 0; + Key_Code skip_self_mod = 0; + // TODO(allen): extract and make sure we only do this once for recursive version. switch (event->kind){ case InputEventKind_TextInsert: { @@ -221,28 +223,29 @@ map_get_binding_non_recursive(Command_Map *map, Input_Event *event){ { key = mapping__key(InputEventKind_KeyStroke, event->key.code); do_table_lookup = true; - mods = &event->key.modifiers; + mod_set = &event->key.modifiers; + skip_self_mod = event->key.code; }break; case InputEventKind_MouseButton: { key = mapping__key(InputEventKind_MouseButton, event->mouse.code); do_table_lookup = true; - mods = &event->mouse.modifiers; + mod_set = &event->mouse.modifiers; }break; case InputEventKind_MouseWheel: { key = mapping__key(InputEventKind_MouseWheel, 0); do_table_lookup = true; - mods = &event->mouse_wheel.modifiers; + mod_set = &event->mouse_wheel.modifiers; }break; case InputEventKind_MouseMove: { key = mapping__key(InputEventKind_MouseMove, 0); do_table_lookup = true; - mods = &event->mouse_move.modifiers; + mod_set = &event->mouse_move.modifiers; }break; case InputEventKind_Core: @@ -258,7 +261,7 @@ map_get_binding_non_recursive(Command_Map *map, Input_Event *event){ u64 val = 0; table_read(&map->event_code_to_binding_list, lookup, &val); Command_Binding_List *list = (Command_Binding_List*)IntAsPtr(val); - if (mods != 0){ + if (mod_set != 0){ for (SNode *node = list->first; node != 0; node = node->next){ @@ -268,7 +271,15 @@ map_get_binding_non_recursive(Command_Map *map, Input_Event *event){ i32 binding_mod_count = binding_mod_set->count; Key_Code *binding_mods = binding_mod_set->mods; for (i32 i = 0; i < binding_mod_count; i += 1){ - if (!has_modifier(mods, binding_mods[i])){ + if (!has_modifier(mod_set, binding_mods[i])){ + is_a_match = false; + break; + } + } + i32 mod_count = mod_set->count; + Key_Code *mods = mod_set->mods; + for (i32 i = 0; i < mod_count; i += 1){ + if (mods[i] != skip_self_mod && !has_modifier(binding_mod_set, mods[i])){ is_a_match = false; break; } diff --git a/custom/4coder_default_map.cpp b/custom/4coder_default_map.cpp index e39b732a..b186a45c 100644 --- a/custom/4coder_default_map.cpp +++ b/custom/4coder_default_map.cpp @@ -37,6 +37,7 @@ setup_default_mapping(Mapping *mapping, i64 global_id, i64 file_id, i64 code_id) Bind(command_lister, KeyCode_X, KeyCode_Alt); Bind(project_command_lister, KeyCode_X, KeyCode_Alt, KeyCode_Shift); Bind(list_all_functions_current_buffer_lister, KeyCode_I, KeyCode_Control, KeyCode_Shift); + Bind(exit_4coder, KeyCode_F4, KeyCode_Alt); Bind(project_fkey_command, KeyCode_F1); Bind(project_fkey_command, KeyCode_F2); Bind(project_fkey_command, KeyCode_F3); @@ -53,7 +54,6 @@ setup_default_mapping(Mapping *mapping, i64 global_id, i64 file_id, i64 code_id) Bind(project_fkey_command, KeyCode_F14); Bind(project_fkey_command, KeyCode_F15); Bind(project_fkey_command, KeyCode_F16); - Bind(exit_4coder, KeyCode_F4, KeyCode_Alt); BindMouseWheel(mouse_wheel_scroll); BindMouseWheel(mouse_wheel_change_face_size, KeyCode_Control);