d427ac1ef9d62dcba34437dd177db6c41df254bf

Author
Sebastian Gniazdowski <sgniazdowski@gmail.com>
Committer
Sebastian Gniazdowski <sgniazdowski@gmail.com>
Date

Message

znt: twice as fast searching

Diff

 1diff --git a/plugins/zsh-navigation-tools/n-list b/plugins/zsh-navigation-tools/n-list
 2index c7066318edf58291d60ec791410eaa80081aadb1..26431a0d9c24ce581c2abda128c75a3e8a3da406 100644
 3--- a/plugins/zsh-navigation-tools/n-list
 4+++ b/plugins/zsh-navigation-tools/n-list
 5@@ -261,18 +261,15 @@ while (( 1 )); do
 6             local search_buffer="${NLIST_SEARCH_BUFFER%% ##}"
 7             search_buffer="${search_buffer## ##}"
 8             search_buffer="${search_buffer//(#m)[][*?|#~^()><\\]/\\$MATCH}"
 9+            local search_pattern=""
10+            local colsearch_pattern=""
11             if [ -n "$search_buffer" ]; then
12                 # Patterns will be *foo*~^*bar* and foo|bar)
13-                local search_pattern="${search_buffer// ##/*~^*}"
14-                local colsearch_pattern="${search_buffer// ##/|}"
15+                search_pattern="${search_buffer// ##/*~^*}"
16+                colsearch_pattern="${search_buffer// ##/|}"
17 
18                 list=( "${(@M)list:#(#i)*$~search_pattern*}" )
19                 last_element="$#list"
20-
21-                local red=$'\x1b[00;31m' reset=$'\x1b[00;00m'
22-                col_list=( "${(@)list//(#mi)($~colsearch_pattern)/$red${MATCH}$reset}" )
23-            else
24-                col_list=( "$list[@]" )
25             fi
26 
27             # Called after processing list
28@@ -286,7 +283,12 @@ while (( 1 )); do
29 
30         if [ "$prev_start_idx" -ne "$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN" ]; then
31             prev_start_idx="$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN"
32-            disp_list=( "${(@)col_list[NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN, end_idx]}" )
33+            disp_list=( "${(@)list[NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN, end_idx]}" )
34+
35+            if [ -n "$colsearch_pattern" ]; then
36+                local red=$'\x1b[00;31m' reset=$'\x1b[00;00m'
37+                disp_list=( "${(@)disp_list//(#mi)($~colsearch_pattern)/$red${MATCH}$reset}" )
38+            fi
39 
40             # We have display list, lets replace newlines with "\n" when needed (1/3)
41             [ "$NLIST_REPLACE_NEWLINES" -eq 1 ] && disp_list=( "${(@)disp_list//$'\n'/\\n}" )