From 856dad4ac80b1162db7ff86bdbaa7e0ae30ca607 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Tue, 29 Oct 2013 15:46:19 +0900 Subject: [PATCH] Choose between prefix cache and suffix cache --- fzf | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/fzf b/fzf index 1e3612b2..4a605afa 100755 --- a/fzf +++ b/fzf @@ -359,13 +359,19 @@ searcher = Thread.new { list, cache = pair found.concat(cache[q] ||= begin - prefix_cache = nil - (q.length - 1).downto(1) do |len| - prefix = q[0, len] - break if prefix_cache = cache[prefix] + prefix, suffix = @query[0, @cursor_x], @query[@cursor_x..-1] || '' + prefix_cache = suffix_cache = nil + + (prefix.length - 1).downto(1) do |len| + break if prefix_cache = cache[prefix[0, len]] end - (prefix_cache ? prefix_cache.map { |e| e.first } : list).map { |line| + 0.upto(suffix.length - 1) do |idx| + break if suffix_cache = cache[suffix[idx..-1]] + end unless suffix.empty? + + partial_cache = [prefix_cache, suffix_cache].compact.sort_by { |e| e.length }.first + (partial_cache ? partial_cache.map { |e| e.first } : list).map { |line| if regexp # Ignore errors: e.g. invalid byte sequence in UTF-8 md = line.match(regexp) rescue nil