got rid of dead file

master
Allen Webster 2016-09-01 15:40:25 -04:00
parent c82dbd8e2c
commit 72ea42364d
16 changed files with 354 additions and 522 deletions

View File

@ -3,8 +3,7 @@
#define FCODER_CUSTOM_H #define FCODER_CUSTOM_H
#include <stdint.h> #include <stdint.h>
// TODO(allen): We need to eliminate our dependence on this // TODO(allen): We need to eliminate our dependence on this soon.
// in the custom side.
#include <string.h> #include <string.h>
@ -47,28 +46,21 @@ enum Special_Hook_ID{
_hook_input_filter, _hook_input_filter,
}; };
#define CommandEqual(c1,c2) ((unsigned long long)(c1) == (unsigned long long)(c2))
#define CUSTOM_COMMAND_SIG(name) void name(struct Application_Links *app) #define CUSTOM_COMMAND_SIG(name) void name(struct Application_Links *app)
typedef CUSTOM_COMMAND_SIG(Custom_Command_Function); typedef CUSTOM_COMMAND_SIG(Custom_Command_Function);
#include "4coder_types.h" #include "4coder_types.h"
#include "4coder_buffer_types.h" #include "4coder_seek_types.h"
#include "4coder_gui.h" #include "4coder_gui.h"
#define COMMAND_CALLER_HOOK(name) int32_t name(struct Application_Links *app, Generic_Command cmd) #define COMMAND_CALLER_HOOK(name) int32_t name(struct Application_Links *app, Generic_Command cmd)
typedef COMMAND_CALLER_HOOK(Command_Caller_Hook_Function); typedef COMMAND_CALLER_HOOK(Command_Caller_Hook_Function);
inline Key_Event_Data static Key_Event_Data null_key_event_data = {0};
key_event_data_zero(){ static Mouse_State null_mouse_state = {0};
Key_Event_Data data={0}; static Buffer_Summary null_buffer_summary = {0};
return(data); static View_Summary null_view_summary = {0};
}
inline Mouse_State
mouse_state_zero(){
Mouse_State data={0};
return(data);
}
inline Range inline Range
make_range(int32_t p1, int32_t p2){ make_range(int32_t p1, int32_t p2){
Range range; Range range;
@ -82,17 +74,6 @@ make_range(int32_t p1, int32_t p2){
} }
return(range); return(range);
} }
inline Buffer_Summary
buffer_summary_zero(){
Buffer_Summary summary={0};
return(summary);
}
inline View_Summary
view_summary_zero(){
View_Summary summary={0};
return(summary);
}
#define HOOK_SIG(name) int32_t name(struct Application_Links *app) #define HOOK_SIG(name) int32_t name(struct Application_Links *app)
#define OPEN_FILE_HOOK_SIG(name) int32_t name(struct Application_Links *app, int32_t buffer_id) #define OPEN_FILE_HOOK_SIG(name) int32_t name(struct Application_Links *app, int32_t buffer_id)

View File

