feat: add up/down/enter keybindings to find_in_files mode to browse and select matches

This commit is contained in:
CJ van den Berg 2024-08-12 23:23:17 +02:00
parent 49b701c9af
commit 953fc8535c
2 changed files with 21 additions and 5 deletions

View file

@ -250,7 +250,7 @@ fn handle_menu_action(menu: **Menu.State(*Self), button: *Button.State(*Menu.Sta
} }) catch |e| self.logger.err("navigate", e); } }) catch |e| self.logger.err("navigate", e);
} }
fn move_next(self: *Self, dir: enum { up, down }) void { fn select_next(self: *Self, dir: enum { up, down }) void {
self.selected = if (self.menu.selected) |sel_| sel_ + self.view_pos else self.selected; self.selected = if (self.menu.selected) |sel_| sel_ + self.view_pos else self.selected;
const sel = switch (dir) { const sel = switch (dir) {
.up => if (self.selected) |sel_| if (sel_ > 0) sel_ - 1 else self.entries.items.len - 1 else self.entries.items.len - 1, .up => if (self.selected) |sel_| if (sel_ > 0) sel_ - 1 else self.entries.items.len - 1 else self.entries.items.len - 1,
@ -261,7 +261,6 @@ fn move_next(self: *Self, dir: enum { up, down }) void {
if (sel > self.view_pos + self.view_rows - 1) self.view_pos = sel - @min(sel, self.view_rows - 1); if (sel > self.view_pos + self.view_rows - 1) self.view_pos = sel - @min(sel, self.view_rows - 1);
self.update_selected(); self.update_selected();
self.update_scrollbar(); self.update_scrollbar();
self.menu.activate_selected();
} }
const cmds = struct { const cmds = struct {
@ -270,10 +269,25 @@ const cmds = struct {
const Result = command.Result; const Result = command.Result;
pub fn goto_prev_file(self: *Self, _: Ctx) Result { pub fn goto_prev_file(self: *Self, _: Ctx) Result {
self.move_next(.up); self.select_next(.up);
self.menu.activate_selected();
} }
pub fn goto_next_file(self: *Self, _: Ctx) Result { pub fn goto_next_file(self: *Self, _: Ctx) Result {
self.move_next(.down); self.select_next(.down);
self.menu.activate_selected();
}
pub fn select_prev_file(self: *Self, _: Ctx) Result {
self.select_next(.up);
}
pub fn select_next_file(self: *Self, _: Ctx) Result {
self.select_next(.down);
}
pub fn goto_selected_file(self: *Self, _: Ctx) Result {
if (self.menu.selected == null) return tp.exit_error(error.NoSelectedFile, @errorReturnTrace());
self.menu.activate_selected();
} }
}; };

View file

@ -124,12 +124,14 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) !void {
else {}, else {},
}, },
0 => switch (keypress) { 0 => switch (keypress) {
key.UP => self.cmd("select_prev_file", .{}),
key.DOWN => self.cmd("select_next_file", .{}),
key.F03 => self.cmd("goto_next_match", .{}), key.F03 => self.cmd("goto_next_match", .{}),
key.F15 => self.cmd("goto_prev_match", .{}), key.F15 => self.cmd("goto_prev_match", .{}),
key.F09 => self.cmd("theme_prev", .{}), key.F09 => self.cmd("theme_prev", .{}),
key.F10 => self.cmd("theme_next", .{}), key.F10 => self.cmd("theme_next", .{}),
key.ESC => self.cancel(), key.ESC => self.cancel(),
key.ENTER => self.cmd("exit_mini_mode", .{}), key.ENTER => self.cmd("goto_selected_file", .{}) catch self.cmd("exit_mini_mode", .{}),
key.BACKSPACE => if (self.input.len > 0) { key.BACKSPACE => if (self.input.len > 0) {
self.input = self.input[0 .. self.input.len - 1]; self.input = self.input[0 .. self.input.len - 1];
}, },