mirror of
https://github.com/airblade/vim-gitgutter.git
synced 2025-11-09 12:03:48 -05:00
Use buffer-local variables to store signs.
This commit is contained in:
@@ -5,18 +5,14 @@
|
|||||||
" Note also we currently never reset s:next_sign_id.
|
" Note also we currently never reset s:next_sign_id.
|
||||||
let s:first_sign_id = 3000
|
let s:first_sign_id = 3000
|
||||||
let s:next_sign_id = s:first_sign_id
|
let s:next_sign_id = s:first_sign_id
|
||||||
let s:sign_ids = {} " key: filename, value: list of sign ids
|
|
||||||
let s:other_signs = []
|
|
||||||
let s:dummy_sign_id = 153
|
let s:dummy_sign_id = 153
|
||||||
|
|
||||||
|
|
||||||
function! sign#clear_signs(file_name)
|
function! sign#clear_signs(file_name)
|
||||||
if exists('s:sign_ids') && has_key(s:sign_ids, a:file_name)
|
for id in getbufvar(a:file_name, 'gitgutter_sign_ids', [])
|
||||||
for id in s:sign_ids[a:file_name]
|
exe ":sign unplace" id "file=" . a:file_name
|
||||||
exe ":sign unplace" id "file=" . a:file_name
|
endfor
|
||||||
endfor
|
call setbufvar(a:file_name, 'gitgutter_sign_ids', [])
|
||||||
let s:sign_ids[a:file_name] = []
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" This assumes there are no GitGutter signs in the file.
|
" This assumes there are no GitGutter signs in the file.
|
||||||
@@ -26,14 +22,15 @@ function! sign#find_other_signs(file_name)
|
|||||||
redir => signs
|
redir => signs
|
||||||
silent exe ":sign place file=" . a:file_name
|
silent exe ":sign place file=" . a:file_name
|
||||||
redir END
|
redir END
|
||||||
let s:other_signs = []
|
let other_signs = []
|
||||||
for sign_line in split(signs, '\n')
|
for sign_line in split(signs, '\n')
|
||||||
let matches = matchlist(sign_line, '^\s\+\w\+=\(\d\+\)')
|
let matches = matchlist(sign_line, '^\s\+\w\+=\(\d\+\)')
|
||||||
if len(matches) > 0
|
if len(matches) > 0
|
||||||
let line_number = str2nr(matches[1])
|
let line_number = str2nr(matches[1])
|
||||||
call add(s:other_signs, line_number)
|
call add(other_signs, line_number)
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
call setbufvar(a:file_name, 'gitgutter_other_signs', other_signs)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! sign#show_signs(file_name, modified_lines)
|
function! sign#show_signs(file_name, modified_lines)
|
||||||
@@ -46,7 +43,7 @@ endfunction
|
|||||||
|
|
||||||
function! sign#add_sign(line_number, name, file_name)
|
function! sign#add_sign(line_number, name, file_name)
|
||||||
let id = sign#next_sign_id()
|
let id = sign#next_sign_id()
|
||||||
if !sign#is_other_sign(a:line_number) " Don't clobber other people's signs.
|
if !sign#is_other_sign(a:file_name, a:line_number) " Don't clobber other people's signs.
|
||||||
exe ":sign place" id "line=" . a:line_number "name=" . a:name "file=" . a:file_name
|
exe ":sign place" id "line=" . a:line_number "name=" . a:name "file=" . a:file_name
|
||||||
call sign#remember_sign(id, a:file_name)
|
call sign#remember_sign(id, a:file_name)
|
||||||
endif
|
endif
|
||||||
@@ -59,17 +56,14 @@ function! sign#next_sign_id()
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! sign#remember_sign(id, file_name)
|
function! sign#remember_sign(id, file_name)
|
||||||
if has_key(s:sign_ids, a:file_name)
|
let signs = getbufvar(a:file_name, 'gitgutter_sign_ids', [])
|
||||||
let sign_ids_for_file = s:sign_ids[a:file_name]
|
call add(signs, a:id)
|
||||||
call add(sign_ids_for_file, a:id)
|
call setbufvar(a:file_name, 'gitgutter_sign_ids', signs)
|
||||||
else
|
|
||||||
let sign_ids_for_file = [a:id]
|
|
||||||
endif
|
|
||||||
let s:sign_ids[a:file_name] = sign_ids_for_file
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! sign#is_other_sign(line_number)
|
function! sign#is_other_sign(file_name, line_number)
|
||||||
return index(s:other_signs, a:line_number) == -1 ? 0 : 1
|
let other_signs = getbufvar(a:file_name, 'gitgutter_other_signs', [])
|
||||||
|
return index(other_signs, a:line_number) == -1 ? 0 : 1
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! sign#add_dummy_sign()
|
function! sign#add_dummy_sign()
|
||||||
|
|||||||
Reference in New Issue
Block a user