From b746f3cf8b4a8a3654f7c4884c2804e797f9d2de Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Fri, 11 Mar 2022 18:23:30 +0200 Subject: Create parent directory if doesn't exist on save --- src/Buffer.zig | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/Buffer.zig b/src/Buffer.zig index d0546c0..8917772 100644 --- a/src/Buffer.zig +++ b/src/Buffer.zig @@ -462,6 +462,30 @@ pub fn save(self: *Buffer, editor: *Editor) !void { const file_path = self.file_path.?; + if (std.fs.path.dirname(file_path)) |dirname| { + if (std.fs.openDirAbsolute(dirname, .{})) |*dir| { + dir.close(); + } else |_| { + const prompt = try std.fmt.allocPrint( + self.allocator, + "Create parent directory '{s}'?", + .{dirname}, + ); + defer self.allocator.free(prompt); + + if (try editor.promptYN(prompt)) { + std.fs.cwd().makePath(dirname) catch |err| { + try editor.setStatusMessage( + "Cannot create parent directory '{s}': {}", + .{ dirname, err }, + ); + }; + } else { + return; + } + } + } + const tmp_path = try std.fmt.allocPrint( self.allocator, "{s}~{}", -- cgit v1.2.3