Pablo Giménez schrieb:
> Hi
> I am trying to use the Minibuffer and Sessionman plugins together.
> The problem is that in my config before exiting vim sessionman save the
> current session.
> If I have minbuffer in the session, then the next time I open the session in
> the top window, where minibuffer window appears, one of the buffers saved in
> the last session appears, instead of the minibuffer window.
> But the thing that is even more curious is that if I move to this top
> window, then a new window appears at the top with the minibuffer window.
> So seems that the minibuffer window state is not proeprly saved to te
> session, or for some reason when opening the session the minibufer pluging
> is not loaded, it is only loaded when I move to the top window.
> Any ideas, somebody has minibuffer and sessionman plugins working together
> properly???
> Thanks

You are quite unspecific about the scripts in question.  What are the
exact names, download locations, version numbers, etc??

I'm just guessing:
- minibufexpl.vim (6.3.2)
  http://vim.sf.net/scripts/script.php?script_id=159
- sessionman.vim (1.04)
  http://vim.sf.net/scripts/script.php?script_id=2010

I think that Minibufexpl-autocommands interfer when a session file is
sourced.

Check out the attached mod of sessionman.vim, which is now more "mbe aware".

-- 
Andy

-- 
You received this message from the "vim_use" maillist.
For more information, visit http://www.vim.org/maillist.php
"============================================================================"
"
"  Vim session manager
"
"  Copyright (c) Yuri Klubakov
"
"  Author:      Yuri Klubakov <yuri.mlists at gmail dot com>
"  Version:     1.04 (2008-06-21)
"  Requires:    Vim 6
"  License:     GPL
"
"  Mods:                Andy Wokula <[email protected]>
"  2009 Dec 09  less problems with MiniBufExplorer (Vimscript #159)
"
"  Description:
"
"  Vim provides a ':mksession' command to save the current editing session.
"  This plug-in helps to work with Vim sessions by keeping them in the
"  dedicated location and by providing commands to list all sessions, open
"  session, open last session, close session, save session and show last
"  session.  From a list of sessions you can open session, delete session,
"  edit session and edit extra session script.  Please note that session
"  name can contain spaces and does not have to have a .vim extension.
"
"  On Windows, DOS and OS2 sessions are saved in:
"    "$HOME/vimfiles/sessions"   if $HOME is defined
"    "$APPDATA/Vim/sessions"     if $APPDATA is defined
"    "$VIM/sessions"             otherwise
"  On Unix sessions are saved in:
"    "$HOME/.vim/sessions"
"  If this directory does not exist, it will be created by the :SessionSave
"  command (requires Vim 7).
"
"  :SessionList command creates a new window with session names.
"  At the top of the window there is a help that shows normal mode mappings:
"    q, <ESC>                 - close session list
"    o, <CR>, <2-LeftMouse>   - open session
"    d                        - delete session
"    e                        - edit session
"    x                        - edit extra session script
"  The name of an opened session is saved in g:LAST_SESSION variable which is
"  saved in the viminfo file if 'viminfo' option contains '!'.  It is used to
"  open last session by :SessionOpenLast command.  It can be done when Vim
"  starts (gvim +bd -c OpenLastSession) or any time during a Vim session.
"  You can edit an extra session script to specify additional settings and
"  actions associated with a given session.  If you change values of
"  'expandtab', 'tabstop' or 'shiftwidth', they will be restored to their
"  original values when session is closed or before a new session is opened.
"  When session is opened and 'cscope' is enabled, script calls 'cscope add'
"  for the current directory so make sure it is set correctly for the session.
"
"  :SessionOpen command takes a session name as an argument.  It supports
"  argument completion.
"
"  :SessionOpenLast command opens the g:LAST_SESSION session (see above).
"
"  :SessionClose command wipes out all buffers, kills cscope and clears
"  variables with session name.
"
"  :SessionSave command saves the current editing session.  If v:this_session
"  is empty it asks for a session name.
"
"  :SessionSaveAs command takes a session name as an optional argument.  If
"  there is no argument or it is empty, it asks for a session name (default
"  is the last part of v:this_session).
"
"  :SessionShowLast command shows the content of the g:LAST_SESSION and
"  v:this_session variables.
"
"  If 'sessionman_save_on_exit != 0' (default) then the current editing
"  session will be automatically saved when you exit Vim.
"
"  Plug-in creates a "Sessions" sub-menu under the "File" menu.
"
"============================================================================"

