@@ -205,6 +205,7 @@ prj_stringize_project(Application_Links *app, Arena *arena, Variable_Handle proj
205
205
String_ID cursor_at_end_id = vars_save_string_lit (" cursor_at_end" );
206
206
207
207
String_ID fkey_command_id = vars_save_string_lit (" fkey_command" );
208
+ String_ID fkey_command_override_id = vars_save_string_lit (" fkey_command_override" );
208
209
209
210
String8 os_strings[] = { str8_lit (" win" ), str8_lit (" linux" ), str8_lit (" mac" ), };
210
211
local_const i32 os_string_count = ArrayCount (os_strings);
@@ -272,9 +273,7 @@ prj_stringize_project(Application_Links *app, Arena *arena, Variable_Handle proj
272
273
string_list_push (arena, out, str8_lit (" },\n " ));
273
274
}
274
275
}
275
- string_list_push (arena, out, str8_lit (" };\n " ));
276
-
277
- string_list_push (arena, out, str8_lit (" \n " ));
276
+ string_list_push (arena, out, str8_lit (" };\n\n " ));
278
277
}
279
278
280
279
@@ -312,9 +311,7 @@ prj_stringize_project(Application_Links *app, Arena *arena, Variable_Handle proj
312
311
string_list_pushf (arena, out, " .cursor_at_end = %s,\n " , (cursor_at_end?" true" :" false" ));
313
312
string_list_push (arena, out, str8_lit (" },\n " ));
314
313
}
315
- string_list_push (arena, out, str8_lit (" };\n " ));
316
-
317
- string_list_push (arena, out, str8_lit (" \n " ));
314
+ string_list_push (arena, out, str8_lit (" };\n\n " ));
318
315
}
319
316
320
317
@@ -325,11 +322,29 @@ prj_stringize_project(Application_Links *app, Arena *arena, Variable_Handle proj
325
322
for (Vars_Children (child, fkey_commands)){
326
323
String8 key = vars_key_from_var (scratch, child);
327
324
String8 name = vars_string_from_var (scratch, child);
328
- string_list_pushf (arena, out, " .%.*s = \" %.*s\" ,\n " , string_expand (key), string_expand (name));
325
+ string_list_pushf (arena, out, " .%.*s = \" %.*s\" ,\n " ,
326
+ string_expand (key), string_expand (name));
329
327
}
330
- string_list_push (arena, out, str8_lit (" };\n " ));
331
-
332
- string_list_push (arena, out, str8_lit (" \n " ));
328
+ string_list_push (arena, out, str8_lit (" };\n\n " ));
329
+ }
330
+
331
+
332
+ // NOTE(allen): FKey Command Override
333
+ Variable_Handle fkey_commands_overide = vars_read_key (project, fkey_command_override_id);
334
+ if (!vars_is_nil (fkey_commands_overide)){
335
+ string_list_push (arena, out, str8_lit (" fkey_command_override = {\n " ));
336
+ for (Vars_Children (user_child, fkey_commands_overide)){
337
+ String8 user_key = vars_key_from_var (scratch, user_child);
338
+ string_list_pushf (arena, out, " .%.*s = {\n " , string_expand (user_key));
339
+ for (Vars_Children (child, user_child)){
340
+ String8 key = vars_key_from_var (scratch, child);
341
+ String8 name = vars_string_from_var (scratch, child);
342
+ string_list_pushf (arena, out, " .%.*s = \" %.*s\" ,\n " ,
343
+ string_expand (key), string_expand (name));
344
+ }
345
+ string_list_pushf (arena, out, " },\n " );
346
+ }
347
+ string_list_push (arena, out, str8_lit (" };\n\n " ));
333
348
}
334
349
}
335
350
@@ -733,14 +748,32 @@ prj_exec_command_name(Application_Links *app, String8 cmd_name){
733
748
734
749
function void
735
750
prj_exec_command_fkey_index (Application_Links *app, i32 fkey_index){
736
- // TODO(allen): ideally if one fkey_command is missing this index the fallback
737
- // can be continued.
738
- Variable_Handle fkeys = def_get_config_var (vars_save_string_lit (" fkey_command" ));
739
-
751
+ // setup fkey string
740
752
Scratch_Block scratch (app);
741
753
String8 fkey_index_str = push_stringf (scratch, " F%d" , fkey_index + 1 );
742
754
String_ID fkey_index_id = vars_save_string (fkey_index_str);
743
- Variable_Handle cmd_name_var = vars_read_key (fkeys, fkey_index_id);
755
+
756
+ // get command variable
757
+ Variable_Handle cmd_name_var = vars_get_nil ();
758
+
759
+ // try user override
760
+ {
761
+ Variable_Handle fkey_override =
762
+ def_get_config_var (vars_save_string_lit (" fkey_command_override" ));
763
+ if (!vars_is_nil (fkey_override)){
764
+ String_Const_u8 name = def_get_config_string (scratch, vars_save_string_lit (" user_name" ));
765
+ String_ID user_name_id = vars_save_string (name);
766
+ Variable_Handle user_var = vars_read_key (fkey_override, user_name_id);
767
+ cmd_name_var = vars_read_key (user_var, fkey_index_id);
768
+ }
769
+ }
770
+
771
+ // try defaults
772
+ if (vars_is_nil (cmd_name_var)){
773
+ Variable_Handle fkeys = def_get_config_var (vars_save_string_lit (" fkey_command" ));
774
+ cmd_name_var = vars_read_key (fkeys, fkey_index_id);
775
+ }
776
+
744
777
String8 cmd_name = vars_string_from_var (scratch, cmd_name_var);
745
778
prj_exec_command_name (app, cmd_name);
746
779
}
0 commit comments