Fix #528 remove and restore highlights when buffers are hidden and shown
This commit is contained in:
parent
858c1c47ae
commit
0aed51565e
@ -15,11 +15,16 @@ endif
|
|||||||
" wait until the buffer is entered again to show the highlights, unless
|
" wait until the buffer is entered again to show the highlights, unless
|
||||||
" the buffer is in focus when linting completes.
|
" the buffer is in focus when linting completes.
|
||||||
let s:buffer_highlights = {}
|
let s:buffer_highlights = {}
|
||||||
|
let s:buffer_restore_map = {}
|
||||||
|
|
||||||
function! ale#highlight#UnqueueHighlights(buffer) abort
|
function! ale#highlight#UnqueueHighlights(buffer) abort
|
||||||
if has_key(s:buffer_highlights, a:buffer)
|
if has_key(s:buffer_highlights, a:buffer)
|
||||||
call remove(s:buffer_highlights, a:buffer)
|
call remove(s:buffer_highlights, a:buffer)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if has_key(s:buffer_restore_map, a:buffer)
|
||||||
|
call remove(s:buffer_restore_map, a:buffer)
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:GetALEMatches() abort
|
function! s:GetALEMatches() abort
|
||||||
@ -60,6 +65,11 @@ endfunction
|
|||||||
|
|
||||||
function! ale#highlight#UpdateHighlights() abort
|
function! ale#highlight#UpdateHighlights() abort
|
||||||
let l:buffer = bufnr('%')
|
let l:buffer = bufnr('%')
|
||||||
|
|
||||||
|
if has_key(s:buffer_restore_map, l:buffer)
|
||||||
|
call setmatches(s:buffer_restore_map[l:buffer])
|
||||||
|
endif
|
||||||
|
|
||||||
let l:has_new_items = has_key(s:buffer_highlights, l:buffer)
|
let l:has_new_items = has_key(s:buffer_highlights, l:buffer)
|
||||||
let l:loclist = l:has_new_items ? remove(s:buffer_highlights, l:buffer) : []
|
let l:loclist = l:has_new_items ? remove(s:buffer_highlights, l:buffer) : []
|
||||||
|
|
||||||
@ -85,9 +95,16 @@ function! ale#highlight#UpdateHighlights() abort
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! ale#highlight#BufferHidden(buffer) abort
|
||||||
|
" Remember all matches, so they can be restored later.
|
||||||
|
let s:buffer_restore_map[a:buffer] = getmatches()
|
||||||
|
call clearmatches()
|
||||||
|
endfunction
|
||||||
|
|
||||||
augroup ALEHighlightBufferGroup
|
augroup ALEHighlightBufferGroup
|
||||||
autocmd!
|
autocmd!
|
||||||
autocmd BufEnter * call ale#highlight#UpdateHighlights()
|
autocmd BufEnter * call ale#highlight#UpdateHighlights()
|
||||||
|
autocmd BufHidden * call ale#highlight#BufferHidden(expand('<abuf>'))
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
function! ale#highlight#SetHighlights(buffer, loclist) abort
|
function! ale#highlight#SetHighlights(buffer, loclist) abort
|
||||||
|
@ -91,3 +91,19 @@ Execute(Highlights set by ALE should be removed when buffer cleanup is done):
|
|||||||
call ale#cleanup#Buffer(bufnr('%'))
|
call ale#cleanup#Buffer(bufnr('%'))
|
||||||
|
|
||||||
AssertEqual [], getmatches()
|
AssertEqual [], getmatches()
|
||||||
|
|
||||||
|
Execute(Highlights should be cleared when buffers are hidden):
|
||||||
|
call ale#engine#InitBufferInfo(bufnr('%'))
|
||||||
|
call ale#highlight#SetHighlights(bufnr('%'), [
|
||||||
|
\ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 2},
|
||||||
|
\])
|
||||||
|
|
||||||
|
AssertEqual 1, len(getmatches()), 'The highlights weren''t initially set!'
|
||||||
|
|
||||||
|
call ale#highlight#BufferHidden(bufnr('%'))
|
||||||
|
|
||||||
|
AssertEqual 0, len(getmatches()), 'The highlights weren''t cleared!'
|
||||||
|
|
||||||
|
call ale#highlight#UpdateHighlights()
|
||||||
|
|
||||||
|
AssertEqual 1, len(getmatches()), 'The highlights weren''t set again!'
|
||||||
|
Loading…
Reference in New Issue
Block a user