/
makegreen.vim
85 lines (70 loc) · 1.83 KB
/
makegreen.vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
" plugin/makegreen.vim
" Author: Rein Henrichs <reinh@reinh.com>
" License: MIT License
" Install this file as plugin/makegreen.vim.
" ============================================================================
" Exit quickly when:
" - this plugin was already loaded (or disabled)
" - when 'compatible' is set
if &cp || exists("g:makegreen_loaded") && g:makegreen_loaded
finish
endif
let g:makegreen_loaded = 1
let s:save_cpo = &cpo
set cpo&vim
hi GreenBar term=reverse ctermfg=white ctermbg=green guifg=white guibg=green
hi RedBar term=reverse ctermfg=white ctermbg=red guifg=white guibg=red
function MakeGreen(...) "{{{1
let arg_count = a:0
if exists("g:makegreen_stay_on_file") && g:makegreen_stay_on_file
let make_command = "make!"
else
let make_command = "make"
endif
silent! w " TODO: configuration option?
if arg_count
silent! exec make_command . " " . a:1
else
silent! exec make_command
endif
redraw!
let error = s:GetFirstError()
if error != ''
call s:Bar("red", error)
else
call s:Bar("green","All tests passed")
endif
endfunction
"}}}1
"
" Utility Functions" {{{1
function s:GetFirstError()
if getqflist() == []
return ''
endif
for error in getqflist()
if error['valid']
break
endif
endfor
if ! error['valid']
return ''
endif
let error_message = substitute(error['text'], '^ *', '', 'g')
let error_message = substitute(error_message, "\n", ' ', 'g')
let error_message = substitute(error_message, " *", ' ', 'g')
return error_message
endfunction
function s:Bar(type, msg)
if a:type == "red"
echohl RedBar
else
echohl GreenBar
endif
echon a:msg repeat(" ", &columns - strlen(a:msg) - 1)
echohl None
endfunction
:command -nargs=* MakeGreen :call MakeGreen(<q-args>)
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:set sw=2 sts=2: