From 70c2673cfe1f58ca994358671b3b4964856236ea Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 18 Nov 2025 19:55:52 +0100 Subject: [PATCH] refactor: add editor focus_on_range command --- src/tui/editor.zig | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/tui/editor.zig b/src/tui/editor.zig index 025e561..beda0ee 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -5711,6 +5711,37 @@ pub const Editor = struct { } pub const goto_line_and_column_meta: Meta = .{ .arguments = &.{ .integer, .integer } }; + pub fn focus_on_range(self: *Self, ctx: Context) Result { + var sel: Selection = .{}; + var pos_type: PosType = .column; + if (!try ctx.args.match(.{ + tp.extract(&sel.begin.row), + tp.extract(&sel.begin.col), + tp.extract(&sel.end.row), + tp.extract(&sel.end.col), + tp.extract(&pos_type), + })) return error.InvalidFocusOnRangeArgument; + + self.cancel_all_selections(); + const root = self.buf_root() catch return; + if (pos_type == .byte) + sel = sel.from_pos(root, self.metrics) catch return; + const primary = self.get_primary(); + try primary.cursor.move_to( + root, + sel.begin.row, + sel.begin.col, + self.metrics, + ); + primary.selection = sel; + if (self.view.is_visible(&primary.cursor)) + self.clamp() + else + try self.scroll_view_center(.{}); + self.need_render(); + } + pub const focus_on_range_meta: Meta = .{ .arguments = &.{ .integer, .integer, .integer, .integer } }; + pub fn goto_byte_offset(self: *Self, ctx: Context) Result { try self.send_editor_jump_source(); var offset: usize = 0;