Implement a preview window for selecting locations to open

This commit is contained in:
w0rp
2018-04-22 15:53:01 +01:00
parent d8a673515a
commit 87ad4dfbe7
6 changed files with 104 additions and 25 deletions
+52 -2
View File
@@ -2,13 +2,16 @@
" Description: Preview windows for showing whatever information in.
" Open a preview window and show some lines in it.
function! ale#preview#Show(lines) abort
" An optional second argument can set an alternative filetype for the window.
function! ale#preview#Show(lines, ...) abort
let l:filetype = get(a:000, 0, 'ale-preview')
silent pedit ALEPreviewWindow
wincmd P
setlocal modifiable
setlocal noreadonly
setlocal nobuflisted
setlocal filetype=ale-preview
let &l:filetype = l:filetype
setlocal buftype=nofile
setlocal bufhidden=wipe
:%d
@@ -16,3 +19,50 @@ function! ale#preview#Show(lines) abort
setlocal nomodifiable
setlocal readonly
endfunction
" Show a location selection preview window, given some items.
" Each item should have 'filename', 'line', and 'column' keys.
function! ale#preview#ShowSelection(item_list) abort
let l:lines = []
" Create lines to display to users.
for l:item in a:item_list
call add(
\ l:lines,
\ l:item.filename
\ . ':' . l:item.line
\ . ':' . l:item.column,
\)
endfor
call ale#preview#Show(l:lines, 'ale-preview-selection')
let b:ale_preview_item_list = a:item_list
endfunction
function! s:Open(open_in_tab) abort
let l:item_list = get(b:, 'ale_preview_item_list', [])
let l:item = get(l:item_list, getcurpos()[1] - 1, {})
if empty(l:item)
return
endif
if !a:open_in_tab
:q!
endif
call ale#util#Open(
\ l:item.filename,
\ l:item.line,
\ l:item.column,
\ {'open_in_tab': a:open_in_tab},
\)
endfunction
function! ale#preview#OpenSelectionInBuffer() abort
call s:Open(0)
endfunction
function! ale#preview#OpenSelectionInTab() abort
call s:Open(1)
endfunction