dotfiles/vim/.vim/plugin/Make.vim

62 lines
1.2 KiB
VimL
Raw Normal View History

let s:making = 0
command -nargs=* Make call s:make(<q-args>)
function s:make(args) abort
if s:making
if bufwinid(s:make_buf) == -1
" show making buffer
exe 'sbuffer' s:make_buf
wincmd p
else
"hide making buffer
exe printf('%d wincmd q', bufwinnr(s:make_buf))
endif
return
endif
" delete last result
if exists('s:make_buf') && bufexists(s:make_buf)
silent! exe 'bdelete' s:make_buf
endif
"spawn new make
let cmd = &makeprg
if !empty(a:args)
let cmd .= ' ' . a:args
endif
let options = {'close_cb': function('s:make_callback'), 'term_rows': 16}
let s:make_buf = term_start(cmd, options)
let s:making = 1
wincmd p
endfunction
func s:make_callback(channel)
" look, you can not get buffer content directly here.
call timer_start(10, function('s:make_callback_impl'))
endfunction
function s:make_callback_impl(timer) abort
exe 'cgetbuffer' s:make_buf
" consider entry with num zero bufnr and lnum an error or warning
let qfl = filter(getqflist(), {k,v -> v.bufnr != 0 && v.lnum != 0})
if empty(qfl)
echo "make successful"
else
echohl WarningMsg
echom printf('found %d qf entries', len(qfl))
echohl None
endif
let s:making = 0
endfunction