summaryrefslogtreecommitdiff
path: root/src/fs.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-29 22:27:38 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:17 -0300
commitd4960472375ea68f709c56a677d8a37571419ff7 (patch)
tree8b5b2dde93eded887c7b1a17164137c3c09a4bb7 /src/fs.zig
parentdfa5bd4d413504a6afff414962c4de70ab093af0 (diff)
downloadpardes-d4960472375ea68f709c56a677d8a37571419ff7.tar.gz
pardes-d4960472375ea68f709c56a677d8a37571419ff7.zip
Config opens the startup file, DumpConfig the settings report, and the workspace tag reads Dump Themes Config Debug Exit
Config (SPC f c) opens init, found as the settings report finds it (opts.startup_config_path: $XDG_CONFIG_HOME/pardes/init or ~/.config/pardes/init, and the macOS and Windows paths config.md gives). A pane that already holds it is gone to instead; a file on disk is looked at; with none, an empty pane is named for it, and Save makes its directory and any above it first (File.make_dirs, fs.makeDirs) before writing. Without a configuration directory it says so and opens nothing. The report Config used to open, the startup path and every live setting, is DumpConfig, in a +DumpConfig pane. No alias keeps the old meaning. The workspace tag's default words put Themes where NextColor was, NextColor staying a builtin, and Config beside it. A tag the user edited is kept as it was: a dump stores only an edited one (topbar_custom), and a restore puts back only that. theme.snap types NextColor onto the workspace tag to click it, and tagnav's walk back to Dump takes five long-word steps. The rest of the re-recorded goldens differ in the workspace words and their widths only. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/fs.zig')
-rw-r--r--src/fs.zig19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/fs.zig b/src/fs.zig
index fc3eb98f..1d0bbc22 100644
--- a/src/fs.zig
+++ b/src/fs.zig
@@ -637,6 +637,25 @@ test "a path with a part over 255 bytes is NameTooLong, never a panic" {
try std.testing.expectError(error.NameTooLong, statPath(std.testing.io, long, .{}));
}
+/// Make `dir` and each directory above it that is missing, as `mkdir -p`
+/// does: one already there is no failure. A failure shows at the open
+/// that follows.
+pub fn makeDirs(dir: []const u8) void {
+ if (comptime !platform_has_fs) return;
+ var z: [4096:0]u8 = undefined;
+ if (dir.len == 0 or dir.len >= z.len) return;
+ @memcpy(z[0..dir.len], dir);
+ z[dir.len] = 0;
+ pardes.turn.yield();
+ defer pardes.turn.back();
+ for (z[1..dir.len], 1..) |c, i| if (c == '/') {
+ z[i] = 0;
+ _ = libc.mkdir(z[0..i :0], 0o755);
+ z[i] = '/';
+ };
+ _ = libc.mkdir(z[0..dir.len :0], 0o755);
+}
+
pub fn localPath(path: []const u8) ?[]const u8 {
if (std.mem.eql(u8, path, "/n/os")) return "/";
if (std.mem.startsWith(u8, path, "/n/os/")) return path[5..];