From d2081e8d688fd0f11516cbde2a3c584e4a621d59 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Thu, 5 Feb 2026 22:25:45 +0100 Subject: [PATCH] feat: add configuration option dropdown_limit to limit completion dropdown size --- src/config.zig | 1 + src/tui/editor.zig | 2 +- src/tui/mode/overlay/dropdown.zig | 20 +++++++++++++++----- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/config.zig b/src/config.zig index c02ddf4..21a9dba 100644 --- a/src/config.zig +++ b/src/config.zig @@ -86,6 +86,7 @@ lsp_output: enum { quiet, verbose } = .quiet, keybind_mode: KeybindMode = .normal, dropdown_keybinds: DropdownKeybindMode = .standard, +dropdown_limit: usize = 12, include_files: []const u8 = "", diff --git a/src/tui/editor.zig b/src/tui/editor.zig index 1b686eb..54287e6 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -6424,7 +6424,7 @@ pub const Editor = struct { } else { self.completions_request = .pending(cursor.row, cursor.col); } - if (!mv.is_any_panel_view_showing()) + if (tui.config().completion_info_mode == .panel) if (!mv.is_any_panel_view_showing()) self.clamp_offset(mv.get_panel_height()); return self.pm_with_primary_cursor_pos(project_manager.completion); } diff --git a/src/tui/mode/overlay/dropdown.zig b/src/tui/mode/overlay/dropdown.zig index 8a38530..745cfcb 100644 --- a/src/tui/mode/overlay/dropdown.zig +++ b/src/tui/mode/overlay/dropdown.zig @@ -80,7 +80,10 @@ pub fn Create(options: type) type { }), .logger = log.logger(@typeName(Self)), .query = .empty, - .view_rows = get_view_rows(tui.screen()), + .view_rows = @min( + get_view_rows(tui.screen()), + tui.config().dropdown_limit + self.menu.header_count, + ), .entries = .empty, .mode = try keybind.mode(switch (tui.config().dropdown_keybinds) { .standard => "overlay/dropdown", @@ -163,7 +166,10 @@ pub fn Create(options: type) type { } fn prepare_resize_at_y_x(self: *Self, screen: Widget.Box, w: usize, y: usize, x: usize) Widget.Box { - self.view_rows = get_view_rows(screen) -| y; + self.view_rows = @min( + get_view_rows(screen) -| y, + tui.config().dropdown_limit + self.menu.header_count, + ); const h = @min(self.items + self.menu.header_count, self.view_rows + self.menu.header_count); return .{ .y = y, .x = x, .w = w, .h = h }; } @@ -193,9 +199,13 @@ pub fn Create(options: type) type { } fn get_view_rows(screen: Widget.Box) usize { - var h = screen.h; - if (h > 0) h = h / 5 * 4; - return h; + if (tui.config().completion_info_mode == .panel) { + var h = screen.h; + if (h > 0) h = h / 5 * 4; + return h; + } else { + return screen.h; + } } fn on_scroll(self: *Self, _: tp.pid_ref, m: tp.message) error{Exit}!void {