diff --git a/src/tui/filelist_view.zig b/src/tui/filelist_view.zig index 8a1a71c..21dc319 100644 --- a/src/tui/filelist_view.zig +++ b/src/tui/filelist_view.zig @@ -250,7 +250,7 @@ fn handle_menu_action(menu: **Menu.State(*Self), button: *Button.State(*Menu.Sta } }) 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; 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, @@ -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); self.update_selected(); self.update_scrollbar(); - self.menu.activate_selected(); } const cmds = struct { @@ -270,10 +269,25 @@ const cmds = struct { const Result = command.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 { - 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(); } }; diff --git a/src/tui/mode/mini/find_in_files.zig b/src/tui/mode/mini/find_in_files.zig index 51cb9c7..221f380 100644 --- a/src/tui/mode/mini/find_in_files.zig +++ b/src/tui/mode/mini/find_in_files.zig @@ -124,12 +124,14 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) !void { else {}, }, 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.F15 => self.cmd("goto_prev_match", .{}), key.F09 => self.cmd("theme_prev", .{}), key.F10 => self.cmd("theme_next", .{}), 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) { self.input = self.input[0 .. self.input.len - 1]; },