Config printing

master
Allen Webster 2018-05-27 18:00:13 -07:00
parent 3c2a71d7c3
commit 59e2a62f37
7 changed files with 322 additions and 596 deletions

View File

@ -70,23 +70,25 @@ get_error_location(char *base, char *pos){
static String static String
config_stringize_errors(Partition *arena, Config *parsed){ config_stringize_errors(Partition *arena, Config *parsed){
String result = {0}; String result = {0};
result.str = push_array(arena, char, 0); if (parsed->first_error != 0){
result.memory_size = partition_remaining(arena); result.str = push_array(arena, char, 0);
for (Config_Error *error = parsed->first_error; result.memory_size = partition_remaining(arena);
error != 0; for (Config_Error *error = parsed->first_error;
error = error->next){ error != 0;
Error_Location location = get_error_location(parsed->data.str, error->pos); error = error->next){
append(&result, error->file_name); Error_Location location = get_error_location(parsed->data.str, error->pos);
append(&result, ":"); append(&result, error->file_name);
append_int_to_str(&result, location.line_number); append(&result, ":");
append(&result, ":"); append_int_to_str(&result, location.line_number);
append_int_to_str(&result, location.column_number); append(&result, ":");
append(&result, ": "); append_int_to_str(&result, location.column_number);
append(&result, error->text); append(&result, ": ");
append(&result, "\n"); append(&result, error->text);
append(&result, "\n");
}
result.memory_size = result.size;
push_array(arena, char, result.size);
} }
result.memory_size = result.size;
push_array(arena, char, result.size);
return(result); return(result);
} }
@ -1182,17 +1184,104 @@ theme_parse__file_name(Application_Links *app, Partition *arena,
//////////////////////////////// ////////////////////////////////
static void
config_feedback_bool(String *space, char *name, bool32 val){
append(space, name);
append(space, " = ");
append(space, val?"true":"false");
append(space, ";\n");
}
static void
config_feedback_string(String *space, char *name, String val){
if (val.size > 0){
append(space, name);
append(space, " = \"");
append(space, val);
append(space, "\";\n");
}
}
static void
config_feedback_string(String *space, char *name, char *val){
config_feedback_string(space, name, make_string_slowly(val));
}
static void
config_feedback_extension_list(String *space, char *name, Extension_List *list){
if (list->count > 0){
append(space, name);
append(space, " = \"");
for (int32_t i = 0; i < list->count; ++i){
append(space, ".");
append(space, list->exts[i]);
}
append(space, "\";\n");
}
}
static void
config_feedback_int(String *space, char *name, int32_t val){
append(space, name);
append(space, " = ");
append_int_to_str(space, val);
append(space, ";\n");
}
////////////////////////////////
static void static void
load_config_and_apply(Application_Links *app, Partition *scratch, Config_Data *config){ load_config_and_apply(Application_Links *app, Partition *scratch, Config_Data *config){
Temp_Memory temp = begin_temp_memory(scratch); Temp_Memory temp = begin_temp_memory(scratch);
Config *parsed = config_parse__file_name(app, scratch, "config.4coder", config); Config *parsed = config_parse__file_name(app, scratch, "config.4coder", config);
String error_text = config_stringize_errors(scratch, parsed);
print_message(app, error_text.str, error_text.size);
end_temp_memory(temp);
change_mapping(app, config->current_mapping); if (parsed != 0){
adjust_all_buffer_wrap_widths(app, config->default_wrap_width, config->default_min_base_width); // Top
global_set_setting(app, GlobalSetting_LAltLCtrlIsAltGr, config->lalt_lctrl_is_altgr); print_message(app, literal("Loaded config file:\n"));
// Errors
String error_text = config_stringize_errors(scratch, parsed);
if (error_text.str != 0){
print_message(app, error_text.str, error_text.size);
}
// Values
Temp_Memory temp2 = begin_temp_memory(scratch);
String space = push_string(scratch, partition_remaining(scratch));
config_feedback_string(&space, "user_name", config->user_name);
config_feedback_extension_list(&space, "treat_as_code", &config->code_exts);
config_feedback_string(&space, "current_mapping", config->current_mapping);
config_feedback_bool(&space, "enable_code_wrapping", config->enable_code_wrapping);
config_feedback_bool(&space, "automatically_indent_text_on_save", config->automatically_indent_text_on_save);
config_feedback_bool(&space, "automatically_save_changes_on_build", config->automatically_save_changes_on_build);
config_feedback_bool(&space, "automatically_adjust_wrapping", config->automatically_adjust_wrapping);
config_feedback_bool(&space, "automatically_load_project", config->automatically_load_project);
config_feedback_int(&space, "default_wrap_width", config->default_wrap_width);
config_feedback_int(&space, "default_min_base_width", config->default_min_base_width);
config_feedback_string(&space, "default_theme_name", config->default_theme_name);
config_feedback_string(&space, "default_font_name", config->default_font_name);
config_feedback_string(&space, "default_compiler_bat", config->default_compiler_bat);
config_feedback_string(&space, "default_flags_bat", config->default_flags_bat);
config_feedback_string(&space, "default_compiler_sh", config->default_compiler_sh);
config_feedback_string(&space, "default_flags_sh", config->default_flags_sh);
config_feedback_bool(&space, "lalt_lctrl_is_altgr", config->lalt_lctrl_is_altgr);
append(&space, "\n");
print_message(app, space.str, space.size);
end_temp_memory(temp2);
// Apply config
change_mapping(app, config->current_mapping);
adjust_all_buffer_wrap_widths(app, config->default_wrap_width, config->default_min_base_width);
global_set_setting(app, GlobalSetting_LAltLCtrlIsAltGr, config->lalt_lctrl_is_altgr);
}
end_temp_memory(temp);
} }
static void static void

View File

@ -146,15 +146,22 @@ struct CString_Array{
}; };
struct Config_Data{ struct Config_Data{
int32_t default_wrap_width; char user_name_space[256];
int32_t default_min_base_width; String user_name;
Extension_List code_exts;
char current_mapping_space[256];
String current_mapping;
bool32 enable_code_wrapping; bool32 enable_code_wrapping;
bool32 automatically_adjust_wrapping;
bool32 automatically_indent_text_on_save; bool32 automatically_indent_text_on_save;
bool32 automatically_save_changes_on_build; bool32 automatically_save_changes_on_build;
bool32 automatically_adjust_wrapping;
bool32 automatically_load_project; bool32 automatically_load_project;
bool32 lalt_lctrl_is_altgr;
int32_t default_wrap_width;
int32_t default_min_base_width;
char default_theme_name_space[256]; char default_theme_name_space[256];
String default_theme_name; String default_theme_name;
@ -162,9 +169,6 @@ struct Config_Data{
char default_font_name_space[256]; char default_font_name_space[256];
String default_font_name; String default_font_name;
char user_name_space[256];
String user_name;
char default_compiler_bat_space[256]; char default_compiler_bat_space[256];
String default_compiler_bat; String default_compiler_bat;
@ -177,10 +181,7 @@ struct Config_Data{
char default_flags_sh_space[1024]; char default_flags_sh_space[1024];
String default_flags_sh; String default_flags_sh;
char current_mapping_space[256]; bool32 lalt_lctrl_is_altgr;
String current_mapping;
Extension_List code_exts;
}; };
struct Theme_Data{ struct Theme_Data{

View File

@ -356,14 +356,12 @@ buffer_set_font(Application_Links *app, Buffer_Summary *buffer, char *name, int3
static Face_ID static Face_ID
get_face_id_by_description(Application_Links *app, Face_Description *description, Face_Description *base_description){ get_face_id_by_description(Application_Links *app, Face_Description *description, Face_Description *base_description){
Face_ID new_id = 0; Face_ID new_id = 0;
if (!descriptions_match(description, base_description)){ if (!descriptions_match(description, base_description)){
new_id = get_existing_face_id_matching_description(app, description); new_id = get_existing_face_id_matching_description(app, description);
if (new_id == 0){ if (new_id == 0){
new_id = try_create_new_face(app, description); new_id = try_create_new_face(app, description);
} }
} }
return(new_id); return(new_id);
} }
@ -423,6 +421,16 @@ init_memory(Application_Links *app){
static void static void
default_4coder_initialize(Application_Links *app, bool32 use_scrollbars, bool32 use_file_bars){ default_4coder_initialize(Application_Links *app, bool32 use_scrollbars, bool32 use_file_bars){
init_memory(app); init_memory(app);
static const char message[] = ""
"Welcome to " VERSION "\n"
"If you're new to 4coder there are some tutorials at http://4coder.net/tutorials.html\n"
"Direct bug reports to editor@4coder.net for maximum reply speed\n"
"Questions or requests can go to editor@4coder.net or to 4coder.handmade.network\n"
"\n";
String msg = make_lit_string(message);
print_message(app, msg.str, msg.size);
load_config_and_apply(app, &global_part, &global_config); load_config_and_apply(app, &global_part, &global_config);
load_folder_of_themes_into_live_set(app, &global_part, "themes"); load_folder_of_themes_into_live_set(app, &global_part, "themes");

199
4ed.cpp
View File

@ -9,199 +9,6 @@
// TOP // TOP
// Messages
global_const char messages[] =
"----------------------------------------------------------------\n"
"Welcome to " VERSION "\n"
"If you're new to 4coder there are some tutorials at http://4coder.net/tutorials.html\n"
"Direct bug reports to editor@4coder.net for maximum reply speed\n"
"Questions or requests can go to editor@4coder.net or to 4coder.handmade.network\n"
"\n"
"In alpha 4.0.26:\n"
" Routine bug fixing...\n"
"-Fixed various text input crash bugs\n"
"-Fixed load large file crash bug\n"
"-Fixed crash in 'list_all_locations_of_type_definition_of_identifier'\n"
"-Fixed sticky jump crash\n"
"-Fixed line move/delete bugs on last line of file\n"
"-Fixed <end> to work on indefinitely long lines\n"
"-Fixed jump behavior quirks with parsing and cursor movement\n"
"-Fixed rare bug causing copy from other applications to fail on Windows\n"
"-Fixed auto indent commands to do a better job picking an anchor for parsing\n"
" Testing system now in place (windows only):\n"
" Flag -R <file-name> creates an 'input recording' file of the 4coder session\n"
" Flag -T <file-name> overrides user input and drives input by the input recorded in the specified file\n"
"\n"
"\n"
"New in alpha 4.0.25:\n"
"-Support for unbounded paste sizes\n"
"-Window title now reflects the open project file\n"
"-Buffer names resolve with more path information instead of just a counter\n"
"-Support for Rust error format and improved autoindenting for Rust\n"
"-Work around for bug in make on Windows\n"
"-New commands:\n"
" <ctrl 1> show the current buffer in the other panel (side by side)\n"
" <ctrl 2> show the current buffer in the other panel (swap with other buffer)\n"
" <alt D> list all type definition locations of a particular string ~ if only one jump to it instead\n"
" <alt T> list all type definition locations of the token under the cursor ~ if only one jump to it instead\n"
"-The indenter no longer does anything to multi-line strings such as raw strings.\n"
"-The customization API now has the ability to set the window's title.\n"
"-The customization API has a hook for resolving buffer name conflicts.\n"
"\n"
"New in alpha 4.0.24:\n"
"-Fonts can now be loaded from the system API or from the fonts folder\n"
"-Fonts can now be resized at run time, hinting can be toggled at run time\n"
"-Fonts can now be rendered with any combination of the styles: bold, italic, underline\n"
" (That is provided the font supports the style.)\n"
"-Now font faces can have different sizes simultaneously, or have the different hinting or styling configurations.\n"
"-Lots of new built in commands including:\n"
" <ctrl D> delete the line under the cursor\n"
" <ctrl L> duplicate the line under the cursor\n"
" <alt up> move the line under the cursor up\n"
" <alt down> move the line under the cursor down\n"
" <alt [> select surrounding scope in code file\n"
" <alt ]> select the next scope up in code file\n"
" <alt '> select the next scope down in code file\n"
" <alt -> if a scope is selected, delete it's braces\n"
" <alt j> if a scope is selected, absorb the statement below it into the scope\n"
" <alt x> + 'delete file' close the current buffer and delete it's physical file\n"
" <alt x> + 'rename file' rename the current buffer's physical file and reopen the buffer with the new file name\n"
" <alt x> + 'mkdir' create a new directory\n"
"-The customization API is extended for more explicit font face control.\n"
"-The customization API comes with a parser and generator for generating metadata on built in and custom commands.\n"
"\n"
"New in alpha 4.0.22 and 4.0.23:\n"
"-The rendering layer is cleaned up and faster\n"
"-4coder can now ship with multiple built in command bindings\n"
" New built in binding \"mac-default\": For the mac version of 4coder - similar to most Mac applications\n"
"-Fullscreen now works on Windows without the '-S' flag\n"
"-Set up a single 4coder project for Windows/Linux/Mac in one command: <alt x> -> \"new project\"\n"
"\n"
"New in alpha 4.0.21:\n"
"-Color schemes are now loaded in theme files from the \"themes\" folder\n"
"-After loading a project <alt h> sets the hot directory to the project directory\n"
"-The flag -L enables a logging system that will collect information in case more information is needed while debugging a problem\n"
"-All command line flags after the special flag --custom are now passed to the custom API start hook\n"
"-The start hook now gets the list of file names that were specified on the command line\n"
" All of the files specified on the command line are loaded before the start hook runs\n"
"-It is now possible to set the hot directory from the custom API\n"
"-On windows the buildsuper scripts are improved to look for vcvarsall.bat in lots of common locations\n"
"\n"
"New in alpha 4.0.20:\n"
"-Option for LAlt + LCtrl = AltGr on Windows is now in config.4coder\n"
"-The 4cpp lexer now has a customizable keyword table, *experimental* expansion of language support to:\n"
" Rust, C#, Java\n"
" Arbitrary keyword customization available in custom code (super users)\n"
"\n"
"New in alpha 4.0.19:\n"
"-Lexer now handles string literal prefixes and is more optimized\n"
"-Fixes for lingering unicode bugs\n"
"-Power users have an experimental new jump to error that keeps correct positions through edits (coming to all tiers soon)\n"
"\n"
"New in alpha 4.0.18:\n"
"-Support for rendering unicode characters\n"
"-<ctrl t> isearch alpha-numeric word under cursor\n"
"-<ctrl Q> query replace alpha-numeric word under cursor\n"
"-<alt b> toggle file bar\n"
"\n"
"New in alpha 4.0.17:\n"
"-New support for extended ascii input.\n"
"-Extended ascii encoded in buffers as utf8.\n"
"-The custom layer now has a 'markers' API for tracking buffer positions across changes.\n"
"\n"
"New in alpha 4.0.16:\n"
"-<alt 2> If the current file is a C++ code file, this opens the matching header.\n"" If the current file is a C++ header, this opens the matching code file.\n"
"-Option to automatically save changes on build in the config file.\n"
" This works for builds triggered by <alt m>.\n"
"-Option in project files to have certain fkey commands save changes.\n"
"\n"
"New in alpha 4.0.15:\n"
"-<ctrl I> find all functions in the current buffer and list them in a jump buffer\n"
"-option to set user name in config.4coder\n"
" The user name is used in <alt t> and <alt y> comment writing commands\n"
"\n"
"New in alpha 4.0.14:\n"
"-Option to have wrap widths automatically adjust based on average view width\n"
"-The 'config.4coder' file can now be placed with the 4ed executable file\n"
"-New options in 'config.4coder' to specify the font and color theme\n"
"-New built in project configuration system\n"
"-New on-save hooks allows custom behavior in the custom layer whenever a file is saved\n"
"-When using code wrapping, any saved file is automatically indented in the text format, this option can be turned off in config.4coder\n"
"\n"
"New in alpha 4.0.12 and 4.0.13:\n"
"-Text files wrap lines at whitespace when possible\n"
"-New code wrapping feature is on by default\n"
"-Introduced a 'config.4coder' for setting several wrapping options:\n"
" enable_code_wrapping: set to false if you want the text like behavior\n"
" default_wrap_width: the wrap width to set in new files\n"
"-<ctrl 2> decrease the current buffer's wrap width\n"
"-<ctrl 3> increase the current buffer's wrap width\n"
"-In the customization layer new settings for the buffer are exposed dealing with wrapping\n"
"-In the customization layer there is a call for setting what keys the GUI should use\n"
"\n"
"New in alpha 4.0.11:\n"
"-The commands for going to next error, previous error, etc now work\n"
" on any buffer with jump locations including *search*\n"
"-4coder now supports proper, borderless, fullscreen with the flag -F\n"
" and fullscreen can be toggled with <control pageup>.\n"
" (This sometimes causes artifacts on the Windows task bar)\n"
"-<alt E> to exit\n"
"-hook on exit for the customization system\n"
"-tokens now exposed in customization system\n"
"-mouse release events in customization system\n"
"\n"
"New in alpha 4.0.10:\n"
"-<ctrl F> list all locations of a string across all open buffers\n"
"-Build now finds build.sh and Makefile on Linux\n"
"-<alt n> goes to the next error if the *compilation* buffer is open\n"
"-<alt N> goes to the previous error\n"
"-<alt M> goes to the first error\n"
"-<alt .> switch to the compilation buffer\n"
"-<alt ,> close the panel viewing the compilation buffer\n"
"-New documentation for the 4coder string library included in 4coder_API.html\n"
"-Low level allocation calls available in custom API\n"
"-Each panel can change font independently.\n"
" Per-buffer fonts are exposed in the custom API.\n"
"\n"
"New in alpha 4.0.9:\n"
"-A scratch buffer is now opened with 4coder automatically\n"
"-A new mouse suppression mode toggled by <F2>\n"
"-Hinting is disabled by default, a -h flag on the command line enables it\n"
"-New 4coder_API.html documentation file provided for the custom layer API\n"
"-Experimental new work-flow for building and jumping to errors\n"
" This system is only for MSVC in the 'power' version as of 4.0.9\n"
"\n"
"New in alpha 4.0.8:\n"
"-Eliminated the parameter stack\n"
"\n"
"New in alpha 4.0.7:\n"
"-Right click sets the mark\n"
"-Clicks now have key codes so they can have events bound in customizations\n"
"-<alt d> opens a debug view, see more in README.txt\n"
"\n"
"New in alpha 4.0.6:\n"
"-Tied the view scrolling and the list arrow navigation together\n"
"-Scroll bars are now toggleable with <alt s> for show and <alt w> for hide\n"
"\n"
"New in alpha 4.0.5:\n"
"-New indent rule\n"
"-app->buffer_compute_cursor in the customization API\n"
"-f keys are available in the customization system now\n"
"\n"
"New in alpha 4.0.3 and 4.0.4:\n"
"-Scroll bar on files and file lists\n"
"-Arrow navigation in lists\n"
"-A new minimal theme editor\n"
"\n"
"New in alpha 4.0.2:\n"
"-The file count limit is over 8 million now\n"
"-File equality is handled better so renamings (such as 'subst') are safe now\n"
"-This buffer will report events including errors that happen in 4coder\n"
"-Super users can post their own messages here with app->print_message\n"
"-<ctrl e> centers view on cursor; cmdid_center_view in customization API\n"
"-Set font size on command line with -f N, N = 16 by default\n\n";
// App Structs // App Structs
#define DEFAULT_DISPLAY_WIDTH 672 #define DEFAULT_DISPLAY_WIDTH 672
@ -2247,12 +2054,6 @@ App_Step_Sig(app_step){
} }
} }
// NOTE(allen): initialize message
if (input->first_step){
String welcome = make_lit_string(messages);
do_feedback_message(system, models, welcome, true);
}
// NOTE(allen): panel resizing // NOTE(allen): panel resizing
switch (vars->state){ switch (vars->state){
case APP_STATE_EDIT: case APP_STATE_EDIT:

359
TODO.txt
View File

@ -1,359 +0,0 @@
; Started this list on: (18.01.2016)(dd.mm.yyyy)
; This list is an informal todo list, it may very well miss items
; checked or unchecked, that I inted to do some day. It is included
; in the distribution so that you may take a look and see if your
; requested feature is there, and if not, so that you may remind me.
; Cheers everyone!
; BUGS
; [X] '\t' thing
; [X] smoothness in smoothscrolling isn't very smooth
; [X] examine ctrl left/right "stopspots" again
; [X] whitespace left/right
; [X] token left/right
; [X] white or token left/right
; [X] alphanumeric left/right
; [X] alphanumeric or camel left/right
; [X] jumping to top of buffer when invoking compiler
; [X] don't darken character with cursor ghost
; [X] only shows LOADED when all spelled out
; [X] cursor image is broken
; [X] special characters aren't colored correctly
; [X] screen does not always paint on open
; [X] unimportant flag for buffers so they don't ask to save
; [X] problem with clipping panel
; [X] paste highlight range is wrong
; [X] bug in new file interface
; [X] interactive open shouldn't be case sensitive (esp in windows)
; [X] REOPEN is still disabled!
; [X] lctrl + lalt = AltGr option
; [X] don't cursor ghost search highlights
; [X] auto indent stopped working (maps incorrect in one of the views?)
; [X] Assert(size + buffer->line_count < max)
; [X] unsigned
; [X] shift+backspace in interactive view is messed up
; [X] scrolls with mouse off window
; [X] file open same file/switch to file settings wrong
; [X] show whitespace isn't working
; [X] lexer in 4cpp_config.h
; [X] steady view in two panel editing of same file
; [X] offer error
; [X] switch to file "4ed.cpp" with "win32_4ed.cpp" open
; [X] inserting new line at top of file ~ scrolling jump when window is unaligned
; [X] saving/killing *compilation* doesn't work
; [X] line wrapping also doesn't work
; [X] save as corruptitates the filename
; [X] crash when leaving maximized mode and view get's weird
; [X] decrease scroll speed on short windows
; [X] different files, same live name, big ol' bug nest
; [X] can't open 4coder in arbitrary directory
; [X] shift tab
; [X] after auto indent always put cursor after whitespace
; [X] file menu non-ascii file names
; [X] strip \r in paste
; [X] page up scrolling stuff
; [X] stop spots for camel case aren't super
; [X] unmodified command then get's inserted in new view (z bug from hmh)
; [X] view_id always 1 bug
; [X] interactive kill not working
; [X] mouse not working on interactive view
; [X] reopen effects other view too?
; [X] allen's segfaults on linux launch
; [X] open empty file bug
; [X] chronal's map setting issue
; [X] linux save jankieness
; [X] bouncing when scrolling down
; [X] sometimes the main cursor is not the same width as the mark cursor in the same spot
; [X] tab character wrong width
; [X] miblo's off screen cursor thing
; [X] new file is messed up for code files, it never finishes parsing!
; [X] key presses that should be consumed in the GUI are now passed to the file!
; [X] paste snaps the cursor back into view!
; [X] clean whitespace doesn't appear to be cleaning trailing whitespace anymore???
; [X] problem with end of line comments
; [X] paths with parens in them
; [X] killing compilation panel changes active panel
; [X] make panel resizing not whacky with child panels
; [X] visual studio file saves aren't picked up by the file track system
; [X] findstr format not quite working
; [X] over left-shifting the view?
;
; [] indication on failure to save
; [] history is broken, revist the entire system
;
;
; BEFORE I SHIP
;
; TODOS
; [X] success message when compiler works
; [X] auto-complete
; [X] detect word to match against
; [X] search in file range for next match and use if found
; [X] create repeatable tracker of previous match and files' searched
; [X] more options for getting buffer in custom API
; [X] write to buffer in custom API
; [X] querry buffer string in custom API
; [X] API for file views
; [X] Seek backwards option
; [X] Use range parameters in all applicable commands
; [X] generate enum for key codes
; [X] API for direct input
; [X] Seek string instead of delimiter
; [X] hook parameters
; [X] API based themes
; [X] improve file limit (now is > 8 million I think)
; [X] get key stroke in custom callback
; [X] tab option for auto-indent
; [X] catch unsaved files on close
; [X] feedback messages
; [X] feedback message API
; [X] kill rect
; [X] add high DPI support
; [X] error parsing and jump to error
; [X] manipulate scroll target API
; [X] generate documentation for custom API
; [X] flag in create buffer to prevent making new files
; [X] locking to a view for next position jumping
; [X] break down the build system and get away from the preproc hack
; [X] exit command
; [X] full screen option
; [X] add to APIs
; [X] try to make win32 version better
; [X] don't execute frames on events dealing only with ctrl/alt/shift
; [X] additional hooks
; [X] new file
; [X] hook on exit
; [X] file out of sync
; [X] mouse down/up distinction
; [X] case insensitive interactive switch buffer
; [X] expose dirty flags
; [X] why are command line files not loading any more?
; [X] use strange theme
; [X] cuber's return to previous buffer idea
; [X] find matches for current identifier
; [X] query buffer font info
; [X] issues with drive letters
; [X] ad hoc call for setting up/down keys for interactive screens
; [X] miblo's various number editors
; [X] eliminate the need for the lexer state's spare array.
; [X] fix buffer render item capacity issue
; [X] tab to complete folder names in the new file dialogue
; [X] API docs have duplicate ids?
; Token related upgrades
; [X] tokens in the custom API
; [X] token seeking on custom side
; [X] auto indent on the custom side
; [X] indent whole comments
; [X] inserting lines at end of block comment
; [] switch to line classification system
; [] more built in options for auto indenting
; Arbitrary wrap positions
; [X] allow for arbitrary wrap positions independent of view width
; [X] command for adjusting wrap positions in views
; [X] get horizontal scrolling to work in line wrap mode
; [X] word level wrapping
; [X] ability to toggle virtual white space
; [X] home/end should go to the beginning/end of the visual line not the textual line
; [X] code level wrapping level 1
; [X] handle basic scope indents
; [X] handle parentheses
; [X] handle preprocessor
; [X] unify wrap rule parsing and indent rule parsing
; [X] handle square brackets
; [X] smarter wrap rule
; [X] handle unclosed statements
; [X] wrapped line indication
; [X] special indent rules in preprocessor body
; [X] handle comments
; [X] additional width for nesting?
; [X] fix issues when relexing happens in parallel
; [X] improve code display mode so that it can auto-indent the text on save
; [] command for setting wrap positions in views directly
; [] ability to see the wrap position as a number/line and adjust graphically
; [] code level wrapping level 2
; [X] comment lead whitespace problem
; [] remeasure version of measure_wraps
; [] code file outlining
; [] alternate code completion plan
; Buffer behavior cleanup
; [X] show all characters as \# if they can't be rendered
; [X] get the navigation working correctly around multi-glyph characters
; [] provide full cursor positioning in buffers
; [] provide cursor positioning system that does columns correctly
; [] unicode buffer mode
; [] binary buffer mode
; [] support full length unicode file names
; [] user file bar string
; [] option to not open *messages* every startup
; [] API docs as text file
; [] read only files
; [] option to hide hidden files
; [] control over how mouse effects panel focus
; [] option to break buffer name ties by adding parent directories instead of <#>
; [] undo groups
; [] cursor/scroll groups
; [] double binding warnings
; [] the "main_4coder" experiment
; [] real multi-line editing
; [] multi-cursor editing
; [] matching brace/paren/#if#endif highlighting
; [] word repetition highlighting
; [] simple text based project file
; [] system commands bound to <ctrl #> in project file
; [] ability to save and reopen the window state
; [] introduce custom command line arguments
; [] control the file opening/start hook relationship better
; [] get keyboard state on launch
; [] never launch two 4coders unless special -R flag is used
; meta programming system
; [X] condense system into single meta compiler
; [X] formalize the documentation writer so the TOC can be better and so it's easier to shoot off other docs
; [] formalize the rewriter for the 4coder_string.h so it can be used for other single header libs
; [] profile and optimize the current metagen system
; [] expand the use of 4coder_types.h to also allow static variable and function declarations
; [] get more of the helper functions going through the documentation system
; [] method of virtually pulling the documentation line from another item rather than copy-pasting the text.
;
; GUI related tech
; [] scroll bar options
; [] buffer driven GUI experiment
;
; search related tech
; [X] replace word (incremental and/or in range)
; [X] caps insensitivety
; [X] improved custom API for text "streams"
; [X] wave search
; [] optimize search
; [] smarter isearch behavior
; [] cleanup word complete so it may be case-insensitive
;
; theme related business
; control schemes
; [] emacs style sub-maps
; [] vim keys
; [] sublime style editing
; [] command meta data
; [] macros
;
; code engine
; [X] lexer with multiple chunk input
; [X] more correct auto-indentation
; [X] switch over to gap buffer
; [] preprocessor
; [] AST generator
;
; "virtual text"
; [] line numbers
; [] macro expansion
; [] error text at line
; [] word complete ghosting
; [] fancy code presentation mode
;
; [] switch-case-enum based word complete
; [] keep copy of unedited orignal maybe? (compressed? restore by history?)
;
; [] diff
; [] cloc
; [] regex
; [] explicit panel layout
; [] polish for hot directories
;
; [] tutorials
; [] console emulator
;
; [] 10 GB text file
;
; INTERNAL TODOS
; [X] switch building non-extensible version by statically linking to custom.cpp
; [X] pack fonts more squarely
; [X] change job canceling to a polling based thing
; [] hashed string pool for clipboard/filenames/etc
; [] new profiling/debugging system
; [] new testing system
;
; EASY TODOS
; [X] better messages for example not "BEHIND OS"
; [X] shift backspace
; [X] center view on cursor
; [X] delta time in scroll interpolation
; [] panel grow/shrink commands
;
; HARD BUGS
; [X] reduce cpu consumption
; [X] repainting too slow for resize looks really dumb
; [X] fill screen right away
; [X] minimize and reopen problem (fixed by microsoft patch aparently)
; [] handling cursor in non-client part of window so it doesn't spaz
;
; [] a triangle rendered for a few frames? color of the dirty markers (not reproduced by me yet)
;
;
; PORTING TODOS
; [X] command line parameters
; [X] get command line arguments
; [X] user settings file name
; [X] custom DLL
; [X] window size and position / full screen
; [X] file(s) to open initially
; [X] position in file to open
; [X] transition Win32 layer to using system_shared stuff
; [X] event driven file synchronization
; [] user settings file
; [] system fonts
; [] file drag and drop
; [] low latency stuff
; [X] actually write the port
; [X] 4coder code compiling
; [X] opengl window up
; [X] basic versions of system functions
; [X] get 4coder to render to window
; [X] keyboard and mouse input (TY:insofaras)
; [X] file exchange (TY:insofaras)
; [X] clipboard (TY:insofaras)
; [X] background threads (TY:insofaras)
; [X] cli stuff (TY:insofaras)
; [X] event diven file synchronization (TY:insofaras)
; [] system fonts
; [] file drag and drop
; [] allow for multiple clipboards
; [] OS X port
; [X] 4coder code compiling
; [X] opengl window up
; [X] basic versions of system functions
; [X] get 4coder to render to window
; [] keyboard and mouse input
; [] file exchange
; [] clipboard
; [] background threads
; [] cli stuff
; [] event diven file synchronization
; [] system fonts
; [] file drag and drop
; [] allow for multiple clipboards
;

185
changes.txt Normal file
View File

@ -0,0 +1,185 @@
New in alpha 4.0.26:
Routine bug fixing...
-Fixed various text input crash bugs
-Fixed load large file crash bug
-Fixed crash in 'list_all_locations_of_type_definition_of_identifier'
-Fixed sticky jump crash
-Fixed line move/delete bugs on last line of file
-Fixed <end> to work on indefinitely long lines
-Fixed jump behavior quirks with parsing and cursor movement
-Fixed rare bug causing copy from other applications to fail on Windows
-Fixed auto indent commands to do a better job picking an anchor for parsing
Testing system now in place (windows only):
Flag -R <file-name> creates an 'input recording' file of the 4coder session
Flag -T <file-name> overrides user input and drives input by the input recorded in the specified file
New in alpha 4.0.25:
-Support for unbounded paste sizes
-Window title now reflects the open project file
-Buffer names resolve with more path information instead of just a counter
-Support for Rust error format and improved autoindenting for Rust
-Work around for bug in make on Windows
-New commands:
<ctrl 1> show the current buffer in the other panel (side by side)
<ctrl 2> show the current buffer in the other panel (swap with other buffer)
<alt D> list all type definition locations of a particular string ~ if only one jump to it instead
<alt T> list all type definition locations of the token under the cursor ~ if only one jump to it instead
-The indenter no longer does anything to multi-line strings such as raw strings.
-The customization API now has the ability to set the window's title.
-The customization API has a hook for resolving buffer name conflicts.
New in alpha 4.0.24:
-Fonts can now be loaded from the system API or from the fonts folder
-Fonts can now be resized at run time, hinting can be toggled at run time
-Fonts can now be rendered with any combination of the styles: bold, italic, underline
(That is provided the font supports the style.)
-Now font faces can have different sizes simultaneously, or have the different hinting or styling configurations.
-Lots of new built in commands including:
<ctrl D> delete the line under the cursor
<ctrl L> duplicate the line under the cursor
<alt up> move the line under the cursor up
<alt down> move the line under the cursor down
<alt [> select surrounding scope in code file
<alt ]> select the next scope up in code file
<alt '> select the next scope down in code file
<alt -> if a scope is selected, delete it's braces
<alt j> if a scope is selected, absorb the statement below it into the scope
<alt x> + 'delete file' close the current buffer and delete it's physical file
<alt x> + 'rename file' rename the current buffer's physical file and reopen the buffer with the new file name
<alt x> + 'mkdir' create a new directory
-The customization API is extended for more explicit font face control.
-The customization API comes with a parser and generator for generating metadata on built in and custom commands.
New in alpha 4.0.22 and 4.0.23:
-The rendering layer is cleaned up and faster
-4coder can now ship with multiple built in command bindings
New built in binding "mac-default": For the mac version of 4coder - similar to most Mac applications
-Fullscreen now works on Windows without the '-S' flag
-Set up a single 4coder project for Windows/Linux/Mac in one command: <alt x> -> "new project"
New in alpha 4.0.21:
-Color schemes are now loaded in theme files from the "themes" folder
-After loading a project <alt h> sets the hot directory to the project directory
-The flag -L enables a logging system that will collect information in case more information is needed while debugging a problem
-All command line flags after the special flag --custom are now passed to the custom API start hook
-The start hook now gets the list of file names that were specified on the command line
All of the files specified on the command line are loaded before the start hook runs
-It is now possible to set the hot directory from the custom API
-On windows the buildsuper scripts are improved to look for vcvarsall.bat in lots of common locations
New in alpha 4.0.20:
-Option for LAlt + LCtrl = AltGr on Windows is now in config.4coder
-The 4cpp lexer now has a customizable keyword table, *experimental* expansion of language support to:
Rust, C#, Java
Arbitrary keyword customization available in custom code (super users)
New in alpha 4.0.19:
-Lexer now handles string literal prefixes and is more optimized
-Fixes for lingering unicode bugs
-Power users have an experimental new jump to error that keeps correct positions through edits (coming to all tiers soon)
New in alpha 4.0.18:
-Support for rendering unicode characters
-<ctrl t> isearch alpha-numeric word under cursor
-<ctrl Q> query replace alpha-numeric word under cursor
-<alt b> toggle file bar
New in alpha 4.0.17:\n"
-New support for extended ascii input.
-Extended ascii encoded in buffers as utf8.
-The custom layer now has a 'markers' API for tracking buffer positions across changes.
New in alpha 4.0.16:
-<alt 2> If the current file is a C++ code file, this opens the matching header.
If the current file is a C++ header, this opens the matching code file.
-Option to automatically save changes on build in the config file.
This works for builds triggered by <alt m>.
-Option in project files to have certain fkey commands save changes.
New in alpha 4.0.15:
-<ctrl I> find all functions in the current buffer and list them in a jump buffer
-option to set user name in config.4coder
The user name is used in <alt t> and <alt y> comment writing commands
New in alpha 4.0.14:
-Option to have wrap widths automatically adjust based on average view width
-The 'config.4coder' file can now be placed with the 4ed executable file
-New options in 'config.4coder' to specify the font and color theme
-New built in project configuration system
-New on-save hooks allows custom behavior in the custom layer whenever a file is saved
-When using code wrapping, any saved file is automatically indented in the text format, this option can be turned off in config.4coder
New in alpha 4.0.12 and 4.0.13:
-Text files wrap lines at whitespace when possible
-New code wrapping feature is on by default
-Introduced a 'config.4coder' for setting several wrapping options:
enable_code_wrapping: set to false if you want the text like behavior
default_wrap_width: the wrap width to set in new files
-<ctrl 2> decrease the current buffer's wrap width
-<ctrl 3> increase the current buffer's wrap width
-In the customization layer new settings for the buffer are exposed dealing with wrapping
-In the customization layer there is a call for setting what keys the GUI should use
New in alpha 4.0.11:
-The commands for going to next error, previous error, etc now work
on any buffer with jump locations including *search*
-4coder now supports proper, borderless, fullscreen with the flag -F
and fullscreen can be toggled with <control pageup>.
(This sometimes causes artifacts on the Windows task bar)
-<alt E> to exit
-hook on exit for the customization system
-tokens now exposed in customization system
-mouse release events in customization system
New in alpha 4.0.10:
-<ctrl F> list all locations of a string across all open buffers
-Build now finds build.sh and Makefile on Linux
-<alt n> goes to the next error if the *compilation* buffer is open
-<alt N> goes to the previous error
-<alt M> goes to the first error
-<alt .> switch to the compilation buffer
-<alt ,> close the panel viewing the compilation buffer
-New documentation for the 4coder string library included in 4coder_API.html
-Low level allocation calls available in custom API
-Each panel can change font independently.
Per-buffer fonts are exposed in the custom API.
New in alpha 4.0.9:
-A scratch buffer is now opened with 4coder automatically
-A new mouse suppression mode toggled by <F2>
-Hinting is disabled by default, a -h flag on the command line enables it
-New 4coder_API.html documentation file provided for the custom layer API
-Experimental new work-flow for building and jumping to errors
This system is only for MSVC in the 'power' version as of 4.0.9
New in alpha 4.0.8:
-Eliminated the parameter stack
New in alpha 4.0.7:
-Right click sets the mark
-Clicks now have key codes so they can have events bound in customizations
-<alt d> opens a debug view, see more in README.txt
New in alpha 4.0.6:
-Tied the view scrolling and the list arrow navigation together
-Scroll bars are now toggleable with <alt s> for show and <alt w> for hide
New in alpha 4.0.5:
-New indent rule
-app->buffer_compute_cursor in the customization API
-f keys are available in the customization system now
New in alpha 4.0.3 and 4.0.4:
-Scroll bar on files and file lists
-Arrow navigation in lists
-A new minimal theme editor
New in alpha 4.0.2:
-The file count limit is over 8 million now
-File equality is handled better so renamings (such as 'subst') are safe now
-This buffer will report events including errors that happen in 4coder
-Super users can post their own messages here with app->print_message
-<ctrl e> centers view on cursor; cmdid_center_view in customization API
-Set font size on command line with -f N, N = 16 by default

View File

@ -618,9 +618,9 @@ package(char *cdir){
// NOTE(allen): alpha and super builds // NOTE(allen): alpha and super builds
enum{ enum{
Tier_Alpha, Tier_Alpha = 0,
Tier_Super, Tier_Super = 1,
Tier_COUNT Tier_COUNT = 2
}; };
char *tiers[] = { "alpha", "super" }; char *tiers[] = { "alpha", "super" };
@ -650,6 +650,7 @@ package(char *cdir){
fm_copy_folder(cdir, dir, "themes"); fm_copy_folder(cdir, dir, "themes");
fm_copy_file(fm_str(cdir, "/LICENSE.txt"), fm_str(dir, "/LICENSE.txt")); fm_copy_file(fm_str(cdir, "/LICENSE.txt"), fm_str(dir, "/LICENSE.txt"));
fm_copy_file(fm_str(cdir, "/README.txt"), fm_str(dir, "/README.txt")); fm_copy_file(fm_str(cdir, "/README.txt"), fm_str(dir, "/README.txt"));
fm_copy_file(fm_str(cdir, "/CHANGES.txt"), fm_str(dir, "/CHANGES.txt"));
fm_make_folder_if_missing(fonts_dir); fm_make_folder_if_missing(fonts_dir);
fm_copy_all(fonts_source_dir, "*", fonts_dir); fm_copy_all(fonts_source_dir, "*", fonts_dir);