summaryrefslogtreecommitdiff
path: root/src/Buffer.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/Buffer.zig')
-rw-r--r--src/Buffer.zig19
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.
255pub 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
254pub fn insertChar(self: *Buffer, char: u8) !void { 273pub 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, "");