Refactored heaps of stuff and added autocmds
This commit is contained in:
parent
51d44e3ebf
commit
5e91b15edc
@ -1,16 +1,6 @@
|
|||||||
" Author: Nate Kane <nathanaelkane AT gmail DOT com>
|
" Author: Nate Kane <nathanaelkane AT gmail DOT com>
|
||||||
" Homepage: http://github.com/nathanaelkane/vim-indent-guides
|
" Homepage: http://github.com/nathanaelkane/vim-indent-guides
|
||||||
|
|
||||||
"
|
|
||||||
" Regex pattern for a hex color.
|
|
||||||
"
|
|
||||||
" Example matches:
|
|
||||||
" - '#123ABC'
|
|
||||||
" - '#ffffff'
|
|
||||||
" - '#000000'
|
|
||||||
"
|
|
||||||
let s:hex_color_pattern = '#[0-9A-Fa-f]\{6\}'
|
|
||||||
|
|
||||||
"
|
"
|
||||||
" Return hex string equivalent to given decimal string or number.
|
" Return hex string equivalent to given decimal string or number.
|
||||||
"
|
"
|
||||||
@ -49,7 +39,7 @@ endfunction
|
|||||||
function! color_helper#hex_color_to_rgb(hex_color)
|
function! color_helper#hex_color_to_rgb(hex_color)
|
||||||
let l:rgb = []
|
let l:rgb = []
|
||||||
|
|
||||||
if matchstr(a:hex_color, s:hex_color_pattern) == a:hex_color
|
if a:hex_color =~ g:indent_guides_hex_color_pattern
|
||||||
let l:red = color_helper#hex_to_dec(strpart(a:hex_color, 1, 2))
|
let l:red = color_helper#hex_to_dec(strpart(a:hex_color, 1, 2))
|
||||||
let l:green = color_helper#hex_to_dec(strpart(a:hex_color, 3, 2))
|
let l:green = color_helper#hex_to_dec(strpart(a:hex_color, 3, 2))
|
||||||
let l:blue = color_helper#hex_to_dec(strpart(a:hex_color, 5, 2))
|
let l:blue = color_helper#hex_to_dec(strpart(a:hex_color, 5, 2))
|
||||||
|
@ -2,29 +2,37 @@
|
|||||||
" Homepage: http://github.com/nathanaelkane/vim-indent-guides
|
" Homepage: http://github.com/nathanaelkane/vim-indent-guides
|
||||||
|
|
||||||
"
|
"
|
||||||
" Toggles the indent guides on and off for all buffers.
|
" Toggles the indent guides on and off.
|
||||||
"
|
"
|
||||||
function! indent_guides#toggle()
|
function! indent_guides#toggle()
|
||||||
call indent_guides#init_matches()
|
call indent_guides#init_matches()
|
||||||
|
|
||||||
if empty(w:indent_guides_matches)
|
if empty(w:indent_guides_matches)
|
||||||
call indent_guides#enable()
|
call indent_guides#enable()
|
||||||
|
|
||||||
" DEBUG
|
|
||||||
"echo 'enable'
|
|
||||||
else
|
else
|
||||||
call indent_guides#disable()
|
call indent_guides#disable()
|
||||||
|
|
||||||
" DEBUG
|
|
||||||
"echo 'disable'
|
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"
|
"
|
||||||
" Enables the indent guides for all buffers.
|
" Called from autocmds, keeps indent guides enabled or disabled when entering
|
||||||
|
" other buffers and windows.
|
||||||
|
"
|
||||||
|
function! indent_guides#process_autocmds()
|
||||||
|
if g:indent_guides_autocmds_enabled
|
||||||
|
call indent_guides#enable()
|
||||||
|
else
|
||||||
|
call indent_guides#disable()
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
" Enables the indent guides for the current buffer and any other buffer upon
|
||||||
|
" entering it.
|
||||||
"
|
"
|
||||||
function! indent_guides#enable()
|
function! indent_guides#enable()
|
||||||
call indent_guides#init_matches()
|
let g:indent_guides_autocmds_enabled = 1
|
||||||
call indent_guides#disable()
|
call indent_guides#clear_matches()
|
||||||
|
|
||||||
if g:indent_guides_auto_colors
|
if g:indent_guides_auto_colors
|
||||||
call indent_guides#highlight_colors()
|
call indent_guides#highlight_colors()
|
||||||
@ -41,59 +49,61 @@ function! indent_guides#enable()
|
|||||||
|
|
||||||
" define the higlight pattern and add to list
|
" define the higlight pattern and add to list
|
||||||
call add(w:indent_guides_matches, matchadd(group, pattern))
|
call add(w:indent_guides_matches, matchadd(group, pattern))
|
||||||
|
|
||||||
if g:indent_guides_debug
|
|
||||||
echo "matchadd ('" . group . "', '" . pattern . "')"
|
|
||||||
end
|
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
" DEBUG
|
|
||||||
"echo w:indent_guides_matches
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"
|
"
|
||||||
" Disables the indent guides for all buffers.
|
" Disables the indent guides for the current buffer and any other buffer upon
|
||||||
|
" entering it.
|
||||||
"
|
"
|
||||||
function! indent_guides#disable()
|
function! indent_guides#disable()
|
||||||
|
let g:indent_guides_autocmds_enabled = 0
|
||||||
|
call indent_guides#clear_matches()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
" Clear all highlight matches for the current window.
|
||||||
|
"
|
||||||
|
function! indent_guides#clear_matches()
|
||||||
call indent_guides#init_matches()
|
call indent_guides#init_matches()
|
||||||
|
|
||||||
if !empty(w:indent_guides_matches)
|
if !empty(w:indent_guides_matches)
|
||||||
|
|
||||||
" DEBUG
|
|
||||||
"echo w:indent_guides_matches
|
|
||||||
|
|
||||||
let index = 0
|
let index = 0
|
||||||
for match_id in w:indent_guides_matches
|
for match_id in w:indent_guides_matches
|
||||||
call matchdelete(match_id)
|
call matchdelete(match_id)
|
||||||
call remove(w:indent_guides_matches, index)
|
call remove(w:indent_guides_matches, index)
|
||||||
let index += index
|
let index += index
|
||||||
endfor
|
endfor
|
||||||
"call filter(w:indent_guides_matches, 0)
|
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"
|
"
|
||||||
" Automagically calculates and defines the indent highlight colors.
|
" Automagically calculates and defines the indent highlight colors.
|
||||||
"
|
"
|
||||||
|
" NOTE: Does not work when color names are used instead of hex colors.
|
||||||
|
" Eg. 'guibg=#FFFFFF' works, but 'guibg=green' doesn't.
|
||||||
|
"
|
||||||
function! indent_guides#highlight_colors()
|
function! indent_guides#highlight_colors()
|
||||||
if g:indent_guides_auto_colors
|
if g:indent_guides_auto_colors
|
||||||
" capture the backgroud color from the normal highlight
|
" capture the backgroud color from the normal highlight
|
||||||
let hi_normal = indent_guides#capture_highlight('normal')
|
let hi_normal = indent_guides#capture_highlight('normal')
|
||||||
let hi_normal_guibg = matchstr(hi_normal, 'guibg=\zs#[0-9A-Fa-f]\{6\}\ze')
|
let pattern = 'guibg=\zs'. g:indent_guides_hex_color_pattern . '\ze'
|
||||||
|
let hi_normal_guibg = matchstr(hi_normal, pattern)
|
||||||
|
|
||||||
" calculate the highlight background colors
|
if hi_normal_guibg =~ g:indent_guides_hex_color_pattern
|
||||||
let hi_odd_bg = indent_guides#lighten_or_darken_color(hi_normal_guibg)
|
" calculate the highlight background colors
|
||||||
let hi_even_bg = indent_guides#lighten_or_darken_color(hi_odd_bg)
|
let hi_odd_bg = indent_guides#lighten_or_darken_color(hi_normal_guibg)
|
||||||
|
let hi_even_bg = indent_guides#lighten_or_darken_color(hi_odd_bg)
|
||||||
|
|
||||||
" define the new highlights
|
" define the new highlights
|
||||||
exe "hi IndentGuidesOdd guibg=" . hi_odd_bg
|
exe "hi IndentGuidesOdd guibg=" . hi_odd_bg
|
||||||
exe "hi IndentGuidesEven guibg=" . hi_even_bg
|
exe "hi IndentGuidesEven guibg=" . hi_even_bg
|
||||||
|
end
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"
|
"
|
||||||
" Takes a color and darkens or lightens it depending on whether a dark or
|
" Takes a color and darkens or lightens it depending on whether a dark or light
|
||||||
" light colorscheme is being used.
|
" colorscheme is being used.
|
||||||
"
|
"
|
||||||
function! indent_guides#lighten_or_darken_color(color)
|
function! indent_guides#lighten_or_darken_color(color)
|
||||||
let percent = g:indent_guides_auto_colors_change_percent
|
let percent = g:indent_guides_auto_colors_change_percent
|
||||||
@ -106,10 +116,10 @@ function! indent_guides#lighten_or_darken_color(color)
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"
|
"
|
||||||
" Captures and returns the output of highlight group definitions
|
" Captures and returns the output of highlight group definitions.
|
||||||
"
|
"
|
||||||
" Example: indent_guides#capture_highlight('normal')
|
" Example: indent_guides#capture_highlight('normal')
|
||||||
" Returns: 'Normal xxx guifg=#323232 guibg=#ffffff font=DejaVu Sans Mono 9'
|
" Returns: 'Normal xxx guifg=#323232 guibg=#ffffff
|
||||||
"
|
"
|
||||||
function! indent_guides#capture_highlight(group_name)
|
function! indent_guides#capture_highlight(group_name)
|
||||||
redir => output
|
redir => output
|
||||||
@ -119,9 +129,11 @@ function! indent_guides#capture_highlight(group_name)
|
|||||||
return output
|
return output
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
" Init the w:indent_guides_matches variable.
|
||||||
|
"
|
||||||
function! indent_guides#init_matches()
|
function! indent_guides#init_matches()
|
||||||
let w:indent_guides_matches =
|
let w:indent_guides_matches =
|
||||||
\ exists('w:indent_guides_matches') ?
|
\ exists('w:indent_guides_matches') ? w:indent_guides_matches : []
|
||||||
\ w:indent_guides_matches : []
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -35,6 +35,24 @@ let g:indent_guides_debug =
|
|||||||
\ exists('g:indent_guides_debug') ?
|
\ exists('g:indent_guides_debug') ?
|
||||||
\ g:indent_guides_debug : 0
|
\ g:indent_guides_debug : 0
|
||||||
|
|
||||||
|
let g:indent_guides_autocmds_enabled = 0
|
||||||
|
|
||||||
|
"
|
||||||
|
" Regex pattern for a hex color.
|
||||||
|
"
|
||||||
|
" Example matches:
|
||||||
|
" - '#123ABC'
|
||||||
|
" - '#ffffff'
|
||||||
|
" - '#000000'
|
||||||
|
"
|
||||||
|
let g:indent_guides_hex_color_pattern = '#[0-9A-Fa-f]\{6\}'
|
||||||
|
|
||||||
" Default mapping
|
" Default mapping
|
||||||
nmap <Leader>ig :IndentGuidesToggle<CR>
|
nmap <Leader>ig :IndentGuidesToggle<CR>
|
||||||
|
|
||||||
|
" Auto commands
|
||||||
|
augroup indent_guides
|
||||||
|
autocmd!
|
||||||
|
autocmd BufEnter,WinEnter * call indent_guides#process_autocmds()
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user