@ -5,7 +5,6 @@
#define FCODER_DEFAULT_BINDINGS #define FCODER_DEFAULT_BINDINGS
#include "4coder_default_include.cpp" #include "4coder_default_include.cpp"
#include "4coder_default_building.cpp"
// NOTE(allen|a3.3): All of your custom ids should be enumerated // NOTE(allen|a3.3): All of your custom ids should be enumerated
// as shown here, they may start at 0, and you can only have // as shown here, they may start at 0, and you can only have
@ -212,7 +211,7 @@ static int32_t suppressing_mouse = false;
INPUT_FILTER_SIG(my_suppress_mouse_filter){ INPUT_FILTER_SIG(my_suppress_mouse_filter){
if (suppressing_mouse){ if (suppressing_mouse){
*mouse = mouse_state_zero(); *mouse = null_mouse_state;
mouse->x = -100; mouse->x = -100;
mouse->y = -100; mouse->y = -100;
} }
@ -266,7 +265,7 @@ default_keys(Bind_Helper *context){
bind(context, 'n', MDFR_ALT, goto_next_error); bind(context, 'n', MDFR_ALT, goto_next_error);
bind(context, 'N', MDFR_ALT, goto_prev_error); bind(context, 'N', MDFR_ALT, goto_prev_error);
bind(context, 'M', MDFR_ALT, goto_first_error); bind(context, 'M', MDFR_ALT, goto_first_error);
bind(context, 'm', MDFR_ALT, build_search); bind(context, 'm', MDFR_ALT, build_in_build_panel);
bind(context, 'z', MDFR_ALT, execute_any_cli); bind(context, 'z', MDFR_ALT, execute_any_cli);
bind(context, 'Z', MDFR_ALT, execute_previous_cli); bind(context, 'Z', MDFR_ALT, execute_previous_cli);

View File

@ -1,184 +0,0 @@
#ifndef FCODER_DEFAULT_BUILDING
#define FCODER_DEFAULT_BUILDING
#include "4coder_custom.h"
#define FSTRING_IMPLEMENTATION
#include "4coder_string.h"
#include "4coder_helper.h"
#include "4coder_jump_parsing.cpp"
//
// Basic Build Behavior
//
CUSTOM_COMMAND_SIG(build_in_build_panel){
String comp_name = make_lit_string("*compilation*");
Buffer_Summary buffer =
app->get_buffer_by_name(app, comp_name.str, comp_name.size, AccessAll);
View_Summary build_view = {0};
View_Summary original_view = app->get_active_view(app, AccessAll);
Buffer_Summary original_buffer =
app->get_buffer(app, original_view.buffer_id, AccessAll);
if (buffer.exists){
build_view = get_first_view_with_buffer(app, buffer.buffer_id);
}
if (!build_view.exists){
exec_command(app, open_panel_hsplit);
exec_command(app, hide_scrollbar);
build_view = app->get_active_view(app, AccessAll);
app->view_set_split_proportion(app, &build_view, .2f);
app->set_active_view(app, &original_view);
}
execute_standard_build(app, &build_view, &original_buffer);
buffer = app->get_buffer_by_name(app, comp_name.str, comp_name.size, AccessAll);
app->buffer_set_font(app, &buffer, literal("Inconsolata"));
prev_location = null_location;
lock_jump_buffer(comp_name.str, comp_name.size);
}
// TODO(allen): This is a bit nasty. I want a system for picking
// the most advanced and correct version of a command to bind to a
// name based on which files are included.
#ifndef BUILD_SEARCH
# define BUILD_SEARCH 2
#elif BUILD_SEARCH <= 2
# undef BUILD_SEARCH
# define BUILD_SEARCH 2
#endif
#if BUILD_SEARCH <= 2
# ifdef build_search
# undef build_search
# endif
# define build_search build_in_build_panel
#endif
#define GET_COMP_BUFFER() app->get_buffer_by_name(app, literal("*compilation*"), AccessAll);
CUSTOM_COMMAND_SIG(close_build_panel){
Buffer_Summary buffer = GET_COMP_BUFFER();
View_Summary build_view = get_first_view_with_buffer(app, buffer.buffer_id);
if (build_view.exists){
View_Summary original_view = app->get_active_view(app, AccessAll);
app->set_active_view(app, &build_view);
exec_command(app, close_panel);
app->set_active_view(app, &original_view);
}
}
CUSTOM_COMMAND_SIG(change_to_build_panel){
Buffer_Summary buffer = GET_COMP_BUFFER();
if (buffer.exists){
View_Summary build_view = get_first_view_with_buffer(app, buffer.buffer_id);
app->set_active_view(app, &build_view);
}
}
CUSTOM_COMMAND_SIG(change_active_panel_build){
Buffer_Summary buffer = GET_COMP_BUFFER();
if (buffer.exists){
View_Summary build_view = get_first_view_with_buffer(app, buffer.buffer_id);
View_Summary view = app->get_active_view(app, AccessAll);
int32_t prev_view_id = view.view_id;
exec_command(app, change_active_panel_regular);
view = app->get_active_view(app, AccessAll);
for (;(view.view_id != prev_view_id &&
build_view.view_id == view.view_id);){
prev_view_id = view.view_id;
exec_command(app, change_active_panel_regular);
view = app->get_active_view(app, AccessAll);
}
}
else{
exec_command(app, change_active_panel_regular);
}
}
// TODO(allen): This is a bit nasty. I want a system for picking
// the most advanced and correct version of a command to bind to a
// name based on which files are included.
#ifndef CHANGE_ACTIVE_PANEL
# define CHANGE_ACTIVE_PANEL 2
#elif CHANGE_ACTIVE_PANEL <= 2
# undef CHANGE_ACTIVE_PANEL
# define CHANGE_ACTIVE_PANEL 2
#endif
#if CHANGE_ACTIVE_PANEL <= 2
# ifdef change_active_panel
# undef change_active_panel
# endif
# define change_active_panel change_active_panel_build
#endif
CUSTOM_COMMAND_SIG(open_file_in_quotes_build){
char file_name_[256];
String file_name = make_fixed_width_string(file_name_);
if (file_name_in_quotes(app, &file_name)){
exec_command(app, change_active_panel_build);
View_Summary view = app->get_active_view(app, AccessAll);
view_open_file(app, &view, expand_str(file_name), true);
}
}
// TODO(allen): This is a bit nasty. I want a system for picking
// the most advanced and correct version of a command to bind to a
// name based on which files are included.
#ifndef OPEN_FILE_IN_QUOTES
# define OPEN_FILE_IN_QUOTES 2
#elif OPEN_FILE_IN_QUOTES <= 2
# undef OPEN_FILE_IN_QUOTES
# define OPEN_FILE_IN_QUOTES 2
#endif
#if OPEN_FILE_IN_QUOTES <= 2
# ifdef open_file_in_quotes
# undef open_file_in_quotes
# endif
# define open_file_in_quotes open_file_in_quotes_build
#endif
CUSTOM_COMMAND_SIG(open_in_other_build){
exec_command(app, change_active_panel_build);
exec_command(app, cmdid_interactive_open);
}
// TODO(allen): This is a bit nasty. I want a system for picking
// the most advanced and correct version of a command to bind to a
// name based on which files are included.
#ifndef OPEN_IN_OTHER
# define OPEN_IN_OTHER 1
#elif OPEN_IN_OTHER <= 1
# undef OPEN_IN_OTHER
# define OPEN_IN_OTHER 1
#endif
#if OPEN_IN_OTHER <= 1
# ifdef open_in_other
# undef open_in_other
# endif
# define open_in_other open_in_other_build
#endif
#endif

View File

@ -1573,34 +1573,57 @@ CUSTOM_COMMAND_SIG(hide_scrollbar){
// Panel Management // Panel Management
// //
CUSTOM_COMMAND_SIG(change_active_panel_regular){ static void
View_Summary view = app->get_active_view(app, AccessAll); get_view_next_looped(Application_Links *app, View_Summary *view, uint32_t access){
app->get_view_next(app, &view, AccessAll); app->get_view_next(app, view, access);
if (!view.exists){ if (!view->exists){
view = app->get_view_first(app, AccessAll); *view = app->get_view_first(app, access);
} }
}
static View_ID special_note_view_id = 0;
static void
close_special_note_view(Application_Links *app){
View_Summary special_view = app->get_view(app, special_note_view_id, AccessAll);
if (special_view.exists){
app->close_view(app, &special_view);
}
special_note_view_id = 0;
}
static View_Summary
open_special_note_view(Application_Links *app, bool32 create_if_not_exist = true){
View_Summary special_view = app->get_view(app, special_note_view_id, AccessAll);
if (create_if_not_exist && !special_view.exists){
View_Summary view = app->get_active_view(app, AccessAll);
special_view = app->open_view(app, &view, ViewSplit_Bottom);
app->view_set_setting(app, &special_view, ViewSetting_ShowScrollbar, false);
app->view_set_split_proportion(app, &special_view, .2f);
app->set_active_view(app, &view);
special_note_view_id = special_view.view_id;
}
return(special_view);
}
CUSTOM_COMMAND_SIG(change_active_panel){
View_Summary view = app->get_active_view(app, AccessAll);
View_ID original_view_id = view.view_id;
do{
get_view_next_looped(app, &view, AccessAll);
if (view.view_id != special_note_view_id){
break;
}
}while(view.view_id != original_view_id);
if (view.exists){ if (view.exists){
app->set_active_view(app, &view); app->set_active_view(app, &view);
} }
} }
// TODO(allen): This is a bit nasty. I want a system for picking
// the most advanced and correct version of a command to bind to a
// name based on which files are included.
#ifndef CHANGE_ACTIVE_PANEL
# define CHANGE_ACTIVE_PANEL 1
#elif CHANGE_ACTIVE_PANEL <= 1
# undef CHANGE_ACTIVE_PANEL
# define CHANGE_ACTIVE_PANEL 1
#endif
#if CHANGE_ACTIVE_PANEL <= 1
# ifdef change_active_panel
# undef change_active_panel
# endif
# define change_active_panel change_active_panel_regular
#endif
CUSTOM_COMMAND_SIG(close_panel){ CUSTOM_COMMAND_SIG(close_panel){
View_Summary view = app->get_active_view(app, AccessAll); View_Summary view = app->get_active_view(app, AccessAll);
app->close_view(app, &view); app->close_view(app, &view);
@ -1655,57 +1678,22 @@ file_name_in_quotes(Application_Links *app, String *file_name){
return(result); return(result);
} }
CUSTOM_COMMAND_SIG(open_file_in_quotes_regular){ CUSTOM_COMMAND_SIG(open_file_in_quotes){
char file_name_[256]; char file_name_[256];
String file_name = make_fixed_width_string(file_name_); String file_name = make_fixed_width_string(file_name_);
if (file_name_in_quotes(app, &file_name)){ if (file_name_in_quotes(app, &file_name)){
exec_command(app, change_active_panel_regular); exec_command(app, change_active_panel);
View_Summary view = app->get_active_view(app, AccessAll); View_Summary view = app->get_active_view(app, AccessAll);
view_open_file(app, &view, expand_str(file_name), true); view_open_file(app, &view, expand_str(file_name), true);
} }
} }
// TODO(allen): This is a bit nasty. I want a system for picking CUSTOM_COMMAND_SIG(open_in_other){
// the most advanced and correct version of a command to bind to a exec_command(app, change_active_panel);
// name based on which files are included.
#ifndef OPEN_FILE_IN_QUOTES
# define OPEN_FILE_IN_QUOTES 1
#elif OPEN_FILE_IN_QUOTES <= 1
# undef OPEN_FILE_IN_QUOTES
# define OPEN_FILE_IN_QUOTES 1
#endif
#if OPEN_FILE_IN_QUOTES <= 1
# ifdef open_file_in_quotes
# undef open_file_in_quotes
# endif
# define open_file_in_quotes open_file_in_quotes_regular
#endif
CUSTOM_COMMAND_SIG(open_in_other_regular){
exec_command(app, change_active_panel_regular);
exec_command(app, cmdid_interactive_open); exec_command(app, cmdid_interactive_open);
} }
// TODO(allen): This is a bit nasty. I want a system for picking
// the most advanced and correct version of a command to bind to a
// name based on which files are included.
#ifndef OPEN_IN_OTHER
# define OPEN_IN_OTHER 1
#elif OPEN_IN_OTHER <= 1
# undef OPEN_IN_OTHER
# define OPEN_IN_OTHER 1
#endif
#if OPEN_IN_OTHER <= 1
# ifdef open_in_other
# undef open_in_other
# endif
# define open_in_other open_in_other_regular
#endif
CUSTOM_COMMAND_SIG(save_as){ CUSTOM_COMMAND_SIG(save_as){
exec_command(app, cmdid_save_as); exec_command(app, cmdid_save_as);
@ -2085,216 +2073,6 @@ CUSTOM_COMMAND_SIG(execute_previous_cli){
} }
} }
//
// Default Building Stuff
//
// NOTE(allen|a4.0.9): This is provided to establish a default method of getting
// a "build directory". This function tries to setup the build directory in the
// directory of the given buffer, if it cannot get that information it get's the
// 4coder hot directory.
//
// There is no requirement that a custom build system in 4coder actually use the
// directory given by this function.
enum Get_Build_Directory_Result{
BuildDir_None,
BuildDir_AtFile,
BuildDir_AtHot
};
static int32_t
get_build_directory(Application_Links *app, Buffer_Summary *buffer, String *dir_out){
int32_t result = BuildDir_None;
if (buffer && buffer->file_name){
if (!match_cc(buffer->file_name, buffer->buffer_name)){
String dir = make_string_cap(buffer->file_name,
buffer->file_name_len,
buffer->file_name_len+1);
remove_last_folder(&dir);
append_ss(dir_out, dir);
result = BuildDir_AtFile;
}
}
if (!result){
int32_t len = app->directory_get_hot(app, dir_out->str,
dir_out->memory_size - dir_out->size);
if (len + dir_out->size < dir_out->memory_size){
dir_out->size += len;
result = BuildDir_AtHot;
}
}
return(result);
}
static int32_t
standard_build_search(Application_Links *app,
View_Summary *view,
Buffer_Summary *active_buffer,
String *dir, String *command,
int32_t perform_backup,
int32_t use_path_in_command,
String filename,
String commandname){
int32_t result = false;
for(;;){
int32_t old_size = dir->size;
append_ss(dir, filename);
if (app->file_exists(app, dir->str, dir->size)){
dir->size = old_size;
if (use_path_in_command){
append_s_char(command, '"');
append_ss(command, *dir);
append_ss(command, commandname);
append_s_char(command, '"');
}
else{
append_ss(command, commandname);
}
char space[512];
String message = make_fixed_width_string(space);
append_ss(&message, make_lit_string("Building with: "));
append_ss(&message, *command);
append_s_char(&message, '\n');
app->print_message(app, message.str, message.size);
app->exec_system_command(app, view,
buffer_identifier(literal("*compilation*")),
dir->str, dir->size,
command->str, command->size,
CLI_OverlapWithConflict);
result = true;
break;
}
dir->size = old_size;
if (app->directory_cd(app, dir->str, &dir->size, dir->memory_size, literal("..")) == 0){
if (perform_backup){
dir->size = app->directory_get_hot(app, dir->str, dir->memory_size);
char backup_space[256];
String backup_command = make_fixed_width_string(backup_space);
append_ss(&backup_command, make_lit_string("echo could not find "));
append_ss(&backup_command, filename);
app->exec_system_command(app, view,
buffer_identifier(literal("*compilation*")),
dir->str, dir->size,
backup_command.str, backup_command.size,
CLI_OverlapWithConflict);
}
break;
}
}
return(result);
}
#if defined(_WIN32)
// NOTE(allen): Build search rule for windows.
static int32_t
execute_standard_build_search(Application_Links *app, View_Summary *view,
Buffer_Summary *active_buffer,
String *dir, String *command, int32_t perform_backup){
int32_t result = standard_build_search(app, view,
active_buffer,
dir, command, perform_backup, true,
make_lit_string("build.bat"),
make_lit_string("build"));
return(result);
}
#elif defined(__linux__)
// NOTE(allen): Build search rule for linux.
static int32_t
execute_standard_build_search(Application_Links *app, View_Summary *view,
Buffer_Summary *active_buffer,
String *dir, String *command, int32_t perform_backup){
char dir_space[512];
String dir_copy = make_fixed_width_string(dir_space);
copy(&dir_copy, *dir);
int32_t result = standard_build_search(app, view,
active_buffer,
dir, command, false, true,
make_lit_string("build.sh"),
make_lit_string("build.sh"));
if (!result){
result = standard_build_search(app, view,
active_buffer,
&dir_copy, command, perform_backup, false,
make_lit_string("Makefile"),
make_lit_string("make"));
}
return(result);
}
#else
# error No build search rule for this platform.
#endif
static void
execute_standard_build(Application_Links *app, View_Summary *view,
Buffer_Summary *active_buffer){
char dir_space[512];
String dir = make_fixed_width_string(dir_space);
char command_str_space[512];
String command = make_fixed_width_string(command_str_space);
int32_t build_dir_type = get_build_directory(app, active_buffer, &dir);
if (build_dir_type == BuildDir_AtFile){
if (!execute_standard_build_search(app, view, active_buffer,
&dir, &command, false)){
dir.size = 0;
command.size = 0;
build_dir_type = get_build_directory(app, 0, &dir);
}
}
if (build_dir_type == BuildDir_AtHot){
execute_standard_build_search(app, view, active_buffer,
&dir, &command, true);
}
}
CUSTOM_COMMAND_SIG(build_search_regular){
uint32_t access = AccessAll;
View_Summary view = app->get_active_view(app, access);
Buffer_Summary buffer = app->get_buffer(app, view.buffer_id, access);
execute_standard_build(app, &view, &buffer);
}
// TODO(allen): This is a bit nasty. I want a system for picking
// the most advanced and correct version of a command to bind to a
// name based on which files are included.
#ifndef BUILD_SEARCH
# define BUILD_SEARCH 1
#elif BUILD_SEARCH <= 1
# undef BUILD_SEARCH
# define BUILD_SEARCH 1
#endif
#if BUILD_SEARCH <= 1
# ifdef build_search
# undef build_search
# endif
# define build_search build_search_regular
#endif
// //
// Common Settings Commands // Common Settings Commands
// //
@ -2330,6 +2108,7 @@ CUSTOM_COMMAND_SIG(eol_nixify){
app->buffer_set_setting(app, &buffer, BufferSetting_Eol, false); app->buffer_set_setting(app, &buffer, BufferSetting_Eol, false);
} }
// //
// "Full Search" Based Commands // "Full Search" Based Commands
// //
@ -2668,8 +2447,263 @@ CUSTOM_COMMAND_SIG(word_complete){
} }
} }
// //
// Default Building Stuff
// //
// NOTE(allen|a4.0.9): This is provided to establish a default method of getting
// a "build directory". This function tries to setup the build directory in the
// directory of the given buffer, if it cannot get that information it get's the
// 4coder hot directory.
//
// There is no requirement that a custom build system in 4coder actually use the
// directory given by this function.
enum Get_Build_Directory_Result{
BuildDir_None,
BuildDir_AtFile,
BuildDir_AtHot
};
static int32_t
get_build_directory(Application_Links *app, Buffer_Summary *buffer, String *dir_out){
int32_t result = BuildDir_None;
if (buffer && buffer->file_name){
if (!match_cc(buffer->file_name, buffer->buffer_name)){
String dir = make_string_cap(buffer->file_name,
buffer->file_name_len,
buffer->file_name_len+1);
remove_last_folder(&dir);
append_ss(dir_out, dir);
result = BuildDir_AtFile;
}
}
if (!result){
int32_t len = app->directory_get_hot(app, dir_out->str,
dir_out->memory_size - dir_out->size);
if (len + dir_out->size < dir_out->memory_size){
dir_out->size += len;
result = BuildDir_AtHot;
}
}
return(result);
}
// TODO(allen): Better names for the "standard build search" family.
static int32_t
standard_build_search(Application_Links *app,
View_Summary *view,
Buffer_Summary *active_buffer,
String *dir, String *command,
int32_t perform_backup,
int32_t use_path_in_command,
String filename,
String commandname){
int32_t result = false;
for(;;){
int32_t old_size = dir->size;
append_ss(dir, filename);
if (app->file_exists(app, dir->str, dir->size)){
dir->size = old_size;
if (use_path_in_command){
append_s_char(command, '"');
append_ss(command, *dir);
append_ss(command, commandname);
append_s_char(command, '"');
}
else{
append_ss(command, commandname);
}
char space[512];
String message = make_fixed_width_string(space);
append_ss(&message, make_lit_string("Building with: "));
append_ss(&message, *command);
append_s_char(&message, '\n');
app->print_message(app, message.str, message.size);
app->exec_system_command(app, view,
buffer_identifier(literal("*compilation*")),
dir->str, dir->size,
command->str, command->size,
CLI_OverlapWithConflict);
result = true;
break;
}
dir->size = old_size;
if (app->directory_cd(app, dir->str, &dir->size, dir->memory_size, literal("..")) == 0){
if (perform_backup){
dir->size = app->directory_get_hot(app, dir->str, dir->memory_size);
char backup_space[256];
String backup_command = make_fixed_width_string(backup_space);
append_ss(&backup_command, make_lit_string("echo could not find "));
append_ss(&backup_command, filename);
app->exec_system_command(app, view,
buffer_identifier(literal("*compilation*")),
dir->str, dir->size,
backup_command.str, backup_command.size,
CLI_OverlapWithConflict);
}
break;
}
}
return(result);
}
#if defined(_WIN32)
// NOTE(allen): Build search rule for windows.
static int32_t
execute_standard_build_search(Application_Links *app, View_Summary *view,
Buffer_Summary *active_buffer,
String *dir, String *command, int32_t perform_backup){
int32_t result = standard_build_search(app, view,
active_buffer,
dir, command, perform_backup, true,
make_lit_string("build.bat"),
make_lit_string("build"));
return(result);
}
#elif defined(__linux__)
// NOTE(allen): Build search rule for linux.
static int32_t
execute_standard_build_search(Application_Links *app, View_Summary *view,
Buffer_Summary *active_buffer,
String *dir, String *command, int32_t perform_backup){
char dir_space[512];
String dir_copy = make_fixed_width_string(dir_space);
copy(&dir_copy, *dir);
int32_t result = standard_build_search(app, view,
active_buffer,
dir, command, false, true,
make_lit_string("build.sh"),
make_lit_string("build.sh"));
if (!result){
result = standard_build_search(app, view,
active_buffer,
&dir_copy, command, perform_backup, false,
make_lit_string("Makefile"),
make_lit_string("make"));
}
return(result);
}
#else
# error No build search rule for this platform.
#endif
// NOTE(allen): This searches first using the active file's directory,
// then if no build script is found, it searches from 4coders hot directory.
static void
execute_standard_build(Application_Links *app, View_Summary *view,
Buffer_Summary *active_buffer){
char dir_space[512];
String dir = make_fixed_width_string(dir_space);
char command_str_space[512];
String command = make_fixed_width_string(command_str_space);
int32_t build_dir_type = get_build_directory(app, active_buffer, &dir);
if (build_dir_type == BuildDir_AtFile){
if (!execute_standard_build_search(app, view, active_buffer,
&dir, &command, false)){
dir.size = 0;
command.size = 0;
build_dir_type = get_build_directory(app, 0, &dir);
}
}
if (build_dir_type == BuildDir_AtHot){
execute_standard_build_search(app, view, active_buffer,
&dir, &command, true);
}
}
CUSTOM_COMMAND_SIG(build_search){
uint32_t access = AccessAll;
View_Summary view = app->get_active_view(app, access);
Buffer_Summary buffer = app->get_buffer(app, view.buffer_id, access);
execute_standard_build(app, &view, &buffer);
prev_location = null_location;
lock_jump_buffer(literal("*compilation*"));
}
#define GET_COMP_BUFFER(app) app->get_buffer_by_name(app, literal("*compilation*"), AccessAll)
static View_Summary
get_or_open_build_panel(Application_Links *app){
View_Summary view = {0};
Buffer_Summary buffer = GET_COMP_BUFFER(app);
if (buffer.exists){
view = get_first_view_with_buffer(app, buffer.buffer_id);
}
if (!view.exists){
view = open_special_note_view(app);
}
return(view);
}
static void
set_fancy_compilation_buffer_font(Application_Links *app){
Buffer_Summary comp_buffer = app->get_buffer_by_name(app, literal("*compilation*"), AccessAll);
app->buffer_set_font(app, &comp_buffer, literal("Inconsolata"));
}
CUSTOM_COMMAND_SIG(build_in_build_panel){
uint32_t access = AccessAll;
View_Summary view = app->get_active_view(app, access);
Buffer_Summary buffer = app->get_buffer(app, view.buffer_id, access);
View_Summary build_view = get_or_open_build_panel(app);
execute_standard_build(app, &build_view, &buffer);
set_fancy_compilation_buffer_font(app);
prev_location = null_location;
lock_jump_buffer(literal("*compilation*"));
}
CUSTOM_COMMAND_SIG(close_build_panel){
close_special_note_view(app);
}
CUSTOM_COMMAND_SIG(change_to_build_panel){
View_Summary view = open_special_note_view(app, false);
if (!view.exists){
Buffer_Summary buffer = GET_COMP_BUFFER(app);
if (buffer.exists){
view = open_special_note_view(app);
app->view_set_buffer(app, &view, buffer.buffer_id, 0);
}
}
if (view.exists){
app->set_active_view(app, &view);
}
}
//
// Other
// //
CUSTOM_COMMAND_SIG(execute_arbitrary_command){ CUSTOM_COMMAND_SIG(execute_arbitrary_command){

View File

@ -386,7 +386,7 @@ seek_error(Application_Links *app,
&location)){ &location)){
View_Summary active_view = app->get_active_view(app, AccessAll); View_Summary active_view = app->get_active_view(app, AccessAll);
if (active_view.view_id == view.view_id){ if (active_view.view_id == view.view_id){
exec_command(app, change_active_panel_regular); exec_command(app, change_active_panel);
active_view = app->get_active_view(app, AccessAll); active_view = app->get_active_view(app, AccessAll);
} }

View File

@ -1,7 +0,0 @@
#define MEMORY_ALLOCATE_SIG(n) void* n(Application_Links *app, int32_t size)
#define MEMORY_SET_PROTECTION_SIG(n) bool32 n(Application_Links *app, void *ptr, int32_t size, Memory_Protect_Flags flags)
#define MEMORY_FREE_SIG(n) void n(Application_Links *app, void *mem, int32_t size)
#define FILE_EXISTS_SIG(n) bool32 n(Application_Links *app, char *filename, int32_t len)
#define DIRECTORY_CD_SIG(n) bool32 n(Application_Links *app, char *dir, int32_t *len, int32_t capacity, char *rel_path, int32_t rel_len)
#define GET_4ED_PATH_SIG(n) bool32 n(Application_Links *app, char *out, int32_t capacity)
#define SHOW_MOUSE_CURSOR_SIG(n) void n(Application_Links *app, Mouse_Cursor_Show_Type show)

View File

@ -59,7 +59,6 @@ seek_line_char(int32_t line, int32_t character){
return(result); return(result);
} }
#endif #endif
// BOTTOM // BOTTOM

View File

@ -1912,7 +1912,7 @@ App_Step_Sig(app_step){
cmd->screen_width = target->width; cmd->screen_width = target->width;
cmd->screen_height = target->height; cmd->screen_height = target->height;
cmd->key = key_event_data_zero(); cmd->key = null_key_event_data;
Temp_Memory param_stack_temp = begin_temp_memory(&models->mem.part); Temp_Memory param_stack_temp = begin_temp_memory(&models->mem.part);
@ -2479,7 +2479,8 @@ App_Step_Sig(app_step){
"-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"
" and fullscreen can be toggled with <control pageup>\n" " and fullscreen can be toggled with <control pageup>.\n"
" (This sometimes causes artifacts on the Windows task bar)\n"
"\n" "\n"
"New in alpha 4.0.10:\n" "New in alpha 4.0.10:\n"
"-<control F> list all locations of a string across all open buffers\n" "-<control F> list all locations of a string across all open buffers\n"

View File

@ -17,7 +17,7 @@ access_test(u32 lock_flags, u32 access_flags){
internal void internal void
fill_buffer_summary(Buffer_Summary *buffer, Editing_File *file, Working_Set *working_set){ fill_buffer_summary(Buffer_Summary *buffer, Editing_File *file, Working_Set *working_set){
*buffer = buffer_summary_zero(); *buffer = null_buffer_summary;
if (!file->is_dummy){ if (!file->is_dummy){
buffer->exists = 1; buffer->exists = 1;
buffer->ready = file_is_ready(file); buffer->ready = file_is_ready(file);
@ -53,7 +53,7 @@ fill_view_summary(View_Summary *view, View *vptr, Live_Views *live_set, Working_
Buffer_ID buffer_id = 0; Buffer_ID buffer_id = 0;
File_Viewing_Data *data = &vptr->file_data; File_Viewing_Data *data = &vptr->file_data;
*view = view_summary_zero(); *view = null_view_summary;
if (vptr->in_use){ if (vptr->in_use){
view->exists = 1; view->exists = 1;
@ -433,7 +433,7 @@ internal_get_buffer_next(Working_Set *working_set, Buffer_Summary *buffer){
fill_buffer_summary(buffer, file, working_set); fill_buffer_summary(buffer, file, working_set);
} }
else{ else{
*buffer = buffer_summary_zero(); *buffer = null_buffer_summary;
} }
} }
@ -507,7 +507,7 @@ DOC_SEE(Buffer_ID)
if (file){ if (file){
fill_buffer_summary(&buffer, file, working_set); fill_buffer_summary(&buffer, file, working_set);
if (!access_test(buffer.lock_flags, access)){ if (!access_test(buffer.lock_flags, access)){
buffer = buffer_summary_zero(); buffer = null_buffer_summary;
} }
} }
@ -533,7 +533,7 @@ DOC_SEE(Access_Flag)
if (file && !file->is_dummy){ if (file && !file->is_dummy){
fill_buffer_summary(&buffer, file, working_set); fill_buffer_summary(&buffer, file, working_set);
if (!access_test(buffer.lock_flags, access)){ if (!access_test(buffer.lock_flags, access)){
buffer = buffer_summary_zero(); buffer = null_buffer_summary;
} }
} }
@ -1169,11 +1169,11 @@ internal_get_view_next(Command_Data *cmd, View_Summary *view){
fill_view_summary(view, panel->view, &cmd->vars->live_set, &cmd->models->working_set); fill_view_summary(view, panel->view, &cmd->vars->live_set, &cmd->models->working_set);
} }
else{ else{
*view = view_summary_zero(); *view = null_view_summary;
} }
} }
else{ else{
*view = view_summary_zero(); *view = null_view_summary;
} }
} }
@ -1242,7 +1242,7 @@ DOC_SEE(Access_Flag)
vptr = live_set->views + view_id; vptr = live_set->views + view_id;
fill_view_summary(&view, vptr, live_set, &cmd->models->working_set); fill_view_summary(&view, vptr, live_set, &cmd->models->working_set);
if (!access_test(view.lock_flags, access)){ if (!access_test(view.lock_flags, access)){
view = view_summary_zero(); view = null_view_summary;
} }
} }
@ -1260,7 +1260,7 @@ DOC_SEE(Access_Flag)
View_Summary view = {0}; View_Summary view = {0};
fill_view_summary(&view, cmd->view, &cmd->vars->live_set, &cmd->models->working_set); fill_view_summary(&view, cmd->view, &cmd->vars->live_set, &cmd->models->working_set);
if (!access_test(view.lock_flags, access)){ if (!access_test(view.lock_flags, access)){
view = view_summary_zero(); view = null_view_summary;
} }
return(view); return(view);
} }
@ -1950,6 +1950,7 @@ DOC(This call sets the display font of a particular buffer.)
Models *models = cmd->models; Models *models = cmd->models;
Editing_File *file = imp_get_file(cmd, buffer); Editing_File *file = imp_get_file(cmd, buffer);
if (file){
Font_Set *set = models->font_set; Font_Set *set = models->font_set;
String font_name = make_string(name, len); String font_name = make_string(name, len);
i16 font_id = 0; i16 font_id = 0;
@ -1957,6 +1958,7 @@ DOC(This call sets the display font of a particular buffer.)
if (font_set_extract(set, font_name, &font_id)){ if (font_set_extract(set, font_name, &font_id)){
file_set_font(system, models, file, font_id); file_set_font(system, models, file, font_id);
} }
}
} }
API_EXPORT void API_EXPORT void

