108 lines
3.0 KiB
VimL
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:
|
|
|