Run project commands via new variable system
This commit is contained in:
parent
aa9004e92b
commit
3836ff05da
|
@ -799,8 +799,7 @@ def_set_config_b32(String_ID key, b32 val){
|
||||||
function String_Const_u8
|
function String_Const_u8
|
||||||
def_get_config_string(Arena *arena, String_ID key){
|
def_get_config_string(Arena *arena, String_ID key){
|
||||||
Variable_Handle var = def_get_config_var(key);
|
Variable_Handle var = def_get_config_var(key);
|
||||||
String_ID val = vars_string_id_from_var(var);
|
String_Const_u8 result = vars_string_from_var(arena, var);
|
||||||
String_Const_u8 result = vars_read_string(arena, val);
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -813,20 +812,7 @@ function u64
|
||||||
def_get_config_u64(Application_Links *app, String_ID key){
|
def_get_config_u64(Application_Links *app, String_ID key){
|
||||||
Scratch_Block scratch(app);
|
Scratch_Block scratch(app);
|
||||||
Variable_Handle var = def_get_config_var(key);
|
Variable_Handle var = def_get_config_var(key);
|
||||||
String_ID val = vars_string_id_from_var(var);
|
u64 result = vars_u64_from_var(app, var);
|
||||||
String_Const_u8 string = vars_read_string(scratch, val);
|
|
||||||
u64 result = 0;
|
|
||||||
if (string_match(string_prefix(string, 2), string_u8_litinit("0x"))){
|
|
||||||
String_Const_u8 string_hex = string_skip(string, 2);
|
|
||||||
if (string_is_integer(string_hex, 0x10)){
|
|
||||||
result = string_to_integer(string_hex, 0x10);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if (string_is_integer(string, 10)){
|
|
||||||
result = string_to_integer(string, 10);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -576,56 +576,6 @@ project_deep_copy(Arena *arena, Project *project){
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
function void
|
|
||||||
config_feedback_file_pattern_array(Arena *arena, List_String_Const_u8 *list, char *name, Project_File_Pattern_Array *array){
|
|
||||||
string_list_pushf(arena, list, "%s = {\n", name);
|
|
||||||
Project_File_Pattern *pattern = array->patterns;
|
|
||||||
for (i32 i = 0; i < array->count; ++i, ++pattern){
|
|
||||||
string_list_push_u8_lit(arena, list, "\"");
|
|
||||||
b32 is_first = true;
|
|
||||||
for (Node_String_Const_u8 *node = pattern->absolutes.first;
|
|
||||||
node != 0;
|
|
||||||
node = node->next){
|
|
||||||
if (is_first){
|
|
||||||
string_list_push(arena, list, node->string);
|
|
||||||
is_first = false;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
string_list_pushf(arena, list, "*%.*s", string_expand(node->string));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
string_list_push_u8_lit(arena, list, "\",\n");
|
|
||||||
}
|
|
||||||
string_list_push_u8_lit(arena, list, "};\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
function void
|
|
||||||
config_feedback_file_load_path_array(Arena *arena, List_String_Const_u8 *list, char *name, Project_File_Load_Path_Array *array){
|
|
||||||
string_list_pushf(arena, list, "%s = {\n", name);
|
|
||||||
Project_File_Load_Path *path = array->paths;
|
|
||||||
for (i32 i = 0; i < array->count; ++i, ++path){
|
|
||||||
string_list_pushf(arena, list, "{ .path = \"%.*s\", .recursive = %s, .relative = %s, },\n",
|
|
||||||
string_expand(path->path), (char*)(path->recursive?"true":"false"), (char*)(path->relative?"true":"false"));
|
|
||||||
}
|
|
||||||
string_list_push_u8_lit(arena, list, "};\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
function void
|
|
||||||
config_feedback_command_array(Arena *arena, List_String_Const_u8 *list, char *name, Project_Command_Array *array){
|
|
||||||
string_list_pushf(arena, list, "%s = {\n", name);
|
|
||||||
Project_Command *command = array->commands;
|
|
||||||
for (i32 i = 0; i < array->count; ++i, ++command){
|
|
||||||
string_list_pushf(arena, list,
|
|
||||||
"{ .name = \"%.*s\", .cmd = \"%.*s\", .out = \"%.*s\", "
|
|
||||||
".footer_panel = %s, .save_dirty_files = %s, .cursor_at_end = %s, },\n",
|
|
||||||
string_expand(command->name), string_expand(command->cmd), string_expand(command->out),
|
|
||||||
(char*)(command->footer_panel?"true":"false"),
|
|
||||||
(char*)(command->save_dirty_files?"true":"false"),
|
|
||||||
(char*)(command->cursor_at_end?"true":"false"));
|
|
||||||
}
|
|
||||||
string_list_push_u8_lit(arena, list, "};\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE(allen): string list join ("flatten") doesn't really work... :(
|
// NOTE(allen): string list join ("flatten") doesn't really work... :(
|
||||||
function String_Const_u8
|
function String_Const_u8
|
||||||
prj_join_pattern_string(Arena *arena, List_String_Const_u8 list){
|
prj_join_pattern_string(Arena *arena, List_String_Const_u8 list){
|
||||||
|
@ -650,6 +600,37 @@ prj_join_pattern_string(Arena *arena, List_String_Const_u8 list){
|
||||||
return(pattern_string);
|
return(pattern_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function String_Const_u8
|
||||||
|
prj_sanitize_string(Arena *arena, String_Const_u8 string){
|
||||||
|
String_Const_u8 result = {};
|
||||||
|
|
||||||
|
if (string.size > 0){
|
||||||
|
result.size = string.size;
|
||||||
|
result.str = push_array(arena, u8, result.size + 2);
|
||||||
|
|
||||||
|
u8 *in = string.str;
|
||||||
|
u8 *out = result.str;
|
||||||
|
|
||||||
|
if (character_is_base10(*in)){
|
||||||
|
*out = '_';
|
||||||
|
out += 1;
|
||||||
|
result.size += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (u64 i = 0; i < string.size; i += 1, in += 1, out += 1){
|
||||||
|
u8 c = *in;
|
||||||
|
if (!character_is_alpha_numeric(c)){
|
||||||
|
c = '_';
|
||||||
|
}
|
||||||
|
*out = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
result.str[result.size] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
function Variable_Handle
|
function Variable_Handle
|
||||||
prj_version_1_to_version_2(Application_Links *app, Config *parsed, Project *project){
|
prj_version_1_to_version_2(Application_Links *app, Config *parsed, Project *project){
|
||||||
Scratch_Block scratch(app);
|
Scratch_Block scratch(app);
|
||||||
|
@ -667,7 +648,6 @@ prj_version_1_to_version_2(Application_Links *app, Config *parsed, Project *proj
|
||||||
String_ID true_id = vars_save_string(string_litinit("true"));
|
String_ID true_id = vars_save_string(string_litinit("true"));
|
||||||
String_ID false_id = vars_save_string(string_litinit("false"));
|
String_ID false_id = vars_save_string(string_litinit("false"));
|
||||||
|
|
||||||
String_ID command_list_id = vars_save_string(string_litinit("command_list"));
|
|
||||||
String_ID out_id = vars_save_string(string_litinit("out"));
|
String_ID out_id = vars_save_string(string_litinit("out"));
|
||||||
String_ID footer_panel_id = vars_save_string(string_litinit("footer_panel"));
|
String_ID footer_panel_id = vars_save_string(string_litinit("footer_panel"));
|
||||||
String_ID save_dirty_files_id = vars_save_string(string_litinit("save_dirty_files"));
|
String_ID save_dirty_files_id = vars_save_string(string_litinit("save_dirty_files"));
|
||||||
|
@ -728,11 +708,11 @@ prj_version_1_to_version_2(Application_Links *app, Config *parsed, Project *proj
|
||||||
|
|
||||||
// commands
|
// commands
|
||||||
{
|
{
|
||||||
Variable_Handle cmds_var = vars_new_variable(proj_var, command_list_id);
|
|
||||||
i32 count = project->command_array.count;
|
i32 count = project->command_array.count;
|
||||||
Project_Command *cmd = project->command_array.commands;
|
Project_Command *cmd = project->command_array.commands;
|
||||||
for (i32 i = 0; i < count; i += 1, cmd += 1){
|
for (i32 i = 0; i < count; i += 1, cmd += 1){
|
||||||
Variable_Handle cmd_var = vars_new_variable(cmds_var, vars_save_string(cmd->name));
|
String_Const_u8 cmd_name = prj_sanitize_string(scratch, cmd->name);
|
||||||
|
Variable_Handle cmd_var = vars_new_variable(proj_var, vars_save_string(cmd_name));
|
||||||
vars_new_variable(cmd_var, os_id, vars_save_string(cmd->cmd));
|
vars_new_variable(cmd_var, os_id, vars_save_string(cmd->cmd));
|
||||||
vars_new_variable(cmd_var, out_id, vars_save_string(cmd->out));
|
vars_new_variable(cmd_var, out_id, vars_save_string(cmd->out));
|
||||||
vars_new_variable(cmd_var, footer_panel_id, cmd->footer_panel?true_id:false_id);
|
vars_new_variable(cmd_var, footer_panel_id, cmd->footer_panel?true_id:false_id);
|
||||||
|
@ -749,8 +729,9 @@ prj_version_1_to_version_2(Application_Links *app, Config *parsed, Project *proj
|
||||||
if (0 <= cmd_index && cmd_index < project->command_array.count){
|
if (0 <= cmd_index && cmd_index < project->command_array.count){
|
||||||
Project_Command *cmd = project->command_array.commands + cmd_index;
|
Project_Command *cmd = project->command_array.commands + cmd_index;
|
||||||
if (cmd->name.size > 0){
|
if (cmd->name.size > 0){
|
||||||
|
String_Const_u8 cmd_name = prj_sanitize_string(scratch, cmd->name);
|
||||||
String_ID key = vars_save_string(push_stringf(scratch, "%d", i));
|
String_ID key = vars_save_string(push_stringf(scratch, "%d", i));
|
||||||
String_ID val = vars_save_string(cmd->name);
|
String_ID val = vars_save_string(cmd_name);
|
||||||
vars_new_variable(fkeys_var, key, val);
|
vars_new_variable(fkeys_var, key, val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -876,30 +857,41 @@ set_current_project_from_nearest_project_file(Application_Links *app){
|
||||||
}
|
}
|
||||||
|
|
||||||
function void
|
function void
|
||||||
exec_project_command(Application_Links *app, Project_Command *command){
|
prj_exec_command(Application_Links *app, Variable_Handle cmd_var){
|
||||||
if (command->cmd.size > 0){
|
Scratch_Block scratch(app);
|
||||||
b32 footer_panel = command->footer_panel;
|
|
||||||
b32 save_dirty_files = command->save_dirty_files;
|
|
||||||
b32 cursor_at_end = command->cursor_at_end;
|
|
||||||
|
|
||||||
|
// TODO(allen): Make work on all OSes
|
||||||
|
String_ID os_id = vars_save_string_lit("win");
|
||||||
|
|
||||||
|
String_Const_u8 cmd = vars_string_from_var(scratch, vars_read_key(cmd_var, os_id));
|
||||||
|
if (cmd.size > 0){
|
||||||
|
String_ID out_id = vars_save_string_lit("out");
|
||||||
|
String_ID footer_panel_id = vars_save_string_lit("footer_panel");
|
||||||
|
String_ID save_dirty_files_id = vars_save_string_lit("save_dirty_files");
|
||||||
|
String_ID cursor_at_end_id = vars_save_string_lit("cursor_at_end");
|
||||||
|
|
||||||
|
b32 save_dirty_files = vars_b32_from_var(vars_read_key(cmd_var, save_dirty_files_id));
|
||||||
if (save_dirty_files){
|
if (save_dirty_files){
|
||||||
save_all_dirty_buffers(app);
|
save_all_dirty_buffers(app);
|
||||||
}
|
}
|
||||||
|
|
||||||
View_ID view = 0;
|
|
||||||
Buffer_Identifier buffer_id = {};
|
|
||||||
u32 flags = CLI_OverlapWithConflict|CLI_SendEndSignal;
|
u32 flags = CLI_OverlapWithConflict|CLI_SendEndSignal;
|
||||||
|
b32 cursor_at_end = vars_b32_from_var(vars_read_key(cmd_var, cursor_at_end_id));
|
||||||
if (cursor_at_end){
|
if (cursor_at_end){
|
||||||
flags |= CLI_CursorAtEnd;
|
flags |= CLI_CursorAtEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
View_ID view = 0;
|
||||||
|
Buffer_Identifier buffer_id = {};
|
||||||
b32 set_fancy_font = false;
|
b32 set_fancy_font = false;
|
||||||
if (command->out.size > 0){
|
String_Const_u8 out = vars_string_from_var(scratch, vars_read_key(cmd_var, out_id));
|
||||||
buffer_id = buffer_identifier(command->out);
|
if (out.size > 0){
|
||||||
|
buffer_id = buffer_identifier(out);
|
||||||
|
|
||||||
|
b32 footer_panel = vars_b32_from_var(vars_read_key(cmd_var, footer_panel_id));
|
||||||
if (footer_panel){
|
if (footer_panel){
|
||||||
view = get_or_open_build_panel(app);
|
view = get_or_open_build_panel(app);
|
||||||
if (string_match(command->out, string_u8_litexpr("*compilation*"))){
|
if (string_match(out, string_u8_litexpr("*compilation*"))){
|
||||||
set_fancy_font = true;
|
set_fancy_font = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -912,15 +904,15 @@ exec_project_command(Application_Links *app, Project_Command *command){
|
||||||
}
|
}
|
||||||
|
|
||||||
block_zero_struct(&prev_location);
|
block_zero_struct(&prev_location);
|
||||||
lock_jump_buffer(app, command->out);
|
lock_jump_buffer(app, out);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
// TODO(allen): fix the exec_system_command call so it can take a null buffer_id.
|
// TODO(allen): fix the exec_system_command call so it can take a null buffer_id.
|
||||||
buffer_id = buffer_identifier(string_u8_litexpr("*dump*"));
|
buffer_id = buffer_identifier(string_u8_litexpr("*dump*"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(allen): this dir is *wrong* we should come from the cmd_var's parent now.
|
||||||
String_Const_u8 dir = current_project.dir;
|
String_Const_u8 dir = current_project.dir;
|
||||||
String_Const_u8 cmd = command->cmd;
|
|
||||||
exec_system_command(app, view, buffer_id, dir, cmd, flags);
|
exec_system_command(app, view, buffer_id, dir, cmd, flags);
|
||||||
if (set_fancy_font){
|
if (set_fancy_font){
|
||||||
set_fancy_compilation_buffer_font(app);
|
set_fancy_compilation_buffer_font(app);
|
||||||
|
@ -928,48 +920,35 @@ exec_project_command(Application_Links *app, Project_Command *command){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function void
|
function Variable_Handle
|
||||||
exec_project_command_by_index(Application_Links *app, i32 command_index){
|
prj_command_from_name(Application_Links *app, String_Const_u8 cmd_name){
|
||||||
if (!current_project.loaded){
|
Scratch_Block scratch(app);
|
||||||
return;
|
String_ID cmd_name_id = vars_save_string(cmd_name);
|
||||||
}
|
Variable_Handle cmd = def_get_config_var(cmd_name_id);
|
||||||
if (command_index < 0 || command_index >= current_project.command_array.count){
|
return(cmd);
|
||||||
return;
|
|
||||||
}
|
|
||||||
Project_Command *command = ¤t_project.command_array.commands[command_index];
|
|
||||||
exec_project_command(app, command);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function void
|
function void
|
||||||
exec_project_fkey_command(Application_Links *app, i32 fkey_index){
|
prj_exec_command_name(Application_Links *app, String_Const_u8 cmd_name){
|
||||||
if (!current_project.loaded){
|
Scratch_Block scratch(app);
|
||||||
return;
|
Variable_Handle cmd = prj_command_from_name(app, cmd_name);
|
||||||
}
|
prj_exec_command(app, cmd);
|
||||||
i32 command_index = current_project.fkey_commands[fkey_index];
|
|
||||||
if (command_index < 0 || command_index >= current_project.command_array.count){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Project_Command *command = ¤t_project.command_array.commands[command_index];
|
|
||||||
exec_project_command(app, command);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function void
|
function void
|
||||||
exec_project_command_by_name(Application_Links *app, String_Const_u8 name){
|
prj_exec_command_fkey_index(Application_Links *app, i32 fkey_index){
|
||||||
if (!current_project.loaded){
|
// TODO(allen): ideally if one fkey_command is missing this index the fallback
|
||||||
return;
|
// can be continued.
|
||||||
}
|
Variable_Handle fkeys = def_get_config_var(vars_save_string_lit("fkey_command"));
|
||||||
Project_Command *command = current_project.command_array.commands;
|
|
||||||
for (i32 i = 0; i < current_project.command_array.count; ++i, ++command){
|
|
||||||
if (string_match(command->name, name)){
|
|
||||||
exec_project_command(app, command);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function void
|
// TODO(allen): Ideally I could just pass fkey_index right to vars_read_key
|
||||||
exec_project_command_by_name(Application_Links *app, char *name){
|
// in a case like this.
|
||||||
exec_project_command_by_name(app, SCu8(name));
|
Scratch_Block scratch(app);
|
||||||
|
String_Const_u8 fkey_index_str = push_stringf(scratch, "%d", fkey_index);
|
||||||
|
String_ID fkey_index_id = vars_save_string(fkey_index_str);
|
||||||
|
Variable_Handle cmd_name_var = vars_read_key(fkeys, fkey_index_id);
|
||||||
|
String_Const_u8 cmd_name = vars_string_from_var(scratch, cmd_name_var);
|
||||||
|
prj_exec_command_name(app, cmd_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
@ -1032,7 +1011,7 @@ CUSTOM_DOC("Run an 'fkey command' configured in a project.4coder file. Determin
|
||||||
got_ind = true;
|
got_ind = true;
|
||||||
}
|
}
|
||||||
if (got_ind){
|
if (got_ind){
|
||||||
exec_project_fkey_command(app, ind);
|
prj_exec_command_fkey_index(app, ind);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1411,13 +1390,15 @@ get_project_command_from_user(Application_Links *app, Project *project, String_C
|
||||||
Project_Command *proj_cmd = project->command_array.commands;
|
Project_Command *proj_cmd = project->command_array.commands;
|
||||||
i32 count = project->command_array.count;
|
i32 count = project->command_array.count;
|
||||||
for (i32 i = 0; i < count; i += 1, proj_cmd += 1){
|
for (i32 i = 0; i < count; i += 1, proj_cmd += 1){
|
||||||
lister_add_item(lister, proj_cmd->name, proj_cmd->cmd, IntAsPtr(i), 0);
|
lister_add_item(lister, proj_cmd->name, proj_cmd->cmd, proj_cmd, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Lister_Result l_result = run_lister(app, lister);
|
Lister_Result l_result = run_lister(app, lister);
|
||||||
if (!l_result.canceled){
|
if (!l_result.canceled){
|
||||||
result.success = true;
|
result.success = true;
|
||||||
result.index = (i32)PtrAsInt(l_result.user_data);
|
Project_Command *result_proj_cmd = (Project_Command*)l_result.user_data;
|
||||||
|
String_Const_u8 cmd_name = prj_sanitize_string(scratch, result_proj_cmd->name);
|
||||||
|
result.cmd = prj_command_from_name(app, cmd_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1437,7 +1418,7 @@ CUSTOM_DOC("Open a lister of all commands in the currently loaded project.")
|
||||||
Project_Command_Lister_Result proj_cmd =
|
Project_Command_Lister_Result proj_cmd =
|
||||||
get_project_command_from_user(app, ¤t_project, "Command:");
|
get_project_command_from_user(app, ¤t_project, "Command:");
|
||||||
if (proj_cmd.success){
|
if (proj_cmd.success){
|
||||||
exec_project_command_by_index(app, proj_cmd.index);
|
prj_exec_command(app, proj_cmd.cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,7 @@ struct Project{
|
||||||
Project_File_Load_Path_Array load_path_array;
|
Project_File_Load_Path_Array load_path_array;
|
||||||
Project_Command_Array command_array;
|
Project_Command_Array command_array;
|
||||||
|
|
||||||
|
// NOTE(allen): Only used for conversion from 1 -> 2
|
||||||
i32 fkey_commands[16];
|
i32 fkey_commands[16];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -94,7 +95,7 @@ struct Project_Key_Strings{
|
||||||
|
|
||||||
struct Project_Command_Lister_Result{
|
struct Project_Command_Lister_Result{
|
||||||
b32 success;
|
b32 success;
|
||||||
i32 index;
|
Variable_Handle cmd;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -138,6 +138,33 @@ vars_string_from_var(Arena *arena, Variable_Handle var){
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function b32
|
||||||
|
vars_b32_from_var(Variable_Handle var){
|
||||||
|
String_ID val = vars_string_id_from_var(var);
|
||||||
|
b32 result = (val != 0 && val != vars_save_string_lit("false"));
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
function u64
|
||||||
|
vars_u64_from_var(Application_Links *app, Variable_Handle var){
|
||||||
|
Scratch_Block scratch(app);
|
||||||
|
String_ID val = vars_string_id_from_var(var);
|
||||||
|
String_Const_u8 string = vars_read_string(scratch, val);
|
||||||
|
u64 result = 0;
|
||||||
|
if (string_match(string_prefix(string, 2), string_u8_litinit("0x"))){
|
||||||
|
String_Const_u8 string_hex = string_skip(string, 2);
|
||||||
|
if (string_is_integer(string_hex, 0x10)){
|
||||||
|
result = string_to_integer(string_hex, 0x10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (string_is_integer(string, 10)){
|
||||||
|
result = string_to_integer(string, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
function Variable_Handle
|
function Variable_Handle
|
||||||
vars_read_key(Variable_Handle var, String_ID key){
|
vars_read_key(Variable_Handle var, String_ID key){
|
||||||
Variable_Handle result = vars_get_nil();
|
Variable_Handle result = vars_get_nil();
|
||||||
|
|
|
@ -42,8 +42,11 @@ function Variable_Handle vars_next_sibling(Variable_Handle var);
|
||||||
function Variable_Handle vars_read_key(Variable_Handle var, String_ID key);
|
function Variable_Handle vars_read_key(Variable_Handle var, String_ID key);
|
||||||
function String_ID vars_key_id_from_var(Variable_Handle var);
|
function String_ID vars_key_id_from_var(Variable_Handle var);
|
||||||
function String_Const_u8 vars_key_from_var(Arena *arena, Variable_Handle var);
|
function String_Const_u8 vars_key_from_var(Arena *arena, Variable_Handle var);
|
||||||
|
|
||||||
function String_ID vars_string_id_from_var(Variable_Handle var);
|
function String_ID vars_string_id_from_var(Variable_Handle var);
|
||||||
function String_Const_u8 vars_string_from_var(Arena *arena, Variable_Handle var);
|
function String_Const_u8 vars_string_from_var(Arena *arena, Variable_Handle var);
|
||||||
|
function b32 vars_b32_from_var(Variable_Handle var);
|
||||||
|
function u64 vars_u64_from_var(Application_Links *app, Variable_Handle var);
|
||||||
|
|
||||||
function void vars_set_string(Variable_Handle var, String_ID string);
|
function void vars_set_string(Variable_Handle var, String_ID string);
|
||||||
function void vars_erase(Variable_Handle var, String_ID key);
|
function void vars_erase(Variable_Handle var, String_ID key);
|
||||||
|
|
|
@ -295,7 +295,7 @@ static Command_Metadata fcoder_metacmd_table[250] = {
|
||||||
{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 243 },
|
{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 243 },
|
||||||
{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 256 },
|
{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 256 },
|
||||||
{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 7 },
|
{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 7 },
|
||||||
{ PROC_LINKS(close_all_code, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 977 },
|
{ PROC_LINKS(close_all_code, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 956 },
|
||||||
{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "W:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 175 },
|
{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "W:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 175 },
|
||||||
{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 674 },
|
{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 674 },
|
||||||
{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "W:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 190 },
|
{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "W:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 190 },
|
||||||
|
@ -371,8 +371,8 @@ static Command_Metadata fcoder_metacmd_table[250] = {
|
||||||
{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 224 },
|
{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 224 },
|
||||||
{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 174 },
|
{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 174 },
|
||||||
{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 186 },
|
{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 186 },
|
||||||
{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1006 },
|
{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 985 },
|
||||||
{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "W:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1574 },
|
{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "W:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1560 },
|
||||||
{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 535 },
|
{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 535 },
|
||||||
{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 547 },
|
{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 547 },
|
||||||
{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1495 },
|
{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1495 },
|
||||||
|
@ -414,8 +414,8 @@ static Command_Metadata fcoder_metacmd_table[250] = {
|
||||||
{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 380 },
|
{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 380 },
|
||||||
{ PROC_LINKS(music_start, 0), false, "music_start", 11, "Starts the music.", 17, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 213 },
|
{ PROC_LINKS(music_start, 0), false, "music_start", 11, "Starts the music.", 17, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 213 },
|
||||||
{ PROC_LINKS(music_stop, 0), false, "music_stop", 10, "Stops the music.", 16, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 232 },
|
{ PROC_LINKS(music_stop, 0), false, "music_stop", 10, "Stops the music.", 16, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 232 },
|
||||||
{ PROC_LINKS(open_all_code, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 986 },
|
{ PROC_LINKS(open_all_code, 0), false, "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\\custom\\4coder_project_commands.cpp", 46, 965 },
|
||||||
{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 995 },
|
{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 974 },
|
||||||
{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1576 },
|
{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1576 },
|
||||||
{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2059 },
|
{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2059 },
|
||||||
{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 46 },
|
{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 46 },
|
||||||
|
@ -436,9 +436,9 @@ static Command_Metadata fcoder_metacmd_table[250] = {
|
||||||
{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 219 },
|
{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 219 },
|
||||||
{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 212 },
|
{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 212 },
|
||||||
{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "W:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 886 },
|
{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "W:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 886 },
|
||||||
{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1433 },
|
{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1414 },
|
||||||
{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1014 },
|
{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 993 },
|
||||||
{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1040 },
|
{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1019 },
|
||||||
{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1282 },
|
{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1282 },
|
||||||
{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1303 },
|
{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1303 },
|
||||||
{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1319 },
|
{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1319 },
|
||||||
|
@ -477,10 +477,10 @@ static Command_Metadata fcoder_metacmd_table[250] = {
|
||||||
{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 115 },
|
{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 115 },
|
||||||
{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 499 },
|
{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 499 },
|
||||||
{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 493 },
|
{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 493 },
|
||||||
{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1382 },
|
{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1361 },
|
||||||
{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1394 },
|
{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1373 },
|
||||||
{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1388 },
|
{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1367 },
|
||||||
{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1375 },
|
{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1354 },
|
||||||
{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 697 },
|
{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 697 },
|
||||||
{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 683 },
|
{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 683 },
|
||||||
{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "W:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 993 },
|
{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "W:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 993 },
|
||||||
|
|
Loading…
Reference in New Issue