optionally show help menu for input actions

main
Patrick Cleaveliln 2025-07-23 00:09:10 +00:00
parent 2a4e85c868
commit 91a44aa884
4 changed files with 16 additions and 10 deletions

View File

@ -208,13 +208,14 @@ EditorAction :: proc(state: ^State, user_data: rawptr);
InputActions :: struct {
key_actions: map[Key]Action,
ctrl_key_actions: map[Key]Action,
show_help: bool,
}
Action :: struct {
action: InputGroup,
description: string,
}
new_input_map :: proc(allocator := context.allocator) -> InputMap {
new_input_map :: proc(show_help: bool = false, allocator := context.allocator) -> InputMap {
context.allocator = allocator
input_map := InputMap {
@ -228,15 +229,19 @@ new_input_map :: proc(allocator := context.allocator) -> InputMap {
}
}
normal_actions := &input_map.mode[.Normal]
normal_actions.show_help = show_help
return input_map;
}
new_input_actions :: proc(allocator := context.allocator) -> InputActions {
new_input_actions :: proc(show_help: bool = false, allocator := context.allocator) -> InputActions {
context.allocator = allocator
input_actions := InputActions {
key_actions = make(map[Key]Action),
ctrl_key_actions = make(map[Key]Action),
show_help = show_help,
}
return input_actions;

View File

@ -100,8 +100,7 @@ draw :: proc(state: ^State) {
ui.compute_layout(new_ui)
ui.draw(new_ui, state)
// TODO: figure out when to not show the input help menu
if false && state.mode != .Insert { // && state.current_input_map != &state.input_map.mode[state.mode] {
if state.mode != .Insert && state.current_input_map.show_help {
longest_description := 0;
for key, action in state.current_input_map.key_actions {
if len(action.description) > longest_description {

View File

@ -46,13 +46,14 @@ make_file_buffer_panel :: proc(file_path: string, line: int = 0, col: int = 0) -
panel_state.buffer = buffer
}
leader_actions := core.new_input_actions()
leader_actions := core.new_input_actions(show_help = true)
register_default_leader_actions(&leader_actions);
file_buffer_leader_actions(&leader_actions);
core.register_key_action(&panel.input_map.mode[.Normal], .SPACE, leader_actions, "leader commands");
core.register_ctrl_key_action(&panel.input_map.mode[.Normal], .W, core.new_input_actions(), "Panel Navigation")
register_default_panel_actions(&(&panel.input_map.mode[.Normal].ctrl_key_actions[.W]).action.(core.InputActions))
panel_actions := core.new_input_actions(show_help = true)
register_default_panel_actions(&panel_actions)
core.register_ctrl_key_action(&panel.input_map.mode[.Normal], .W, panel_actions, "Panel Navigation")
file_buffer_input_actions(&panel.input_map.mode[.Normal]);
file_buffer_visual_actions(&panel.input_map.mode[.Visual]);

View File

@ -66,12 +66,13 @@ make_grep_panel :: proc() -> core.Panel {
}
mem.arena_init(&panel_state.query_arena, arena_bytes)
panel.input_map = core.new_input_map()
panel.input_map = core.new_input_map(show_help = true)
panel_state.glyphs = core.make_glyph_buffer(256,256)
panel_state.buffer = core.new_virtual_file_buffer()
core.register_ctrl_key_action(&panel.input_map.mode[.Normal], .W, core.new_input_actions(), "Panel Navigation")
register_default_panel_actions(&(&panel.input_map.mode[.Normal].ctrl_key_actions[.W]).action.(core.InputActions))
panel_actions := core.new_input_actions(show_help = true)
register_default_panel_actions(&panel_actions)
core.register_ctrl_key_action(&panel.input_map.mode[.Normal], .W, panel_actions, "Panel Navigation")
core.register_key_action(&panel.input_map.mode[.Normal], .ENTER, proc(state: ^core.State, user_data: rawptr) {
this_panel := transmute(^core.Panel)user_data