First Commit
This is a first dotfiles config. I think I have a lot more to add tho...
This commit is contained in:
61
vim/.vim/plugin/Make.vim
Normal file
61
vim/.vim/plugin/Make.vim
Normal file
@ -0,0 +1,61 @@
|
||||
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
|
Reference in New Issue
Block a user