finished moving clean all lines
This commit is contained in:
parent
b4e6bd94e5
commit
8258e6c1ab
|
@ -380,7 +380,7 @@ default_keys(Bind_Helper *context){
|
||||||
bind(context, '!', MDFR_CTRL, eol_nixify);
|
bind(context, '!', MDFR_CTRL, eol_nixify);
|
||||||
|
|
||||||
bind(context, '?', MDFR_CTRL, toggle_show_whitespace);
|
bind(context, '?', MDFR_CTRL, toggle_show_whitespace);
|
||||||
bind(context, '~', MDFR_CTRL, cmdid_clean_all_lines);
|
bind(context, '~', MDFR_CTRL, clean_all_lines);
|
||||||
bind(context, '\n', MDFR_SHIFT, write_and_auto_tab);
|
bind(context, '\n', MDFR_SHIFT, write_and_auto_tab);
|
||||||
bind(context, ' ', MDFR_SHIFT, write_character);
|
bind(context, ' ', MDFR_SHIFT, write_character);
|
||||||
|
|
||||||
|
|
|
@ -1462,23 +1462,16 @@ CUSTOM_COMMAND_SIG(clean_all_lines){
|
||||||
|
|
||||||
char data[1024];
|
char data[1024];
|
||||||
Stream_Chunk chunk = {0};
|
Stream_Chunk chunk = {0};
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
if (init_stream_chunk(&chunk, app, &buffer,
|
if (init_stream_chunk(&chunk, app, &buffer,
|
||||||
0, data, sizeof(data))){
|
i, data, sizeof(data))){
|
||||||
Buffer_Edit *edit = edits;
|
Buffer_Edit *edit = edits;
|
||||||
|
|
||||||
int buffer_size = buffer.size;
|
int buffer_size = buffer.size;
|
||||||
int still_looping = true;
|
int still_looping = true;
|
||||||
int need_stopper = true;
|
|
||||||
int last_hard = buffer_size;
|
int last_hard = buffer_size;
|
||||||
do{
|
do{
|
||||||
if (need_stopper && !still_looping){
|
|
||||||
chunk.end = i+1;
|
|
||||||
chunk.data[0] = '\n';
|
|
||||||
need_stopper = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (; i < chunk.end; ++i){
|
for (; i < chunk.end; ++i){
|
||||||
char at_pos = chunk.data[i];
|
char at_pos = chunk.data[i];
|
||||||
if (at_pos == '\n'){
|
if (at_pos == '\n'){
|
||||||
|
@ -1488,7 +1481,7 @@ CUSTOM_COMMAND_SIG(clean_all_lines){
|
||||||
edit->start = last_hard+1;
|
edit->start = last_hard+1;
|
||||||
edit->end = i;
|
edit->end = i;
|
||||||
++edit;
|
++edit;
|
||||||
i = buffer_size;
|
last_hard = buffer_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (char_is_whitespace(at_pos)){
|
else if (char_is_whitespace(at_pos)){
|
||||||
|
@ -1499,13 +1492,19 @@ CUSTOM_COMMAND_SIG(clean_all_lines){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (still_looping){
|
still_looping = forward_stream_chunk(&chunk);
|
||||||
still_looping = forward_stream_chunk(&chunk);
|
}while(still_looping);
|
||||||
}
|
|
||||||
}while(still_looping && need_stopper);
|
if (last_hard+1 < buffer_size){
|
||||||
|
edit->str_start = 0;
|
||||||
|
edit->len = 0;
|
||||||
|
edit->start = last_hard+1;
|
||||||
|
edit->end = buffer_size;
|
||||||
|
++edit;
|
||||||
|
}
|
||||||
|
|
||||||
int edit_count = (int)(edit - edits);
|
int edit_count = (int)(edit - edits);
|
||||||
app->buffer_batch_edit(app, &buffer, 0, edits, edit_count, BatchEdit_PreserveTokens);
|
app->buffer_batch_edit(app, &buffer, 0, 0, edits, edit_count, BatchEdit_PreserveTokens);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* DOC(bool32 is an alias name to signal that an integer parameter or field is for
|
/* DOC(bool32 is an alias name to signal that an integer parameter or field is for
|
||||||
true/false vales.) */
|
true/false vales.) */
|
||||||
typedef int32_t bool32;
|
typedef int32_t bool32;
|
||||||
|
@ -67,9 +68,6 @@ ENUM(uint64_t, Command_ID){
|
||||||
/* DOC(cmdid_history_forward unperforms the previous cmdid_history_backward step if possib.e) */
|
/* DOC(cmdid_history_forward unperforms the previous cmdid_history_backward step if possib.e) */
|
||||||
cmdid_history_forward,
|
cmdid_history_forward,
|
||||||
|
|
||||||
/* DOC(cmdid_clean_all_lines deletes extra whitespace out the currently active buffer.) */
|
|
||||||
cmdid_clean_all_lines,
|
|
||||||
|
|
||||||
/* DOC(cmdid_interactive_new begins an interactive dialogue to create a new buffer.) */
|
/* DOC(cmdid_interactive_new begins an interactive dialogue to create a new buffer.) */
|
||||||
cmdid_interactive_new,
|
cmdid_interactive_new,
|
||||||
/* DOC(cmdid_interactive_open begins an interactive dialogue to open a file into a buffer.) */
|
/* DOC(cmdid_interactive_open begins an interactive dialogue to open a file into a buffer.) */
|
||||||
|
@ -129,7 +127,7 @@ ENUM(int32_t, Buffer_Batch_Edit_Type){
|
||||||
/* DOC(The BatchEdit_PreserveTokens operation is one in which none of the edits add, delete, or change any tokens.
|
/* DOC(The BatchEdit_PreserveTokens operation is one in which none of the edits add, delete, or change any tokens.
|
||||||
This usually applies when whitespace is being replaced with whitespace.) */
|
This usually applies when whitespace is being replaced with whitespace.) */
|
||||||
BatchEdit_PreserveTokens
|
BatchEdit_PreserveTokens
|
||||||
}
|
};
|
||||||
|
|
||||||
/* DOC(A Buffer_Setting_ID names a setting in a buffer.) */
|
/* DOC(A Buffer_Setting_ID names a setting in a buffer.) */
|
||||||
ENUM(int32_t, Buffer_Setting_ID){
|
ENUM(int32_t, Buffer_Setting_ID){
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#define MAJOR 4
|
#define MAJOR 4
|
||||||
#define MINOR 0
|
#define MINOR 0
|
||||||
#define PATCH 9
|
#define PATCH 10
|
||||||
|
|
||||||
#define VN__(a,b,c) #a"."#b"."#c
|
#define VN__(a,b,c) #a"."#b"."#c
|
||||||
#define VN_(a,b,c) VN__(a,b,c)
|
#define VN_(a,b,c) VN__(a,b,c)
|
||||||
|
|
67
4ed.cpp
67
4ed.cpp
|
@ -739,71 +739,6 @@ COMMAND_DECL(to_lowercase){
|
||||||
case_change_range(system, &models->mem, view, file, 'A', 'Z', (u8)('a' - 'A'));
|
case_change_range(system, &models->mem, view, file, 'A', 'Z', (u8)('a' - 'A'));
|
||||||
}
|
}
|
||||||
|
|
||||||
COMMAND_DECL(clean_all_lines){
|
|
||||||
USE_MODELS(models);
|
|
||||||
REQ_OPEN_VIEW(view);
|
|
||||||
REQ_FILE(file, view);
|
|
||||||
|
|
||||||
Mem_Options *mem = &models->mem;
|
|
||||||
Editing_File *file = view->file_data.file;
|
|
||||||
|
|
||||||
Partition *part = &mem->part;
|
|
||||||
i32 line_count = file->state.buffer.line_count;
|
|
||||||
i32 edit_max = line_count * 2;
|
|
||||||
i32 edit_count = 0;
|
|
||||||
|
|
||||||
Assert(file && !file->is_dummy);
|
|
||||||
Assert(view->edit_pos);
|
|
||||||
|
|
||||||
Temp_Memory temp = begin_temp_memory(part);
|
|
||||||
Buffer_Edit *edits = push_array(part, Buffer_Edit, edit_max);
|
|
||||||
|
|
||||||
char *str_base = (char*)part->base + part->pos;
|
|
||||||
i32 str_size = 0;
|
|
||||||
for (i32 line_i = 0; line_i < line_count; ++line_i){
|
|
||||||
i32 start = file->state.buffer.line_starts[line_i];
|
|
||||||
Hard_Start_Result hard_start =
|
|
||||||
buffer_find_hard_start(&file->state.buffer, start, 4);
|
|
||||||
|
|
||||||
if (hard_start.all_whitespace){
|
|
||||||
hard_start.indent_pos = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((hard_start.all_whitespace && hard_start.char_pos > start) || !hard_start.all_space){
|
|
||||||
Buffer_Edit new_edit;
|
|
||||||
new_edit.str_start = str_size;
|
|
||||||
str_size += hard_start.indent_pos;
|
|
||||||
char *str = push_array(part, char, hard_start.indent_pos);
|
|
||||||
for (i32 j = 0; j < hard_start.indent_pos; ++j) str[j] = ' ';
|
|
||||||
new_edit.len = hard_start.indent_pos;
|
|
||||||
new_edit.start = start;
|
|
||||||
new_edit.end = hard_start.char_pos;
|
|
||||||
edits[edit_count++] = new_edit;
|
|
||||||
}
|
|
||||||
Assert(edit_count <= edit_max);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (edit_count > 0){
|
|
||||||
Assert(buffer_batch_debug_sort_check(edits, edit_count));
|
|
||||||
|
|
||||||
// NOTE(allen): computing edit spec, doing batch edit
|
|
||||||
Buffer_Edit *inverse_array = push_array(part, Buffer_Edit, edit_count);
|
|
||||||
Assert(inverse_array);
|
|
||||||
|
|
||||||
char *inv_str = (char*)part->base + part->pos;
|
|
||||||
Edit_Spec spec =
|
|
||||||
file_compute_whitespace_edit(mem, file,
|
|
||||||
view->edit_pos->cursor.pos,
|
|
||||||
edits, str_base, str_size,
|
|
||||||
inverse_array, inv_str,
|
|
||||||
part->max - part->pos, edit_count);
|
|
||||||
|
|
||||||
file_do_white_batch_edit(system, models, view->file_data.file, spec, hist_normal);
|
|
||||||
}
|
|
||||||
|
|
||||||
end_temp_memory(temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
COMMAND_DECL(open_panel_vsplit){
|
COMMAND_DECL(open_panel_vsplit){
|
||||||
USE_VARS(vars);
|
USE_VARS(vars);
|
||||||
USE_MODELS(models);
|
USE_MODELS(models);
|
||||||
|
@ -1111,8 +1046,6 @@ setup_command_table(){
|
||||||
SET(save);
|
SET(save);
|
||||||
SET(kill_buffer);
|
SET(kill_buffer);
|
||||||
|
|
||||||
SET(clean_all_lines);
|
|
||||||
|
|
||||||
SET(open_color_tweaker);
|
SET(open_color_tweaker);
|
||||||
SET(open_config);
|
SET(open_config);
|
||||||
SET(open_menu);
|
SET(open_menu);
|
||||||
|
|
|
@ -715,12 +715,23 @@ DOC_SEE(Buffer_Edit)
|
||||||
DOC_SEE(Buffer_Batch_Edit_Type)
|
DOC_SEE(Buffer_Batch_Edit_Type)
|
||||||
*/{
|
*/{
|
||||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||||
Mem_Options *mem = cmd->models;
|
Models *models = cmd->models;
|
||||||
Partition *part = &models->mem.part;
|
Mem_Options *mem = &models->mem;
|
||||||
|
Partition *part = &mem->part;
|
||||||
Editing_File *file = imp_get_file(cmd, buffer);
|
Editing_File *file = imp_get_file(cmd, buffer);
|
||||||
|
|
||||||
bool32 result = false;
|
bool32 result = false;
|
||||||
|
|
||||||
|
app->print_message(app, literal("Buffer_Batch_Edit:\n"));
|
||||||
|
{
|
||||||
|
char space[512];
|
||||||
|
String str = make_fixed_width_string(space);
|
||||||
|
append(&str, "edit_count: ");
|
||||||
|
append_int_to_str(&str, edit_count);
|
||||||
|
append(&str, '\n');
|
||||||
|
app->print_message(app, str.str, str.size);
|
||||||
|
}
|
||||||
|
|
||||||
if (file){
|
if (file){
|
||||||
Temp_Memory temp = begin_temp_memory(part);
|
Temp_Memory temp = begin_temp_memory(part);
|
||||||
Buffer_Edit *inverse_edits = push_array(part, Buffer_Edit, edit_count);
|
Buffer_Edit *inverse_edits = push_array(part, Buffer_Edit, edit_count);
|
||||||
|
@ -742,11 +753,11 @@ DOC_SEE(Buffer_Batch_Edit_Type)
|
||||||
inverse_edits, inv_str, inv_str_max,
|
inverse_edits, inv_str, inv_str_max,
|
||||||
edit_count);
|
edit_count);
|
||||||
|
|
||||||
file_do_white_batch_edit(system, models, file, spec, hist_normal);
|
file_do_white_batch_edit(cmd->system, models, file, spec, hist_normal);
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
|
|
||||||
end_temp_memory(part);
|
end_temp_memory(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
|
|
|
@ -2976,7 +2976,7 @@ file_auto_tab_tokens(System_Functions *system, Models *models,
|
||||||
|
|
||||||
char *inv_str = (char*)part->base + part->pos;
|
char *inv_str = (char*)part->base + part->pos;
|
||||||
Edit_Spec spec =
|
Edit_Spec spec =
|
||||||
file_compute_whitespace_edit(mem, file, pos,
|
file_compute_whitespace_edit(mem, file,
|
||||||
batch.edits, batch.str_base, batch.str_size,
|
batch.edits, batch.str_base, batch.str_size,
|
||||||
inverse_array, inv_str, part->max - part->pos,
|
inverse_array, inv_str, part->max - part->pos,
|
||||||
batch.edit_count);
|
batch.edit_count);
|
||||||
|
|
Loading…
Reference in New Issue