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}")}, {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}, {0},
str8_lit_comp("machine"), str8_lit_comp("machine"),
@@ -499,13 +499,14 @@ str8_lit_comp("do_lister"),
str8_lit_comp("do_big_rows"), str8_lit_comp("do_big_rows"),
str8_lit_comp("all_windows"), str8_lit_comp("all_windows"),
str8_lit_comp("non_graphical"), str8_lit_comp("non_graphical"),
str8_lit_comp("prefer_new_tab"),
str8_lit_comp("dir2"), str8_lit_comp("dir2"),
str8_lit_comp("string"), str8_lit_comp("string"),
str8_lit_comp("cmd_name"), str8_lit_comp("cmd_name"),
str8_lit_comp("os_event"), str8_lit_comp("os_event"),
}; };
Rng1U64 rd_reg_slot_range_table[47] = Rng1U64 rd_reg_slot_range_table[48] =
{ {
{0}, {0},
{OffsetOf(RD_Regs, machine), OffsetOf(RD_Regs, machine) + sizeof(CTRL_Handle)}, {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, 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, all_windows), OffsetOf(RD_Regs, all_windows) + sizeof(B32)},
{OffsetOf(RD_Regs, non_graphical), OffsetOf(RD_Regs, non_graphical) + 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, dir2), OffsetOf(RD_Regs, dir2) + sizeof(Dir2)},
{OffsetOf(RD_Regs, string), OffsetOf(RD_Regs, string) + sizeof(String8)}, {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, 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_DoBigRows,
RD_RegSlot_AllWindows, RD_RegSlot_AllWindows,
RD_RegSlot_NonGraphical, RD_RegSlot_NonGraphical,
RD_RegSlot_PreferNewTab,
RD_RegSlot_Dir2, RD_RegSlot_Dir2,
RD_RegSlot_String, RD_RegSlot_String,
RD_RegSlot_CmdName, RD_RegSlot_CmdName,
@@ -489,6 +490,7 @@ B32 do_lister;
B32 do_big_rows; B32 do_big_rows;
B32 all_windows; B32 all_windows;
B32 non_graphical; B32 non_graphical;
B32 prefer_new_tab;
Dir2 dir2; Dir2 dir2;
String8 string; String8 string;
String8 cmd_name; String8 cmd_name;
@@ -587,6 +589,7 @@ Z(getting_started)\
.do_big_rows = rd_regs()->do_big_rows,\ .do_big_rows = rd_regs()->do_big_rows,\
.all_windows = rd_regs()->all_windows,\ .all_windows = rd_regs()->all_windows,\
.non_graphical = rd_regs()->non_graphical,\ .non_graphical = rd_regs()->non_graphical,\
.prefer_new_tab = rd_regs()->prefer_new_tab,\
.dir2 = rd_regs()->dir2,\ .dir2 = rd_regs()->dir2,\
.string = rd_regs()->string,\ .string = rd_regs()->string,\
.cmd_name = rd_regs()->cmd_name,\ .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 String8 rd_tab_fast_path_query_name_table[25];
extern RD_VocabInfo rd_vocab_info_table[358]; extern RD_VocabInfo rd_vocab_info_table[358];
extern RD_NameSchemaInfo rd_name_schema_info_table[26]; extern RD_NameSchemaInfo rd_name_schema_info_table[26];
extern String8 rd_reg_slot_code_name_table[47]; extern String8 rd_reg_slot_code_name_table[48];
extern Rng1U64 rd_reg_slot_range_table[47]; extern Rng1U64 rd_reg_slot_range_table[48];
extern String8 rd_binding_version_remap_old_name_table[8]; extern String8 rd_binding_version_remap_old_name_table[8];
extern String8 rd_binding_version_remap_new_name_table[8]; extern String8 rd_binding_version_remap_new_name_table[8];
extern String8 rd_icon_kind_text_table[75]; extern String8 rd_icon_kind_text_table[75];
+1
View File
@@ -797,6 +797,7 @@ RD_RegTable:
{B32 do_big_rows DoBigRows } {B32 do_big_rows DoBigRows }
{B32 all_windows AllWindows } {B32 all_windows AllWindows }
{B32 non_graphical NonGraphical } {B32 non_graphical NonGraphical }
{B32 prefer_new_tab PreferNewTab }
{Dir2 dir2 Dir2 } {Dir2 dir2 Dir2 }
{String8 string String } {String8 string String }
{String8 cmd_name CmdName } {String8 cmd_name CmdName }
+32 -24
View File
@@ -13515,7 +13515,7 @@ rd_frame(void)
{ {
path = rd_regs()->file_path; 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; }break;
case RD_CmdKind_SwitchToPartnerFile: case RD_CmdKind_SwitchToPartnerFile:
{ {
@@ -13542,7 +13542,7 @@ rd_frame(void)
FileProperties candidate_props = os_properties_from_file_path(candidate_path); FileProperties candidate_props = os_properties_from_file_path(candidate_path);
if(candidate_props.modified != 0) 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; break;
} }
} }
@@ -14124,12 +14124,14 @@ rd_frame(void)
CTRL_Entity *process = &ctrl_entity_nil; CTRL_Entity *process = &ctrl_entity_nil;
U64 vaddr = 0; U64 vaddr = 0;
B32 require_disasm_snap = 0; B32 require_disasm_snap = 0;
B32 prefer_new_tab = 0;
{ {
file_path = rd_mapped_from_file_path(scratch.arena, rd_regs()->file_path); file_path = rd_mapped_from_file_path(scratch.arena, rd_regs()->file_path);
point = rd_regs()->cursor; point = rd_regs()->cursor;
thread = ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->thread); 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); process = ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->process);
vaddr = rd_regs()->vaddr; vaddr = rd_regs()->vaddr;
prefer_new_tab = rd_regs()->prefer_new_tab;
if(file_path.size == 0) if(file_path.size == 0)
{ {
require_disasm_snap = 1; 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 // rjf: try to find panel/view pair that has any *auto* source code tab open
info->panel_w_auto = &cfg_nil_panel_node; info->panel_w_auto = &cfg_nil_panel_node;
info->view_w_auto = &cfg_nil_node; info->view_w_auto = &cfg_nil_node;
for(CFG_PanelNode *panel = panel_tree.root; if(!prefer_new_tab)
panel != &cfg_nil_panel_node;
panel = cfg_panel_node_rec__depth_first_pre(panel_tree.root, panel).next)
{ {
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; if(panel->first != &cfg_nil_panel_node)
}
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(str8_match(tab->string, str8_lit("text"), 0) && continue;
rd_view_setting_b32_from_name(str8_lit("auto"))) }
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; if(str8_match(tab->string, str8_lit("text"), 0) &&
info->view_w_auto = tab; 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")); 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 *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_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")); if(!prefer_new_tab)
cfg_node_new(rd_state->cfg, auto_root, str8_lit("1")); {
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 // rjf: determine if we need a contain or center