Added end file hook, got the sticky jumps pretty much finished for 4.0.19
This commit is contained in:
parent
a5936fa734
commit
aba023aff8
|
@ -797,6 +797,8 @@ ENUM(int32_t, Special_Hook_ID){
|
|||
/* DOC(TODO) */
|
||||
special_hook_save_file,
|
||||
/* DOC(TODO) */
|
||||
special_hook_end_file,
|
||||
/* DOC(TODO) */
|
||||
special_hook_command_caller,
|
||||
/* DOC(TODO) */
|
||||
special_hook_input_filter,
|
||||
|
|
|
@ -150,8 +150,7 @@ OPEN_FILE_HOOK_SIG(default_new_file){
|
|||
}
|
||||
|
||||
OPEN_FILE_HOOK_SIG(default_file_save){
|
||||
uint32_t access = AccessAll;
|
||||
Buffer_Summary buffer = get_buffer(app, buffer_id, access);
|
||||
Buffer_Summary buffer = get_buffer(app, buffer_id, AccessAll);
|
||||
Assert(buffer.exists);
|
||||
|
||||
#if defined(FCODER_AUTO_INDENT_CPP)
|
||||
|
@ -167,6 +166,22 @@ OPEN_FILE_HOOK_SIG(default_file_save){
|
|||
return(0);
|
||||
}
|
||||
|
||||
OPEN_FILE_HOOK_SIG(default_end_file){
|
||||
Buffer_Summary buffer = get_buffer(app, buffer_id, AccessAll);
|
||||
Assert(buffer.exists);
|
||||
|
||||
char space[1024];
|
||||
String str = make_fixed_width_string(space);
|
||||
append(&str, "Ending file: ");
|
||||
append(&str, make_string(buffer.buffer_name, buffer.buffer_name_len));
|
||||
append(&str, "\n");
|
||||
|
||||
print_message(app, str.str, str.size);
|
||||
|
||||
// no meaning for return
|
||||
return(0);
|
||||
}
|
||||
|
||||
// NOTE(allen|a4.0.9): The input filter allows you to modify the input
|
||||
// to a frame before 4coder starts processing it at all.
|
||||
//
|
||||
|
@ -276,6 +291,8 @@ set_all_default_hooks(Bind_Helper *context){
|
|||
set_open_file_hook(context, default_file_settings);
|
||||
set_new_file_hook(context, default_new_file);
|
||||
set_save_file_hook(context, default_file_save);
|
||||
set_end_file_hook(context, default_end_file);
|
||||
|
||||
set_command_caller(context, default_command_caller);
|
||||
set_input_filter(context, default_suppress_mouse_filter);
|
||||
set_scroll_rule(context, smooth_scroll_rule);
|
||||
|
|
|
@ -195,6 +195,16 @@ set_save_file_hook(Bind_Helper *helper, Open_File_Hook_Function *func){
|
|||
write_unit(helper, unit);
|
||||
}
|
||||
|
||||
inline void
|
||||
set_end_file_hook(Bind_Helper *helper, Open_File_Hook_Function *func){
|
||||
Binding_Unit unit;
|
||||
unit.type = unit_hook;
|
||||
unit.hook.hook_id = special_hook_end_file;
|
||||
unit.hook.func = (void*) func;
|
||||
|
||||
write_unit(helper, unit);
|
||||
}
|
||||
|
||||
inline void
|
||||
set_command_caller(Bind_Helper *helper, Command_Caller_Hook_Function *func){
|
||||
Binding_Unit unit;
|
||||
|
|
|
@ -424,11 +424,6 @@ ENUM_INTERNAL(uint8_t, Cpp_Lex_State){
|
|||
LS_char = 32,
|
||||
};
|
||||
|
||||
#if 0
|
||||
LS_less_less = 23,
|
||||
LS_more_more = 24,
|
||||
#endif
|
||||
|
||||
// NOTE(allen): These provide names that match the overloaded meanings of string states.
|
||||
#define LS_string_raw LS_string_R
|
||||
#define LS_string_normal LS_string_LUu8
|
||||
|
|
45
4ed.cpp
45
4ed.cpp
|
@ -420,17 +420,13 @@ COMMAND_DECL(change_active_panel){
|
|||
COMMAND_DECL(interactive_switch_buffer){
|
||||
USE_VIEW(view);
|
||||
|
||||
view_show_interactive(system, view,
|
||||
IAct_Switch, IInt_Live_File_List,
|
||||
make_lit_string("Switch Buffer: "));
|
||||
view_show_interactive(system, view, IAct_Switch, IInt_Live_File_List, make_lit_string("Switch Buffer: "));
|
||||
}
|
||||
|
||||
COMMAND_DECL(interactive_kill_buffer){
|
||||
USE_VIEW(view);
|
||||
|
||||
view_show_interactive(system, view,
|
||||
IAct_Kill, IInt_Live_File_List,
|
||||
make_lit_string("Kill Buffer: "));
|
||||
view_show_interactive(system, view, IAct_Kill, IInt_Live_File_List, make_lit_string("Kill Buffer: "));
|
||||
}
|
||||
|
||||
COMMAND_DECL(kill_buffer){
|
||||
|
@ -441,37 +437,6 @@ COMMAND_DECL(kill_buffer){
|
|||
interactive_try_kill_file(system, models, view, file);
|
||||
}
|
||||
|
||||
COMMAND_DECL(toggle_line_wrap){
|
||||
REQ_READABLE_VIEW(view);
|
||||
REQ_FILE(file, view);
|
||||
|
||||
Assert(view->edit_pos);
|
||||
|
||||
Relative_Scrolling scrolling = view_get_relative_scrolling(view);
|
||||
if (file->settings.unwrapped_lines){
|
||||
file->settings.unwrapped_lines = 0;
|
||||
view->edit_pos->scroll.target_x = 0;
|
||||
}
|
||||
else{
|
||||
file->settings.unwrapped_lines = 1;
|
||||
}
|
||||
view_cursor_move(system, view, view->edit_pos->cursor.pos);
|
||||
view_set_relative_scrolling(view, scrolling);
|
||||
}
|
||||
|
||||
COMMAND_DECL(toggle_tokens){
|
||||
USE_MODELS(models);
|
||||
REQ_OPEN_VIEW(view);
|
||||
REQ_FILE(file, view);
|
||||
|
||||
if (file->settings.tokens_exist){
|
||||
file_kill_tokens(system, &models->mem.general, file);
|
||||
}
|
||||
else{
|
||||
file_first_lex_parallel(system, &models->mem, file);
|
||||
}
|
||||
}
|
||||
|
||||
internal void
|
||||
case_change_range(System_Functions *system, Mem_Options *mem, View *view, Editing_File *file, u8 a, u8 z, u8 char_delta){
|
||||
Range range = {0};
|
||||
|
@ -1235,6 +1200,7 @@ App_Init_Sig(app_init){
|
|||
models->hook_open_file = 0;
|
||||
models->hook_new_file = 0;
|
||||
models->hook_save_file = 0;
|
||||
models->hook_end_file = 0;
|
||||
models->command_caller = 0;
|
||||
models->input_filter = 0;
|
||||
|
||||
|
@ -1388,6 +1354,11 @@ App_Init_Sig(app_init){
|
|||
models->hook_save_file = (Open_File_Hook_Function*)unit->hook.func;
|
||||
}break;
|
||||
|
||||
case special_hook_end_file:
|
||||
{
|
||||
models->hook_end_file = (Open_File_Hook_Function*)unit->hook.func;
|
||||
}break;
|
||||
|
||||
case special_hook_command_caller:
|
||||
{
|
||||
models->command_caller = (Command_Caller_Hook_Function*)unit->hook.func;
|
||||
|
|
|
@ -188,7 +188,7 @@ DOC_SEE(Command_ID)
|
|||
return(result);
|
||||
}
|
||||
|
||||
// TODO(allen): This is a bit of a mess and needs to be fixed soon.
|
||||
// TODO(allen): This is a bit of a mess and needs to be fixed.
|
||||
API_EXPORT bool32
|
||||
Exec_System_Command(Application_Links *app, View_Summary *view, Buffer_Identifier buffer, char *path, int32_t path_len, char *command, int32_t command_len, Command_Line_Interface_Flag flags)
|
||||
/*
|
||||
|
@ -273,8 +273,7 @@ DOC_SEE(Command_Line_Interface_Flag)
|
|||
}
|
||||
else{
|
||||
file = 0;
|
||||
}
|
||||
break;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -290,8 +289,10 @@ DOC_SEE(Command_Line_Interface_Flag)
|
|||
}
|
||||
}
|
||||
else{
|
||||
append_ss(&feedback_str,
|
||||
make_lit_string("did not begin command-line command because the target buffer is already in use\n"));
|
||||
#define MSG "did not begin command-line command because the target buffer is already in use\n"
|
||||
String msg = make_lit_string(MSG);
|
||||
#undef MSG
|
||||
append_ss(&feedback_str, msg);
|
||||
do_feedback_message(system, models, feedback_str);
|
||||
result = false;
|
||||
goto done;
|
||||
|
|
|
@ -68,6 +68,7 @@ struct Models{
|
|||
Open_File_Hook_Function *hook_open_file;
|
||||
Open_File_Hook_Function *hook_new_file;
|
||||
Open_File_Hook_Function *hook_save_file;
|
||||
Open_File_Hook_Function *hook_end_file;
|
||||
Command_Caller_Hook_Function *command_caller;
|
||||
Input_Filter_Function *input_filter;
|
||||
Scroll_Rule_Function *scroll_rule;
|
||||
|
|
|
@ -3487,16 +3487,12 @@ file_replace_range(System_Functions *system, Models *models, Editing_File *file,
|
|||
|
||||
inline void
|
||||
file_clear(System_Functions *system, Models *models, Editing_File *file){
|
||||
if (models->hook_end_file != 0){
|
||||
models->hook_end_file(&models->app_links, file->id.id);
|
||||
}
|
||||
file_replace_range(system, models, file, 0, buffer_size(&file->state.buffer), 0, 0);
|
||||
}
|
||||
|
||||
// TODO(allen): get rid of this
|
||||
inline void
|
||||
view_replace_range(System_Functions *system, Models *models, View *view,
|
||||
i32 start, i32 end, char *str, i32 len){
|
||||
file_replace_range(system, models, view->file_data.file, start, end, str, len);
|
||||
}
|
||||
|
||||
inline void
|
||||
view_post_paste_effect(View *view, f32 seconds, i32 start, i32 size, u32 color){
|
||||
Editing_File *file = view->file_data.file;
|
||||
|
@ -3926,7 +3922,6 @@ view_interactive_new_file(System_Functions *system, Models *models, View *view,
|
|||
file_clear(system, models, file);
|
||||
}
|
||||
else{
|
||||
|
||||
Mem_Options *mem = &models->mem;
|
||||
General_Memory *general = &mem->general;
|
||||
|
||||
|
@ -3950,6 +3945,10 @@ kill_file(System_Functions *system, Models *models, Editing_File *file){
|
|||
Working_Set *working_set = &models->working_set;
|
||||
|
||||
if (file != 0 && !file->settings.never_kill){
|
||||
if (models->hook_end_file != 0){
|
||||
models->hook_end_file(&models->app_links, file->id.id);
|
||||
}
|
||||
|
||||
buffer_unbind_name(working_set, file);
|
||||
if (file->canon.name.size != 0){
|
||||
buffer_unbind_file(system, working_set, file);
|
||||
|
|
|
@ -598,24 +598,6 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli
|
|||
}
|
||||
}break;
|
||||
|
||||
#if 0
|
||||
case LS_less_less:
|
||||
{
|
||||
switch (c){
|
||||
case '=': fsm.emit_token = true; break;
|
||||
default: fsm.emit_token = true; break;
|
||||
}
|
||||
}break;
|
||||
|
||||
case LS_more_more:
|
||||
{
|
||||
switch (c){
|
||||
case '=': fsm.emit_token = true; break;
|
||||
default: fsm.emit_token = true; break;
|
||||
}
|
||||
}break;
|
||||
#endif
|
||||
|
||||
case LS_comment_pre:
|
||||
{
|
||||
switch (c){
|
||||
|
|
|
@ -1380,6 +1380,8 @@ get_bindings(void *data, int32_t size){
|
|||
set_open_file_hook(context, default_file_settings);
|
||||
set_new_file_hook(context, default_new_file);
|
||||
set_save_file_hook(context, default_file_save);
|
||||
set_end_file_hook(context, end_file_close_jump_list);
|
||||
|
||||
set_input_filter(context, default_suppress_mouse_filter);
|
||||
set_command_caller(context, default_command_caller);
|
||||
|
||||
|
|
|
@ -512,6 +512,22 @@ CUSTOM_COMMAND_SIG(newline_or_goto_position_same_panel){
|
|||
#define goto_next_error_no_skips goto_next_jump_no_skips
|
||||
#define goto_first_error goto_first_jump
|
||||
|
||||
//
|
||||
// End File Hook
|
||||
//
|
||||
|
||||
OPEN_FILE_HOOK_SIG(end_file_close_jump_list){
|
||||
Marker_List *list = get_marker_list_for_buffer(buffer_id);
|
||||
if (list != 0){
|
||||
free_marker_list(&global_general, *list);
|
||||
set_marker_list_for_buffer(buffer_id, 0);
|
||||
}
|
||||
|
||||
default_end_file(app, buffer_id);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// BOTTOM
|
||||
|
|
Loading…
Reference in New Issue