From 362001d03e7f2d13b4986beb8246e5f966f513de Mon Sep 17 00:00:00 2001 From: Marco Hinz Date: Fri, 16 Mar 2018 17:14:40 +0100 Subject: [PATCH] Refactoring --- autoload/startify.vim | 140 ++++++++++++++++++++++-------------------- 1 file changed, 75 insertions(+), 65 deletions(-) diff --git a/autoload/startify.vim b/autoload/startify.vim index 5e67625..c0fe3f8 100644 --- a/autoload/startify.vim +++ b/autoload/startify.vim @@ -111,71 +111,8 @@ function! startify#insane_in_the_membrane() abort let b:startify.section_header_lines = [] - if exists('g:startify_lists') - let s:lists = deepcopy(g:startify_lists) - elseif exists('g:startify_list_order') - " Convert old g:startify_list_order format to newer g:startify_lists format. - let s:lists = [] - for item in g:startify_list_order - if type(item) == type([]) - let header = item - else - if exists('header') - let s:lists += [{ 'type': item, 'header': header }] - unlet header - else - let s:lists += [{ 'type': item }] - endif - endif - endfor - else - let s:lists = [ - \ { 'header': [s:padding_left .'MRU'], 'type': 'files' }, - \ { 'header': [s:padding_left .'MRU '. getcwd()], 'type': 'dir' }, - \ { 'header': [s:padding_left .'Sessions'], 'type': 'sessions' }, - \ { 'header': [s:padding_left .'Bookmarks'], 'type': 'bookmarks' }, - \ { 'header': [s:padding_left .'Commands'], 'type': 'commands' }, - \ ] - endif - - for list in s:lists - if !has_key(list, 'type') - continue - endif - - if type(list.type) == type('') - if has_key(list, 'header') - let s:last_message = list.header - endif - call s:show_{list.type}() - elseif type(list.type) == type(function('tr')) - try - let entries = list.type() - catch - call s:warn(v:exception) - continue - endtry - if empty(entries) - unlet s:last_message - continue - endif - - if has_key(list, 'header') - let s:last_message = list.header - call s:print_section_header() - endif - - for entry in entries - let index = s:get_index_as_string(b:startify.entry_number) - call append('$', s:padding_left .'['. index .']'. repeat(' ', (3 - strlen(index))) . entry.line) - call s:register(line('$'), index, 'special', entry.cmd, '') - let b:startify.entry_number += 1 - endfor - call append('$', '') - else - call s:warn('Wrong format for g:startify_lists: '. string(list)) - endif - endfor + let s:lists = s:get_lists() + call s:show_lists(s:lists) silent $delete _ @@ -486,6 +423,79 @@ function! startify#open_buffers(...) abort wincmd = endfunction +" Function: s:get_lists {{{1 +function! s:get_lists() abort + if exists('g:startify_lists') + return g:startify_lists + elseif exists('g:startify_list_order') + " Convert old g:startify_list_order format to newer g:startify_lists format. + let lists = [] + for item in g:startify_list_order + if type(item) == type([]) + let header = item + else + if exists('header') + let lists += [{ 'type': item, 'header': header }] + unlet header + else + let lists += [{ 'type': item }] + endif + endif + endfor + return lists + else + return [ + \ { 'header': [s:padding_left .'MRU'], 'type': 'files' }, + \ { 'header': [s:padding_left .'MRU '. getcwd()], 'type': 'dir' }, + \ { 'header': [s:padding_left .'Sessions'], 'type': 'sessions' }, + \ { 'header': [s:padding_left .'Bookmarks'], 'type': 'bookmarks' }, + \ { 'header': [s:padding_left .'Commands'], 'type': 'commands' }, + \ ] + endif +endfunction + +" Function: s:show_lists {{{1 +function! s:show_lists(lists) abort + for list in a:lists + if !has_key(list, 'type') + continue + endif + + if type(list.type) == type('') + if has_key(list, 'header') + let s:last_message = list.header + endif + call s:show_{list.type}() + elseif type(list.type) == type(function('tr')) + try + let entries = list.type() + catch + call s:warn(v:exception) + continue + endtry + if empty(entries) + unlet s:last_message + continue + endif + + if has_key(list, 'header') + let s:last_message = list.header + call s:print_section_header() + endif + + for entry in entries + let index = s:get_index_as_string(b:startify.entry_number) + call append('$', s:padding_left .'['. index .']'. repeat(' ', (3 - strlen(index))) . entry.line) + call s:register(line('$'), index, 'special', entry.cmd, '') + let b:startify.entry_number += 1 + endfor + call append('$', '') + else + call s:warn('Wrong format for g:startify_lists: '. string(list)) + endif + endfor +endfunction + " Function: s:open_buffer {{{1 function! s:open_buffer(entry) if a:entry.type == 'special'