From 261acbc681685ec856b7800864e172f24cd50959 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 5 Aug 2025 08:18:49 +0200 Subject: [PATCH] feat: use case insenstive matching for file_browser completion --- src/tui/mode/mini/file_browser.zig | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/tui/mode/mini/file_browser.zig b/src/tui/mode/mini/file_browser.zig index ea6fee7..e075a07 100644 --- a/src/tui/mode/mini/file_browser.zig +++ b/src/tui/mode/mini/file_browser.zig @@ -9,6 +9,7 @@ const keybind = @import("keybind"); const project_manager = @import("project_manager"); const command = @import("command"); const EventHandler = @import("EventHandler"); +const Buffer = @import("Buffer"); const tui = @import("../../tui.zig"); const MessageFilter = @import("../../MessageFilter.zig"); @@ -197,9 +198,7 @@ pub fn Create(options: type) type { var last: ?Entry = null; var last_no: usize = 0; for (self.entries.items, 0..) |entry, i| { - if (entry.name.len >= self.match.items.len and - std.mem.eql(u8, self.match.items, entry.name[0..self.match.items.len])) - { + if (try prefix_compare_icase(self.allocator, self.match.items, entry.name)) { matched += 1; if (matched == self.complete_trigger_count) { try self.construct_path(self.query.items, entry, i); @@ -218,6 +217,15 @@ pub fn Create(options: type) type { } } + fn prefix_compare_icase(allocator: std.mem.Allocator, prefix: []const u8, str: []const u8) error{OutOfMemory}!bool { + const icase_prefix = Buffer.unicode.get_letter_casing().toLowerStr(allocator, prefix) catch try allocator.dupe(u8, prefix); + defer allocator.free(icase_prefix); + const icase_str = Buffer.unicode.get_letter_casing().toLowerStr(allocator, str) catch try allocator.dupe(u8, str); + defer allocator.free(icase_str); + if (icase_str.len < icase_prefix.len) return false; + return std.mem.eql(u8, icase_prefix, icase_str[0..icase_prefix.len]); + } + fn delete_to_previous_path_segment(self: *Self) void { self.complete_trigger_count = 0; if (self.file_path.items.len == 0) return;