@@ -28,35 +28,19 @@ function! sy#sign#get_current_signs(sy) abort
28
28
let a: sy .internal = {}
29
29
let a: sy .external = {}
30
30
31
- let has_sign_func = has (' patch-8.1.614' )
32
- if has_sign_func
33
- let signlist = sign_getplaced (a: sy .buffer )[0 ].signs
34
- else
35
- let signlist = split (sy#util#execute (' sign place buffer=' . a: sy .buffer ), ' \n' )[2 :]
36
- endif
37
-
38
- for signline in signlist
39
- if has_sign_func
40
- let line = signline.lnum
41
- let id = signline.id
42
- let type = signline.name
43
- else
44
- let tokens = matchlist (signline, ' \v^\s+\S+\=(\d+)\s+\S+\=(\d+)\s+\S+\=(.*)$' )
45
- let line = str2nr (tokens[1 ])
46
- let id = str2nr (tokens[2 ])
47
- let type = tokens[3 ]
48
- endif
31
+ let signlist = sy#util#get_signs (a: sy .buffer )
49
32
50
- if type = ~# ' ^Signify'
33
+ for sign in signlist
34
+ if sign .name = ~# ' ^Signify'
51
35
" Handle ambiguous signs. Assume you have signs on line 3 and 4.
52
36
" Removing line 3 would lead to the second sign to be shifted up
53
37
" to line 3. Now there are still 2 signs, both one line 3.
54
- if has_key (a: sy .internal, line )
55
- execute ' sign unplace' a: sy .internal[line ].id ' buffer=' .a: sy .buffer
38
+ if has_key (a: sy .internal, sign .lnum )
39
+ execute ' sign unplace' a: sy .internal[sign .lnum ].id ' buffer=' .a: sy .buffer
56
40
endif
57
- let a: sy .internal[line ] = { ' type' : type , ' id' : id }
41
+ let a: sy .internal[sign .lnum ] = { ' type' : sign .name , ' id' : sign . id }
58
42
else
59
- let a: sy .external[line ] = id
43
+ let a: sy .external[sign .lnum ] = sign . id
60
44
endif
61
45
endfor
62
46
endfunction
0 commit comments