From f8c9b7ddfe1c04ce200119e05aba220cbad7eb3d Mon Sep 17 00:00:00 2001 From: Marco Hinz Date: Sat, 10 Aug 2013 09:05:02 +0200 Subject: [PATCH] New option: g:startify_session_autoload --- autoload/startify.vim | 42 ++++++++++++++++++++++++------------------ doc/startify.txt | 9 +++++++++ 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/autoload/startify.vim b/autoload/startify.vim index 11a8f3e..78cb0d6 100644 --- a/autoload/startify.vim +++ b/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) ? ' if isdirectory(expand("%")) lcd % else lcd %:h endif' : '') .'' +" 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 0 :source Session.vim' 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 ' index ':edit' fnameescape(fname) s:chdir + execute 'nnoremap ' index ':edit' fnameescape(fname) ' call check_user_options()' 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 ' index ':edit' fnameescape(fname) s:chdir + execute 'nnoremap ' index ':edit' fnameescape(fname) ' call check_user_options()' 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 diff --git a/doc/startify.txt b/doc/startify.txt index f64dc57..03ca4d3 100644 --- a/doc/startify.txt +++ b/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. ============-