upgrade textual command -> cmd-regs-filling path, to use expression evaluation when possible, and to use fuzzy filtering over associated query lists when possible

This commit is contained in:
Ryan Fleury
2025-06-21 09:24:08 -07:00
parent 65f00f3b17
commit b6eca01e2a
7 changed files with 199 additions and 65 deletions
+56 -4
View File
@@ -60,7 +60,7 @@ str8_lit_comp(""),
str8_lit_comp(""),
};
RD_VocabInfo rd_vocab_info_table[345] =
RD_VocabInfo rd_vocab_info_table[346] =
{
{str8_lit_comp("type_view"), str8_lit_comp("type_views"), str8_lit_comp("Type View"), str8_lit_comp("Type Views"), RD_IconKind_Binoculars},
{str8_lit_comp("file_path_map"), str8_lit_comp("file_path_maps"), str8_lit_comp("File Path Map"), str8_lit_comp("File Path Maps"), RD_IconKind_FileOutline},
@@ -205,6 +205,7 @@ RD_VocabInfo rd_vocab_info_table[345] =
{str8_lit_comp("exit"), str8_lit_comp(""), str8_lit_comp("Exit"), str8_lit_comp(""), RD_IconKind_X},
{str8_lit_comp("open_palette"), str8_lit_comp(""), str8_lit_comp("Open Palette"), str8_lit_comp(""), RD_IconKind_List},
{str8_lit_comp("run_command"), str8_lit_comp(""), str8_lit_comp("Run Command"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("run_ext_driver_text_command"), str8_lit_comp(""), str8_lit_comp("Run External Driver Text Command"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp("OS Event"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("select_thread"), str8_lit_comp(""), str8_lit_comp("Select Thread"), str8_lit_comp(""), RD_IconKind_Thread},
{str8_lit_comp("select_unwind"), str8_lit_comp(""), str8_lit_comp("Select Unwind"), str8_lit_comp(""), RD_IconKind_Null},
@@ -437,7 +438,58 @@ RD_NameSchemaInfo rd_name_schema_info_table[24] =
{str8_lit_comp("thread"), str8_lit_comp("x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'call_stack':query}")},
};
Rng1U64 rd_reg_slot_range_table[48] =
String8 rd_reg_slot_code_name_table[47] =
{
{0},
str8_lit_comp("machine"),
str8_lit_comp("module"),
str8_lit_comp("process"),
str8_lit_comp("thread"),
str8_lit_comp("ctrl_entity"),
str8_lit_comp("window"),
str8_lit_comp("panel"),
str8_lit_comp("tab"),
str8_lit_comp("view"),
str8_lit_comp("prev_tab"),
str8_lit_comp("dst_panel"),
str8_lit_comp("cfg"),
str8_lit_comp("cfg_list"),
str8_lit_comp("eval_space"),
str8_lit_comp("unwind_count"),
str8_lit_comp("inline_depth"),
str8_lit_comp("file_path"),
str8_lit_comp("cursor"),
str8_lit_comp("mark"),
str8_lit_comp("text_key"),
str8_lit_comp("lang_kind"),
str8_lit_comp("lines"),
str8_lit_comp("dbgi_key"),
str8_lit_comp("vaddr"),
str8_lit_comp("voff"),
str8_lit_comp("vaddr_range"),
str8_lit_comp("voff_range"),
str8_lit_comp("expr"),
str8_lit_comp("ui_key"),
str8_lit_comp("src_ui_key"),
str8_lit_comp("off_px"),
str8_lit_comp("reg_slot"),
str8_lit_comp("pid"),
str8_lit_comp("force_confirm"),
str8_lit_comp("force_focus"),
str8_lit_comp("prefer_disasm"),
str8_lit_comp("no_rich_tooltip"),
str8_lit_comp("do_implicit_root"),
str8_lit_comp("do_lister"),
str8_lit_comp("do_big_rows"),
str8_lit_comp("all_windows"),
str8_lit_comp("non_graphical"),
str8_lit_comp("dir2"),
str8_lit_comp("string"),
str8_lit_comp("cmd_name"),
str8_lit_comp("os_event"),
};
Rng1U64 rd_reg_slot_range_table[47] =
{
{0},
{OffsetOf(RD_Regs, machine), OffsetOf(RD_Regs, machine) + sizeof(CTRL_Handle)},
@@ -485,11 +537,10 @@ Rng1U64 rd_reg_slot_range_table[48] =
{OffsetOf(RD_Regs, dir2), OffsetOf(RD_Regs, dir2) + sizeof(Dir2)},
{OffsetOf(RD_Regs, string), OffsetOf(RD_Regs, string) + sizeof(String8)},
{OffsetOf(RD_Regs, cmd_name), OffsetOf(RD_Regs, cmd_name) + sizeof(String8)},
{OffsetOf(RD_Regs, params_tree), OffsetOf(RD_Regs, params_tree) + sizeof(MD_Node *)},
{OffsetOf(RD_Regs, os_event), OffsetOf(RD_Regs, os_event) + sizeof(OS_Event *)},
};
RD_CmdKindInfo rd_cmd_kind_info_table[238] =
RD_CmdKindInfo rd_cmd_kind_info_table[239] =
{
{0},
{ str8_lit_comp("launch_and_run"), str8_lit_comp("Starts debugging a new instance of a target, then runs."), str8_lit_comp("launch,start,run,target"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), CTRL_EntityKind_Null}},
@@ -527,6 +578,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[238] =
{ str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
{ str8_lit_comp("open_palette"), str8_lit_comp("Opens the palette."), str8_lit_comp("help,cmd,lister"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
{ str8_lit_comp("run_command"), str8_lit_comp("Runs a command from the command palette."), str8_lit_comp("help,cmd"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_CmdName, str8_lit_comp("query:commands"), str8_lit_comp("commands"), CTRL_EntityKind_Null}},
{ str8_lit_comp("run_ext_driver_text_command"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
{ str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
{ str8_lit_comp("select_thread"), str8_lit_comp("Selects a thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), CTRL_EntityKind_Thread}},
{ str8_lit_comp("select_unwind"), str8_lit_comp("Selects an unwind frame number for the selected thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("query:call_stack"), str8_lit_comp(""), CTRL_EntityKind_Null}},
+4 -5
View File
@@ -54,7 +54,6 @@ RD_RegSlot_NonGraphical,
RD_RegSlot_Dir2,
RD_RegSlot_String,
RD_RegSlot_CmdName,
RD_RegSlot_ParamsTree,
RD_RegSlot_OSEvent,
RD_RegSlot_COUNT,
} RD_RegSlot;
@@ -97,6 +96,7 @@ RD_CmdKind_Attach,
RD_CmdKind_Exit,
RD_CmdKind_OpenPalette,
RD_CmdKind_RunCommand,
RD_CmdKind_RunExternalDriverTextCommand,
RD_CmdKind_OSEvent,
RD_CmdKind_SelectThread,
RD_CmdKind_SelectUnwind,
@@ -483,7 +483,6 @@ B32 non_graphical;
Dir2 dir2;
String8 string;
String8 cmd_name;
MD_Node * params_tree;
OS_Event * os_event;
};
@@ -581,15 +580,15 @@ Z(getting_started)\
.dir2 = rd_regs()->dir2,\
.string = rd_regs()->string,\
.cmd_name = rd_regs()->cmd_name,\
.params_tree = rd_regs()->params_tree,\
.os_event = rd_regs()->os_event,\
C_LINKAGE_BEGIN
extern String8 rd_tab_fast_path_view_name_table[24];
extern String8 rd_tab_fast_path_query_name_table[24];
extern RD_VocabInfo rd_vocab_info_table[345];
extern RD_VocabInfo rd_vocab_info_table[346];
extern RD_NameSchemaInfo rd_name_schema_info_table[24];
extern Rng1U64 rd_reg_slot_range_table[48];
extern String8 rd_reg_slot_code_name_table[47];
extern Rng1U64 rd_reg_slot_range_table[47];
extern String8 rd_binding_version_remap_old_name_table[8];
extern String8 rd_binding_version_remap_new_name_table[8];
extern String8 rd_icon_kind_text_table[75];
+8 -2
View File
@@ -753,7 +753,6 @@ RD_RegTable:
{Dir2 dir2 Dir2 }
{String8 string String }
{String8 cmd_name CmdName }
{`MD_Node *` params_tree ParamsTree }
{`OS_Event *` os_event OSEvent }
}
@@ -769,6 +768,12 @@ RD_RegTable:
@expand(RD_RegTable a) `$(a.c_type) $(a.name_lower)`
}
@data(String8) rd_reg_slot_code_name_table:
{
`{0}`,
@expand(RD_RegTable a) `str8_lit_comp("$(a.name_lower)")`
}
@data(Rng1U64) rd_reg_slot_range_table:
{
`{0}`,
@@ -796,8 +801,9 @@ RD_CmdTable: // | | | |
//- rjf: palette
{OpenPalette 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 List "open_palette" "Open Palette" "Opens the palette." "help,cmd,lister" "" }
//- rjf: command runner
//- rjf: command runners
{RunCommand 1 1 0 0 "query:commands" CmdName commands Nil Null 0 0 0 0 0 1 1 Null "run_command" "Run Command" "Runs a command from the command palette." "help,cmd" "" }
{RunExternalDriverTextCommand 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 1 1 Null "run_ext_driver_text_command" "Run External Driver Text Command" "" "" "" }
//- rjf: os event passthrough
{OSEvent 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "os_event" "OS Event" "" "" "" }
+125 -39
View File
@@ -46,7 +46,6 @@ rd_regs_copy_contents(Arena *arena, RD_Regs *dst, RD_Regs *src)
dst->expr = push_str8_copy(arena, src->expr);
dst->string = push_str8_copy(arena, src->string);
dst->cmd_name = push_str8_copy(arena, src->cmd_name);
dst->params_tree = md_tree_copy(arena, src->params_tree);
if(dst->cfg_list.count == 0 && dst->cfg != 0)
{
rd_cfg_id_list_push(arena, &dst->cfg_list, dst->cfg);
@@ -5518,7 +5517,7 @@ rd_view_ui(Rng2F32 rect)
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_name);
RD_RegsScope()
{
rd_regs_fill_slot_from_string(cmd_kind_info->query.slot, input);
rd_regs_fill_slot_from_string(cmd_kind_info->query.slot, str8_zero(), input);
rd_cmd(RD_CmdKind_CompleteQuery);
}
}
@@ -10591,12 +10590,15 @@ rd_pop_regs(void)
}
internal void
rd_regs_fill_slot_from_string(RD_RegSlot slot, String8 string)
rd_regs_fill_slot_from_string(RD_RegSlot slot, String8 query_expr, String8 string)
{
String8 error = {0};
switch(slot)
{
//- rjf: basic string cases
default:
{
rd_regs()->string = push_str8_copy(rd_frame_arena(), string);
}break;
case RD_RegSlot_String:
case RD_RegSlot_FilePath:
{
@@ -10611,28 +10613,95 @@ rd_regs_fill_slot_from_string(RD_RegSlot slot, String8 string)
rd_regs()->cursor = pair.pt;
}
}break;
case RD_RegSlot_Cfg:
if(str8_match(str8_prefix(string, 1), str8_lit("$"), 0))
{
String8 numeric_part = str8_skip(string, 1);
RD_CfgID id = u64_from_str8(numeric_part, 16);
rd_regs()->cfg = id;
}break;
case RD_RegSlot_Expr:
{
rd_regs()->expr = push_str8_copy(rd_frame_arena(), string);
}break;
case RD_RegSlot_CmdName:
{
rd_regs()->cmd_name = push_str8_copy(rd_frame_arena(), string);
}break;
//- rjf: ctrl entities
case RD_RegSlot_Machine:
case RD_RegSlot_Module:
case RD_RegSlot_Process:
case RD_RegSlot_Thread:
case RD_RegSlot_CtrlEntity:
{
}break;
//- rjf: cfgs
case RD_RegSlot_Cfg:
case RD_RegSlot_Window:
case RD_RegSlot_Panel:
case RD_RegSlot_Tab:
case RD_RegSlot_View:
case RD_RegSlot_PrevTab:
case RD_RegSlot_DstPanel:
{
B32 good = 0;
if(!good && str8_match(str8_prefix(string, 1), str8_lit("$"), 0))
{
String8 numeric_part = str8_skip(string, 1);
RD_CfgID id = u64_from_str8(numeric_part, 16);
rd_regs()->cfg = id;
good = 1;
}
if(!good && query_expr.size != 0)
{
Temp scratch = scratch_begin(0, 0);
RD_Cfg *immediate = rd_immediate_cfg_from_keyf("###regs_fill_slot_view");
RD_Cfg *view = rd_cfg_newf(immediate, "watch");
rd_cfg_newf(view, "lister");
RD_ViewState *vs = rd_view_state_from_cfg(view);
EV_View *eval_view = vs->ev_view;
{
ev_key_set_expansion(eval_view, ev_key_root(), ev_key_make(ev_hash_from_key(ev_key_root()), 1), 1);
E_Eval eval = e_eval_from_string(query_expr);
EV_BlockTree block_tree = {0};
EV_BlockRangeList block_ranges = {0};
// TODO(rjf): @cleanup we only need to do this because we implicitly use
// view info in the block tree build via raddbg-layer eval hooks, but we
// should really keep all parameterization info in eval views themselves,
// to not couple block tree building with frontend state...
RD_RegsScope(.window = 0, .panel = 0, .view = view->id)
{
block_tree = ev_block_tree_from_eval(scratch.arena, eval_view, string, eval);
block_ranges = ev_block_range_list_from_tree(scratch.arena, &block_tree);
if(block_ranges.first != 0)
{
block_ranges.count -= 1;
block_ranges.first = block_ranges.first->next;
}
}
EV_Row *row = ev_row_from_num(scratch.arena, eval_view, &block_ranges, 1);
rd_regs()->cfg = rd_cfg_from_eval_space(row->eval.space)->id;
good = (rd_regs()->cfg != 0);
}
scratch_end(scratch);
}
if(!good)
{
E_Eval eval = e_eval_from_string(string);
rd_regs()->cfg = rd_cfg_from_eval_space(eval.space)->id;
good = (rd_regs()->cfg != 0);
}
}break;
//- rjf: line numbers
case RD_RegSlot_Cursor:
{
U64 v = 0;
if(try_u64_from_str8_c_rules(string, &v))
E_Eval eval = e_value_eval_from_eval(e_eval_from_string(string));
if(eval.msgs.max_kind == E_MsgKind_Null)
{
rd_regs()->cursor.column = 1;
rd_regs()->cursor.line = v;
rd_regs()->cursor.line = (S64)eval.value.u64;
}
else
{
log_user_error(str8_lit("Couldn't interpret as a line number."));
log_user_errorf("Couldn't interpret \"`%S`\" as a line number.", string);
}
}break;
case RD_RegSlot_Vaddr: goto use_numeric_eval;
@@ -10653,30 +10722,7 @@ rd_regs_fill_slot_from_string(RD_RegSlot slot, String8 string)
eval = e_value_eval_from_eval(eval);
}
U64 u64 = eval.value.u64;
switch(slot)
{
default:{}break;
case RD_RegSlot_Vaddr:
{
rd_regs()->vaddr = u64;
}break;
case RD_RegSlot_Voff:
{
rd_regs()->voff = u64;
}break;
case RD_RegSlot_UnwindCount:
{
rd_regs()->unwind_count = u64;
}break;
case RD_RegSlot_InlineDepth:
{
rd_regs()->inline_depth = u64;
}break;
case RD_RegSlot_PID:
{
rd_regs()->pid = u64;
}break;
}
MemoryCopy((U8 *)(rd_regs()) + rd_reg_slot_range_table[slot].min, &u64, dim_1u64(rd_reg_slot_range_table[slot]));
}
else
{
@@ -12721,6 +12767,46 @@ rd_frame(void)
}
}break;
//- rjf: external driver textual commands
case RD_CmdKind_RunExternalDriverTextCommand:
{
String8 msg = rd_regs()->string;
String8List msg_parts = str8_split(scratch.arena, msg, (U8 *)" ", 1, 0);
CmdLine msg_cmd_line = cmd_line_from_string_list(scratch.arena, msg_parts);
String8 cmd_kind_name = str8_list_first(&msg_cmd_line.inputs);
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_kind_name);
if(cmd_kind_info != &rd_nil_cmd_kind_info) RD_RegsScope()
{
for EachNonZeroEnumVal(RD_RegSlot, s)
{
String8 reg_slot_name = rd_reg_slot_code_name_table[s];
String8 value = cmd_line_string(&msg_cmd_line, reg_slot_name);
if(value.size != 0)
{
rd_regs_fill_slot_from_string(s, cmd_kind_info->query.expr, value);
}
}
String8 primary_args_string = {0};
if(msg_cmd_line.inputs.first != 0)
{
String8List primary_args_strings = {0};
for(String8Node *n = msg_cmd_line.inputs.first->next; n != 0; n = n->next)
{
str8_list_push(scratch.arena, &primary_args_strings, n->string);
}
primary_args_string = str8_list_join(scratch.arena, &primary_args_strings, &(StringJoin){.sep = str8_lit(" ")});
}
rd_regs_fill_slot_from_string(cmd_kind_info->query.slot, cmd_kind_info->query.expr, primary_args_string);
rd_push_cmd(cmd_kind_name, rd_regs());
rd_request_frame();
}
else
{
log_user_errorf("`%S` is not a command.", cmd_kind_name);
rd_request_frame();
}
}break;
//- rjf: exiting
case RD_CmdKind_Exit:
{
+1 -1
View File
@@ -1028,7 +1028,7 @@ internal RD_Regs *rd_push_regs_(RD_Regs *regs);
#define rd_push_regs(...) rd_push_regs_(&(RD_Regs){rd_regs_lit_init_top __VA_ARGS__})
internal RD_Regs *rd_pop_regs(void);
#define RD_RegsScope(...) DeferLoop(rd_push_regs(__VA_ARGS__), rd_pop_regs())
internal void rd_regs_fill_slot_from_string(RD_RegSlot slot, String8 string);
internal void rd_regs_fill_slot_from_string(RD_RegSlot slot, String8 query_expr, String8 string);
////////////////////////////////
//~ rjf: Commands
+1
View File
@@ -795,6 +795,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(cfgs_slice)
}
//- rjf: fill
// TODO(rjf): @cleanup don't smuggle this through like this...
if(rd_cfg_child_from_string(rd_cfg_from_id(rd_regs()->view), str8_lit("lister")) == &rd_nil_cfg)
{
accel->cmds = ext->cmds;
+4 -14
View File
@@ -645,11 +645,7 @@ entry_point(CmdLine *cmd_line)
if(dst_ws != &rd_nil_window_state)
{
dst_ws->window_temporarily_focused_ipc = 1;
U64 first_space_pos = str8_find_needle(msg, 0, str8_lit(" "), 0);
String8 cmd_kind_name_string = str8_prefix(msg, first_space_pos);
String8 cmd_args_string = str8_skip_chop_whitespace(str8_skip(msg, first_space_pos));
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_kind_name_string);
if(cmd_kind_info != &rd_nil_cmd_kind_info) RD_RegsScope()
RD_RegsScope()
{
if(dst_ws->cfg_id != rd_regs()->window)
{
@@ -661,14 +657,7 @@ entry_point(CmdLine *cmd_line)
rd_regs()->view = panel_tree.focused->selected_tab->id;
scratch_end(scratch);
}
rd_regs_fill_slot_from_string(cmd_kind_info->query.slot, cmd_args_string);
rd_push_cmd(cmd_kind_name_string, rd_regs());
rd_request_frame();
}
else
{
log_user_errorf("\"%S\" is not a command.", cmd_kind_name_string);
rd_request_frame();
rd_cmd(RD_CmdKind_RunExternalDriverTextCommand, .string = msg);
}
}
}
@@ -782,8 +771,9 @@ entry_point(CmdLine *cmd_line)
IPCInfo *ipc_info = (IPCInfo *)ipc_sender2main_shared_memory_base;
U8 *buffer = (U8 *)(ipc_info+1);
U64 buffer_max = IPC_SHARED_MEMORY_BUFFER_SIZE - sizeof(IPCInfo);
String8List parts = os_string_list_from_argcv(scratch.arena, cmd_line->argc - 1, cmd_line->argv + 1);
StringJoin join = {str8_lit(""), str8_lit(" "), str8_lit("")};
String8 msg = str8_list_join(scratch.arena, &cmd_line->inputs, &join);
String8 msg = str8_list_join(scratch.arena, &parts, &join);
ipc_info->msg_size = Min(buffer_max, msg.size);
MemoryCopy(buffer, msg.str, ipc_info->msg_size);
os_semaphore_drop(ipc_sender2main_signal_semaphore);