فهرست منبع

Make dir listing recursive

Closes #63.
Marco Hinz 11 سال پیش
والد
کامیت
0bc4aae6f4
1فایلهای تغییر یافته به همراه18 افزوده شده و 20 حذف شده
  1. 18 20
      autoload/startify.vim

+ 18 - 20
autoload/startify.vim

@@ -263,36 +263,34 @@ endfunction
 
 " Function: s:show_dir {{{1
 function! s:show_dir(cnt) abort
-  let cnt   = a:cnt
-  let num   = s:numfiles
-  let files = []
-
-  for fname in split(glob('.\=*'))
-    if isdirectory(fname)
-          \ || (exists('g:startify_skiplist') && s:is_in_skiplist(resolve(fnamemodify(fname, ':p'))))
-      continue
-    endif
+  let cnt     = a:cnt
+  let num     = s:numfiles
+  let entries = {}
 
-    call add(files, [getftime(fname), fname])
-  endfor
+  let cwd   = getcwd()
+  let files = filter(map(copy(v:oldfiles), 'resolve(fnamemodify(v:val, ":p"))'), 'match(v:val, cwd) == 0')
 
   if !empty(files)
     if exists('s:last_message')
       call s:print_section_header()
     endif
 
-    function! l:compare(x, y)
-      return a:y[0] - a:x[0]
-    endfunction
+    for fname in files
+      let fullpath = resolve(fnamemodify(fname, ':p'))
 
-    call sort(files, 'l:compare')
+      " filter duplicates, bookmarks and entries from the skiplist
+      if has_key(entries, fullpath)
+            \ || !filereadable(fullpath)
+            \ || (exists('g:startify_skiplist')  && s:is_in_skiplist(fullpath))
+            \ || (exists('g:startify_bookmarks') && s:is_bookmark(fullpath))
+        continue
+      endif
 
-    for items in files
+      let entries[fullpath] = 1
       let index = s:get_index_as_string(cnt)
-      let fname = items[1]
 
       call append('$', '   ['. index .']'. repeat(' ', (3 - strlen(index))) . fname)
-      execute 'nnoremap <buffer>' index ':edit' fnameescape(fname) '<cr>'
+      execute 'nnoremap <buffer>' index ':edit' fnameescape(fname) '<bar> call <sid>check_user_options()<cr>'
 
       let cnt += 1
       let num -= 1
@@ -303,9 +301,9 @@ function! s:show_dir(cnt) abort
     endfor
 
     call append('$', '')
-  endif
 
-  return cnt
+    return cnt
+  endif
 endfunction
 
 " Function: s:show_files {{{1