123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- """"""""""""""""""""""""""""""""
- let s:statuses = {}
- let s:timer_id = 0
- let s:last_status = ""
- function! go#statusline#Show() abort
-
- if !s:timer_id
-
- let interval = get(g:, 'go_statusline_duration', 60000)
- let s:timer_id = timer_start(interval, function('go#statusline#Clear'), {'repeat': -1})
- endif
-
- if empty(s:statuses)
- return ''
- endif
- let status_dir = expand('%:p:h')
- if !has_key(s:statuses, status_dir)
- return ''
- endif
- let status = s:statuses[status_dir]
- if !has_key(status, 'desc') || !has_key(status, 'state') || !has_key(status, 'type')
- return ''
- endif
- let status_text = printf("[%s|%s]", status.type, status.state)
- if empty(status_text)
- return ''
- endif
-
- if status_text != s:last_status
- if status.state =~ "success" || status.state =~ "finished" || status.state =~ "pass"
- hi goStatusLineColor cterm=bold ctermbg=76 ctermfg=22
- elseif status.state =~ "started" || status.state =~ "analysing" || status.state =~ "compiling"
- hi goStatusLineColor cterm=bold ctermbg=208 ctermfg=88
- elseif status.state =~ "failed"
- hi goStatusLineColor cterm=bold ctermbg=196 ctermfg=52
- endif
- endif
- let s:last_status = status_text
- return status_text
- endfunction
- function! go#statusline#Update(status_dir, status) abort
- let a:status.created_at = reltime()
- let s:statuses[a:status_dir] = a:status
-
-
- exe 'let &ro = &ro'
-
-
-
- call go#statusline#Clear(0)
-
-
- call timer_stop(s:timer_id)
- let s:timer_id = 0
- endfunction
- function! go#statusline#Clear(timer_id) abort
- for [status_dir, status] in items(s:statuses)
- let elapsed_time = reltimestr(reltime(status.created_at))
-
- let elapsed_time = substitute(elapsed_time, '^\s*\(.\{-}\)\s*$', '\1', '')
- if str2nr(elapsed_time) > 10
- call remove(s:statuses, status_dir)
- endif
- endfor
- if len(s:statuses) == 0
- let s:statuses = {}
- endif
-
-
- exe 'let &ro = &ro'
- endfunction
|