Compare commits

..

No commits in common. "faecc9015971cdbfc7ec1827d1baa68a6afcd961" and "89ca00ddefe45a4196667cd5be3393a7b5d96c30" have entirely different histories.

2 changed files with 38 additions and 16 deletions

View file

@ -21,7 +21,7 @@ inline_diagnostics_alignment: Alignment = .right,
animation_min_lag: usize = 0, //milliseconds
animation_max_lag: usize = 50, //milliseconds
hover_time_ms: usize = 500, //milliseconds
input_idle_time_ms: usize = 100, //milliseconds
input_idle_time_ms: usize = 150, //milliseconds
idle_actions: []const IdleAction = &default_actions,
idle_commands: ?[]const []const u8 = null, // a list of simple commands
enable_format_on_save: bool = false,
@ -77,7 +77,7 @@ dropdown_keybinds: DropdownKeybindMode = .standard,
include_files: []const u8 = "",
const default_actions = [_]IdleAction{.highlight_references};
const default_actions = [_]IdleAction{};
pub const IdleAction = enum {
hover,
highlight_references,

View file

@ -952,20 +952,48 @@ const cmds = struct {
pub fn close_split(self: *Self, _: Ctx) Result {
if (self.views.widgets.items.len == 1 and self.views.widgets.items[0].widget.dynamic_cast(home) != null)
return command.executeName("quit", .{});
self.remove_view(self.active_view);
try self.remove_active_view();
if (self.closing_project) return;
const buffers = try self.buffer_manager.list_unordered(self.allocator);
defer self.allocator.free(buffers);
for (buffers) |buffer| if (buffer.get_last_view()) |view|
if (view >= self.views.widgets.items.len)
buffer.set_last_view(null);
_ = try self.widgets_widget.msg(.{"splits_updated"});
}
pub const close_split_meta: Meta = .{ .description = "Close split view" };
pub fn close_view(self: *Self, ctx: Ctx) Result {
var view: usize = undefined;
if (!try ctx.args.match(.{tp.extract(&view)})) return error.InvalidCloseViewArgument;
self.remove_view(view);
if (view >= self.views.widgets.items.len) return;
self.remove_view(view) catch return;
const buffers = self.buffer_manager.list_unordered(self.allocator) catch @panic("OOM close_view");
defer self.allocator.free(buffers);
for (buffers) |buffer| if (buffer.get_last_view()) |buffer_view|
if (buffer_view >= view)
buffer.set_last_view(buffer_view - 1);
_ = self.widgets_widget.msg(.{"splits_updated"}) catch {};
}
pub const close_view_meta: Meta = .{ .arguments = &.{.integer} };
pub fn close_splits(self: *Self, _: Ctx) Result {
while (self.views.widgets.items.len > 1)
self.remove_view(1);
try self.remove_view(1);
if (self.closing_project) return;
const buffers = try self.buffer_manager.list_unordered(self.allocator);
defer self.allocator.free(buffers);
for (buffers) |buffer| buffer.set_last_view(0);
_ = try self.widgets_widget.msg(.{"splits_updated"});
}
pub const close_splits_meta: Meta = .{ .description = "Close all split views" };
@ -1745,24 +1773,18 @@ pub fn focus_view(self: *Self, n: usize) !void {
if (self.views.get_at(self.active_view)) |view| view.focus();
}
fn remove_view(self: *Self, view: usize) void {
fn remove_view(self: *Self, view: usize) !void {
if (self.views.widgets.items.len == 1) return; // can't delete last view
if (view >= self.views.widgets.items.len) return;
defer {
_ = self.widgets_widget.msg(.{"splits_updated"}) catch {};
tui.resize();
}
self.views.delete(view);
if (self.active_view >= self.views.widgets.items.len)
self.active_view = self.views.widgets.items.len - 1;
if (self.views.get_at(self.active_view)) |active_view| active_view.focus();
tui.resize();
}
if (self.closing_project) return;
const buffers = self.buffer_manager.list_unordered(self.allocator) catch @panic("OOM remove_view");
defer self.allocator.free(buffers);
for (buffers) |buffer| if (buffer.get_last_view()) |buffer_view|
if (buffer_view >= view)
buffer.set_last_view(buffer_view - 1);
fn remove_active_view(self: *Self) !void {
return self.remove_view(self.active_view);
}
fn replace_active_view(self: *Self, widget: Widget) !void {