refactor: create a split when moving a tab past the last right split

This commit is contained in:
CJ van den Berg 2026-01-20 21:12:47 +01:00
parent 7e8f06396e
commit 4f68898f96
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
2 changed files with 17 additions and 2 deletions

View file

@ -1833,7 +1833,7 @@ fn create_home(self: *Self) !void {
tui.resize();
}
fn create_home_split(self: *Self) !void {
pub fn create_home_split(self: *Self) !void {
tui.reset_drag_context();
try self.add_and_activate_view(try home.create(self.allocator, Widget.to(self)));
_ = try self.widgets_widget.msg(.{"splits_updated"});

View file

@ -462,7 +462,7 @@ pub const TabBar = struct {
fn move_tab_next(self: *Self) void {
tp.trace(tp.channel.debug, .{"move_tab_next"});
const this_idx = self.find_buffer_tab(self.active_focused_buffer_ref orelse return) orelse return;
const other_buffer_ref = self.find_next_tab_buffer() orelse return;
const other_buffer_ref = self.find_next_tab_buffer() orelse return self.move_tab_to_new_split(this_idx);
const other_idx = self.find_buffer_tab(other_buffer_ref) orelse return;
self.move_tab_to(other_idx, this_idx);
}
@ -537,6 +537,21 @@ pub const TabBar = struct {
navigate_to_buffer(src_tab.buffer_ref);
}
fn move_tab_to_new_split(self: *Self, src_idx: usize) void {
const mv = tui.mainview() orelse return;
const src_tab = &self.tabs[src_idx];
var tabs_in_view: usize = 0;
for (self.tabs) |*tab| if (tab.view) |view| {
if (view == src_tab.view)
tabs_in_view += 1;
};
if (tabs_in_view > 1) {
const view = mv.get_view_count();
mv.create_home_split() catch return;
self.move_tab_to_view(view, src_idx);
}
}
fn place_next_tab(self: *Self, position: enum { before, after }, buffer_ref: usize) void {
tp.trace(tp.channel.debug, .{ "place_next_tab", position, buffer_ref });
const tab_idx = for (self.tabs, 0..) |*tab, idx| if (tab.buffer_ref == buffer_ref) break idx else continue else {