Skip to content

Commit 47ffb2e

Browse files
committed
Follow linked highlight groups to find background colors
1 parent 7e7ccea commit 47ffb2e

1 file changed

Lines changed: 27 additions & 8 deletions

File tree

autoload/highlight.vim

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,12 @@ function! highlight#define_sign_column_highlight()
33
endfunction
44

55
function! highlight#define_highlights()
6-
redir => sign_highlight
7-
silent highlight SignColumn
8-
redir END
9-
let sign_ctermbg = matchlist(sign_highlight, 'ctermbg=\(\S\+\)')[1]
10-
let sign_guibg = matchlist(sign_highlight, 'guibg=\(\S\+\)')[1]
6+
let [guibg, ctermbg] = highlight#get_background_colors('SignColumn')
117

128
" Highlights used by the signs.
13-
execute "highlight GitGutterAddDefault guifg=#009900 guibg=".sign_guibg." ctermfg=2 ctermbg=".sign_ctermbg
14-
execute "highlight GitGutterChangeDefault guifg=#bbbb00 guibg=".sign_guibg." ctermfg=3 ctermbg=".sign_ctermbg
15-
execute "highlight GitGutterDeleteDefault guifg=#ff2222 guibg=".sign_guibg." ctermfg=1 ctermbg=".sign_ctermbg
9+
execute "highlight GitGutterAddDefault guifg=#009900 guibg=" . guibg . " ctermfg=2 ctermbg=" . ctermbg
10+
execute "highlight GitGutterChangeDefault guifg=#bbbb00 guibg=" . guibg . " ctermfg=3 ctermbg=" . ctermbg
11+
execute "highlight GitGutterDeleteDefault guifg=#ff2222 guibg=" . guibg . " ctermfg=1 ctermbg=" . ctermbg
1612
highlight default link GitGutterChangeDeleteDefault GitGutterChangeDefault
1713

1814
highlight default link GitGutterAdd GitGutterAddDefault
@@ -66,3 +62,26 @@ function! highlight#define_sign_line_highlights()
6662
sign define GitGutterLineModifiedRemoved linehl=
6763
endif
6864
endfunction
65+
66+
function! highlight#get_background_colors(group)
67+
redir => highlight
68+
silent execute 'silent highlight ' . a:group
69+
redir END
70+
71+
let link_matches = matchlist(highlight, 'links to \(\S\+\)')
72+
if len(link_matches) > 0 " follow the link
73+
return highlight#get_background_colors(link_matches[1])
74+
endif
75+
76+
let ctermbg = highlight#match_highlight(highlight, 'ctermbg=\(\S\+\)')
77+
let guibg = highlight#match_highlight(highlight, 'guibg=\(\S\+\)')
78+
return [guibg, ctermbg]
79+
endfunction
80+
81+
function! highlight#match_highlight(highlight, pattern)
82+
let matches = matchlist(a:highlight, a:pattern)
83+
if len(matches) == 0
84+
return 'NONE'
85+
endif
86+
return matches[1]
87+
endfunction

0 commit comments

Comments
 (0)