"============================================================================= " Copyright (C) 2009-2010 Takeshi NISHIDA " "============================================================================= " LOAD GUARD {{{1 if !l9#guardScriptLoading(expand(':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: