diff --git a/src/raddbg/generated/raddbg.meta.c b/src/raddbg/generated/raddbg.meta.c index 33777f96..cf9d1d40 100644 --- a/src/raddbg/generated/raddbg.meta.c +++ b/src/raddbg/generated/raddbg.meta.c @@ -454,7 +454,7 @@ RD_NameSchemaInfo rd_name_schema_info_table[26] = {str8_lit_comp("thread"), str8_lit_comp("x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'call_stack':query}")}, }; -String8 rd_reg_slot_code_name_table[47] = +String8 rd_reg_slot_code_name_table[48] = { {0}, str8_lit_comp("machine"), @@ -499,13 +499,14 @@ str8_lit_comp("do_lister"), str8_lit_comp("do_big_rows"), str8_lit_comp("all_windows"), str8_lit_comp("non_graphical"), +str8_lit_comp("prefer_new_tab"), 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] = +Rng1U64 rd_reg_slot_range_table[48] = { {0}, {OffsetOf(RD_Regs, machine), OffsetOf(RD_Regs, machine) + sizeof(CTRL_Handle)}, @@ -550,6 +551,7 @@ Rng1U64 rd_reg_slot_range_table[47] = {OffsetOf(RD_Regs, do_big_rows), OffsetOf(RD_Regs, do_big_rows) + sizeof(B32)}, {OffsetOf(RD_Regs, all_windows), OffsetOf(RD_Regs, all_windows) + sizeof(B32)}, {OffsetOf(RD_Regs, non_graphical), OffsetOf(RD_Regs, non_graphical) + sizeof(B32)}, +{OffsetOf(RD_Regs, prefer_new_tab), OffsetOf(RD_Regs, prefer_new_tab) + sizeof(B32)}, {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)}, diff --git a/src/raddbg/generated/raddbg.meta.h b/src/raddbg/generated/raddbg.meta.h index 411ddb7d..b9bac75c 100644 --- a/src/raddbg/generated/raddbg.meta.h +++ b/src/raddbg/generated/raddbg.meta.h @@ -51,6 +51,7 @@ RD_RegSlot_DoLister, RD_RegSlot_DoBigRows, RD_RegSlot_AllWindows, RD_RegSlot_NonGraphical, +RD_RegSlot_PreferNewTab, RD_RegSlot_Dir2, RD_RegSlot_String, RD_RegSlot_CmdName, @@ -489,6 +490,7 @@ B32 do_lister; B32 do_big_rows; B32 all_windows; B32 non_graphical; +B32 prefer_new_tab; Dir2 dir2; String8 string; String8 cmd_name; @@ -587,6 +589,7 @@ Z(getting_started)\ .do_big_rows = rd_regs()->do_big_rows,\ .all_windows = rd_regs()->all_windows,\ .non_graphical = rd_regs()->non_graphical,\ +.prefer_new_tab = rd_regs()->prefer_new_tab,\ .dir2 = rd_regs()->dir2,\ .string = rd_regs()->string,\ .cmd_name = rd_regs()->cmd_name,\ @@ -597,8 +600,8 @@ extern String8 rd_tab_fast_path_view_name_table[25]; extern String8 rd_tab_fast_path_query_name_table[25]; extern RD_VocabInfo rd_vocab_info_table[358]; extern RD_NameSchemaInfo rd_name_schema_info_table[26]; -extern String8 rd_reg_slot_code_name_table[47]; -extern Rng1U64 rd_reg_slot_range_table[47]; +extern String8 rd_reg_slot_code_name_table[48]; +extern Rng1U64 rd_reg_slot_range_table[48]; 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]; diff --git a/src/raddbg/raddbg.mdesk b/src/raddbg/raddbg.mdesk index 8c73f11b..e8e77f06 100644 --- a/src/raddbg/raddbg.mdesk +++ b/src/raddbg/raddbg.mdesk @@ -797,6 +797,7 @@ RD_RegTable: {B32 do_big_rows DoBigRows } {B32 all_windows AllWindows } {B32 non_graphical NonGraphical } + {B32 prefer_new_tab PreferNewTab } {Dir2 dir2 Dir2 } {String8 string String } {String8 cmd_name CmdName } diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 8a9a9464..01cfcb8d 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -13515,7 +13515,7 @@ rd_frame(void) { path = rd_regs()->file_path; } - rd_cmd(RD_CmdKind_FindCodeLocation, .file_path = path, .cursor = txt_pt(0, 0), .vaddr = 0, .force_focus = 1); + rd_cmd(RD_CmdKind_FindCodeLocation, .file_path = path, .cursor = txt_pt(0, 0), .vaddr = 0, .force_focus = 1, .prefer_new_tab = 1); }break; case RD_CmdKind_SwitchToPartnerFile: { @@ -13542,7 +13542,7 @@ rd_frame(void) FileProperties candidate_props = os_properties_from_file_path(candidate_path); if(candidate_props.modified != 0) { - rd_cmd(RD_CmdKind_FindCodeLocation, .file_path = candidate_path, .cursor = txt_pt(0, 0), .vaddr = 0); + rd_cmd(RD_CmdKind_FindCodeLocation, .file_path = candidate_path, .cursor = txt_pt(0, 0), .vaddr = 0, .prefer_new_tab = 1); break; } } @@ -14124,12 +14124,14 @@ rd_frame(void) CTRL_Entity *process = &ctrl_entity_nil; U64 vaddr = 0; B32 require_disasm_snap = 0; + B32 prefer_new_tab = 0; { - file_path = rd_mapped_from_file_path(scratch.arena, rd_regs()->file_path); - point = rd_regs()->cursor; - thread = ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->thread); - process = ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->process); - vaddr = rd_regs()->vaddr; + file_path = rd_mapped_from_file_path(scratch.arena, rd_regs()->file_path); + point = rd_regs()->cursor; + thread = ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->thread); + process = ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->process); + vaddr = rd_regs()->vaddr; + prefer_new_tab = rd_regs()->prefer_new_tab; if(file_path.size == 0) { require_disasm_snap = 1; @@ -14236,25 +14238,28 @@ rd_frame(void) // rjf: try to find panel/view pair that has any *auto* source code tab open info->panel_w_auto = &cfg_nil_panel_node; info->view_w_auto = &cfg_nil_node; - for(CFG_PanelNode *panel = panel_tree.root; - panel != &cfg_nil_panel_node; - panel = cfg_panel_node_rec__depth_first_pre(panel_tree.root, panel).next) + if(!prefer_new_tab) { - if(panel->first != &cfg_nil_panel_node) + for(CFG_PanelNode *panel = panel_tree.root; + panel != &cfg_nil_panel_node; + panel = cfg_panel_node_rec__depth_first_pre(panel_tree.root, panel).next) { - continue; - } - for(CFG_NodePtrNode *tab_n = panel->tabs.first; tab_n != 0; tab_n = tab_n->next) - { - CFG_Node *tab = tab_n->v; - if(rd_cfg_is_project_filtered(tab)) { continue; } - RD_RegsScope(.tab = tab->id, .view = tab->id) + if(panel->first != &cfg_nil_panel_node) { - if(str8_match(tab->string, str8_lit("text"), 0) && - rd_view_setting_b32_from_name(str8_lit("auto"))) + continue; + } + for(CFG_NodePtrNode *tab_n = panel->tabs.first; tab_n != 0; tab_n = tab_n->next) + { + CFG_Node *tab = tab_n->v; + if(rd_cfg_is_project_filtered(tab)) { continue; } + RD_RegsScope(.tab = tab->id, .view = tab->id) { - info->panel_w_auto = panel; - info->view_w_auto = tab; + if(str8_match(tab->string, str8_lit("text"), 0) && + rd_view_setting_b32_from_name(str8_lit("auto"))) + { + info->panel_w_auto = panel; + info->view_w_auto = tab; + } } } } @@ -14616,8 +14621,11 @@ rd_frame(void) dst_tab = cfg_node_new(rd_state->cfg, dst_panel->cfg, str8_lit("text")); CFG_Node *expr = cfg_node_new(rd_state->cfg, dst_tab, str8_lit("expression")); cfg_node_new(rd_state->cfg, expr, rd_eval_string_from_file_path(scratch.arena, file_path)); - CFG_Node *auto_root = cfg_node_new(rd_state->cfg, dst_tab, str8_lit("auto")); - cfg_node_new(rd_state->cfg, auto_root, str8_lit("1")); + if(!prefer_new_tab) + { + CFG_Node *auto_root = cfg_node_new(rd_state->cfg, dst_tab, str8_lit("auto")); + cfg_node_new(rd_state->cfg, auto_root, str8_lit("1")); + } } // rjf: determine if we need a contain or center