mirror of
https://github.com/airblade/vim-gitgutter.git
synced 2025-11-08 11:33:48 -05:00
Highlighting customisation tweaks.
Highlight groups for signs: - renamed highlight groups with `GitGutter` prefix, and following the naming style of the builtin groups `DiffAdd`, `DiffChange`, etc. - using `highlight default link` to set default colours for signs. e.g. the plugin defines `GitGutterAddDefault` as green, and default (if `g:gitgutter_highlights`) links `GitGutterAdd` to it (which the user can customise). Highlight groups for lines: - added gitgutter-specific highlight groups for line highlighting (`GitGutterAddLine`, etc) so that this highlighting can be customised independent of `DiffAdd` et al (which these default link to). - line highlighting toggling now only changes the linehl attribute. The `linehl` attribute is toggled in `s:update_line_highlights`, which separates concerns more clearly. I'm thinking ahead to the possibility of the sign text being configurable, and thinking it will be DRYer to keep these things separate. Maybe it's just aesthetic though. Bonus: resolved "eugh" ;)
This commit is contained in:
@@ -13,14 +13,16 @@ if !exists('g:gitgutter_highlights')
|
||||
let g:gitgutter_highlights = 1
|
||||
endif
|
||||
|
||||
if !exists('g:gitgutter_highlight_lines')
|
||||
let g:gitgutter_highlight_lines = 0
|
||||
endif
|
||||
|
||||
function! s:init()
|
||||
if !exists('g:gitgutter_initialised')
|
||||
let s:highlight_lines = 0
|
||||
let s:highlight_lines = g:gitgutter_highlight_lines
|
||||
call s:define_signs()
|
||||
|
||||
if g:gitgutter_highlights
|
||||
call s:define_highlights()
|
||||
endif
|
||||
call s:define_highlights()
|
||||
|
||||
" Vim doesn't namespace sign ids so every plugin shares the same
|
||||
" namespace. Sign ids are simply integers so to avoid clashes with other
|
||||
@@ -37,23 +39,33 @@ function! s:init()
|
||||
endfunction
|
||||
|
||||
function! s:define_highlights()
|
||||
highlight lineAdded guifg=#009900 guibg=NONE ctermfg=2 ctermbg=NONE
|
||||
highlight lineModified guifg=#bbbb00 guibg=NONE ctermfg=3 ctermbg=NONE
|
||||
highlight lineRemoved guifg=#ff2222 guibg=NONE ctermfg=1 ctermbg=NONE
|
||||
" sign highlights
|
||||
hi GitGutterAddDefault guifg=#009900 guibg=NONE ctermfg=2 ctermbg=NONE
|
||||
hi GitGutterChangeDefault guifg=#bbbb00 guibg=NONE ctermfg=3 ctermbg=NONE
|
||||
hi GitGutterDeleteDefault guifg=#ff2222 guibg=NONE ctermfg=1 ctermbg=NONE
|
||||
hi default link GitGutterChangeDeleteDefault GitGutterChangeDefault
|
||||
|
||||
if g:gitgutter_highlights
|
||||
hi default link GitGutterAdd GitGutterAddDefault
|
||||
hi default link GitGutterChange GitGutterChangeDefault
|
||||
hi default link GitGutterDelete GitGutterDeleteDefault
|
||||
hi default link GitGutterChangeDelete GitGutterChangeDeleteDefault
|
||||
endif
|
||||
|
||||
" line highlight defaults, meant to be user-edited
|
||||
hi default link GitGutterAddLine DiffAdd
|
||||
hi default link GitGutterChangeLine DiffChange
|
||||
hi default link GitGutterDeleteLine DiffDelete
|
||||
hi default link GitGutterChangeDeleteLine GitGutterChangeLineDefault
|
||||
|
||||
call s:update_line_highlights(s:highlight_lines)
|
||||
endfunction
|
||||
|
||||
function! s:define_signs()
|
||||
if s:highlight_lines
|
||||
sign define GitGutterLineAdded text=+ texthl=lineAdded linehl=DiffAdd
|
||||
sign define GitGutterLineModified text=~ texthl=lineModified linehl=DiffChange
|
||||
sign define GitGutterLineRemoved text=_ texthl=lineRemoved linehl=DiffDelete
|
||||
sign define GitGutterLineModifiedRemoved text=~_ texthl=lineModified linehl=DiffChange
|
||||
else
|
||||
sign define GitGutterLineAdded text=+ texthl=lineAdded linehl=NONE
|
||||
sign define GitGutterLineModified text=~ texthl=lineModified linehl=NONE
|
||||
sign define GitGutterLineRemoved text=_ texthl=lineRemoved linehl=NONE
|
||||
sign define GitGutterLineModifiedRemoved text=~_ texthl=lineModified linehl=NONE
|
||||
endif
|
||||
sign define GitGutterLineAdded text=+ texthl=GitGutterAdd linehl=
|
||||
sign define GitGutterLineModified text=~ texthl=GitGutterChange linehl=
|
||||
sign define GitGutterLineRemoved text=_ texthl=GitGutterDelete linehl=
|
||||
sign define GitGutterLineModifiedRemoved text=~_ texthl=GitGutterChangeDelete linehl=
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
@@ -66,7 +78,17 @@ endfunction
|
||||
|
||||
function! s:update_line_highlights(highlight_lines)
|
||||
let s:highlight_lines = a:highlight_lines
|
||||
call s:define_signs()
|
||||
if s:highlight_lines
|
||||
sign define GitGutterLineAdded linehl=GitGutterAddLine
|
||||
sign define GitGutterLineModified linehl=GitGutterChangeLine
|
||||
sign define GitGutterLineRemoved linehl=GitGutterDeleteLine
|
||||
sign define GitGutterLineModifiedRemoved linehl=GitGutterChangeDeleteLine
|
||||
else
|
||||
sign define GitGutterLineAdded linehl=
|
||||
sign define GitGutterLineModified linehl=
|
||||
sign define GitGutterLineRemoved linehl=
|
||||
sign define GitGutterLineModifiedRemoved linehl=
|
||||
endif
|
||||
redraw!
|
||||
endfunction
|
||||
|
||||
@@ -273,18 +295,9 @@ endfunction
|
||||
function! s:show_signs(file_name, modified_lines)
|
||||
for line in a:modified_lines
|
||||
let line_number = line[0]
|
||||
let type = line[1]
|
||||
" TODO: eugh
|
||||
if type ==? 'added'
|
||||
let name = 'GitGutterLineAdded'
|
||||
elseif type ==? 'removed'
|
||||
let name = 'GitGutterLineRemoved'
|
||||
elseif type ==? 'modified'
|
||||
let name = 'GitGutterLineModified'
|
||||
elseif type ==? 'modified_removed'
|
||||
let name = 'GitGutterLineModifiedRemoved'
|
||||
endif
|
||||
call s:add_sign(line_number, name, a:file_name)
|
||||
" snake case to camel case
|
||||
let type = substitute(line[1], '\v(.)(\a+)(_(.)(.+))?', '\u\1\l\2\u\4\l\5', '')
|
||||
call s:add_sign(line_number, 'GitGutterLine' . type, a:file_name)
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
|
||||
Reference in New Issue
Block a user