refactor: split out focus_view function

This commit is contained in:
CJ van den Berg 2025-12-03 22:29:06 +01:00
parent 023b87184a
commit 82e2d2f4ec
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -874,14 +874,7 @@ const cmds = struct {
pub fn focus_split(self: *Self, ctx: Ctx) Result { pub fn focus_split(self: *Self, ctx: Ctx) Result {
var n: usize = undefined; var n: usize = undefined;
if (!try ctx.args.match(.{tp.extract(&n)})) return error.InvalidFocusSplitArgument; if (!try ctx.args.match(.{tp.extract(&n)})) return error.InvalidFocusSplitArgument;
try self.focus_view(n);
if (n > self.views.widgets.items.len) return;
if (n == self.views.widgets.items.len)
return self.create_home_split();
if (self.views.get_at(self.active_view)) |view| view.unfocus();
self.active_view = n;
if (self.views.get_at(self.active_view)) |view| view.focus();
} }
pub const focus_split_meta: Meta = .{ .description = "Focus split view", .arguments = &.{.integer} }; pub const focus_split_meta: Meta = .{ .description = "Focus split view", .arguments = &.{.integer} };
@ -1574,6 +1567,17 @@ pub fn focus_view_by_widget(self: *Self, w: *Widget) tui.FocusAction {
return .changed; return .changed;
} }
pub fn focus_view(self: *Self, n: usize) !void {
if (n == self.active_view) return;
if (n > self.views.widgets.items.len) return;
if (n == self.views.widgets.items.len)
return self.create_home_split();
if (self.views.get_at(self.active_view)) |view| view.unfocus();
self.active_view = n;
if (self.views.get_at(self.active_view)) |view| view.focus();
}
fn remove_active_view(self: *Self) !void { fn remove_active_view(self: *Self) !void {
if (self.views.widgets.items.len == 1) return; // can't delete last view if (self.views.widgets.items.len == 1) return; // can't delete last view
self.active_editor = null; self.active_editor = null;