diff options
| author | 2024-02-21 23:00:48 +0200 | |
|---|---|---|
| committer | 2024-02-21 23:00:48 +0200 | |
| commit | 1786b9fea2a94924fe46c61c67811fdc919e0a0a (patch) | |
| tree | 3b9b58addeefc29942cd536d1e43ce7f867c7936 /src/Buffer.zig | |
| parent | Zig update (diff) | |
| download | es-1786b9fea2a94924fe46c61c67811fdc919e0a0a.tar.gz es-1786b9fea2a94924fe46c61c67811fdc919e0a0a.tar.xz es-1786b9fea2a94924fe46c61c67811fdc919e0a0a.zip | |
Add functionality for skipping paragraphs up and down
Diffstat (limited to 'src/Buffer.zig')
| -rw-r--r-- | src/Buffer.zig | 32 |
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 | ||
| 97 | pub 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 | |||
| 97 | pub fn cleanWhiteSpace(self: *Buffer) !void { | 113 | pub 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 | ||
| 291 | pub 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. |
| 276 | pub fn goToLine(self: *Buffer, editor: *Editor) !void { | 308 | pub 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| { |