I do not know how to differentiate* quickfix and location lists, but in place of checking whether location list is displayed I would suggest just closing it and checking whether number of windows shown has changed:
function! ToggleErrors()
let old_last_winnr = winnr('$')
lclose
if old_last_winnr == winnr('$')
" Nothing was closed, open syntastic error location panel
Errors
endif
endfunction
* if you are fine with the solution that will try lclose
if any is active check for the buffer displayed with buftype quickfix:
function! ToggleErrors()
if empty(filter(tabpagebuflist(), 'getbufvar(v:val, "&buftype") is# "quickfix"'))
" No location/quickfix list shown, open syntastic error location panel
Errors
else
lclose
endif
endfunction
. Note that lclose
will not close quickfix list.
To toggle the Error Panel with Ctrl-e you can use the following mapping
nnoremap <silent> <C-e> :<C-u>call ToggleErrors()<CR>