if !has('mksession') || exists('loaded_sessionman')
        finish
endif
let loaded_sessionman = 1

if !exists('sessionman_save_on_exit')
        let sessionman_save_on_exit = 1
endif

let s:cpo_save = &cpo
set cpo&vim

if has("win32") || has("dos32") || has("dos16") || has("os2")
        let s:sessions_path = ($HOME != '') ? $HOME . '/vimfiles' : ($APPDATA 
!= '') ? $APPDATA . '/Vim' : $VIM
        let s:sessions_path = substitute(s:sessions_path, '\\', '/', 'g') . 
'/sessions'
else
        let s:sessions_path = $HOME . '/.vim/sessions'
endif

let s:et_save = &et
let s:sw_save = &sw
let s:ts_save = &ts

"============================================================================"

function! s:RestoreDefaults()
        let &et = s:et_save
        let &sw = s:sw_save
        let &ts = s:ts_save
endfunction

"============================================================================"

function! s:OpenSession(name)
        if a:name != '' && a:name[0] != '"'
                call s:RestoreDefaults()
                execute 'silent! 1,' . bufnr('$') . 'bwipeout!'
                let n = bufnr('%')
                " execute 'silent! so ' . s:sessions_path . '/' . a:name
                call s:SourceWithMbe('silent! so ' . s:sessions_path . '/' . 
a:name)
                execute 'silent! bwipeout! ' . n
                if has('cscope')
                        silent! cscope kill -1
                        silent! cscope add .
                endif
                let g:LAST_SESSION = a:name
        endif
endfunction

" source a session file, be aware of MiniBufExplorer; 2009 Dec 09
function! s:SourceWithMbe(so_cmd)
        if exists(":UMiniBufExplorer") && g:miniBufExplorerAutoUpdate
                let g:miniBufExplorerAutoUpdate = 0
                execute a:so_cmd
                let g:miniBufExplorerAutoUpdate = 1
                UMiniBufExplorer
        else
                execute a:so_cmd
        endif
endfunction

"============================================================================"

function! s:CloseSession()
        call s:RestoreDefaults()
        execute 'silent! 1,' . bufnr('$') . 'bwipeout!'
        if has('cscope')
                silent! cscope kill -1
        endif
        unlet! g:LAST_SESSION
        let v:this_session = ''
endfunction

"============================================================================"

