From d9cc45158d9761c827493647aa6bf68856e1e656 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Mon, 21 Mar 2016 18:27:27 -0400 Subject: [PATCH] a4.0.2 features ready (still testing) --- 4coder_custom.h | 1 + 4coder_default.cpp | 4 +- 4coder_default_bindings.cpp | 8 ++- 4ed.cpp | 126 +++++++++--------------------------- 4ed_app_settings.h | 2 + 4ed_file_view.cpp | 8 +-- TODO.txt | 6 +- 7 files changed, 46 insertions(+), 109 deletions(-) diff --git a/4coder_custom.h b/4coder_custom.h index 79d9f37e..c84a6e5c 100644 --- a/4coder_custom.h +++ b/4coder_custom.h @@ -166,6 +166,7 @@ enum Command_ID{ cmdid_seek_right, cmdid_seek_whitespace_up, cmdid_seek_whitespace_down, + cmdid_center_view, cmdid_word_complete, cmdid_set_mark, cmdid_copy, diff --git a/4coder_default.cpp b/4coder_default.cpp index 134316ab..fdfdda0f 100644 --- a/4coder_default.cpp +++ b/4coder_default.cpp @@ -312,7 +312,7 @@ isearch(Application_Links *app, int start_reversed){ if (step_backward){ pos = new_pos; start_pos = new_pos; - app->buffer_seek_string(app, &buffer, start_pos - 1, bar.string.str, bar.string.size, 0, &new_pos); + app->buffer_seek_string_insensitive(app, &buffer, start_pos - 1, bar.string.str, bar.string.size, 0, &new_pos); if (new_pos < 0) new_pos = start_pos; } match.start = new_pos; @@ -325,7 +325,7 @@ isearch(Application_Links *app, int start_reversed){ if (step_forward){ pos = new_pos; start_pos = new_pos; - app->buffer_seek_string(app, &buffer, start_pos + 1, bar.string.str, bar.string.size, 1, &new_pos); + app->buffer_seek_string_insensitive(app, &buffer, start_pos + 1, bar.string.str, bar.string.size, 1, &new_pos); if (new_pos >= buffer.size) new_pos = start_pos; } match.start = new_pos; diff --git a/4coder_default_bindings.cpp b/4coder_default_bindings.cpp index 57a223c0..ed56cf90 100644 --- a/4coder_default_bindings.cpp +++ b/4coder_default_bindings.cpp @@ -1,4 +1,6 @@ +// TOP + #include "4coder_default.cpp" unsigned char blink_t = 0; @@ -442,11 +444,11 @@ void default_get_bindings(Bind_Helper *context){ bind(context, '\n', MDFR_SHIFT, write_and_auto_tab); bind(context, ' ', MDFR_SHIFT, cmdid_write_character); - bind(context, 'q', MDFR_ALT | MDFR_CTRL, write_capital); - bind(context, 'w', MDFR_ALT | MDFR_CTRL, write_capital); - bind(context, 'e', MDFR_ALT | MDFR_CTRL, write_capital); + bind(context, 'e', MDFR_CTRL, cmdid_center_view); bind(context, 'T', MDFR_CTRL | MDFR_ALT, begin_html_mode); end_map(context); } + +// BOTTOM diff --git a/4ed.cpp b/4ed.cpp index 1e53c8c7..fec0b12b 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -252,15 +252,6 @@ COMMAND_DECL(write_character){ } } -COMMAND_DECL(seek_whitespace_right){ - ProfileMomentFunction(); - REQ_READABLE_VIEW(view); - REQ_FILE(file, view); - - i32 pos = buffer_seek_whitespace_right(&file->state.buffer, view->cursor.pos); - view_cursor_move(view, pos); -} - internal i32 seek_token_left(Cpp_Token_Stack *tokens, i32 pos){ Cpp_Get_Token_Result get = cpp_get_token(tokens, pos); @@ -398,15 +389,6 @@ COMMAND_DECL(seek_right){ view_cursor_move(view, new_pos); } -COMMAND_DECL(seek_whitespace_left){ - ProfileMomentFunction(); - REQ_READABLE_VIEW(view); - REQ_FILE(file, view); - - i32 pos = buffer_seek_whitespace_left(&file->state.buffer, view->cursor.pos); - view_cursor_move(view, pos); -} - COMMAND_DECL(seek_whitespace_up){ ProfileMomentFunction(); REQ_READABLE_VIEW(view); @@ -425,90 +407,24 @@ COMMAND_DECL(seek_whitespace_down){ view_cursor_move(view, pos); } -COMMAND_DECL(seek_token_left){ +COMMAND_DECL(center_view){ ProfileMomentFunction(); - REQ_READABLE_VIEW(view); + USE_VIEW(view); REQ_FILE(file, view); - if (file->state.tokens_complete){ - i32 pos = seek_token_left(&file->state.token_stack, view->cursor.pos); - view_cursor_move(view, pos); - } -} - -COMMAND_DECL(seek_token_right){ - ProfileMomentFunction(); - REQ_READABLE_VIEW(view); - REQ_FILE(file, view); - - if (file->state.tokens_complete){ - i32 pos = seek_token_right(&file->state.token_stack, view->cursor.pos); - view_cursor_move(view, pos); - } -} - -COMMAND_DECL(seek_white_or_token_right){ - ProfileMomentFunction(); - REQ_READABLE_VIEW(view); - REQ_FILE(file, view); - - i32 token_pos, white_pos; - if (file->state.tokens_complete){ - token_pos = seek_token_right(&file->state.token_stack, view->cursor.pos); + f32 y, h; + if (view->unwrapped_lines){ + y = view->cursor.unwrapped_y; } else{ - token_pos = buffer_size(&file->state.buffer); + y = view->cursor.wrapped_y; } - white_pos = buffer_seek_whitespace_right(&file->state.buffer, view->cursor.pos); - view_cursor_move(view, Min(token_pos, white_pos)); -} -COMMAND_DECL(seek_white_or_token_left){ - ProfileMomentFunction(); - REQ_READABLE_VIEW(view); - REQ_FILE(file, view); + h = view_compute_height(view); + y -= h * .5f; + if (y < view->scroll_min_limit) y = view->scroll_min_limit; - i32 token_pos, white_pos; - if (file->state.tokens_complete){ - token_pos = seek_token_left(&file->state.token_stack, view->cursor.pos); - } - else{ - token_pos = 0; - } - white_pos = buffer_seek_whitespace_left(&file->state.buffer, view->cursor.pos); - view_cursor_move(view, Max(token_pos, white_pos)); -} - -COMMAND_DECL(seek_alphanumeric_right){ - ProfileMomentFunction(); - REQ_READABLE_VIEW(view); - REQ_FILE(file, view); - i32 pos = buffer_seek_alphanumeric_right(&file->state.buffer, view->cursor.pos); - view_cursor_move(view, pos); -} - -COMMAND_DECL(seek_alphanumeric_left){ - ProfileMomentFunction(); - REQ_READABLE_VIEW(view); - REQ_FILE(file, view); - i32 pos = buffer_seek_alphanumeric_left(&file->state.buffer, view->cursor.pos); - view_cursor_move(view, pos); -} - -COMMAND_DECL(seek_alphanumeric_or_camel_right){ - ProfileMomentFunction(); - REQ_READABLE_VIEW(view); - REQ_FILE(file, view); - i32 pos = buffer_seek_alphanumeric_or_camel_right(&file->state.buffer, view->cursor.pos); - view_cursor_move(view, pos); -} - -COMMAND_DECL(seek_alphanumeric_or_camel_left){ - ProfileMomentFunction(); - REQ_READABLE_VIEW(view); - REQ_FILE(file, view); - i32 pos = buffer_seek_alphanumeric_or_camel_left(&file->state.buffer, view->cursor.pos); - view_cursor_move(view, pos); + view->target_y = y; } COMMAND_DECL(word_complete){ @@ -2725,6 +2641,7 @@ setup_command_table(){ SET(seek_right); SET(seek_whitespace_up); SET(seek_whitespace_down); + SET(center_view); SET(word_complete); SET(set_mark); SET(copy); @@ -3014,6 +2931,7 @@ enum Command_Line_Action{ CLAct_WindowSize, CLAct_WindowMaximize, CLAct_WindowPosition, + CLAct_FontSize, CLAct_Count }; @@ -3024,7 +2942,7 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings, Command_Line_Action action = CLAct_Nothing; i32 i,index; b32 strict = 0; - + settings->init_files_max = ArrayCount(settings->init_files); for (i = 1; i <= clparams.argc; ++i){ if (i == clparams.argc) arg = ""; @@ -3046,6 +2964,8 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings, case 'w': action = CLAct_WindowSize; break; case 'W': action = CLAct_WindowMaximize; break; case 'p': action = CLAct_WindowPosition; break; + + case 'f': action = CLAct_FontSize; break; } } else if (arg[0] != 0){ @@ -3112,6 +3032,14 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings, } action = CLAct_Nothing; }break; + + case CLAct_FontSize: + { + if (i < clparams.argc){ + settings->font_size = str_to_int(clparams.argv[i]); + } + action = CLAct_Nothing; + }break; } } } @@ -3147,6 +3075,7 @@ execute_special_tool(void *memory, i32 size, Command_Line_Parameters clparams){ App_Read_Command_Line_Sig(app_read_command_line){ App_Vars *vars; + App_Settings *settings; i32 out_size = 0; if (clparams.argc > 1 && match(clparams.argv[1], "-T")){ @@ -3158,7 +3087,9 @@ App_Read_Command_Line_Sig(app_read_command_line){ init_command_line_settings(&vars->models.settings, plat_settings, clparams); } else{ - vars->models.settings = {}; + settings = &vars->models.settings; + *settings = {}; + settings->font_size = 16; } *files = vars->models.settings.init_files; *file_count = &vars->models.settings.init_files_count; @@ -3398,7 +3329,7 @@ App_Init_Sig(app_init){ i32 pt_size; }; - int font_size = 16; + int font_size = models->settings.font_size; if (font_size < 8) font_size = 8; @@ -3795,6 +3726,7 @@ App_Step_Sig(app_step){ "-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" + "- 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" ); diff --git a/4ed_app_settings.h b/4ed_app_settings.h index edafdb18..d8f8d0f3 100644 --- a/4ed_app_settings.h +++ b/4ed_app_settings.h @@ -19,6 +19,8 @@ struct App_Settings{ i32 initial_line; b32 lctrl_lalt_is_altgr; + + i32 font_size; }; struct Models{ diff --git a/4ed_file_view.cpp b/4ed_file_view.cpp index 477ec857..9c0a387f 100644 --- a/4ed_file_view.cpp +++ b/4ed_file_view.cpp @@ -2488,17 +2488,17 @@ style_get_color(Style *style, Cpp_Token token){ } inline f32 -view_compute_max_target_y(i32 lowest_line, i32 line_height, real32 view_height){ +view_compute_max_target_y(i32 lowest_line, i32 line_height, f32 view_height){ real32 max_target_y = ((lowest_line+.5f)*line_height) - view_height*.5f; return max_target_y; } -internal real32 +internal f32 view_compute_max_target_y(View *view){ i32 lowest_line = view_compute_lowest_line(view); i32 line_height = view->font_height; - real32 view_height = view_compute_height(view); - real32 max_target_y = view_compute_max_target_y( + f32 view_height = view_compute_height(view); + f32 max_target_y = view_compute_max_target_y( lowest_line, line_height, view_height); return max_target_y; } diff --git a/TODO.txt b/TODO.txt index fdf7520e..d874f602 100644 --- a/TODO.txt +++ b/TODO.txt @@ -99,10 +99,10 @@ ; [X] tab option for auto-indent ; [X] catch unsaved files on close ; [X] feedback messages +; [X] feedback message API ; ; [] file status in custom API ; [] user file bar string -; [] feedback message API ; [] simple multi-line ; ; [] command meta data @@ -162,7 +162,7 @@ ; [] error text at line ; [] word complete ghosting ; -; [] the main_4coder experiment +; [] the "main_4coder" experiment ; ; [] tutorials ; @@ -180,9 +180,9 @@ ; EASY TODOS ; [X] better messages for example not "BEHIND OS" ; [X] shift backspace +; [X] center view on cursor ; [] close editor command ; [] panel grow/shrink commands -; [] center view on cursor ; [] delta time in scroll interpolation ;