# HG changeset patch # User Steve Losh <steve@stevelosh.com> # Date 1287617733 14400 # Node ID 46b08690fafaaaee28fad39785dbee240e093e37 # Parent 9d0c32dd7651eb79b6aee1d5dd921e2792a30db3 Add some preview buffer mappings and move the settings functions. fixes issue 11 diff -r 9d0c32dd7651 -r 46b08690fafa plugin/gundo.vim --- a/plugin/gundo.vim Wed Oct 20 19:29:43 2010 -0400 +++ b/plugin/gundo.vim Wed Oct 20 19:35:33 2010 -0400 @@ -87,7 +87,7 @@ "}}} -"{{{ Gundo buffer mappings +"{{{ Gundo buffer settings function! s:GundoMapGraph()"{{{ nnoremap <script> <silent> <buffer> <CR> :call <sid>GundoRevert()<CR> @@ -95,93 +95,15 @@ nnoremap <script> <silent> <buffer> k :call <sid>GundoMove(-1)<CR> nnoremap <script> <silent> <buffer> gg gg:call <sid>GundoMove(1)<CR> nnoremap <script> <silent> <buffer> P :call <sid>GundoPlayTo()<CR> - nnoremap <script> <silent> <buffer> q :call <sid>GundoToggle()<CR> - cabbrev <script> <silent> <buffer> q call <sid>GundoToggle() - cabbrev <script> <silent> <buffer> quit call <sid>GundoToggle() + nnoremap <script> <silent> <buffer> q :call <sid>GundoClose()<CR> + cabbrev <script> <silent> <buffer> q call <sid>GundoClose() + cabbrev <script> <silent> <buffer> quit call <sid>GundoClose() endfunction"}}} function! s:GundoMapPreview()"{{{ - return -endfunction"}}} - -"}}} - -"{{{ Buffer/window management - -function! s:GundoResizeBuffers(backto)"{{{ - exe bufwinnr(bufnr('__Gundo__')) . "wincmd w" - exe "vertical resize " . g:gundo_width - - exe bufwinnr(bufnr('__Gundo_Preview__')) . "wincmd w" - exe "resize " . 15 - - exe a:backto . "wincmd w" -endfunction"}}} - -function! s:GundoOpenBuffer()"{{{ - let existing_gundo_buffer = bufnr("__Gundo__") - - if existing_gundo_buffer == -1 - exe bufwinnr(bufnr('__Gundo_Preview__')) . "wincmd w" - exe "new __Gundo__" - call s:GundoResizeBuffers(winnr()) - call s:GundoMapGraph() - else - let existing_gundo_window = bufwinnr(existing_gundo_buffer) - - if existing_gundo_window != -1 - if winnr() != existing_gundo_window - exe existing_gundo_window . "wincmd w" - endif - else - exe bufwinnr(bufnr('__Gundo_Preview__')) . "wincmd w" - exe "split +buffer" . existing_gundo_buffer - call s:GundoResizeBuffers(winnr()) - endif - endif -endfunction"}}} - -function! s:GundoClose(return_to)"{{{ - if bufwinnr(bufnr('__Gundo__')) != -1 - exe bufwinnr(bufnr('__Gundo__')) . "wincmd w" - quit - endif - - if bufwinnr(bufnr('__Gundo_Preview__')) != -1 - exe bufwinnr(bufnr('__Gundo_Preview__')) . "wincmd w" - quit - endif - - exe bufwinnr(a:return_to) . "wincmd w" -endfunction"}}} - -function! s:GundoToggle()"{{{ - if expand('%') == "__Gundo__" - call s:GundoClose(g:gundo_target_n) - else - if expand('%') != "__Gundo_Preview__" - " Record the previous buffer number. - " - " This sucks because we're not getting the window number, and there - " may be more than one window viewing the same buffer, so we might - " go back to the wrong one. - " - " Unfortunately window numbers change as we open more windows. - " - " TODO: Figure out how to fix this. - let g:gundo_target_n = bufnr('') - let g:gundo_target_f = @% - endif - - call s:GundoOpenPreview() - exe bufwinnr(g:gundo_target_n) . "wincmd w" - GundoRender - - " TODO: Move these lines into RenderPreview - let target_line = matchstr(getline("."), '\v\[[0-9]+\]') - let target_num = matchstr(target_line, '\v[0-9]+') - call s:GundoRenderPreview(target_num) - endif + nnoremap <script> <silent> <buffer> q :call <sid>GundoClose()<CR> + cabbrev <script> <silent> <buffer> q call <sid>GundoClose() + cabbrev <script> <silent> <buffer> quit call <sid>GundoClose() endfunction"}}} function! s:GundoMarkPreviewBuffer()"{{{ @@ -226,6 +148,86 @@ hi def link GundoNumber Identifier endfunction"}}} +"}}} + +"{{{ Buffer/window management + +function! s:GundoResizeBuffers(backto)"{{{ + exe bufwinnr(bufnr('__Gundo__')) . "wincmd w" + exe "vertical resize " . g:gundo_width + + exe bufwinnr(bufnr('__Gundo_Preview__')) . "wincmd w" + exe "resize " . 15 + + exe a:backto . "wincmd w" +endfunction"}}} + +function! s:GundoOpenBuffer()"{{{ + let existing_gundo_buffer = bufnr("__Gundo__") + + if existing_gundo_buffer == -1 + exe bufwinnr(bufnr('__Gundo_Preview__')) . "wincmd w" + exe "new __Gundo__" + call s:GundoResizeBuffers(winnr()) + call s:GundoMapGraph() + else + let existing_gundo_window = bufwinnr(existing_gundo_buffer) + + if existing_gundo_window != -1 + if winnr() != existing_gundo_window + exe existing_gundo_window . "wincmd w" + endif + else + exe bufwinnr(bufnr('__Gundo_Preview__')) . "wincmd w" + exe "split +buffer" . existing_gundo_buffer + call s:GundoResizeBuffers(winnr()) + endif + endif +endfunction"}}} + +function! s:GundoClose()"{{{ + if bufwinnr(bufnr('__Gundo__')) != -1 + exe bufwinnr(bufnr('__Gundo__')) . "wincmd w" + quit + endif + + if bufwinnr(bufnr('__Gundo_Preview__')) != -1 + exe bufwinnr(bufnr('__Gundo_Preview__')) . "wincmd w" + quit + endif + + exe bufwinnr(g:gundo_target_n) . "wincmd w" +endfunction"}}} + +function! s:GundoToggle()"{{{ + if expand('%') == "__Gundo__" + call s:GundoClose() + else + if expand('%') != "__Gundo_Preview__" + " Record the previous buffer number. + " + " This sucks because we're not getting the window number, and there + " may be more than one window viewing the same buffer, so we might + " go back to the wrong one. + " + " Unfortunately window numbers change as we open more windows. + " + " TODO: Figure out how to fix this. + let g:gundo_target_n = bufnr('') + let g:gundo_target_f = @% + endif + + call s:GundoOpenPreview() + exe bufwinnr(g:gundo_target_n) . "wincmd w" + GundoRender + + " TODO: Move these lines into RenderPreview + let target_line = matchstr(getline("."), '\v\[[0-9]+\]') + let target_num = matchstr(target_line, '\v[0-9]+') + call s:GundoRenderPreview(target_num) + endif +endfunction"}}} + function! s:GundoOpenPreview()"{{{ let existing_preview_buffer = bufnr("__Gundo_Preview__")