summaryrefslogtreecommitdiff
path: root/src/Buffer.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/Buffer.zig')
-rw-r--r--src/Buffer.zig32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/Buffer.zig b/src/Buffer.zig
index f9a1576..bb6d3ce 100644
--- a/src/Buffer.zig
+++ b/src/Buffer.zig
@@ -94,6 +94,22 @@ pub fn backwardDeleteChar(self: *Buffer) !void {
94 return self.deleteChar(); 94 return self.deleteChar();
95} 95}
96 96
97pub fn backwardParagraph(self: *Buffer) void {
98 if (self.cy == 0) {
99 return;
100 }
101
102 self.cy -= 1;
103 while (self.cy > 0) : (self.cy -= 1) {
104 // TODO: I'm lazy but also consider lines of only whitespace
105 if (self.rows.items[self.cy].data.items.len == 0) {
106 break;
107 }
108 }
109
110 self.cx = 0;
111}
112
97pub fn cleanWhiteSpace(self: *Buffer) !void { 113pub fn cleanWhiteSpace(self: *Buffer) !void {
98 for (self.rows.items) |*row| { 114 for (self.rows.items) |*row| {
99 try row.cleanWhiteSpace(self); 115 try row.cleanWhiteSpace(self);
@@ -272,6 +288,22 @@ pub fn forwardChar(self: *Buffer) void {
272 } 288 }
273} 289}
274 290
291pub fn forwardParagraph(self: *Buffer) void {
292 if (self.cy == self.rows.items.len) {
293 return;
294 }
295
296 self.cy += 1;
297 while (self.cy < self.rows.items.len) : (self.cy += 1) {
298 // TODO: I'm lazy but also consider whitespace-only lines
299 if (self.rows.items[self.cy].data.items.len == 0) {
300 break;
301 }
302 }
303
304 self.cx = 0;
305}
306
275// TODO: Make use of the callback feature to go to the final line while typing in. 307// TODO: Make use of the callback feature to go to the final line while typing in.
276pub fn goToLine(self: *Buffer, editor: *Editor) !void { 308pub fn goToLine(self: *Buffer, editor: *Editor) !void {
277 if (try editor.prompt(self.allocator, "Goto line")) |line_str| { 309 if (try editor.prompt(self.allocator, "Goto line")) |line_str| {