turn off transient tab creation with explicit open/switch command

This commit is contained in:
Ryan Fleury
2025-11-07 14:15:35 -08:00
parent e4aae5b075
commit 88b79b2b6a
4 changed files with 42 additions and 28 deletions
+4 -2
View File
@@ -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)},
+5 -2
View File
@@ -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];
+1
View File
@@ -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 }
+10 -2
View File
@@ -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;
prefer_new_tab = rd_regs()->prefer_new_tab;
if(file_path.size == 0)
{
require_disasm_snap = 1;
@@ -14236,6 +14238,8 @@ 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;
if(!prefer_new_tab)
{
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)
@@ -14259,6 +14263,7 @@ rd_frame(void)
}
}
}
}
// rjf: find a panel that already has *any* code open (prioritize largest)
info->panel_w_any_src_code = &cfg_nil_panel_node;
@@ -14616,9 +14621,12 @@ 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));
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
RD_CmdKind cursor_snap_kind = RD_CmdKind_CenterCursor;