diff options
-rw-r--r-- | plugin/tabs_grep.vim | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/plugin/tabs_grep.vim b/plugin/tabs_grep.vim index 8b98f1b..70e7bce 100644 --- a/plugin/tabs_grep.vim +++ b/plugin/tabs_grep.vim @@ -10,6 +10,8 @@ function! TabsGrep(search) call filter(tabs, function('s:MatchString', [a:search])) echo tabs + call s:FilterTabPageElements(tabs) + " let filtered_tabs = system( " \ 'echo ' " \ . shellescape(tabs_output) @@ -25,4 +27,47 @@ function! s:MatchString(search, index, value) \ match(a:value, '\vTab page \d+') != -1 endfunction +function! s:IsTabPageLine(line) + return match(a:line, '\vTab page \d+') != -1 +endfunction + +function! s:FilterTabPageElements(list) + " Has matches: + " [0, 1, 1, 0, 0] + " + " Tab page line indexes: + " [1, 2, 4, 6, 7, 8] + " + " Tab page line indexes with matches: + " [2, 4] + + let tab_page_indexes = [] + + for i in range(len(a:list)) + if s:IsTabPageLine(a:list[i]) + call add(tab_page_indexes, i) + endif + endfor + + echo tab_page_indexes + + " loop 1..-1 + " if l[i-1] == l[i] - 1 + " delete l[i-1] + " if last l == len l - 1 + " delete last l + + let filtered_tab_page_indexes = copy(tab_page_indexes) + + for i in range(1, len(tab_page_indexes) - 1) + if tab_page_indexes[i - 1] == tab_page_indexes[i] - 1 + call remove(filtered_tab_page_indexes, i - 1) + endif + endfor + + if filtered_tab_page_indexes[-1] == len(a:list) - 1 + call remove(filtered_tab_page_indexes, -1) + endif +endfunction + command! -nargs=1 TabsGrep :call TabsGrep(<f-args>) |