feat: split and navigate on shift+enter in find_file

This commit is contained in:
CJ van den Berg 2025-11-06 19:17:03 +01:00
parent 5aa385679e
commit e5d78c95a5
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
3 changed files with 19 additions and 1 deletions

View file

@ -419,6 +419,7 @@
["kp_home", "palette_menu_top"], ["kp_home", "palette_menu_top"],
["kp_end", "palette_menu_bottom"], ["kp_end", "palette_menu_bottom"],
["enter", "palette_menu_activate"], ["enter", "palette_menu_activate"],
["shift+enter", "palette_menu_activate_alternate"],
["tab", "palette_menu_activate"], ["tab", "palette_menu_activate"],
["delete", "palette_menu_delete_item"], ["delete", "palette_menu_delete_item"],
["backspace", "overlay_delete_backwards"] ["backspace", "overlay_delete_backwards"]

View file

@ -344,6 +344,12 @@ const cmds = struct {
} }
pub const change_project_meta: Meta = .{ .arguments = &.{.string} }; pub const change_project_meta: Meta = .{ .arguments = &.{.string} };
pub fn navigate_split_vertical(self: *Self, ctx: Ctx) Result {
try command.executeName("add_split", .{});
try navigate(self, ctx);
}
pub const navigate_split_vertical_meta: Meta = .{ .arguments = &.{.object} };
pub fn navigate(self: *Self, ctx: Ctx) Result { pub fn navigate(self: *Self, ctx: Ctx) Result {
tui.reset_drag_context(); tui.reset_drag_context();
const frame = tracy.initZone(@src(), .{ .name = "navigate" }); const frame = tracy.initZone(@src(), .{ .name = "navigate" });

View file

@ -37,6 +37,7 @@ need_select_first: bool = true,
longest: usize, longest: usize,
commands: Commands = undefined, commands: Commands = undefined,
buffer_manager: ?*BufferManager, buffer_manager: ?*BufferManager,
split: enum { none, vertical } = .none,
const inputbox_label = "Search files by name"; const inputbox_label = "Search files by name";
const MenuType = Menu.Options(*Self).MenuType; const MenuType = Menu.Options(*Self).MenuType;
@ -130,7 +131,11 @@ fn menu_action_open_file(menu: **MenuType, button: *ButtonType, _: Widget.Pos) v
var iter = button.opts.label; var iter = button.opts.label;
if (!(cbor.matchString(&iter, &file_path) catch false)) return; if (!(cbor.matchString(&iter, &file_path) catch false)) return;
tp.self_pid().send(.{ "cmd", "exit_overlay_mode" }) catch |e| menu.*.opts.ctx.logger.err("navigate", e); tp.self_pid().send(.{ "cmd", "exit_overlay_mode" }) catch |e| menu.*.opts.ctx.logger.err("navigate", e);
tp.self_pid().send(.{ "cmd", "navigate", .{ .file = file_path } }) catch |e| menu.*.opts.ctx.logger.err("navigate", e); const cmd_ = switch (menu.*.opts.ctx.split) {
.none => "navigate",
.vertical => "navigate_split_vertical",
};
tp.self_pid().send(.{ "cmd", cmd_, .{ .file = file_path } }) catch |e| menu.*.opts.ctx.logger.err("navigate", e);
} }
fn add_item( fn add_item(
@ -326,6 +331,12 @@ const cmds = struct {
} }
pub const palette_menu_activate_meta: Meta = .{}; pub const palette_menu_activate_meta: Meta = .{};
pub fn palette_menu_activate_alternate(self: *Self, _: Ctx) Result {
self.split = .vertical;
self.menu.activate_selected();
}
pub const palette_menu_activate_alternate_meta: Meta = .{};
pub fn palette_menu_activate_quick(self: *Self, _: Ctx) Result { pub fn palette_menu_activate_quick(self: *Self, _: Ctx) Result {
if (self.menu.selected orelse 0 > 0) self.menu.activate_selected(); if (self.menu.selected orelse 0 > 0) self.menu.activate_selected();
} }