function! s:DeleteSession(name)
        if a:name != '' && a:name[0] != '"'
                let save_go = &guioptions
                set guioptions+=c
                if confirm('Are you sure you want to delete "' . a:name . '" 
session?', "&Yes\n&No", 2) == 1
                        setlocal modifiable
                        d
                        setlocal nomodifiable
                        if delete(s:sessions_path . '/' . a:name) != 0
                                redraw | echohl ErrorMsg | echo 'Error deleting 
"' . a:name . '" session file' | echohl None
                        endif
                endif
                let &guioptions = save_go
        endif
endfunction

"============================================================================"

function! s:EditSession(name)
        if a:name != '' && a:name[0] != '"'
                bwipeout!
                execute 'silent! edit ' . s:sessions_path . '/' . a:name
                set ft=vim
        endif
endfunction

"============================================================================"

function! s:EditSessionExtra(name)
        if a:name != '' && a:name[0] != '"'
                bwipeout!
                execute 'silent! edit ' . s:sessions_path . '/' . a:name . 
'x.vim'
        endif
endfunction

"============================================================================"

function! s:ListSessions()
        let w_sl = bufwinnr("__SessionList__")
        if w_sl != -1
                execute w_sl . 'wincmd w'
                return
        endif
        silent! split __SessionList__

        " Mark the buffer as scratch
        setlocal buftype=nofile
        setlocal bufhidden=wipe
        setlocal noswapfile
        setlocal nowrap
        setlocal nobuflisted

        nnoremap <buffer> <silent> <ESC> :bwipeout!<CR>
        nnoremap <buffer> <silent> q :bwipeout!<CR>
        nnoremap <buffer> <silent> o :call <SID>OpenSession(getline('.'))<CR>
        nnoremap <buffer> <silent> <CR> :call <SID>OpenSession(getline('.'))<CR>
        nnoremap <buffer> <silent> <2-LeftMouse> :call 
<SID>OpenSession(getline('.'))<CR>
        nnoremap <buffer> <silent> d :call <SID>DeleteSession(getline('.'))<CR>
        nnoremap <buffer> <silent> e :call <SID>EditSession(getline('.'))<CR>
        nnoremap <buffer> <silent> x :call 
<SID>EditSessionExtra(getline('.'))<CR>

        syn match Comment "^\".*"
        put ='\"-----------------------------------------------------'
        put ='\" q, <ESC>                 - close session list'
        put ='\" o, <CR>, <2-LeftMouse>   - open session'
        put ='\" d                        - delete session'
        put ='\" e                        - edit session'
        put ='\" x                        - edit extra session script'
        put ='\"-----------------------------------------------------'
        put =''
        let l = line(".")

        let sessions = substitute(glob(s:sessions_path . '/*'), '\\', '/', 'g')
        let sessions = substitute(sessions, "\\(^\\|\n\\)" . s:sessions_path . 
'/', '\1', 'g')
        let sessions = substitute(sessions, "\n[^\n]\\+x\\.vim\n", '\n', 'g')
        if sessions == ''
                syn match Error "^\" There.*"
                let sessions = '" There are no saved sessions'
        endif
        silent put =sessions

        0,1d
        execute l
        setlocal nomodifiable
endfunction

"============================================================================"

function! s:SaveSessionAs(...)
        if a:0 == 0 || a:1 == ''
                let name = input('Save session as: ', 
substitute(v:this_session, '.*\(/\|\\\)', '', ''))
        else
                let name = a:1
        endif
        if name != ''
                if v:version >= 700 && finddir(s:sessions_path, '/') == ''
                        call mkdir(s:sessions_path, 'p')
                endif
                silent! argdel *
                let g:LAST_SESSION = name
                execute 'silent mksession! ' . s:sessions_path . '/' . name
                redraw | echo 'Saved session "' . name . '"'
        endif
endfunction

"============================================================================"

function! s:SaveSession()
        call s:SaveSessionAs(substitute(v:this_session, '.*\(/\|\\\)', '', ''))
endfunction

"============================================================================"

function! s:ShowLastSession()
        if exists('g:LAST_SESSION')
                redraw | echo 'Last session is "' . g:LAST_SESSION . '"'
        else
                redraw | echo 'Last session is undefined'
        endif
        echon ', current session is "' . substitute(v:this_session, 
'.*\(/\|\\\)', '', '') . '"'
endfunction

"============================================================================"

function! s:SessionOpenComplete(A, L, P)
        let sessions = substitute(glob(s:sessions_path . '/*'), '\\', '/', 'g')
        return substitute(sessions, '\(^\|\n\)' . s:sessions_path . '/', '\1', 
'g')
endfunction

"============================================================================"

command! -nargs=1 -complete=custom,s:SessionOpenComplete SessionOpen call 
s:OpenSession(<f-args>)
command! -nargs=0 SessionOpenLast if exists('g:LAST_SESSION') | call 
s:OpenSession(g:LAST_SESSION) | endif
command! -nargs=0 SessionClose call s:CloseSession()
command! -nargs=0 SessionList call s:ListSessions()
command! -nargs=0 SessionSave call s:SaveSession()
command! -nargs=? SessionSaveAs call s:SaveSessionAs(<f-args>)
command! -nargs=0 SessionShowLast call s:ShowLastSession()

"============================================================================"

an 10.370 &File.-SessionsSep-                           <Nop>
an 10.371 &File.S&essions.&Open\.\.\.           :SessionList<CR>
an 10.372 &File.S&essions.Open\ &Last           :SessionOpenLast<CR>
an 10.373 &File.S&essions.&Close                        :SessionClose<CR>
an 10.374 &File.S&essions.&Save                         :SessionSave<CR>
an 10.374 &File.S&essions.Save\ &As\.\.\.       :SessionSaveAs<CR>

aug sessionman
        au VimLeavePre * if sessionman_save_on_exit && v:this_session != '' | 
call s:SaveSession() | endif
aug END

let &cpo = s:cpo_save
unlet s:cpo_save

" vim: set ts=4 sw=4 noet :


Reply via email to