From f8c9b7ddfe1c04ce200119e05aba220cbad7eb3d Mon Sep 17 00:00:00 2001 From: Marco Hinz <mh.codebro@gmail.com> Date: Sat, 10 Aug 2013 09:05:02 +0200 Subject: [PATCH 1/4] 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) ? '<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 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. ============- From 8c09725d03abf4205be1fba030fba4d4c9de1a5f Mon Sep 17 00:00:00 2001 From: Marco Hinz <mh.codebro@gmail.com> Date: Sat, 10 Aug 2013 10:41:27 +0200 Subject: [PATCH 2/4] User some helper variables --- autoload/startify.vim | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/autoload/startify.vim b/autoload/startify.vim index 78cb0d6..dcb38c5 100644 --- a/autoload/startify.vim +++ b/autoload/startify.vim @@ -411,13 +411,16 @@ endfunction " Function: s:check_user_options {{{1 function! s:check_user_options() abort - let path = expand('%') . s:sep .'Session.vim' + let path = expand('%') + let session = path . s:sep .'Session.vim' + + echom '>>> '. path " autoload session - if get(g:, 'startify_session_autoload') && filereadable(path) - execute 'source' path + if get(g:, 'startify_session_autoload') && filereadable(session) + execute 'source' session " change directory elseif get(g:, 'startify_change_to_dir', 1) - if isdirectory(expand('%')) + if isdirectory(path) lcd % else lcd %:h From 050c424afea2de93c09feab5e401dcc349c840db Mon Sep 17 00:00:00 2001 From: Marco Hinz <mh.codebro@gmail.com> Date: Sat, 10 Aug 2013 10:43:28 +0200 Subject: [PATCH 3/4] Doc: add another FAQ because of NERDTree --- doc/startify.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/startify.txt b/doc/startify.txt index 03ca4d3..d38aa85 100644 --- a/doc/startify.txt +++ b/doc/startify.txt @@ -322,6 +322,14 @@ Put this in your vimrc: \ endif +The session autoload feature is not working! +-------------------------------------------- + +Do you have NERDTree installed by any chance? If so, try this: + + let NERDTreeHijackNetrw = 0 + + I don't want the start screen to use cursorline! ------------------------------------------------ From aa17311a941097f6b5b9458debe857fec493412b Mon Sep 17 00:00:00 2001 From: Marco Hinz <mh.codebro@gmail.com> Date: Sun, 11 Aug 2013 19:04:17 +0200 Subject: [PATCH 4/4] Fix indexing for certain list orders References #32. --- autoload/startify.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoload/startify.vim b/autoload/startify.vim index dcb38c5..ae91b11 100644 --- a/autoload/startify.vim +++ b/autoload/startify.vim @@ -277,7 +277,7 @@ function! s:show_sessions(cnt) abort execute 'nnoremap <buffer>' index ':source' fnameescape(sfiles[i]) '<cr>' endfor - return idx + return idx + 1 endfunction " Function: s:show_bookmarks {{{1 @@ -286,11 +286,12 @@ function! s:show_bookmarks(cnt) abort if exists('g:startify_bookmarks') for fname in g:startify_bookmarks - let cnt += 1 let index = s:get_index_as_string(cnt) call append('$', ' ['. index .']'. repeat(' ', (3 - strlen(index))) . fname) execute 'nnoremap <buffer>' index ':edit' fnameescape(fname) '<bar> call <sid>check_user_options()<cr>' + + let cnt += 1 endfor endif @@ -414,7 +415,6 @@ function! s:check_user_options() abort let path = expand('%') let session = path . s:sep .'Session.vim' - echom '>>> '. path " autoload session if get(g:, 'startify_session_autoload') && filereadable(session) execute 'source' session