diff options
Diffstat (limited to 'src/Buffer.zig')
| -rw-r--r-- | src/Buffer.zig | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/Buffer.zig b/src/Buffer.zig index 1ddac45..8f90ed1 100644 --- a/src/Buffer.zig +++ b/src/Buffer.zig | |||
| @@ -251,6 +251,25 @@ pub fn forwardChar(self: *Buffer) void { | |||
| 251 | } | 251 | } |
| 252 | } | 252 | } |
| 253 | 253 | ||
| 254 | // TODO: Make use of the callback feature to go to the final line while typing in. | ||
| 255 | pub fn goToLine(self: *Buffer, editor: *Editor) !void { | ||
| 256 | if (try editor.prompt("Goto line")) |line_str| { | ||
| 257 | defer editor.allocator.free(line_str); | ||
| 258 | |||
| 259 | const line = std.fmt.parseUnsigned(usize, line_str, 0) catch |err| { | ||
| 260 | try editor.setStatusMessage("Couldn't parse '{s}' as an integer: {}", .{line_str, err}); | ||
| 261 | return; | ||
| 262 | }; | ||
| 263 | |||
| 264 | self.cy = std.math.min(line - 1, self.rows.items.len); | ||
| 265 | if (self.cy == self.rows.items.len) { | ||
| 266 | self.cx = 0; | ||
| 267 | } else { | ||
| 268 | self.cx = std.math.min(self.cx, self.rows.items[self.cy].data.items.len); | ||
| 269 | } | ||
| 270 | } | ||
| 271 | } | ||
| 272 | |||
| 254 | pub fn insertChar(self: *Buffer, char: u8) !void { | 273 | pub fn insertChar(self: *Buffer, char: u8) !void { |
| 255 | if (self.cy == self.rows.items.len) { | 274 | if (self.cy == self.rows.items.len) { |
| 256 | try self.insertRow(self.rows.items.len, ""); | 275 | try self.insertRow(self.rows.items.len, ""); |