View File

@ -13,12 +13,12 @@
#include <assert.h> #include <assert.h>
#include "4ed_defines.h" #include "4ed_defines.h"
#include "4coder_custom.h"
#define FSTRING_IMPLEMENTATION #define FSTRING_IMPLEMENTATION
#define FSTRING_C #define FSTRING_C
#include "4coder_string.h" #include "4coder_string.h"
#include "4coder_custom.h"
#define BUFFER_EXPERIMENT_SCALPEL 0 #define BUFFER_EXPERIMENT_SCALPEL 0
#include "4ed_math.h" #include "4ed_math.h"

View File

@ -1,4 +1,4 @@
Distribution Date: 30.8.2016 (dd.mm.yyyy) Distribution Date: 1.9.2016 (dd.mm.yyyy)
Thank you for contributing to the 4coder project! Thank you for contributing to the 4coder project!

View File

@ -84,14 +84,18 @@
; BEFORE I SHIP ; BEFORE I SHIP
; ;
; [X] flag in create buffer to prevent making new files ; [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] full screen option ; [X] full screen option
; [] add to APIs ; [X] add to APIs
; [] try to make win32 version better
; ;
; [] tokens in the custom API ; [] tokens in the custom API
; [] auto indent on the custom side ; [] auto indent on the custom side
; [] expose dirty flags ; [] expose dirty flags
; [] option to not open *messages* every startup ; [] option to not open *messages* every startup
; [] command for resizing panels ; [] commands for resizing panels
; [] make panel resizing not whacky with child panels
; [] control over how mouse effects panel focus ; [] control over how mouse effects panel focus
; [] API docs as text file ; [] API docs as text file
; [] user file bar string ; [] user file bar string
@ -99,8 +103,6 @@
; [] hook on exit ; [] hook on exit
; [] exit command ; [] exit command
; [] read only files ; [] read only files
; [] break down the build system and get away from the preproc hack
; [] locking to a view for next position jumping
; ;
; TODOS ; TODOS
@ -135,6 +137,8 @@
; [] support full length unicode file names ; [] support full length unicode file names
; [] switch based word complete ; [] switch based word complete
; ;
; [] query buffer font info
; [] break buffer name ties by adding parent directories instead of <#>
; [] undo groups ; [] undo groups
; [] cursor/scroll grouping ; [] cursor/scroll grouping
; [] file status in custom API ; [] file status in custom API
@ -148,6 +152,11 @@
; [] multi-line editing ; [] multi-line editing
; [] multi-cursor editing ; [] multi-cursor editing
; ;
; meta programming system
; [] 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
;
; GUI related tech ; GUI related tech
; [X] consolidate all GUI code properly ; [X] consolidate all GUI code properly
; [X] rewrite GUI ; [X] rewrite GUI

