Browse Source

New option: g:startify_session_autoload

Marco Hinz 12 years ago
parent
commit
f8c9b7ddfe
2 changed files with 33 additions and 18 deletions
  1. 24 18
      autoload/startify.vim
  2. 9 0
      doc/startify.txt

+ 24 - 18
autoload/startify.vim

@@ -12,11 +12,15 @@ let g:autoloaded_startify = 1
 let s:numfiles         = get(g:, 'startify_files_number', 10)
 let s:show_special     = get(g:, 'startify_enable_special', 1)
 let s:restore_position = get(g:, 'startify_restore_position')
-
-let s:session_dir = resolve(expand(get(g:, 'startify_session_dir',
+let s:session_dir      = resolve(expand(get(g:, 'startify_session_dir',
       \ has('win32') ? '$HOME\vimfiles\session' : '~/.vim/session')))
 
-let s:chdir = (get(g:, 'startify_change_to_dir', 1) ? '<bar> if isdirectory(expand("%")) <bar> lcd % <bar> else <bar> lcd %:h <bar> endif' : '') .'<cr>'
+" Function: #get_separator {{{1
+function! startify#get_separator() abort
+  return !exists('+shellslash') || &shellslash ? '/' : '\'
+endfunction
+
+let s:sep = startify#get_separator()
 
 " Function: #insane_in_the_membrane {{{1
 function! startify#insane_in_the_membrane() abort
@@ -49,7 +53,7 @@ function! startify#insane_in_the_membrane() abort
   endif
 
   if get(g:, 'startify_session_detection', 1) && filereadable('Session.vim')
-    call append('$', ['   [0]  Session.vim', ''])
+    call append('$', ['   [0]  '. getcwd() . s:sep .'Session.vim', ''])
     execute 'nnoremap <buffer> 0 :source Session.vim<cr>'
     let cnt = 1
   endif
@@ -96,7 +100,7 @@ function! startify#session_load(...) abort
     echo 'There are no sessions...'
     return
   endif
-  let spath = s:session_dir . startify#get_separator() . (exists('a:1')
+  let spath = s:session_dir . s:sep . (exists('a:1')
         \ ? a:1
         \ : input('Load this session: ', fnamemodify(v:this_session, ':t'), 'custom,startify#session_list_as_string'))
         \ | redraw
@@ -133,7 +137,7 @@ function! startify#session_save(...) abort
       return
     endif
   endif
-  let spath = s:session_dir . startify#get_separator() . sname
+  let spath = s:session_dir . s:sep . sname
   if !filereadable(spath)
     execute 'mksession '. fnameescape(spath) | echo 'Session saved under: '. spath
     return
@@ -155,7 +159,7 @@ function! startify#session_delete(...) abort
     echo 'There are no sessions...'
     return
   endif
-  let spath = s:session_dir . startify#get_separator() . (exists('a:1')
+  let spath = s:session_dir . s:sep . (exists('a:1')
         \ ? a:1
         \ : input('Delete this session: ', fnamemodify(v:this_session, ':t'), 'custom,startify#session_list_as_string'))
         \ | redraw
@@ -181,11 +185,6 @@ function! startify#session_list_as_string(lead, ...) abort
   return join(map(split(globpath(s:session_dir, '*'.a:lead.'*'), '\n'), 'fnamemodify(v:val, ":t")'), "\n")
 endfunction
 
-" Function: #get_separator {{{1
-function! startify#get_separator() abort
-  return !exists('+shellslash') || &shellslash ? '/' : '\'
-endfunction
-
 " Function: s:show_dir {{{1
 function! s:show_dir(cnt) abort
   let cnt   = a:cnt
@@ -246,7 +245,7 @@ function! s:show_files(cnt) abort
       let index = s:get_index_as_string(cnt)
 
       call append('$', '   ['. index .']'. repeat(' ', (3 - strlen(index))) . fname)
-      execute 'nnoremap <buffer>' index ':edit' fnameescape(fname) s:chdir
+      execute 'nnoremap <buffer>' index ':edit' fnameescape(fname) '<bar> call <sid>check_user_options()<cr>'
 
       let cnt += 1
       let num -= 1
@@ -291,7 +290,7 @@ function! s:show_bookmarks(cnt) abort
       let index = s:get_index_as_string(cnt)
 
       call append('$', '   ['. index .']'. repeat(' ', (3 - strlen(index))) . fname)
-      execute 'nnoremap <buffer>' index ':edit' fnameescape(fname) s:chdir
+      execute 'nnoremap <buffer>' index ':edit' fnameescape(fname) '<bar> call <sid>check_user_options()<cr>'
     endfor
   endif
 
@@ -377,6 +376,7 @@ function! s:open_buffers(cword) abort
 
     for val in values(s:marked)
       let [path, type] = val[1:2]
+
       " open in split
       if type == 'S'
         if line2byte('$') == -1
@@ -395,7 +395,8 @@ function! s:open_buffers(cword) abort
       else
         execute 'edit' path
       endif
-      call s:chdir()
+
+      call s:check_user_options()
     endfor
 
     " remove markers for next instance of :Startify
@@ -408,9 +409,14 @@ function! s:open_buffers(cword) abort
   endif
 endfunction
 
-" Function: s:chdir {{{1
-function! s:chdir() abort
-  if get(g:, 'startify_change_to_dir', 1)
+" Function: s:check_user_options {{{1
+function! s:check_user_options() abort
+  let path = expand('%') . s:sep .'Session.vim'
+  " autoload session
+  if get(g:, 'startify_session_autoload') && filereadable(path)
+    execute 'source' path
+  " change directory
+  elseif get(g:, 'startify_change_to_dir', 1)
     if isdirectory(expand('%'))
       lcd %
     else

+ 9 - 0
doc/startify.txt

@@ -142,6 +142,15 @@ The number of files to list.
 When the file Session.vim is found in the current directory, it will be shown at
 the top of all lists as entry [0].
 
+============-
+
+    let g:startify_session_autoload = 0
+
+If you bookmark a directory that contains a Session.vim and this option is
+enabled, that session will be loaded automatically when you open the
+directory.
+
+Great way to create a portable project folder.
 
 ============-