diff options
-rw-r--r-- | plugin/tabs_grep.vim | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/plugin/tabs_grep.vim b/plugin/tabs_grep.vim index 2c8df4c..30574d3 100644 --- a/plugin/tabs_grep.vim +++ b/plugin/tabs_grep.vim @@ -32,43 +32,36 @@ function! s:IsTabPageLine(line) 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 = [] + " Get a list of the indexes of "Tab page X" elements. 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 tab_page_indexes_to_remove = [] + " For indexes in the middle of the list, if `2` is just before `3`, it + " means that `2` didn't have any files under it (otherwise `3` would + " instead be `4` or higher). for i in range(1, len(tab_page_indexes) - 1) if tab_page_indexes[i - 1] == tab_page_indexes[i] - 1 call add(tab_page_indexes_to_remove, tab_page_indexes[i - 1]) endif endfor + " For the last index in the list, if it's equal to the last possible + " index in `a:list`, it's a tab page without children. The last tab page + " index should never be at the end. if tab_page_indexes[-1] == len(a:list) - 1 call add(tab_page_indexes_to_remove, tab_page_indexes[-1]) endif + " Remove empty "Tab page X" elements from the `:tabs` list. Reverse the + " list of indexes to delete from right to left, ensuring we always use + " valid indexes. for i in reverse(tab_page_indexes_to_remove) call remove(a:list, i) endfor |