From ab220b89afcfda848cf84c18cc135a2e5c392b79 Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Tue, 29 Sep 2026 12:14:13 -0300 Subject: Recent goes on across a Restore, and is kept after it A Restore makes a new session, which never loaded the kept list, and saveRecent gives up until it has: Recent was empty after a Restore and nothing opened afterwards was kept. The new session now takes the old one's list (a boot from a dump reads the kept file). Co-Authored-By: Claude Opus 5.5 --- src/recent.zig | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/recent.zig') diff --git a/src/recent.zig b/src/recent.zig index 91c0afeb..112cb59f 100644 --- a/src/recent.zig +++ b/src/recent.zig @@ -83,6 +83,23 @@ pub const List = struct { l.dirty = true; } + /// A copy, for the session a Restore makes: its files closed until it + /// opens them again. Out of memory, what was copied so far. + pub fn clone(l: *const List, gpa: std.mem.Allocator) List { + var copy: List = .{ .dirty = true }; + for (l.entries.items) |e| { + const path = gpa.dupe(u8, e.path) catch break; + var kept = e; + kept.path = path; + kept.open = false; + copy.entries.append(gpa, kept) catch { + gpa.free(path); + break; + }; + } + return copy; + } + pub fn get(l: *const List, path: []const u8) ?Entry { return l.entries.items[l.find(path) orelse return null]; } -- cgit v1.3