feat(buffers): save/restore full editor state on buffer switch

This commit is contained in:
CJ van den Berg 2025-01-29 22:10:54 +01:00
parent b45b5910ee
commit e6e0301a78
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
3 changed files with 51 additions and 17 deletions

View file

@ -65,6 +65,7 @@ pub fn delete_buffer(self: *Self, file_path: []const u8) bool {
pub fn retire(_: *Self, buffer: *Buffer, meta: ?[]const u8) void {
if (meta) |buf| buffer.set_meta(buf) catch {};
tp.trace(tp.channel.debug, .{ "buffer", "retire", buffer.file_path, "hidden", buffer.hidden, "ephemeral", buffer.ephemeral });
if (meta) |buf| tp.trace(tp.channel.debug, tp.message{ .buf = buf });
}
pub fn close_buffer(self: *Self, buffer: *Buffer) void {

View file

@ -1,3 +1,5 @@
const cbor = @import("cbor");
const Buffer = @import("Buffer.zig");
const Cursor = @import("Cursor.zig");
@ -44,13 +46,19 @@ pub fn normalize(self: *Self) void {
}
pub fn write(self: *const Self, writer: Buffer.MetaWriter) !void {
try cbor.writeArrayHeader(writer, 2);
try self.begin.write(writer);
try self.end.write(writer);
}
pub fn extract(self: *Self, iter: *[]const u8) !bool {
if (!try self.begin.extract(iter)) return false;
return self.end.extract(iter);
var iter2 = iter.*;
const len = cbor.decodeArrayHeader(&iter2) catch return false;
if (len != 2) return false;
if (!try self.begin.extract(&iter2)) return false;
if (!try self.end.extract(&iter2)) return false;
iter.* = iter2;
return true;
}
pub fn nudge_insert(self: *Self, nudge: Self) void {