add dedicated open tab command as a fast path for all tab commands, simplify/streamline new tab menu

This commit is contained in:
Ryan Fleury
2025-04-25 10:04:42 -07:00
parent 0ed951e537
commit 33362d91a0
4 changed files with 43 additions and 59 deletions
+7 -5
View File
@@ -52,7 +52,7 @@ str8_lit_comp(""),
str8_lit_comp(""),
};
RD_VocabInfo rd_vocab_info_table[315] =
RD_VocabInfo rd_vocab_info_table[316] =
{
{str8_lit_comp("auto_view_rule"), str8_lit_comp("auto_view_rules"), str8_lit_comp("Auto View Rule"), str8_lit_comp("Auto View Rules"), 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},
@@ -236,7 +236,8 @@ RD_VocabInfo rd_vocab_info_table[315] =
{str8_lit_comp("prev_tab"), str8_lit_comp(""), str8_lit_comp("Focus Previous Tab"), str8_lit_comp(""), RD_IconKind_LeftArrow},
{str8_lit_comp("move_tab_right"), str8_lit_comp(""), str8_lit_comp("Move Tab Right"), str8_lit_comp(""), RD_IconKind_RightArrow},
{str8_lit_comp("move_tab_left"), str8_lit_comp(""), str8_lit_comp("Move Tab Left"), str8_lit_comp(""), RD_IconKind_LeftArrow},
{str8_lit_comp("open_tab"), str8_lit_comp(""), str8_lit_comp("Open Tab"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("open_tab"), str8_lit_comp(""), str8_lit_comp("Open New Tab"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("build_tab"), str8_lit_comp(""), str8_lit_comp("Build Tab"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("duplicate_tab"), str8_lit_comp(""), str8_lit_comp("Duplicate Tab"), str8_lit_comp(""), RD_IconKind_Duplicate},
{str8_lit_comp("close_tab"), str8_lit_comp(""), str8_lit_comp("Close Tab"), str8_lit_comp(""), RD_IconKind_X},
{str8_lit_comp("move_tab"), str8_lit_comp(""), str8_lit_comp("Move Tab"), str8_lit_comp(""), RD_IconKind_Null},
@@ -442,7 +443,7 @@ Rng1U64 rd_reg_slot_range_table[42] =
{OffsetOf(RD_Regs, os_event), OffsetOf(RD_Regs, os_event) + sizeof(OS_Event *)},
};
RD_CmdKindInfo rd_cmd_kind_info_table[211] =
RD_CmdKindInfo rd_cmd_kind_info_table[212] =
{
{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}},
@@ -522,7 +523,8 @@ RD_CmdKindInfo rd_cmd_kind_info_table[211] =
{ str8_lit_comp("prev_tab"), str8_lit_comp("Focuses the previous tab on the active panel."), 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*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
{ str8_lit_comp("move_tab_right"), str8_lit_comp("Moves the selected tab right one slot."), str8_lit_comp(""), str8_lit_comp("$tab,"), (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("move_tab_left"), str8_lit_comp("Moves the selected tab left one slot."), str8_lit_comp(""), str8_lit_comp("$tab,"), (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_tab"), str8_lit_comp("Opens a new tab with the parameterized view specification."), 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("open_tab"), str8_lit_comp("Opens a new tab."), 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_CmdName, str8_lit_comp("query:tab_commands"), str8_lit_comp("commands"), CTRL_EntityKind_Null}},
{ str8_lit_comp("build_tab"), str8_lit_comp("Opens a new tab with the parameterized view specification."), 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("duplicate_tab"), str8_lit_comp("Duplicates a tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (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_View, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
{ str8_lit_comp("close_tab"), str8_lit_comp("Closes the currently opened tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (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_View, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
{ str8_lit_comp("move_tab"), str8_lit_comp("Moves a tab to a new panel."), 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}},
@@ -698,6 +700,7 @@ struct {String8 string; RD_Binding binding;} rd_default_binding_table[108] =
{str8_lit_comp("close_tab"), {OS_Key_W, 0 |OS_Modifier_Ctrl }},
{str8_lit_comp("tab_bar_top"), {OS_Key_Up, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
{str8_lit_comp("tab_bar_bottom"), {OS_Key_Down, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
{str8_lit_comp("open_tab"), {OS_Key_T, 0 |OS_Modifier_Ctrl }},
{str8_lit_comp("open"), {OS_Key_O, 0 |OS_Modifier_Ctrl }},
{str8_lit_comp("reload_active"), {OS_Key_R, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
{str8_lit_comp("switch"), {OS_Key_I, 0 |OS_Modifier_Ctrl }},
@@ -761,7 +764,6 @@ struct {String8 string; RD_Binding binding;} rd_default_binding_table[108] =
{str8_lit_comp("toggle_watch_expr_at_mouse"), {OS_Key_D, 0 |OS_Modifier_Ctrl }},
{str8_lit_comp("toggle_watch_pin"), {OS_Key_F9, 0 |OS_Modifier_Ctrl }},
{str8_lit_comp("toggle_breakpoint"), {OS_Key_F9, 0 }},
{str8_lit_comp("add_target"), {OS_Key_T, 0 |OS_Modifier_Ctrl }},
{str8_lit_comp("attach"), {OS_Key_F6, 0 |OS_Modifier_Shift }},
{str8_lit_comp("open_palette"), {OS_Key_F1, 0 }},
{str8_lit_comp("open_palette"), {OS_Key_P, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
+2 -1
View File
@@ -134,6 +134,7 @@ RD_CmdKind_PrevTab,
RD_CmdKind_MoveTabRight,
RD_CmdKind_MoveTabLeft,
RD_CmdKind_OpenTab,
RD_CmdKind_BuildTab,
RD_CmdKind_DuplicateTab,
RD_CmdKind_CloseTab,
RD_CmdKind_MoveTab,
@@ -667,7 +668,7 @@ Z(getting_started)\
C_LINKAGE_BEGIN
extern String8 rd_tab_fast_path_view_name_table[20];
extern String8 rd_tab_fast_path_query_name_table[20];
extern RD_VocabInfo rd_vocab_info_table[315];
extern RD_VocabInfo rd_vocab_info_table[316];
extern RD_NameSchemaInfo rd_name_schema_info_table[21];
extern Rng1U64 rd_reg_slot_range_table[42];
extern String8 rd_binding_version_remap_old_name_table[8];
+3 -4
View File
@@ -683,7 +683,8 @@ RD_CmdTable: // | | | |
{PrevTab 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 LeftArrow "prev_tab" "Focus Previous Tab" "Focuses the previous tab on the active panel." "" "" }
{MoveTabRight 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 RightArrow "move_tab_right" "Move Tab Right" "Moves the selected tab right one slot." "" "$tab," }
{MoveTabLeft 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 LeftArrow "move_tab_left" "Move Tab Left" "Moves the selected tab left one slot." "" "$tab," }
{OpenTab 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "open_tab" "Open Tab" "Opens a new tab with the parameterized view specification." "" "" }
{OpenTab 1 1 0 0 "query:tab_commands" CmdName commands Nil Null 0 0 0 0 0 1 1 Null "open_tab" "Open New Tab" "Opens a new tab." "" "" }
{BuildTab 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "build_tab" "Build Tab" "Opens a new tab with the parameterized view specification." "" "" }
{DuplicateTab 1 1 0 0 "" View null Nil Null 0 0 0 0 0 0 0 Duplicate "duplicate_tab" "Duplicate Tab" "Duplicates a tab." "" "$tab," }
{CloseTab 1 1 0 0 "" View null Nil Null 0 0 0 0 0 0 0 X "close_tab" "Close Tab" "Closes the currently opened tab." "" "$tab," }
{MoveTab 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "move_tab" "Move Tab" "Moves a tab to a new panel." "" "" }
@@ -956,6 +957,7 @@ RD_DefaultBindingTable:
{ "close_tab" W ctrl 0 0 }
{ "tab_bar_top" Up ctrl shift alt }
{ "tab_bar_bottom" Down ctrl shift alt }
{ "open_tab" T ctrl 0 0 }
//- rjf: files
{ "open" O ctrl 0 0 }
@@ -1038,9 +1040,6 @@ RD_DefaultBindingTable:
//- rjf: breakpoints
{ "toggle_breakpoint" F9 0 0 0 }
//- rjf: targets
{ "add_target" T ctrl 0 0 }
//- rjf: attaching
{ "attach" F6 0 shift 0 }
+31 -49
View File
@@ -3100,6 +3100,11 @@ rd_view_ui(Rng2F32 rect)
U64 pid = eval.value.u128.u64[0];
rd_cmd(RD_CmdKind_CompleteQuery, .pid = pid);
}break;
case RD_EvalSpaceKind_MetaCmd:
{
String8 cmd_name = rd_cmd_name_from_eval(eval);
rd_cmd(RD_CmdKind_CompleteQuery, .cmd_name = cmd_name);
}break;
}
// rjf: if we do not have a specific command, then we can just
@@ -6820,9 +6825,6 @@ rd_window_frame(void)
rd_cmd_kind_info_table[RD_CmdKind_RotatePanelColumns].string,
rd_cmd_kind_info_table[RD_CmdKind_NextPanel].string,
rd_cmd_kind_info_table[RD_CmdKind_PrevPanel].string,
rd_cmd_kind_info_table[RD_CmdKind_CloseTab].string,
rd_cmd_kind_info_table[RD_CmdKind_NextTab].string,
rd_cmd_kind_info_table[RD_CmdKind_PrevTab].string,
rd_cmd_kind_info_table[RD_CmdKind_TabBarTop].string,
rd_cmd_kind_info_table[RD_CmdKind_TabBarBottom].string,
rd_cmd_kind_info_table[RD_CmdKind_ResetToDefaultPanels].string,
@@ -6839,9 +6841,6 @@ rd_window_frame(void)
'c',
'n',
'p',
't',
'b',
'v',
0,
0,
0,
@@ -6858,48 +6857,25 @@ rd_window_frame(void)
{
String8 cmds[] =
{
rd_cmd_kind_info_table[RD_CmdKind_OpenTargets].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenMachines].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenProcesses].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenThreads].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenCallStack].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenOutput].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenMemory].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenDisasm].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenWatch].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenLocals].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenRegisters].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenGlobals].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenThreadLocals].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenTypes].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenProcedures].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenBreakpoints].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenWatchPins].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenFilePathMaps].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenAutoViewRules].string,
// rd_cmd_kind_info_table[RD_CmdKind_GettingStarted].string,
rd_cmd_kind_info_table[RD_CmdKind_OpenTab].string,
rd_cmd_kind_info_table[RD_CmdKind_CloseTab].string,
rd_cmd_kind_info_table[RD_CmdKind_DuplicateTab].string,
rd_cmd_kind_info_table[RD_CmdKind_MoveTabLeft].string,
rd_cmd_kind_info_table[RD_CmdKind_MoveTabRight].string,
rd_cmd_kind_info_table[RD_CmdKind_NextTab].string,
rd_cmd_kind_info_table[RD_CmdKind_PrevTab].string,
rd_cmd_kind_info_table[RD_CmdKind_TabSettings].string,
};
U32 codepoints[] =
{
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
'o',
'c',
'd',
'l',
'r',
'n',
'p',
's',
};
Assert(ArrayCount(codepoints) == ArrayCount(cmds));
rd_cmd_list_menu_buttons(ArrayCount(cmds), cmds, codepoints);
@@ -12557,7 +12533,7 @@ rd_frame(void)
U64 fast_path_idx = (kind - RD_CmdKind_FirstTabFastPathCmd);
String8 view_name = rd_tab_fast_path_view_name_table[fast_path_idx];
String8 query_name = rd_tab_fast_path_query_name_table[fast_path_idx];
rd_cmd(RD_CmdKind_OpenTab, .string = view_name, .expr = query_name);
rd_cmd(RD_CmdKind_BuildTab, .string = view_name, .expr = query_name);
}
}break;
@@ -12589,8 +12565,9 @@ rd_frame(void)
rd_cmd(RD_CmdKind_PushQuery, .expr = expr, .do_implicit_root = 1, .do_lister = 1, .do_big_rows = 1, .view = tab->id);
}break;
//- rjf: command fast path
//- rjf: command fast paths
case RD_CmdKind_RunCommand:
case RD_CmdKind_OpenTab:
{
RD_CmdKindInfo *info = rd_cmd_kind_info_from_string(cmd->regs->cmd_name);
@@ -13609,7 +13586,7 @@ rd_frame(void)
.view = tab->id,
.prev_tab = new_prev->id);
}break;
case RD_CmdKind_OpenTab:
case RD_CmdKind_BuildTab:
{
String8 expr_file_path = rd_file_path_from_eval_string(scratch.arena, rd_regs()->expr);
RD_Cfg *panel = rd_cfg_from_id(rd_regs()->panel);
@@ -13699,6 +13676,11 @@ rd_frame(void)
RD_Cfg *panel = rd_cfg_from_id(rd_regs()->panel);
rd_cfg_child_from_string_or_alloc(panel, str8_lit("tabs_on_bottom"));
}break;
case RD_CmdKind_TabSettings:
{
String8 expr = push_str8f(scratch.arena, "query:$%I64x", rd_regs()->view);
rd_cmd(RD_CmdKind_PushQuery, .expr = expr, .do_implicit_root = 1, .do_big_rows = 1, .do_lister = 1);
}break;
//- rjf: files
case RD_CmdKind_Open:
@@ -13708,7 +13690,7 @@ rd_frame(void)
if(props.created != 0)
{
rd_cmd(RD_CmdKind_RecordFileInProject);
rd_cmd(RD_CmdKind_OpenTab, .string = str8_lit("pending"), .expr = rd_eval_string_from_file_path(scratch.arena, path));
rd_cmd(RD_CmdKind_BuildTab, .string = str8_lit("pending"), .expr = rd_eval_string_from_file_path(scratch.arena, path));
}
else
{