From 04166178a6fe2439273354d67d6495d24d214a59 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Wed, 21 Feb 2024 22:16:56 +0200 Subject: Proper line killing algo --- src/Buffer.zig | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/Buffer.zig') diff --git a/src/Buffer.zig b/src/Buffer.zig index 57ecd20..f9a1576 100644 --- a/src/Buffer.zig +++ b/src/Buffer.zig @@ -358,7 +358,24 @@ pub fn insertRow(self: *Buffer, at: usize, data: []const u8) !void { } pub fn killLine(self: *Buffer) !void { - return self.deleteRow(self.cy); + if (self.cy == self.rows.items.len) { + return; + } + + var row = &self.rows.items[self.cy]; + if (self.cx == row.data.items.len) { + if (self.cy == self.rows.items.len - 1) { + return; + } + + try row.appendString(self, self.rows.items[self.cy+1].data.items); + self.deleteRow(self.cy + 1); + } else { + try row.data.resize(self.cx); + } + + self.dirty = true; + return row.update(self); } pub fn lineNumberDigits(self: Buffer) usize { -- cgit v1.2.3