View File

@ -12,7 +12,7 @@
// TOP // TOP
#include "../4coder_buffer_types.h" #include "../4coder_seek_types.h"
#ifndef inline_4tech #ifndef inline_4tech
#define inline_4tech inline #define inline_4tech inline

View File

@ -264,7 +264,7 @@ buildsuper(char *code_path, char *out_path, char *filename){
static void static void
standard_build(char *cdir, uint32_t flags){ standard_build(char *cdir, uint32_t flags){
#if 1 #if 0
{ {
BEGIN_TIME_SECTION(); BEGIN_TIME_SECTION();
build(OPTS, cdir, "fsm_table_generator.cpp", build(OPTS, cdir, "fsm_table_generator.cpp",
@ -305,7 +305,7 @@ standard_build(char *cdir, uint32_t flags){
} }
#endif #endif
#if 1 #if 0
{ {
BEGIN_TIME_SECTION(); BEGIN_TIME_SECTION();
build(OPTS | INCLUDES | SHARED_CODE | flags, cdir, "4ed_app_target.cpp", build(OPTS | INCLUDES | SHARED_CODE | flags, cdir, "4ed_app_target.cpp",

View File

@ -15,7 +15,6 @@ Allen Webster
#define TEST_FILES "w:/4ed/data/test" #define TEST_FILES "w:/4ed/data/test"
#include "4coder_default_include.cpp" #include "4coder_default_include.cpp"
#include "4coder_default_building.cpp"
#include <intrin.h> #include <intrin.h>
#pragma intrinsic(__rdtsc) #pragma intrinsic(__rdtsc)

View File

@ -2,7 +2,6 @@
// TOP // TOP
#include "4coder_default_include.cpp" #include "4coder_default_include.cpp"
#include "4coder_default_building.cpp"
#define NO_BINDING #define NO_BINDING
#include "4coder_default_bindings.cpp" #include "4coder_default_bindings.cpp"