Add utility functions for constructing highlights piecemeal
authorGreg Hurrell <greg@hurrell.net>
Fri, 21 Apr 2017 01:49:53 +0000 (18:49 -0700)
committerGreg Hurrell <greg@hurrell.net>
Fri, 21 Apr 2017 01:49:53 +0000 (18:49 -0700)
Example usage:

```
execute 'highlight User1 ' .
      \ pinnacle#highlight({
      \   'bg': pinnacle#extract_bg('Error'),
      \   'fg': pinnacle#extract_fg('Normal'),
      \   'term': 'bold'
      \ })
```

autoload/pinnacle.vim

index bba35ce992f8dc5f744d34592770e352e54cf844..f89a0885f7b877ad20127eba724a26217374cd4d 100644 (file)
@@ -176,6 +176,34 @@ function! pinnacle#extract_highlight(group) abort
   return l:original
 endfunction
 
+let s:prefix=has('gui') || has('termguicolors') ? 'gui' : 'cterm'
+
+function! pinnacle#extract_bg(group) abort
+  return pinnacle#extract_component(a:group, 'bg')
+endfunction
+
+function! pinnacle#extract_fg(group) abort
+  return pinnacle#extract_component(a:group, 'fg')
+endfunction
+
+function! pinnacle#extract_component(group, component) abort
+  return synIDattr(synIDtrans(hlID(a:group)), a:component, s:prefix)
+endfunction
+
+function! pinnacle#highlight(highlight) abort
+  let l:result=[]
+  if has_key(a:highlight, 'bg')
+    call insert(l:result, s:prefix . 'bg=' . a:highlight['bg'])
+  endif
+  if has_key(a:highlight, 'fg')
+    call insert(l:result, s:prefix . 'fg=' . a:highlight['fg'])
+  endif
+  if has_key(a:highlight, 'term')
+    call insert(l:result, s:prefix . '=' . a:highlight['term'])
+  endif
+  return join(l:result, ' ')
+endfunction
+
 " Returns an italicized copy of `group` suitable for passing to `:highlight`.
 function! pinnacle#italicize(group) abort
   return pinnacle#decorate('italic', a:group)