Compare commits

..

No commits in common. "fc6f2e2cde0471ad1ecaff33a1d6276141a0b962" and "bca4dbf777e779283691789d92a1742daa25983a" have entirely different histories.

2 changed files with 24 additions and 21 deletions

View file

@ -2626,7 +2626,7 @@ pub const Editor = struct {
self.view.row = row; self.view.row = row;
} }
pub fn update_scroll_dest_abs(self: *Self, dest: usize) void { fn update_scroll_dest_abs(self: *Self, dest: usize) void {
const root = self.buf_root() catch return; const root = self.buf_root() catch return;
const max_view = if (root.lines() <= scroll_cursor_min_border_distance) 0 else root.lines() - scroll_cursor_min_border_distance; const max_view = if (root.lines() <= scroll_cursor_min_border_distance) 0 else root.lines() - scroll_cursor_min_border_distance;
self.scroll_dest = @min(dest, max_view); self.scroll_dest = @min(dest, max_view);
@ -5713,27 +5713,32 @@ pub const Editor = struct {
pub fn focus_on_range(self: *Self, ctx: Context) Result { pub fn focus_on_range(self: *Self, ctx: Context) Result {
var sel: Selection = .{}; var sel: Selection = .{};
var pos_type: PosType = .column;
if (!try ctx.args.match(.{ if (!try ctx.args.match(.{
tp.extract(&sel.begin.row), tp.extract(&sel.begin.row),
tp.extract(&sel.begin.col), tp.extract(&sel.begin.col),
tp.extract(&sel.end.row), tp.extract(&sel.end.row),
tp.extract(&sel.end.col), tp.extract(&sel.end.col),
tp.extract(&pos_type),
})) return error.InvalidFocusOnRangeArgument; })) return error.InvalidFocusOnRangeArgument;
self.cancel_all_matches(); self.cancel_all_selections();
self.add_match_internal(sel.begin.row + 1, sel.begin.col, sel.end.row + 1, sel.end.col); const root = self.buf_root() catch return;
const cursor = sel.begin; if (pos_type == .byte)
const range_height = sel.end.row - sel.begin.row + 1; sel = sel.from_pos(root, self.metrics) catch return;
const view_height = self.view.rows; const primary = self.get_primary();
const offset = if (range_height > view_height - @min(view_height, scroll_cursor_min_border_distance * 2)) try primary.cursor.move_to(
scroll_cursor_min_border_distance root,
sel.begin.row,
sel.begin.col,
self.metrics,
);
primary.selection = sel;
if (self.view.is_visible(&primary.cursor))
self.clamp()
else else
(view_height / 2) - (range_height / 2); try self.scroll_view_center(.{});
const row = if (cursor.row > offset) self.need_render();
cursor.row - offset
else
0;
self.update_scroll_dest_abs(row);
} }
pub const focus_on_range_meta: Meta = .{ .arguments = &.{ .integer, .integer, .integer, .integer } }; pub const focus_on_range_meta: Meta = .{ .arguments = &.{ .integer, .integer, .integer, .integer } };

View file

@ -46,7 +46,6 @@ pub const Entry = struct {
pub const ValueType = struct { pub const ValueType = struct {
start: ed.CurSel = .{}, start: ed.CurSel = .{},
view: ed.View = .{},
column_size: [3]u8 = undefined, column_size: [3]u8 = undefined,
}; };
pub const defaultValue: ValueType = .{}; pub const defaultValue: ValueType = .{};
@ -100,7 +99,6 @@ pub fn load_entries(palette: *Type) !usize {
var max_label_len: usize = 0; var max_label_len: usize = 0;
palette.value.start = editor.get_primary().*; palette.value.start = editor.get_primary().*;
palette.value.view = editor.view;
var iter: []const u8 = mv.symbols.items; var iter: []const u8 = mv.symbols.items;
init_col_sizes(palette); init_col_sizes(palette);
while (iter.len > 0) { while (iter.len > 0) {
@ -196,6 +194,8 @@ fn find_closest(palette: *Type) ?usize {
var previous: usize = 0; var previous: usize = 0;
for (palette.entries.items, 0..) |entry, idx| { for (palette.entries.items, 0..) |entry, idx| {
_, _, _, const sel = get_values(entry.cbor); _, _, _, const sel = get_values(entry.cbor);
if (cursor.within(sel))
return idx + 1;
if (cursor.row < sel.begin.row) return previous + 1; if (cursor.row < sel.begin.row) return previous + 1;
previous = idx; previous = idx;
} }
@ -203,8 +203,6 @@ fn find_closest(palette: *Type) ?usize {
} }
fn select(menu: **Type.MenuType, button: *Type.ButtonType, _: Type.Pos) void { fn select(menu: **Type.MenuType, button: *Type.ButtonType, _: Type.Pos) void {
const editor = tui.get_active_editor() orelse return;
editor.clear_matches();
_, _, _, const sel = get_values(button.opts.label); _, _, _, const sel = get_values(button.opts.label);
tp.self_pid().send(.{ "cmd", "exit_overlay_mode" }) catch |e| menu.*.opts.ctx.logger.err(module_name, e); tp.self_pid().send(.{ "cmd", "exit_overlay_mode" }) catch |e| menu.*.opts.ctx.logger.err(module_name, e);
tp.self_pid().send(.{ "cmd", "goto_line_and_column", .{ sel.begin.row + 1, sel.begin.col + 1 } }) catch |e| menu.*.opts.ctx.logger.err(module_name, e); tp.self_pid().send(.{ "cmd", "goto_line_and_column", .{ sel.begin.row + 1, sel.begin.col + 1 } }) catch |e| menu.*.opts.ctx.logger.err(module_name, e);
@ -213,13 +211,13 @@ fn select(menu: **Type.MenuType, button: *Type.ButtonType, _: Type.Pos) void {
pub fn updated(palette: *Type, button_: ?*Type.ButtonType) !void { pub fn updated(palette: *Type, button_: ?*Type.ButtonType) !void {
const button = button_ orelse return cancel(palette); const button = button_ orelse return cancel(palette);
_, _, _, const sel = get_values(button.opts.label); _, _, _, const sel = get_values(button.opts.label);
tp.self_pid().send(.{ "cmd", "focus_on_range", .{ sel.begin.row, sel.begin.col, sel.end.row, sel.end.col } }) catch {}; tp.self_pid().send(.{ "cmd", "focus_on_range", .{ sel.begin.row, sel.begin.col, sel.end.row, sel.end.col, ed.PosType.byte } }) catch {};
} }
pub fn cancel(palette: *Type) !void { pub fn cancel(palette: *Type) !void {
tp.self_pid().send(.{ "cmd", "goto_line_and_column", .{ palette.value.start.cursor.row + 1, palette.value.start.cursor.col + 1 } }) catch return;
const editor = tui.get_active_editor() orelse return; const editor = tui.get_active_editor() orelse return;
editor.clear_matches(); editor.get_primary().selection = palette.value.start.selection;
editor.update_scroll_dest_abs(palette.value.view.row);
} }
const SymbolKind = enum(u8) { const SymbolKind = enum(u8) {