Marco Hinz 7 anni fa
parent
commit
362001d03e
1 ha cambiato i file con 75 aggiunte e 65 eliminazioni
  1. 75 65
      autoload/startify.vim

+ 75 - 65
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'