Sped up function lister
This commit is contained in:
parent
cb85505390
commit
a51863f492
|
@ -178,15 +178,13 @@ snippet_lister__parameterized(Application_Links *app, Snippet_Array snippet_arra
|
||||||
int32_t option_count = snippet_array.count;
|
int32_t option_count = snippet_array.count;
|
||||||
Lister_Option *options = push_array(arena, Lister_Option, option_count);
|
Lister_Option *options = push_array(arena, Lister_Option, option_count);
|
||||||
for (int32_t i = 0; i < snippet_array.count; i += 1){
|
for (int32_t i = 0; i < snippet_array.count; i += 1){
|
||||||
options[i].string = snippet_array.snippets[i].name;
|
options[i].string = make_string_slowly(snippet_array.snippets[i].name);
|
||||||
options[i].status = snippet_array.snippets[i].text;
|
options[i].status = make_string_slowly(snippet_array.snippets[i].text);
|
||||||
options[i].user_data = IntAsPtr(i);
|
options[i].user_data = IntAsPtr(i);
|
||||||
}
|
}
|
||||||
begin_integrated_lister__basic_list(app, "Snippet:", activate_snippet,
|
begin_integrated_lister__basic_list(app, "Snippet:", activate_snippet,
|
||||||
&snippet_array, sizeof(snippet_array),
|
&snippet_array, sizeof(snippet_array),
|
||||||
options, option_count,
|
options, option_count, 0, &view);
|
||||||
0,
|
|
||||||
&view);
|
|
||||||
end_temp_memory(temp);
|
end_temp_memory(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,43 @@
|
||||||
// iterating tokens is now.
|
// iterating tokens is now.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
static Buffered_Write_Stream
|
||||||
|
make_buffered_write_stream(Buffer_ID output_buffer_id, Partition *buffering_arena){
|
||||||
|
Buffered_Write_Stream stream = {};
|
||||||
|
stream.output_buffer_id = output_buffer_id;
|
||||||
|
stream.buffering_arena = buffering_arena;
|
||||||
|
stream.buffer = push_array(buffering_arena, char, 0);
|
||||||
|
return(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
buffered_write_stream_flush(Application_Links *app, Buffered_Write_Stream *stream){
|
||||||
|
Buffer_Summary buffer = get_buffer(app, stream->output_buffer_id, AccessProtected);
|
||||||
|
int32_t buffer_size = (int32_t)(push_array(stream->buffering_arena, char, 0) - stream->buffer);
|
||||||
|
buffer_replace_range(app, &buffer, buffer.size, buffer.size, stream->buffer, buffer_size);
|
||||||
|
stream->buffering_arena->pos -= buffer_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
buffered_write_stream_write(Application_Links *app, Buffered_Write_Stream *stream, String text){
|
||||||
|
for (;text.size > 0;){
|
||||||
|
char *buffered = push_array(stream->buffering_arena, char, text.size);
|
||||||
|
if (buffered != 0){
|
||||||
|
memcpy(buffered, text.str, text.size);
|
||||||
|
text.size = 0;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
int32_t partial_size = partition_remaining(stream->buffering_arena);
|
||||||
|
buffered = push_array(stream->buffering_arena, char, partial_size);
|
||||||
|
Assert(partial_size < text.size);
|
||||||
|
memcpy(buffered, text.str, partial_size);
|
||||||
|
text.size -= partial_size;
|
||||||
|
text.str += partial_size;
|
||||||
|
buffered_write_stream_flush(app, stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static Get_Positions_Results
|
static Get_Positions_Results
|
||||||
get_function_positions(Application_Links *app, Buffer_Summary *buffer, int32_t token_index, Function_Positions *positions_array, int32_t positions_max){
|
get_function_positions(Application_Links *app, Buffer_Summary *buffer, int32_t token_index, Function_Positions *positions_array, int32_t positions_max){
|
||||||
Get_Positions_Results result = {};
|
Get_Positions_Results result = {};
|
||||||
|
@ -143,26 +180,17 @@ get_function_positions(Application_Links *app, Buffer_Summary *buffer, int32_t t
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_positions(Application_Links *app, Buffer_Summary *buffer, Function_Positions *positions_array, int32_t positions_count, Buffer_Summary *output_buffer, Partition *part){
|
print_positions_buffered(Application_Links *app, Buffer_Summary *buffer, Function_Positions *positions_array, int32_t positions_count, Buffered_Write_Stream *stream){
|
||||||
|
|
||||||
Temp_Memory temp = begin_temp_memory(part);
|
|
||||||
|
|
||||||
Partition extra_memory_ = partition_sub_part(part, (4<<10));
|
|
||||||
Partition *extra_memory = &extra_memory_;
|
|
||||||
|
|
||||||
char *str_ptr = (char*)partition_current(part);
|
|
||||||
int32_t part_size = 0;
|
|
||||||
|
|
||||||
String buffer_name = make_string(buffer->buffer_name, buffer->buffer_name_len);
|
String buffer_name = make_string(buffer->buffer_name, buffer->buffer_name_len);
|
||||||
int32_t size = output_buffer->size;
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < positions_count; ++i){
|
for (int32_t i = 0; i < positions_count; ++i){
|
||||||
Function_Positions *positions = &positions_array[i];
|
Function_Positions *positions = &positions_array[i];
|
||||||
Temp_Memory extra_temp = begin_temp_memory(extra_memory);
|
|
||||||
|
|
||||||
int32_t local_index = positions->sig_start_index;
|
int32_t local_index = positions->sig_start_index;
|
||||||
int32_t end_index = positions->sig_end_index;
|
int32_t end_index = positions->sig_end_index;
|
||||||
int32_t open_paren_pos = positions->open_paren_pos;
|
int32_t open_paren_pos = positions->open_paren_pos;
|
||||||
|
int32_t line_number = buffer_get_line_number(app, buffer, open_paren_pos);
|
||||||
|
|
||||||
Assert(end_index > local_index);
|
Assert(end_index > local_index);
|
||||||
|
|
||||||
|
@ -170,105 +198,60 @@ print_positions(Application_Links *app, Buffer_Summary *buffer, Function_Positio
|
||||||
Cpp_Token sig_chunk[sig_chunk_size];
|
Cpp_Token sig_chunk[sig_chunk_size];
|
||||||
Stream_Tokens sig_stream = {};
|
Stream_Tokens sig_stream = {};
|
||||||
if (init_stream_tokens(&sig_stream, app, buffer, local_index, sig_chunk, sig_chunk_size)){
|
if (init_stream_tokens(&sig_stream, app, buffer, local_index, sig_chunk, sig_chunk_size)){
|
||||||
|
buffered_write_stream_write(app, stream, buffer_name);
|
||||||
|
buffered_write_stream_write(app, stream, make_lit_string(":"));
|
||||||
|
{
|
||||||
|
char space[64];
|
||||||
|
String integer_string = make_fixed_width_string(space);
|
||||||
|
append_int_to_str(&integer_string, line_number);
|
||||||
|
buffered_write_stream_write(app, stream, integer_string);
|
||||||
|
}
|
||||||
|
buffered_write_stream_write(app, stream, make_lit_string(": "));
|
||||||
|
|
||||||
bool32 still_looping = false;
|
bool32 still_looping = false;
|
||||||
do{
|
do{
|
||||||
|
Cpp_Token prev_token = {};
|
||||||
for (; local_index < sig_stream.end; ++local_index){
|
for (; local_index < sig_stream.end; ++local_index){
|
||||||
Cpp_Token *token = &sig_stream.tokens[local_index];
|
Cpp_Token *token = &sig_stream.tokens[local_index];
|
||||||
if (!(token->flags & CPP_TFLAG_PP_BODY) && token->type != CPP_TOKEN_COMMENT){
|
if ((token->flags & CPP_TFLAG_PP_BODY) == 0 && token->type != CPP_TOKEN_COMMENT){
|
||||||
bool32 delete_space_before = false;
|
char space[2 << 10];
|
||||||
bool32 space_after = false;
|
int32_t token_size = token->size;
|
||||||
|
if (token_size > sizeof(space)){
|
||||||
switch (token->type){
|
token_size = sizeof(space);
|
||||||
case CPP_TOKEN_PARENTHESE_OPEN:
|
|
||||||
case CPP_TOKEN_PARENTHESE_CLOSE:
|
|
||||||
{
|
|
||||||
delete_space_before = true;
|
|
||||||
}break;
|
|
||||||
|
|
||||||
case CPP_TOKEN_IDENTIFIER:
|
|
||||||
case CPP_TOKEN_STAR:
|
|
||||||
{
|
|
||||||
space_after = true;
|
|
||||||
}break;
|
|
||||||
|
|
||||||
case CPP_TOKEN_COMMA:
|
|
||||||
{
|
|
||||||
delete_space_before = true;
|
|
||||||
space_after = true;
|
|
||||||
}break;
|
|
||||||
}
|
}
|
||||||
|
buffer_read_range(app, buffer, token->start, token->start + token_size, space);
|
||||||
|
|
||||||
if (token->flags & CPP_TFLAG_IS_KEYWORD){
|
bool32 insert_space = (/**/
|
||||||
space_after = true;
|
(prev_token.type == CPP_TOKEN_IDENTIFIER ||
|
||||||
}
|
prev_token.type == CPP_TOKEN_STAR ||
|
||||||
|
prev_token.type == CPP_TOKEN_COMMA ||
|
||||||
|
(prev_token.flags & CPP_TFLAG_IS_KEYWORD) != 0
|
||||||
|
) &&
|
||||||
|
!(token->type == CPP_TOKEN_PARENTHESE_OPEN ||
|
||||||
|
token->type == CPP_TOKEN_PARENTHESE_CLOSE ||
|
||||||
|
token->type == CPP_TOKEN_COMMA
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
if (delete_space_before){
|
if (insert_space){
|
||||||
int32_t pos = extra_memory->pos - 1;
|
buffered_write_stream_write(app, stream, make_lit_string(" "));
|
||||||
char *base = ((char*)(extra_memory->base));
|
|
||||||
if (pos >= 0 && base[pos] == ' '){
|
|
||||||
extra_memory->pos = pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
char *token_str = push_array(extra_memory, char, token->size + space_after);
|
|
||||||
if (token_str != 0){
|
|
||||||
buffer_read_range(app, buffer, token->start, token->start + token->size, token_str);
|
|
||||||
if (space_after){
|
|
||||||
token_str[token->size] = ' ';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
goto finish_print;
|
|
||||||
}
|
}
|
||||||
|
buffered_write_stream_write(app, stream, make_string(space, token_size));
|
||||||
|
|
||||||
|
prev_token = *token;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (local_index == end_index){
|
if (local_index == end_index){
|
||||||
goto finish_print;
|
goto doublebreak;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
still_looping = forward_stream_tokens(&sig_stream);
|
still_looping = forward_stream_tokens(&sig_stream);
|
||||||
}while(still_looping);
|
}while(still_looping);
|
||||||
|
doublebreak:;
|
||||||
|
|
||||||
finish_print:;
|
buffered_write_stream_write(app, stream, make_lit_string("\n"));
|
||||||
{
|
|
||||||
int32_t sig_size = extra_memory->pos;
|
|
||||||
String sig = make_string(extra_memory->base, sig_size);
|
|
||||||
|
|
||||||
int32_t line_number = buffer_get_line_number(app, buffer, open_paren_pos);
|
|
||||||
int32_t line_number_len = int_to_str_size(line_number);
|
|
||||||
|
|
||||||
int32_t append_len = buffer_name.size + 1 + line_number_len + 1 + 1 + sig_size + 1;
|
|
||||||
|
|
||||||
char *out_space = push_array(part, char, append_len);
|
|
||||||
if (out_space == 0){
|
|
||||||
buffer_replace_range(app, output_buffer, size, size, str_ptr, part_size);
|
|
||||||
size += part_size;
|
|
||||||
|
|
||||||
end_temp_memory(temp);
|
|
||||||
temp = begin_temp_memory(part);
|
|
||||||
|
|
||||||
part_size = 0;
|
|
||||||
out_space = push_array(part, char, append_len);
|
|
||||||
}
|
|
||||||
|
|
||||||
part_size += append_len;
|
|
||||||
String out = make_string(out_space, 0, append_len);
|
|
||||||
append(&out, buffer_name);
|
|
||||||
append(&out, ':');
|
|
||||||
append_int_to_str(&out, line_number);
|
|
||||||
append(&out, ':');
|
|
||||||
append(&out, ' ');
|
|
||||||
append(&out, sig);
|
|
||||||
append(&out, '\n');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
end_temp_memory(extra_temp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer_replace_range(app, output_buffer, size, size, str_ptr, part_size);
|
|
||||||
end_temp_memory(temp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -291,6 +274,8 @@ list_all_functions(Application_Links *app, Partition *part, Buffer_Summary *opti
|
||||||
int32_t positions_max = (4<<10)/sizeof(Function_Positions);
|
int32_t positions_max = (4<<10)/sizeof(Function_Positions);
|
||||||
Function_Positions *positions_array = push_array(part, Function_Positions, positions_max);
|
Function_Positions *positions_array = push_array(part, Function_Positions, positions_max);
|
||||||
|
|
||||||
|
Buffered_Write_Stream buffered_write_stream = make_buffered_write_stream(decls_buffer.buffer_id, part);
|
||||||
|
|
||||||
for (Buffer_Summary buffer_it = get_buffer_first(app, AccessAll);
|
for (Buffer_Summary buffer_it = get_buffer_first(app, AccessAll);
|
||||||
buffer_it.exists;
|
buffer_it.exists;
|
||||||
get_buffer_next(app, &buffer_it, AccessAll)){
|
get_buffer_next(app, &buffer_it, AccessAll)){
|
||||||
|
@ -312,7 +297,8 @@ list_all_functions(Application_Links *app, Partition *part, Buffer_Summary *opti
|
||||||
token_index = get_positions_results.next_token_index;
|
token_index = get_positions_results.next_token_index;
|
||||||
still_looping = get_positions_results.still_looping;
|
still_looping = get_positions_results.still_looping;
|
||||||
|
|
||||||
print_positions(app, &buffer, positions_array, positions_count, &decls_buffer, part);
|
print_positions_buffered(app, &buffer, positions_array, positions_count, &buffered_write_stream);
|
||||||
|
//print_positions(app, &buffer, positions_array, positions_count, &decls_buffer, part);
|
||||||
}while(still_looping);
|
}while(still_looping);
|
||||||
|
|
||||||
if (optional_target_buffer != 0){
|
if (optional_target_buffer != 0){
|
||||||
|
@ -320,6 +306,8 @@ list_all_functions(Application_Links *app, Partition *part, Buffer_Summary *opti
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buffered_write_stream_flush(app, &buffered_write_stream);
|
||||||
|
|
||||||
View_Summary view = get_active_view(app, AccessAll);
|
View_Summary view = get_active_view(app, AccessAll);
|
||||||
view_set_buffer(app, &view, decls_buffer.buffer_id, 0);
|
view_set_buffer(app, &view, decls_buffer.buffer_id, 0);
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,12 @@ struct Get_Positions_Results{
|
||||||
bool32 still_looping;
|
bool32 still_looping;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct Buffered_Write_Stream{
|
||||||
|
Buffer_ID output_buffer_id;
|
||||||
|
Partition *buffering_arena;
|
||||||
|
char *buffer;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// BOTTOM
|
// BOTTOM
|
||||||
|
|
|
@ -270,7 +270,7 @@ static Command_Metadata fcoder_metacmd_table[228] = {
|
||||||
{ PROC_LINKS(close_all_code, 0), "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1060 },
|
{ PROC_LINKS(close_all_code, 0), "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1060 },
|
||||||
{ PROC_LINKS(close_build_panel, 0), "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "w:\\4ed\\code\\4coder_build_commands.cpp", 37, 203 },
|
{ PROC_LINKS(close_build_panel, 0), "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "w:\\4ed\\code\\4coder_build_commands.cpp", 37, 203 },
|
||||||
{ PROC_LINKS(close_panel, 0), "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 484 },
|
{ PROC_LINKS(close_panel, 0), "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 484 },
|
||||||
{ PROC_LINKS(command_lister, 0), "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "w:\\4ed\\code\\4coder_lists.cpp", 28, 938 },
|
{ PROC_LINKS(command_lister, 0), "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "w:\\4ed\\code\\4coder_lists.cpp", 28, 935 },
|
||||||
{ PROC_LINKS(copy, 0), "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 26 },
|
{ PROC_LINKS(copy, 0), "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 26 },
|
||||||
{ PROC_LINKS(cursor_mark_swap, 0), "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 96 },
|
{ PROC_LINKS(cursor_mark_swap, 0), "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 96 },
|
||||||
{ PROC_LINKS(cut, 0), "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 35 },
|
{ PROC_LINKS(cut, 0), "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 35 },
|
||||||
|
@ -311,18 +311,18 @@ static Command_Metadata fcoder_metacmd_table[228] = {
|
||||||
{ PROC_LINKS(if0_off, 0), "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 81 },
|
{ PROC_LINKS(if0_off, 0), "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 81 },
|
||||||
{ PROC_LINKS(increase_face_size, 0), "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 562 },
|
{ PROC_LINKS(increase_face_size, 0), "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 562 },
|
||||||
{ PROC_LINKS(increase_line_wrap, 0), "increase_line_wrap", 18, "Increases the current buffer's width for line wrapping.", 55, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 540 },
|
{ PROC_LINKS(increase_line_wrap, 0), "increase_line_wrap", 18, "Increases the current buffer's width for line wrapping.", 55, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 540 },
|
||||||
{ PROC_LINKS(interactive_kill_buffer, 0), "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "w:\\4ed\\code\\4coder_lists.cpp", 28, 751 },
|
{ PROC_LINKS(interactive_kill_buffer, 0), "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "w:\\4ed\\code\\4coder_lists.cpp", 28, 748 },
|
||||||
{ PROC_LINKS(interactive_new, 0), "interactive_new", 15, "Interactively creates a new file.", 33, "w:\\4ed\\code\\4coder_lists.cpp", 28, 856 },
|
{ PROC_LINKS(interactive_new, 0), "interactive_new", 15, "Interactively creates a new file.", 33, "w:\\4ed\\code\\4coder_lists.cpp", 28, 853 },
|
||||||
{ PROC_LINKS(interactive_open, 0), "interactive_open", 16, "Interactively opens a file.", 27, "w:\\4ed\\code\\4coder_lists.cpp", 28, 884 },
|
{ PROC_LINKS(interactive_open, 0), "interactive_open", 16, "Interactively opens a file.", 27, "w:\\4ed\\code\\4coder_lists.cpp", 28, 881 },
|
||||||
{ PROC_LINKS(interactive_open_or_new, 0), "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "w:\\4ed\\code\\4coder_lists.cpp", 28, 822 },
|
{ PROC_LINKS(interactive_open_or_new, 0), "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "w:\\4ed\\code\\4coder_lists.cpp", 28, 819 },
|
||||||
{ PROC_LINKS(interactive_switch_buffer, 0), "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "w:\\4ed\\code\\4coder_lists.cpp", 28, 732 },
|
{ PROC_LINKS(interactive_switch_buffer, 0), "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "w:\\4ed\\code\\4coder_lists.cpp", 28, 729 },
|
||||||
{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1538 },
|
{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1538 },
|
||||||
{ PROC_LINKS(kill_rect, 0), "kill_rect", 9, "Delete characters in a rectangular region. Range testing is done by unwrapped-xy coordinates.", 93, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 26 },
|
{ PROC_LINKS(kill_rect, 0), "kill_rect", 9, "Delete characters in a rectangular region. Range testing is done by unwrapped-xy coordinates.", 93, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 26 },
|
||||||
{ PROC_LINKS(left_adjust_view, 0), "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 133 },
|
{ PROC_LINKS(left_adjust_view, 0), "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 133 },
|
||||||
{ PROC_LINKS(list_all_functions_all_buffers, 0), "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 355 },
|
{ PROC_LINKS(list_all_functions_all_buffers, 0), "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 343 },
|
||||||
{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 361 },
|
{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 349 },
|
||||||
{ PROC_LINKS(list_all_functions_current_buffer, 0), "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 332 },
|
{ PROC_LINKS(list_all_functions_current_buffer, 0), "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 320 },
|
||||||
{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 342 },
|
{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 330 },
|
||||||
{ PROC_LINKS(list_all_locations, 0), "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "w:\\4ed\\code\\4coder_search.cpp", 29, 769 },
|
{ PROC_LINKS(list_all_locations, 0), "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "w:\\4ed\\code\\4coder_search.cpp", 29, 769 },
|
||||||
{ PROC_LINKS(list_all_locations_case_insensitive, 0), "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "w:\\4ed\\code\\4coder_search.cpp", 29, 783 },
|
{ PROC_LINKS(list_all_locations_case_insensitive, 0), "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "w:\\4ed\\code\\4coder_search.cpp", 29, 783 },
|
||||||
{ PROC_LINKS(list_all_locations_of_identifier, 0), "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 797 },
|
{ PROC_LINKS(list_all_locations_of_identifier, 0), "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 797 },
|
||||||
|
@ -375,7 +375,7 @@ static Command_Metadata fcoder_metacmd_table[228] = {
|
||||||
{ PROC_LINKS(newline_or_goto_position_sticky, 0), "newline_or_goto_position_sticky", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 573 },
|
{ PROC_LINKS(newline_or_goto_position_sticky, 0), "newline_or_goto_position_sticky", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 573 },
|
||||||
{ PROC_LINKS(open_all_code, 0), "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1067 },
|
{ PROC_LINKS(open_all_code, 0), "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1067 },
|
||||||
{ PROC_LINKS(open_all_code_recursive, 0), "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1074 },
|
{ PROC_LINKS(open_all_code_recursive, 0), "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1074 },
|
||||||
{ PROC_LINKS(open_color_tweaker, 0), "open_color_tweaker", 18, "Opens the 4coder theme selector list.", 37, "w:\\4ed\\code\\4coder_lists.cpp", 28, 900 },
|
{ PROC_LINKS(open_color_tweaker, 0), "open_color_tweaker", 18, "Opens the 4coder theme selector list.", 37, "w:\\4ed\\code\\4coder_lists.cpp", 28, 897 },
|
||||||
{ PROC_LINKS(open_file_in_quotes, 0), "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1445 },
|
{ PROC_LINKS(open_file_in_quotes, 0), "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1445 },
|
||||||
{ PROC_LINKS(open_in_other, 0), "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1600 },
|
{ PROC_LINKS(open_in_other, 0), "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1600 },
|
||||||
{ PROC_LINKS(open_long_braces, 0), "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 57 },
|
{ PROC_LINKS(open_long_braces, 0), "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 57 },
|
||||||
|
@ -449,7 +449,7 @@ static Command_Metadata fcoder_metacmd_table[228] = {
|
||||||
{ PROC_LINKS(show_scrollbar, 0), "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 493 },
|
{ PROC_LINKS(show_scrollbar, 0), "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 493 },
|
||||||
{ PROC_LINKS(snipe_token_or_word, 0), "snipe_token_or_word", 19, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "w:\\4ed\\code\\4coder_seek.cpp", 27, 1270 },
|
{ PROC_LINKS(snipe_token_or_word, 0), "snipe_token_or_word", 19, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "w:\\4ed\\code\\4coder_seek.cpp", 27, 1270 },
|
||||||
{ PROC_LINKS(snipe_token_or_word_right, 0), "snipe_token_or_word_right", 25, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "w:\\4ed\\code\\4coder_seek.cpp", 27, 1276 },
|
{ PROC_LINKS(snipe_token_or_word_right, 0), "snipe_token_or_word_right", 25, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "w:\\4ed\\code\\4coder_seek.cpp", 27, 1276 },
|
||||||
{ PROC_LINKS(snippet_lister, 0), "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 193 },
|
{ PROC_LINKS(snippet_lister, 0), "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 191 },
|
||||||
{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 234 },
|
{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 234 },
|
||||||
{ PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1505 },
|
{ PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1505 },
|
||||||
{ PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 391 },
|
{ PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 391 },
|
||||||
|
|
|
@ -81,8 +81,8 @@ open_jump_lister(Application_Links *app, Partition *scratch, Heap *heap,
|
||||||
managed_object_load_data(app, stored_jumps, i, 1, &stored);
|
managed_object_load_data(app, stored_jumps, i, 1, &stored);
|
||||||
String line = {};
|
String line = {};
|
||||||
read_line(app, scratch, &list_buffer, stored.list_line, &line);
|
read_line(app, scratch, &list_buffer, stored.list_line, &line);
|
||||||
options[i].string = line.str;
|
options[i].string = line;
|
||||||
options[i].status = 0;
|
memset(&options[i].status, 0, sizeof(options[i].status));
|
||||||
options[i].user_data = IntAsPtr(i);
|
options[i].user_data = IntAsPtr(i);
|
||||||
int32_t aligned_size = line.size + 1 + 7;
|
int32_t aligned_size = line.size + 1 + 7;
|
||||||
aligned_size = aligned_size - aligned_size%8;
|
aligned_size = aligned_size - aligned_size%8;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -354,10 +354,7 @@ begin_integrated_lister__basic_list(Application_Links *app, char *query_string,
|
||||||
init_lister_state(state, heap, arena_size);
|
init_lister_state(state, heap, arena_size);
|
||||||
lister_first_init(&state->arena, &state->lister, user_data, user_data_size);
|
lister_first_init(&state->arena, &state->lister, user_data, user_data_size);
|
||||||
for (int32_t i = 0; i < option_count; i += 1){
|
for (int32_t i = 0; i < option_count; i += 1){
|
||||||
lister_add_item(&state->arena, &state->lister,
|
lister_add_item(&state->arena, &state->lister, options[i].string, options[i].status, options[i].user_data, 0);
|
||||||
make_string_slowly(options[i].string),
|
|
||||||
make_string_slowly(options[i].status),
|
|
||||||
options[i].user_data, 0);
|
|
||||||
}
|
}
|
||||||
lister_set_query_string(&state->lister, query_string);
|
lister_set_query_string(&state->lister, query_string);
|
||||||
state->lister.handlers = lister_get_default_handlers();
|
state->lister.handlers = lister_get_default_handlers();
|
||||||
|
@ -946,8 +943,8 @@ CUSTOM_DOC("Opens an interactive list of all registered commands.")
|
||||||
int32_t option_count = command_one_past_last_id;
|
int32_t option_count = command_one_past_last_id;
|
||||||
Lister_Option *options = push_array(arena, Lister_Option, option_count);
|
Lister_Option *options = push_array(arena, Lister_Option, option_count);
|
||||||
for (int32_t i = 0; i < command_one_past_last_id; i += 1){
|
for (int32_t i = 0; i < command_one_past_last_id; i += 1){
|
||||||
options[i].string = fcoder_metacmd_table[i].name;
|
options[i].string = make_string_slowly(fcoder_metacmd_table[i].name);
|
||||||
options[i].status = fcoder_metacmd_table[i].description;
|
options[i].status = make_string_slowly(fcoder_metacmd_table[i].description);
|
||||||
options[i].user_data = (void*)fcoder_metacmd_table[i].proc;
|
options[i].user_data = (void*)fcoder_metacmd_table[i].proc;
|
||||||
}
|
}
|
||||||
begin_integrated_lister__basic_list(app, "Command:", activate_command, 0, 0,
|
begin_integrated_lister__basic_list(app, "Command:", activate_command, 0, 0,
|
||||||
|
|
|
@ -1539,10 +1539,8 @@ CUSTOM_DOC("Open a lister of all commands in the currently loaded project.")
|
||||||
int32_t option_count = current_project.command_array.count;
|
int32_t option_count = current_project.command_array.count;
|
||||||
Lister_Option *options = push_array(arena, Lister_Option, option_count);
|
Lister_Option *options = push_array(arena, Lister_Option, option_count);
|
||||||
for (int32_t i = 0; i < current_project.command_array.count; i += 1){
|
for (int32_t i = 0; i < current_project.command_array.count; i += 1){
|
||||||
String string = string_push_copy(arena, current_project.command_array.commands[i].name);
|
options[i].string = string_push_copy(arena, current_project.command_array.commands[i].name);
|
||||||
String status = string_push_copy(arena, current_project.command_array.commands[i].cmd);
|
options[i].status = string_push_copy(arena, current_project.command_array.commands[i].cmd);
|
||||||
options[i].string = string.str;
|
|
||||||
options[i].status = status.str;
|
|
||||||
options[i].user_data = IntAsPtr(i);
|
options[i].user_data = IntAsPtr(i);
|
||||||
}
|
}
|
||||||
begin_integrated_lister__basic_list(app, "Command:", activate_project_command, 0, 0,
|
begin_integrated_lister__basic_list(app, "Command:", activate_project_command, 0, 0,
|
||||||
|
|
|
@ -86,8 +86,8 @@ struct Lister_State{
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
struct Lister_Option{
|
struct Lister_Option{
|
||||||
char *string;
|
String string;
|
||||||
char *status;
|
String status;
|
||||||
void *user_data;
|
void *user_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
||||||
1
|
1
|
||||||
0
|
0
|
||||||
119
|
122
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ FSTRING_BEGIN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(FSTRING_GUARD)
|
#if !defined(FSTRING_GUARD)
|
||||||
#define literal(s) (s), (sizeof(s)-1)
|
#define literal(s) (s), (sizeof(s) - 1)
|
||||||
|
|
||||||
typedef struct String{
|
typedef struct String{
|
||||||
char *str;
|
char *str;
|
||||||
|
@ -2128,9 +2128,11 @@ DOC_PARAM(part, A partition on which the string will be allocated.)
|
||||||
DOC_PARAM(size, The number of bytes to allocated for the new string.)
|
DOC_PARAM(size, The number of bytes to allocated for the new string.)
|
||||||
DOC_RETURN(If successfull returns an empty string with capacity equal to the size parameter, otherwise returns a null string.)*/{
|
DOC_RETURN(If successfull returns an empty string with capacity equal to the size parameter, otherwise returns a null string.)*/{
|
||||||
String result = {};
|
String result = {};
|
||||||
result.str = push_array(part, char, size);
|
if (size > 0){
|
||||||
if (result.str != 0){
|
result.str = push_array(part, char, size);
|
||||||
result.memory_size = size;
|
if (result.str != 0){
|
||||||
|
result.memory_size = size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
@ -2141,11 +2143,13 @@ DOC_PARAM(part, A partition on which the string will be allocated.)
|
||||||
DOC_PARAM(str, The source string to copy into the new string. The copy includes a null terminator whther or not the source does.)
|
DOC_PARAM(str, The source string to copy into the new string. The copy includes a null terminator whther or not the source does.)
|
||||||
DOC_RETURN(If successfull returns a string copy of str, otherwise returns a null string.)*/{
|
DOC_RETURN(If successfull returns a string copy of str, otherwise returns a null string.)*/{
|
||||||
String result = {};
|
String result = {};
|
||||||
result.str = push_array(part, char, str.size + 1);
|
if (str.str != 0){
|
||||||
if (result.str != 0){
|
result.str = push_array(part, char, str.size + 1);
|
||||||
result.memory_size = str.size + 1;
|
if (result.str != 0){
|
||||||
copy(&result, str);
|
result.memory_size = str.size + 1;
|
||||||
result.str[result.size] = 0;
|
copy(&result, str);
|
||||||
|
result.str[result.size] = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
4
todo.txt
4
todo.txt
|
@ -14,8 +14,8 @@
|
||||||
[x] High CPU usage in listers (endless animation bug)
|
[x] High CPU usage in listers (endless animation bug)
|
||||||
[x] Panel resizing doesn't work
|
[x] Panel resizing doesn't work
|
||||||
[x] On windows file lister: /foo/bar.txt
|
[x] On windows file lister: /foo/bar.txt
|
||||||
[] Notepad like mode clicking to new view doesn't snap the mark
|
[x] Notepad like mode clicking to new view doesn't snap the mark
|
||||||
[] Notepad like mode replacing text with cursor at end of selection in middle of long file
|
[x] Notepad like mode replacing text with cursor at end of selection in middle of long file
|
||||||
[] Tab when no valid completions in open file lister
|
[] Tab when no valid completions in open file lister
|
||||||
[] Graphics problem (fonts not rendering)
|
[] Graphics problem (fonts not rendering)
|
||||||
[] Texture binding changes too often problem.
|
[] Texture binding changes too often problem.
|
||||||
|
|
Loading…
Reference in New Issue