tomtom/quickfixsigns_vim

Do not overwrite signs from Syntastic's location list

blueyed opened this issue · 10 comments

quickfixsigns appears to overwrite the icon/symbol for all signs, although they might have one already (e.g. via Syntastic).

Syntastic uses different symbols for (style) warning/errors, and all of the appear to become "W>" through quickfixsigns.

Is it possible to detect if a symbol is already used/defined?

Removing loc from quickfixsigns_classes helps here, but the location list could be used in other contexts (let g:quickfixsigns_classes=['qfl', 'marks', 'vcsdiff', 'breakpoints']).

What do you mean by overwriting? (1) Use the same sign ID or (2) display a sign where syntastic displays one?

Are the signs created by syntastic identifiable somehow by inspecting getloclist(0)?

There is no way not give loclists created by syntastic a special treatment -- unless syntastic added a special marker. Anyway, I think the proper way would be to disable signs in syntastic when qfs is installed.

The output from getloclist(0) looks like this:

[{'lnum': 59, 'bufnr': 3, 'col': 80, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'E', 'pattern': '', 'text': 'line too long (152 > 79 characters) [E501]'}]

My use case here is that Syntastic adds a S> sign (for a style issue), while it's being considered as an error by qfs.

(Regarding syntastic, it should probably handle style issues as a warning to begin with, but that's something different)

FWIW, w:quickfix_title will be set to something like :SyntasticCheck flake8 (python) for the location list window.

This won't help. I guess the best option is to temporarily set b:noquickfixsigns per relevant buffer when using syntastic.

But b:noquickfixsigns would disable quickfixsigns altogether..
I am using Syntastic and quickfixsigns together almost everywhere.

Thanks!
It works with Neomake and g:quickfixsign_protect_sign_rx = '^neomake_'.

Why is there a mixture of g:quickfixsign_* and g:quickfixsigns_* settings btw?

Here is what I have in my .vimrc for this test. Only QFS and syntastic are enabled.

source ~/.vim_inc2

filetype plugin indent on   " enable detection, plugins and indenting in one step
syntax on
set nocompatible
set termencoding=utf-8
set encoding=utf-8
set updatetime=500

let g:quickfixsign_protect_sign_rx = 'SyntasticError|SyntasticWarning|SyntasticStyleError|SyntasticStyleWarning'

"let g:syntastic_auto_jump=1
"let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 1
let g:syntastic_error_symbol = "┃"
let g:syntastic_warning_symbol = "┃"
let syntastic_style_error_symbol = "┃"
let syntastic_style_warning_symbol = "┃"

let g:syntastic_enable_perl_checker=1
let g:syntastic_perl_checkers = ['perl', 'perlcritic']

If I uncomment lines for g:syntastic_auto_loc_list or g:syntastic_auto_jump and move the cursor just one line, my custom signs get overwritten by QFS. That is, instead of the bar I get >E. I set updatetime to 500 to make this visible directly (default is 4000). With those 2 lines uncommented it works as expected as long as I do not call :Errors. If I do that and move again I have the same effect. I can work around this by just doing :w but I do not know why.