command palette tweaks

This commit is contained in:
jacob 2025-11-08 20:44:25 -06:00
parent cf0e5f25c2
commit 202dc4bc1c

View File

@ -105,7 +105,7 @@ JobDef(PP_SimWorker, sig, job_id)
/* TODO: Remove this */ /* TODO: Remove this */
#define PP_HOTKEY(...) { __VA_ARGS__ } #define PP_HOTKEY(_button, ...) { .button = _button, __VA_ARGS__ }
Struct(PP_Hotkey) Struct(PP_Hotkey)
{ {
@ -119,7 +119,7 @@ Struct(PP_Shortcut)
{ {
PP_Shortcut *next_in_bin; PP_Shortcut *next_in_bin;
PP_Shortcut *prev_in_bin; PP_Shortcut *prev_in_bin;
u64 hash; u64 hotkey_hash;
PP_Hotkey hotkey; PP_Hotkey hotkey;
String cmd_name; String cmd_name;
}; };
@ -140,8 +140,8 @@ Struct(PP_VisCmdDesc)
{ {
String name; String name;
String display_name; String display_name;
PP_Hotkey default_hotkey;
PP_VisCmdDescFlag flags; PP_VisCmdDescFlag flags;
PP_Hotkey default_hotkeys[8];
}; };
Struct(PP_VisCmd) Struct(PP_VisCmd)
@ -155,14 +155,15 @@ Struct(PP_VisCmdNode)
PP_VisCmd cmd; PP_VisCmd cmd;
}; };
#define PP_VisCmdsTableXMacro(X) \ #define PP_VisCmdsTableXMacro(X) \
X(none, None, PP_HOTKEY(0), PP_VisCmdDescFlag_HideFromPalette) \ X(nop, NOP, PP_VisCmdDescFlag_HideFromPalette, PP_HOTKEY(0), ) \
X(toggle_command_palette, Toggle Command Palette, PP_HOTKEY( .ctrl = 1, .shift = 1, .button = Button_P ), PP_VisCmdDescFlag_HideFromPalette) \ X(exit_program, Exit Program, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_Esc ) ) \
X(toggle_ui_debug, Toggle UI Debug, PP_HOTKEY( .button = Button_F5 ), PP_VisCmdDescFlag_None) \ X(toggle_command_palette, Toggle Command Palette, PP_VisCmdDescFlag_HideFromPalette, PP_HOTKEY( Button_P, .ctrl = 1, .shift = 1 ), ) \
X(toggle_console, Toggle Developer Console, PP_HOTKEY( .button = Button_GraveAccent ), PP_VisCmdDescFlag_None) \ X(toggle_ui_debug, Toggle UI Debug, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_F5 ), ) \
X(toggle_fullscreen, Toggle Fullscreen Mode, PP_HOTKEY( .alt = 1, .button = Button_Enter ), PP_VisCmdDescFlag_None) \ X(toggle_console, Toggle Developer Console, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_GraveAccent ), ) \
X(toggle_window_topmost, Toggle Window Topmost, PP_HOTKEY( .button = Button_F4 ), PP_VisCmdDescFlag_None) \ X(toggle_fullscreen, Toggle Fullscreen Mode, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_Enter, .alt = 1 ), PP_HOTKEY( Button_F11 ) ) \
X(spawn, Spawn, PP_HOTKEY( .button = Button_S, .ctrl = 1 ), PP_VisCmdDescFlag_None) \ X(toggle_window_topmost, Toggle Window Topmost, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_F4 ), ) \
X(spawn, Spawn, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_S, .ctrl = 1 ), ) \
/* -------------------------------------------------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------------------------------------------------- */
Enum(PP_VisCmdKind) Enum(PP_VisCmdKind)
@ -175,7 +176,7 @@ Enum(PP_VisCmdKind)
}; };
Readonly PP_VisCmdDesc PP_vis_cmd_descs[PP_VisCmdKind_Count] = { Readonly PP_VisCmdDesc PP_vis_cmd_descs[PP_VisCmdKind_Count] = {
#define X(_name, _display_name, _default_hotkey, _flags) { .name = CompLit(#_name), .display_name = CompLit(#_display_name), .default_hotkey = _default_hotkey, .flags = _flags }, #define X(_name, _display_name, _flags, ...) { .name = CompLit(#_name), .display_name = CompLit(#_display_name), .flags = _flags, .default_hotkeys = { __VA_ARGS__ } },
PP_VisCmdsTableXMacro(X) PP_VisCmdsTableXMacro(X)
#undef X #undef X
}; };
@ -221,18 +222,26 @@ JobDef(PP_VisWorker, sig, job_id)
u64 shortcut_bins_count = 1024; u64 shortcut_bins_count = 1024;
PP_ShortcutBin *shortcut_bins = PushStructs(perm, PP_ShortcutBin, shortcut_bins_count); PP_ShortcutBin *shortcut_bins = PushStructs(perm, PP_ShortcutBin, shortcut_bins_count);
{ {
for (u64 i = 1; i < countof(PP_vis_cmd_descs); ++i) for (u64 desc_idx = 1; desc_idx < countof(PP_vis_cmd_descs); ++desc_idx)
{ {
PP_VisCmdDesc desc = PP_vis_cmd_descs[i]; PP_VisCmdDesc desc = PP_vis_cmd_descs[desc_idx];
PP_Hotkey hotkey = desc.default_hotkey; for (u64 hotkey_idx = 0; hotkey_idx < countof(desc.default_hotkeys); ++hotkey_idx)
u64 hash = HashFnv64(Fnv64Basis, StringFromStruct(&hotkey));
{ {
PP_ShortcutBin *bin = &shortcut_bins[hash % shortcut_bins_count]; PP_Hotkey hotkey = desc.default_hotkeys[hotkey_idx];
PP_Shortcut *shortcut = PushStruct(perm, PP_Shortcut); if (hotkey.button == Button_None)
shortcut->hash = hash; {
shortcut->hotkey = hotkey; break;
shortcut->cmd_name = desc.name; }
DllPushBackNP(bin->first, bin->last, shortcut, next_in_bin, prev_in_bin); else
{
u64 hotkey_hash = HashFnv64(Fnv64Basis, StringFromStruct(&hotkey));
PP_ShortcutBin *bin = &shortcut_bins[hotkey_hash % shortcut_bins_count];
PP_Shortcut *shortcut = PushStruct(perm, PP_Shortcut);
shortcut->hotkey_hash = hotkey_hash;
shortcut->hotkey = hotkey;
shortcut->cmd_name = desc.name;
DllPushBackNP(bin->first, bin->last, shortcut, next_in_bin, prev_in_bin);
}
} }
} }
// #define X(name, display, hotkey) \ // #define X(name, display, hotkey) \
@ -322,7 +331,7 @@ JobDef(PP_VisWorker, sig, job_id)
PP_Shortcut *shortcut = bin->first; PP_Shortcut *shortcut = bin->first;
for (; shortcut; shortcut = shortcut->next_in_bin) for (; shortcut; shortcut = shortcut->next_in_bin)
{ {
if (shortcut->hash == hotkey_hash) if (shortcut->hotkey_hash == hotkey_hash && MatchStruct(&shortcut->hotkey, &hotkey))
{ {
break; break;
} }
@ -379,8 +388,8 @@ JobDef(PP_VisWorker, sig, job_id)
for (PP_VisCmdNode *cmd_node = first_cmd_node; cmd_node; cmd_node = cmd_node->next) for (PP_VisCmdNode *cmd_node = first_cmd_node; cmd_node; cmd_node = cmd_node->next)
{ {
String cmd_name = cmd_node->cmd.name; String cmd_name = cmd_node->cmd.name;
PP_VisCmdKind kind = PP_VisCmdKind_none; PP_VisCmdKind kind = PP_VisCmdKind_nop;
for (PP_VisCmdKind tmp_kind = PP_VisCmdKind_none; tmp_kind < PP_VisCmdKind_Count; ++tmp_kind) for (PP_VisCmdKind tmp_kind = PP_VisCmdKind_nop; tmp_kind < PP_VisCmdKind_Count; ++tmp_kind)
{ {
PP_VisCmdDesc desc = PP_vis_cmd_descs[tmp_kind]; PP_VisCmdDesc desc = PP_vis_cmd_descs[tmp_kind];
if (MatchString(desc.name, cmd_name)) if (MatchString(desc.name, cmd_name))
@ -392,6 +401,11 @@ JobDef(PP_VisWorker, sig, job_id)
switch (kind) switch (kind)
{ {
case PP_VisCmdKind_exit_program:
{
SignalExit(0);
} break;
case PP_VisCmdKind_toggle_command_palette: case PP_VisCmdKind_toggle_command_palette:
{ {
persist.show_command_palette = !persist.show_command_palette; persist.show_command_palette = !persist.show_command_palette;