vim-unmanaged/L9/autoload/l9/quickfix.vim
2020-10-11 15:30:41 +02:00

108 lines
3.0 KiB
VimL

"=============================================================================
" Copyright (C) 2009-2010 Takeshi NISHIDA
"
"=============================================================================
" LOAD GUARD {{{1
if !l9#guardScriptLoading(expand('<sfile>:p'), 0, 0, [])
finish
endif
" }}}1
"=============================================================================
" QUICKFIX {{{1
" Returns non-zero if quickfix window is opened.
function l9#quickfix#isWindowOpened()
return count(map(range(1, winnr('$')), 'getwinvar(v:val, "&buftype")'), 'quickfix') > 0
endfunction
" Opens quickfix window if quickfix is not empty, and echo the number of errors.
"
" a:onlyRecognized: if non-zero, opens only if quickfix has recognized errors.
" a:holdCursor: if non-zero, the cursor won't move to quickfix window.
function l9#quickfix#openIfNotEmpty(onlyRecognized, holdCursor)
let numErrors = len(filter(getqflist(), 'v:val.valid'))
let numOthers = len(getqflist()) - numErrors
if numErrors > 0 || (!a:onlyRecognized && numOthers > 0)
copen
if a:holdCursor
wincmd p
endif
else
cclose
endif
redraw
if numOthers > 0
echo printf('Quickfix: %d(+%d)', numErrors, numOthers)
else
echo printf('Quickfix: %d', numErrors)
endif
endfunction
" Toggles Quickfix window
function l9#quickfix#toggleWindow()
if l9#quickfix#isWindowOpened()
cclose
else
call l9#quickfix#openIfNotEmpty(0, 0)
endif
endfunction
" Creates quickfix list form given lines and opens the quickfix window if
" errors exists.
"
" a:lines:
" a:jump: if non-zero, jump to the first error.
function l9#quickfix#setMakeResult(lines)
cexpr a:lines
call l9#quickfix#openIfNotEmpty(0, 1)
endfunction
" Compares quickfix entries for sorting.
function l9#quickfix#compareEntries(e0, e1)
if a:e0.bufnr != a:e1.bufnr
let i0 = bufname(a:e0.bufnr)
let i1 = bufname(a:e1.bufnr)
elseif a:e0.lnum != a:e1.lnum
let i0 = a:e0.lnum
let i1 = a:e1.lnum
elseif a:e0.col != a:e1.col
let i0 = a:e0.col
let i1 = a:e1.col
else
return 0
endif
return (i0 > i1 ? +1 : -1)
endfunction
" Sorts quickfix
function l9#quickfix#sort()
call setqflist(sort(getqflist(), 'l9#quickfix#compareEntries'), 'r')
endfunction
" Highlights Quickfix lines by :sign.
" Inspired by errormarker plugin.
"
" You can customize the highlighting via L9ErrorLine and L9WarningLine
" highlight groups.
function l9#quickfix#placeSign()
let warnings = []
let errors = []
for e in filter(getqflist(), 'v:val.valid')
let warning = (e.type ==? 'w' || e.text =~? '^\s*warning:')
call add((warning ? warnings : errors), [e.bufnr, e.lnum])
endfor
sign unplace *
call l9#placeSign('L9WarningLine', '>>', '', warnings)
call l9#placeSign('L9ErrorLine', '>>', '', errors)
endfunction
highlight default L9ErrorLine ctermfg=white ctermbg=52 guibg=#5F0000
highlight default L9WarningLine ctermfg=white ctermbg=17 guibg=#00005F
" }}}1
"=============================================================================
" vim: set fdm=marker: