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