From 34bbfd49ad601acb0f1527f1a9b10c0cc9c8a2b7 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Thu, 13 Jun 2024 20:21:09 +0200 Subject: [PATCH] fix(editor): store current cursor position correctly on initial undo --- src/tui/editor.zig | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/tui/editor.zig b/src/tui/editor.zig index 7330a9f..3ce344d 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -482,6 +482,14 @@ pub const Editor = struct { return meta.toOwnedSlice(); } + fn store_current_undo_meta(self: *Self, a: Allocator) ![]u8 { + var meta = std.ArrayList(u8).init(a); + const writer = meta.writer(); + for (self.cursels.items) |*cursel_| if (cursel_.*) |*cursel| + try cursel.write(writer); + return meta.toOwnedSlice(); + } + fn update_buf(self: *Self, root: Buffer.Root) !void { const b = if (self.buffer) |p| p else return error.Stop; var sfa = std.heap.stackFallback(512, self.a); @@ -510,7 +518,7 @@ pub const Editor = struct { self.cancel_all_matches(); var sfa = std.heap.stackFallback(512, self.a); const a = sfa.get(); - const redo_meta = try self.store_undo_meta(a); + const redo_meta = try self.store_current_undo_meta(a); defer a.free(redo_meta); const meta = b_mut.undo(redo_meta) catch |e| switch (e) { error.Stop => {