Add ALEStartLint autocmd

This grew out of my work in #1193; to ensure the statusline was being
updated I had to add:

    fun! s:redraw(timer)
        redrawstatus
    endfun

    augroup ALEProgress
        autocmd!
        autocmd BufWritePost * call timer_start(100, function('s:redraw'))
        autocmd User ALELint redrawstatus
    augroup end

Which kind of works, but is ugly. With this, I can replace the
`BufWritePost` with:

    autocmd User ALEStartLint redrawstatus

Which is much better, IMHO.

Actually, this patch actually replaces adding a function, since you can
do:

    augroup ALEProgress
        autocmd!
        autocmd User ALEStartLint hi Statusline ctermfg=darkgrey
        autocmd User ALELint      hi Statusline ctermfg=NONE
    augroup end

or:

    let s:ale_running = 0
    let l:stl .= '%{s:ale_running ? "[linting]" : ""}'
    augroup ALEProgress
        autocmd!
        autocmd User ALEStartLint let s:ale_running = 1 | redrawstatus
        autocmd User ALELint      let s:ale_running = 0 | redrawstatus
    augroup end

Both seem to work very well in my testing.

No need to `ale#Statusline#IsRunning()` anymore, I think?
This commit is contained in:
Martin Tournoij
2017-12-07 15:26:20 +00:00
parent e2a8f759d8
commit d6bf13502a
4 changed files with 38 additions and 5 deletions

View File

@@ -2196,6 +2196,12 @@ ALELint *ALELint-autocmd*
The autocmd commands are run with |:silent|, so |:unsilent| is required for
echoing messges.
ALEStartLint *ALEStartLint-autocmd*
This |User| autocommand is triggered by ALE right after it started a new
linting job.
===============================================================================
10. Special Thanks *ale-special-thanks*