From 7ca3295e318f797d79b84f9650baa95d8c8d7ad6 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Sun, 25 Feb 2024 04:14:45 +0200 Subject: Don't bother saving buffers like *scratch* --- src/Buffer.zig | 34 ++++++++++++++++++++++------------ src/Editor.zig | 8 ++++---- src/Row.zig | 2 +- 3 files changed, 27 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/Buffer.zig b/src/Buffer.zig index 555ad1d..ce27d95 100644 --- a/src/Buffer.zig +++ b/src/Buffer.zig @@ -25,7 +25,7 @@ rx: usize, rowoff: usize, coloff: usize, -dirty: bool, +edited: bool, config: Config, syntax: ?Syntax, @@ -52,7 +52,7 @@ pub fn init(allocator: Allocator, name: []const u8) !Buffer { .rowoff = 0, .coloff = 0, - .dirty = false, + .edited = false, .config = config, .syntax = null, @@ -161,14 +161,14 @@ pub fn deleteChar(self: *Buffer) !void { } if (self.cx < self.rows.items[self.cy].data.items.len) { - self.dirty = true; + self.edited = true; try self.rows.items[self.cy].deleteChar(self, self.cx); } else { if (self.cy == self.rows.items.len - 1) { return; } - self.dirty = true; + self.edited = true; try self.rows.items[self.cy].appendString(self, self.rows.items[self.cy + 1].data.items); self.deleteRow(self.cy + 1); } @@ -179,7 +179,7 @@ pub fn deleteAllRows(self: *Buffer) void { return; } - self.dirty = true; + self.edited = true; while (self.rows.popOrNull()) |row| { row.deinit(); } @@ -201,7 +201,7 @@ pub fn deleteRow(self: *Buffer, at: usize) void { return; } - self.dirty = true; + self.edited = true; self.rows.orderedRemove(at).deinit(); var i = at; @@ -291,7 +291,7 @@ pub fn drawStatusBar(self: Buffer, writer: anytype, screencols: usize) !void { try self.allocator.dupe(u8, self.short_name); defer self.allocator.free(name); - const modified = if (self.dirty) + const modified = if (self.isDirty()) @as([]const u8, " (modified)") else @as([]const u8, ""); @@ -437,7 +437,7 @@ pub fn insertChar(self: *Buffer, char: u8) !void { try self.rows.items[self.cy].insertChar(self, self.cx, char); self.cx += 1; - self.dirty = true; + self.edited = true; } pub fn insertNChars(self: *Buffer, char: u8, count: usize) !void { @@ -448,7 +448,7 @@ pub fn insertNChars(self: *Buffer, char: u8, count: usize) !void { } pub fn insertNewline(self: *Buffer) !void { - self.dirty = true; + self.edited = true; if (self.cx == 0) { try self.insertRow(self.cy, ""); @@ -484,7 +484,17 @@ pub fn insertRow(self: *Buffer, at: usize, data: []const u8) !void { } try self.rows.items[at].update(self); - self.dirty = true; + self.edited = true; +} + +pub fn isDirty(self: Buffer) bool { + if (self.short_name.len > 0) { + if (self.short_name[0] == '*' and self.short_name[self.short_name.len-1] == '*') { + return false; + } + } + + return self.edited; } pub fn killLine(self: *Buffer) !void { @@ -496,7 +506,7 @@ pub fn killLine(self: *Buffer) !void { if (self.cx == row.data.items.len) { return self.deleteChar(); } else { - self.dirty = true; + self.edited = true; try row.data.resize(self.cx); return row.update(self); } @@ -672,7 +682,7 @@ pub fn save(self: *Buffer, editor: *Editor) !void { }; try editor.setStatusMessage("Saved to '{s}'", .{file_path}); - self.dirty = false; + self.edited = false; } pub fn scroll(self: *Buffer, screenrows: usize, screencols: usize) void { diff --git a/src/Editor.zig b/src/Editor.zig index aa57c15..624e400 100644 --- a/src/Editor.zig +++ b/src/Editor.zig @@ -135,7 +135,7 @@ pub fn hasBuffer(self: Editor, name: []const u8) bool { /// Returns true if killed, false if didn't. pub fn killCurrentBuffer(self: *Editor) !bool { - if (self.buffer.dirty) { + if (self.buffer.isDirty()) { if (!try self.promptYN("Unsaved changes, kill anyways?")) { return false; } @@ -174,7 +174,7 @@ pub fn open(self: *Editor, name: []const u8) !void { const file = std.fs.openFileAbsolute(file_path, .{ .mode = .read_only }) catch |err| switch (err) { error.FileNotFound => { try self.setStatusMessage("Will create a new file on save...", .{}); - self.buffer.dirty = true; + self.buffer.edited = true; return; }, else => return err, @@ -192,7 +192,7 @@ pub fn open(self: *Editor, name: []const u8) !void { try self.buffer.appendRow(trimmed); } - self.buffer.dirty = false; + self.buffer.edited = false; } pub fn openFile(self: *Editor) !void { @@ -334,7 +334,7 @@ pub fn refreshWindowSize(self: *Editor) !void { } pub fn saveBuffersExit(self: *Editor) !void { - while (self.buffers.count() > 1 or self.buffer.dirty) { + while (self.buffers.count() > 1 or self.buffer.isDirty()) { if (!try self.killCurrentBuffer()) { return; } diff --git a/src/Row.zig b/src/Row.zig index b8e1674..913253c 100644 --- a/src/Row.zig +++ b/src/Row.zig @@ -59,7 +59,7 @@ pub fn cleanWhiteSpace(self: *Row, buf: *Buffer) !void { } if (orig_len != self.data.items.len) { - buf.dirty = true; + buf.edited = true; try self.update(buf); } } -- cgit v1.2.3