diff --git a/src/keybind/builtin/flow.json b/src/keybind/builtin/flow.json index 6d9380d..b710228 100644 --- a/src/keybind/builtin/flow.json +++ b/src/keybind/builtin/flow.json @@ -419,6 +419,7 @@ ["kp_home", "palette_menu_top"], ["kp_end", "palette_menu_bottom"], ["enter", "palette_menu_activate"], + ["shift+enter", "palette_menu_activate_alternate"], ["tab", "palette_menu_activate"], ["delete", "palette_menu_delete_item"], ["backspace", "overlay_delete_backwards"] diff --git a/src/tui/mainview.zig b/src/tui/mainview.zig index bd32555..9ceee95 100644 --- a/src/tui/mainview.zig +++ b/src/tui/mainview.zig @@ -344,6 +344,12 @@ const cmds = struct { } 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 { tui.reset_drag_context(); const frame = tracy.initZone(@src(), .{ .name = "navigate" }); diff --git a/src/tui/mode/overlay/open_recent.zig b/src/tui/mode/overlay/open_recent.zig index ba0066e..9ba2e12 100644 --- a/src/tui/mode/overlay/open_recent.zig +++ b/src/tui/mode/overlay/open_recent.zig @@ -37,6 +37,7 @@ need_select_first: bool = true, longest: usize, commands: Commands = undefined, buffer_manager: ?*BufferManager, +split: enum { none, vertical } = .none, const inputbox_label = "Search files by name"; 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; 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", "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( @@ -326,6 +331,12 @@ const cmds = struct { } 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 { if (self.menu.selected orelse 0 > 0) self.menu.activate_selected(); }