a4.0.12 ready
parent
39be882693
commit
c221d97f13
|
@ -124,87 +124,10 @@ CUSTOM_COMMAND_SIG(seek_whitespace_down_end_line){
|
||||||
exec_command(app, seek_end_of_line);
|
exec_command(app, seek_end_of_line);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool32 enable_code_wrapping = 1;
|
|
||||||
static int32_t default_wrap_width = 672;
|
|
||||||
|
|
||||||
HOOK_SIG(my_start){
|
HOOK_SIG(my_start){
|
||||||
init_memory(app);
|
init_memory(app);
|
||||||
|
|
||||||
{
|
process_config_file(app);
|
||||||
FILE *file = fopen("config.4coder", "rb");
|
|
||||||
if (file){
|
|
||||||
Temp_Memory temp = begin_temp_memory(&global_part);
|
|
||||||
|
|
||||||
fseek(file, 0, SEEK_END);
|
|
||||||
int32_t size = ftell(file);
|
|
||||||
char *mem = (char*)push_block(&global_part, size+1);
|
|
||||||
fseek(file, 0, SEEK_SET);
|
|
||||||
fread(mem, 1, size+1, file);
|
|
||||||
fclose(file);
|
|
||||||
|
|
||||||
Cpp_Token_Array array;
|
|
||||||
array.count = 0;
|
|
||||||
array.max_count = (1 << 20)/sizeof(Cpp_Token);
|
|
||||||
array.tokens = push_array(&global_part, Cpp_Token, array.max_count);
|
|
||||||
|
|
||||||
Cpp_Lex_Data S = cpp_lex_data_init();
|
|
||||||
Cpp_Lex_Result result = cpp_lex_step(&S, mem, size, HAS_NULL_TERM, &array, NO_OUT_LIMIT);
|
|
||||||
|
|
||||||
if (result == LexResult_Finished){
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < array.count; ++i){
|
|
||||||
int32_t read_setting_failed = 1;
|
|
||||||
Cpp_Token id_token = array.tokens[i];
|
|
||||||
if (id_token.type == CPP_TOKEN_IDENTIFIER){
|
|
||||||
++i;
|
|
||||||
if (i < array.count){
|
|
||||||
Cpp_Token eq_token = array.tokens[i];
|
|
||||||
if (eq_token.type == CPP_TOKEN_EQEQ){
|
|
||||||
++i;
|
|
||||||
if (i < array.count){
|
|
||||||
Cpp_Token val_token = array.tokens[i];
|
|
||||||
{
|
|
||||||
++i;
|
|
||||||
if (i < array.count){
|
|
||||||
Cpp_Token semicolon_token = array.tokens[i];
|
|
||||||
if (semicolon_token.type == CPP_TOKEN_SEMICOLON){
|
|
||||||
read_setting_failed = 0;
|
|
||||||
|
|
||||||
String id = make_string(mem + id_token.start, id_token.size);
|
|
||||||
|
|
||||||
if (match(id, "enable_code_wrapping")){
|
|
||||||
if (val_token.type == CPP_TOKEN_BOOLEAN_CONSTANT){
|
|
||||||
String val = make_string(mem + val_token.start, val_token.size);
|
|
||||||
if (val.str[0] == 't'){
|
|
||||||
enable_code_wrapping = 1;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
enable_code_wrapping = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (read_setting_failed){
|
|
||||||
for (; i < array.count; ++i){
|
|
||||||
Cpp_Token token = array.tokens[i];
|
|
||||||
if (token.type == CPP_TOKEN_SEMICOLON){
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
end_temp_memory(temp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
change_theme(app, literal("4coder"));
|
change_theme(app, literal("4coder"));
|
||||||
change_font(app, literal("Liberation Sans"), true);
|
change_font(app, literal("Liberation Sans"), true);
|
||||||
|
@ -297,15 +220,25 @@ OPEN_FILE_HOOK_SIG(my_file_settings){
|
||||||
wrap_lines = 0;
|
wrap_lines = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer_set_setting(app, &buffer, BufferSetting_Lex, treat_as_code);
|
|
||||||
buffer_set_setting(app, &buffer, BufferSetting_WrapLine, wrap_lines);
|
|
||||||
buffer_set_setting(app, &buffer, BufferSetting_WrapPosition, default_wrap_width);
|
buffer_set_setting(app, &buffer, BufferSetting_WrapPosition, default_wrap_width);
|
||||||
buffer_set_setting(app, &buffer, BufferSetting_MapID, (treat_as_code)?((int32_t)my_code_map):((int32_t)mapid_file));
|
buffer_set_setting(app, &buffer, BufferSetting_MapID, (treat_as_code)?((int32_t)my_code_map):((int32_t)mapid_file));
|
||||||
|
|
||||||
if (treat_as_code && enable_code_wrapping && buffer.size < (1 << 20)){
|
if (treat_as_code && enable_code_wrapping && buffer.size < (1 << 20)){
|
||||||
|
// NOTE(allen|a4.0.12): There is a little bit of grossness going on here.
|
||||||
|
// If we set BufferSetting_Lex to true, it will launch a lexing job.
|
||||||
|
// If a lexing job is active when we set BufferSetting_VirtualWhitespace on
|
||||||
|
// that call can fail.
|
||||||
|
// Unfortunantely without tokens virtual whitespace doesn't really make sense.
|
||||||
|
// So for now I have it automatically turning on lexing when virtual whitespace
|
||||||
|
// is turned on.
|
||||||
|
// Cleaning some of that up is a goal for future versions.
|
||||||
buffer_set_setting(app, &buffer, BufferSetting_WrapLine, 1);
|
buffer_set_setting(app, &buffer, BufferSetting_WrapLine, 1);
|
||||||
buffer_set_setting(app, &buffer, BufferSetting_VirtualWhitespace, 1);
|
buffer_set_setting(app, &buffer, BufferSetting_VirtualWhitespace, 1);
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
buffer_set_setting(app, &buffer, BufferSetting_WrapLine, wrap_lines);
|
||||||
|
buffer_set_setting(app, &buffer, BufferSetting_Lex, treat_as_code);
|
||||||
|
}
|
||||||
|
|
||||||
// no meaning for return
|
// no meaning for return
|
||||||
return(0);
|
return(0);
|
||||||
|
|
|
@ -3486,5 +3486,99 @@ COMMAND_CALLER_HOOK(default_command_caller){
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NOTE(allen|a4.0.12): A primordial config system (actually really hate this but it seems best)
|
||||||
|
|
||||||
|
static bool32 enable_code_wrapping = 1;
|
||||||
|
static int32_t default_wrap_width = 672;
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
static void
|
||||||
|
process_config_file(Application_Links *app){
|
||||||
|
FILE *file = fopen("config.4coder", "rb");
|
||||||
|
if (file){
|
||||||
|
Temp_Memory temp = begin_temp_memory(&global_part);
|
||||||
|
|
||||||
|
fseek(file, 0, SEEK_END);
|
||||||
|
int32_t size = ftell(file);
|
||||||
|
char *mem = (char*)push_block(&global_part, size+1);
|
||||||
|
fseek(file, 0, SEEK_SET);
|
||||||
|
fread(mem, 1, size, file);
|
||||||
|
mem[size] = 0;
|
||||||
|
fclose(file);
|
||||||
|
|
||||||
|
Cpp_Token_Array array;
|
||||||
|
array.count = 0;
|
||||||
|
array.max_count = (1 << 20)/sizeof(Cpp_Token);
|
||||||
|
array.tokens = push_array(&global_part, Cpp_Token, array.max_count);
|
||||||
|
|
||||||
|
Cpp_Lex_Data S = cpp_lex_data_init();
|
||||||
|
Cpp_Lex_Result result = cpp_lex_step(&S, mem, size+1, HAS_NULL_TERM, &array, NO_OUT_LIMIT);
|
||||||
|
|
||||||
|
if (result == LexResult_Finished){
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < array.count; ++i){
|
||||||
|
int32_t read_setting_failed = 1;
|
||||||
|
Cpp_Token id_token = array.tokens[i];
|
||||||
|
if (id_token.type == CPP_TOKEN_IDENTIFIER){
|
||||||
|
++i;
|
||||||
|
if (i < array.count){
|
||||||
|
Cpp_Token eq_token = array.tokens[i];
|
||||||
|
if (eq_token.type == CPP_TOKEN_EQ){
|
||||||
|
++i;
|
||||||
|
if (i < array.count){
|
||||||
|
Cpp_Token val_token = array.tokens[i];
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
if (i < array.count){
|
||||||
|
Cpp_Token semicolon_token = array.tokens[i];
|
||||||
|
if (semicolon_token.type == CPP_TOKEN_SEMICOLON){
|
||||||
|
read_setting_failed = 0;
|
||||||
|
|
||||||
|
String id = make_string(mem + id_token.start, id_token.size);
|
||||||
|
|
||||||
|
if (match(id, "enable_code_wrapping")){
|
||||||
|
if (val_token.type == CPP_TOKEN_BOOLEAN_CONSTANT){
|
||||||
|
String val = make_string(mem + val_token.start, val_token.size);
|
||||||
|
if (val.str[0] == 't'){
|
||||||
|
enable_code_wrapping = 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
enable_code_wrapping = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (match(id, "default_wrap_width")){
|
||||||
|
if (val_token.type == CPP_TOKEN_INTEGER_CONSTANT){
|
||||||
|
String val = make_string(mem + val_token.start, val_token.size);
|
||||||
|
default_wrap_width = str_to_int(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (read_setting_failed){
|
||||||
|
for (; i < array.count; ++i){
|
||||||
|
Cpp_Token token = array.tokens[i];
|
||||||
|
if (token.type == CPP_TOKEN_SEMICOLON){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
end_temp_memory(temp);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
print_message(app, literal("Did not find config.4coder, using default settings"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
11
4ed.cpp
11
4ed.cpp
|
@ -2583,6 +2583,17 @@ App_Step_Sig(app_step){
|
||||||
"and if you load README.txt you'll find all the key combos there are.\n"
|
"and if you load README.txt you'll find all the key combos there are.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Newest features:\n"
|
"Newest features:\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:"
|
||||||
|
" 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"
|
"-The commands for going to next error, previous error, etc now work\n"
|
||||||
" on any buffer with jump locations including *search*\n"
|
" on any buffer with jump locations including *search*\n"
|
||||||
"-4coder now supports proper, borderless, fullscreen with the flag -F\n"
|
"-4coder now supports proper, borderless, fullscreen with the flag -F\n"
|
||||||
|
|
|
@ -860,7 +860,10 @@ DOC_SEE(Buffer_Setting_ID)
|
||||||
b32 full_remeasure = 0;
|
b32 full_remeasure = 0;
|
||||||
if (value){
|
if (value){
|
||||||
if (!file->settings.virtual_white){
|
if (!file->settings.virtual_white){
|
||||||
if (file->settings.tokens_exist && !file->state.still_lexing){
|
if (!file->settings.tokens_exist){
|
||||||
|
file_first_lex_serial(system, &models->mem, file);
|
||||||
|
}
|
||||||
|
if (!file->state.still_lexing){
|
||||||
file->settings.virtual_white = 1;
|
file->settings.virtual_white = 1;
|
||||||
full_remeasure = 1;
|
full_remeasure = 1;
|
||||||
}
|
}
|
||||||
|
|
3
build.c
3
build.c
|
@ -720,6 +720,7 @@ standard_build(char *cdir, uint32_t flags){
|
||||||
|
|
||||||
#define PACK_DIR "../distributions"
|
#define PACK_DIR "../distributions"
|
||||||
#define PACK_DATA_DIR "../data/dist_files"
|
#define PACK_DATA_DIR "../data/dist_files"
|
||||||
|
#define DATA_DIR "../data/test"
|
||||||
|
|
||||||
#define PACK_ALPHA_PAR_DIR "../current_dist"
|
#define PACK_ALPHA_PAR_DIR "../current_dist"
|
||||||
#define PACK_SUPER_PAR_DIR "../current_dist_super"
|
#define PACK_SUPER_PAR_DIR "../current_dist_super"
|
||||||
|
@ -785,6 +786,7 @@ package(char *cdir){
|
||||||
copy_all (PACK_DATA_DIR"/*", PACK_ALPHA_DIR);
|
copy_all (PACK_DATA_DIR"/*", PACK_ALPHA_DIR);
|
||||||
copy_file(0, "README.txt", PACK_ALPHA_DIR, 0);
|
copy_file(0, "README.txt", PACK_ALPHA_DIR, 0);
|
||||||
copy_file(0, "TODO.txt", PACK_ALPHA_DIR, 0);
|
copy_file(0, "TODO.txt", PACK_ALPHA_DIR, 0);
|
||||||
|
copy_file(DATA_DIR, "config.4coder", PACK_ALPHA_DIR, 0);
|
||||||
|
|
||||||
get_4coder_dist_name(&str, 1, "alpha", "zip");
|
get_4coder_dist_name(&str, 1, "alpha", "zip");
|
||||||
zip(PACK_ALPHA_PAR_DIR, "4coder", str.str);
|
zip(PACK_ALPHA_PAR_DIR, "4coder", str.str);
|
||||||
|
@ -803,6 +805,7 @@ package(char *cdir){
|
||||||
copy_all (PACK_DATA_DIR"/*", PACK_SUPER_DIR);
|
copy_all (PACK_DATA_DIR"/*", PACK_SUPER_DIR);
|
||||||
copy_file(0, "README.txt", PACK_SUPER_DIR, 0);
|
copy_file(0, "README.txt", PACK_SUPER_DIR, 0);
|
||||||
copy_file(0, "TODO.txt", PACK_SUPER_DIR, 0);
|
copy_file(0, "TODO.txt", PACK_SUPER_DIR, 0);
|
||||||
|
copy_file(DATA_DIR, "config.4coder", PACK_SUPER_DIR, 0);
|
||||||
|
|
||||||
copy_all ("4coder_*.h", PACK_SUPER_DIR);
|
copy_all ("4coder_*.h", PACK_SUPER_DIR);
|
||||||
copy_all ("4coder_*.cpp", PACK_SUPER_DIR);
|
copy_all ("4coder_*.cpp", PACK_SUPER_DIR);
|
||||||
|
|
|
@ -609,33 +609,14 @@ CUSTOM_COMMAND_SIG(write_explicit_enum_values){
|
||||||
end_temp_memory(temp);
|
end_temp_memory(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(allen): Query theme settings
|
|
||||||
#if 0
|
|
||||||
CUSTOM_COMMAND_SIG(save_theme_settings){
|
|
||||||
FILE *file = fopen(".4coder_settings", "rb");
|
|
||||||
char theme_name[128];
|
|
||||||
char font_name[128];
|
|
||||||
|
|
||||||
fscanf(file, "%*128s %*128s", theme_name, font_name);
|
|
||||||
|
|
||||||
if (file){
|
|
||||||
replace_char(theme_name, '#', ' ');
|
|
||||||
replace_char(font_name, '#', ' ');
|
|
||||||
|
|
||||||
fclose(file);
|
|
||||||
|
|
||||||
change_theme(app, theme_name, strlen(theme_name));
|
|
||||||
change_font(app, font_name, strlen(font_name));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#define SETTINGS_FILE ".4coder_settings"
|
#define SETTINGS_FILE ".4coder_settings"
|
||||||
HOOK_SIG(experimental_start){
|
HOOK_SIG(experimental_start){
|
||||||
init_memory(app);
|
init_memory(app);
|
||||||
|
|
||||||
|
process_config_file(app);
|
||||||
|
|
||||||
char theme_name[128];
|
char theme_name[128];
|
||||||
char font_name[128];
|
char font_name[128];
|
||||||
|
|
||||||
|
@ -664,13 +645,13 @@ HOOK_SIG(experimental_start){
|
||||||
|
|
||||||
change_theme(app, theme_name, theme_len);
|
change_theme(app, theme_name, theme_len);
|
||||||
change_font(app, font_name, font_len, true);
|
change_font(app, font_name, font_len, true);
|
||||||
|
|
||||||
exec_command(app, open_panel_vsplit);
|
|
||||||
exec_command(app, hide_scrollbar);
|
|
||||||
exec_command(app, change_active_panel);
|
|
||||||
exec_command(app, hide_scrollbar);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exec_command(app, open_panel_vsplit);
|
||||||
|
exec_command(app, hide_scrollbar);
|
||||||
|
exec_command(app, change_active_panel);
|
||||||
|
exec_command(app, hide_scrollbar);
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue