2014-10-31 17:30:24 -04:00
|
|
|
let s:buf_nr = -1
|
|
|
|
|
|
|
|
"OpenWindow opens a new scratch window and put's the content into the window
|
2015-01-18 07:58:28 -05:00
|
|
|
function! go#ui#OpenWindow(title, content)
|
2014-10-31 17:30:24 -04:00
|
|
|
" reuse existing buffer window if it exists otherwise create a new one
|
|
|
|
if !bufexists(s:buf_nr)
|
|
|
|
execute 'botright new'
|
2015-01-18 07:58:28 -05:00
|
|
|
file `="[" . a:title . "]"`
|
2014-10-31 17:30:24 -04:00
|
|
|
let s:buf_nr = bufnr('%')
|
|
|
|
elseif bufwinnr(s:buf_nr) == -1
|
|
|
|
execute 'botright new'
|
|
|
|
execute s:buf_nr . 'buffer'
|
|
|
|
elseif bufwinnr(s:buf_nr) != bufwinnr('%')
|
|
|
|
execute bufwinnr(s:buf_nr) . 'wincmd w'
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" Keep minimum height to 10, if there is more just increase it that it
|
|
|
|
" occupies all results
|
2015-01-18 07:58:28 -05:00
|
|
|
let buffer_height = 10
|
|
|
|
if len(a:content) < buffer_height
|
|
|
|
exe 'resize ' . buffer_height
|
2014-10-31 17:30:24 -04:00
|
|
|
else
|
|
|
|
exe 'resize ' . len(a:content)
|
|
|
|
endif
|
|
|
|
|
|
|
|
" some sane default values for a readonly buffer
|
|
|
|
setlocal filetype=vimgo
|
|
|
|
setlocal bufhidden=delete
|
|
|
|
setlocal buftype=nofile
|
|
|
|
setlocal noswapfile
|
|
|
|
setlocal nobuflisted
|
|
|
|
setlocal winfixheight
|
|
|
|
setlocal cursorline " make it easy to distinguish
|
|
|
|
|
|
|
|
" we need this to purge the buffer content
|
|
|
|
setlocal modifiable
|
|
|
|
|
|
|
|
"delete everything first from the buffer
|
|
|
|
%delete _
|
|
|
|
|
|
|
|
" add the content
|
|
|
|
call append(0, a:content)
|
|
|
|
|
|
|
|
" delete last line that comes from the append call
|
|
|
|
$delete _
|
|
|
|
|
|
|
|
" set it back to non modifiable
|
|
|
|
setlocal nomodifiable
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
|
|
" CloseWindow closes the current window
|
|
|
|
function! go#ui#CloseWindow()
|
|
|
|
close
|
|
|
|
echo ""
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
" OpenDefinition parses the current line and jumps to it by openening a new
|
|
|
|
" tab
|
2015-01-18 07:58:28 -05:00
|
|
|
function! go#ui#OpenDefinition(filter)
|
2014-10-31 17:30:24 -04:00
|
|
|
let curline = getline('.')
|
|
|
|
|
2015-01-18 07:58:28 -05:00
|
|
|
" don't touch our first line or any blank line
|
|
|
|
if curline =~ a:filter || curline =~ "^$"
|
2014-10-31 17:30:24 -04:00
|
|
|
" supress information about calling this function
|
|
|
|
echo ""
|
|
|
|
return
|
|
|
|
endif
|
|
|
|
|
|
|
|
" format: 'interface file:lnum:coln'
|
|
|
|
let mx = '^\(^\S*\)\s*\(.\{-}\):\(\d\+\):\(\d\+\)'
|
|
|
|
|
|
|
|
" parse it now into the list
|
|
|
|
let tokens = matchlist(curline, mx)
|
|
|
|
|
|
|
|
" convert to: 'file:lnum:coln'
|
|
|
|
let expr = tokens[2] . ":" . tokens[3] . ":" . tokens[4]
|
|
|
|
|
|
|
|
" jump to it in a new tab, we use explicit lgetexpr so we can later change
|
|
|
|
" the behaviour via settings (like opening in vsplit instead of tab)
|
|
|
|
lgetexpr expr
|
|
|
|
tab split
|
|
|
|
ll 1
|
|
|
|
|
|
|
|
" center the word
|
|
|
|
norm! zz
|
|
|
|
endfunction
|
|
|
|
|