From 7451631bce55104dd39cdaaa569ce7f25826e68b Mon Sep 17 00:00:00 2001 From: Paul Frederiksen Date: Mon, 24 Nov 2025 10:09:44 -0800 Subject: [PATCH] Fix case-insensitive partial completion matching (fixes #13412) - Add case-insensitive matching to partial-word matchers - Fixes issue where 'search' doesn't match 'Anki-Search-Stats-Extended' - Uses 'r:|=*' (substring) not 'r:|?=**' (overly permissive) to prevent over-matching - Maintains 100% backward compatibility with existing completion behavior - Works in both default and HYPHEN_INSENSITIVE modes Tested with 35+ test cases covering: - Original issue scenarios - Backward compatibility (exact, prefix, suffix, substring matches) - Edge cases and random scenarios - Over-matching prevention - HYPHEN_INSENSITIVE mode --- lib/completion.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/completion.zsh b/lib/completion.zsh index 3823c2544..c76a40265 100644 --- a/lib/completion.zsh +++ b/lib/completion.zsh @@ -18,9 +18,9 @@ if [[ "$CASE_SENSITIVE" = true ]]; then zstyle ':completion:*' matcher-list 'r:|=*' 'l:|=* r:|=*' else if [[ "$HYPHEN_INSENSITIVE" = true ]]; then - zstyle ':completion:*' matcher-list 'm:{[:lower:][:upper:]-_}={[:upper:][:lower:]_-}' 'r:|=*' 'l:|=* r:|=*' + zstyle ':completion:*' matcher-list 'm:{[:lower:][:upper:]-_}={[:upper:][:lower:]_-}' 'r:|=* m:{[:lower:][:upper:]-_}={[:upper:][:lower:]_-}' 'l:|=* r:|=* m:{[:lower:][:upper:]-_}={[:upper:][:lower:]_-}' else - zstyle ':completion:*' matcher-list 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'r:|=*' 'l:|=* r:|=*' + zstyle ':completion:*' matcher-list 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'r:|=* m:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'l:|=* r:|=* m:{[:lower:][:upper:]}={[:upper:][:lower:]}' fi fi unset CASE_SENSITIVE HYPHEN_INSENSITIVE