4coder/4coder_default_building.cpp

178 lines
5.0 KiB
C++

#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){
Buffer_Summary buffer =
app->get_buffer_by_name(app, literal("*compilation*"), 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);
prev_location = null_location;
}
// 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);
int 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), false);
}
}
// 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