Rework API for custom vim events

This commit is contained in:
ZyX 2013-03-22 16:49:00 +04:00
parent a021916428
commit 127a600e1b
2 changed files with 30 additions and 33 deletions

View File

@ -40,8 +40,6 @@ catch
endif endif
endtry endtry
endtry endtry
exec s:powerline_pycmd 'powerline = VimPowerline()'
exec s:powerline_pycmd 'del VimPowerline'
if !get(g:, 'powerline_debugging_pyeval') && exists('*'. s:powerline_pyeval) if !get(g:, 'powerline_debugging_pyeval') && exists('*'. s:powerline_pyeval)
let s:pyeval = function(s:powerline_pyeval) let s:pyeval = function(s:powerline_pyeval)
@ -80,18 +78,19 @@ endfunction
function! PowerlineRegisterCachePurgerEvent(event) function! PowerlineRegisterCachePurgerEvent(event)
exec s:powerline_pycmd 'from powerline.segments.vim import launchevent as powerline_launchevent' exec s:powerline_pycmd 'from powerline.segments.vim import launchevent as powerline_launchevent'
augroup Powerline augroup Powerline
exec 'autocmd!' a:event '*' s:powerline_pycmd.' powerline_launchevent("'.a:event.'")' exec 'autocmd' a:event '*' s:powerline_pycmd.' powerline_launchevent("'.a:event.'")'
augroup END augroup END
endfunction endfunction
augroup Powerline
autocmd! ColorScheme * :exec s:powerline_pycmd 'powerline.renderer.reset_highlight()'
autocmd! VimEnter * :redrawstatus!
autocmd! VimLeave * :exec s:powerline_pycmd 'powerline.renderer.shutdown()'
augroup END
exec s:powerline_pycmd 'powerline = VimPowerline()'
exec s:powerline_pycmd 'del VimPowerline'
" Is immediately changed when PowerlineNew() function is run. Good for global " Is immediately changed when PowerlineNew() function is run. Good for global
" value. " value.
set statusline=%!PowerlineNew() set statusline=%!PowerlineNew()
call PowerlineNew() call PowerlineNew()
augroup Powerline
autocmd!
autocmd ColorScheme * :exec s:powerline_pycmd 'powerline.renderer.reset_highlight()'
autocmd VimEnter * :redrawstatus!
autocmd VimLeave * :exec s:powerline_pycmd 'powerline.renderer.shutdown()'
augroup END

View File

@ -47,34 +47,32 @@ vim_modes = {
} }
eventcaches = defaultdict(lambda: []) eventfuncs = defaultdict(lambda: [])
bufeventcaches = defaultdict(lambda: []) bufeventfuncs = defaultdict(lambda: [])
defined_events = set()
def purgeonevents_reg(events, eventcaches=bufeventcaches): def purgeonevents_reg(func, events, is_buffer_event=False):
def cache_reg_func(cache): if is_buffer_event:
for event in events: cureventfuncs = bufeventfuncs
if event not in eventcaches: else:
vim.eval('PowerlineRegisterCachePurgerEvent("' + event + '")') cureventfuncs = eventfuncs
eventcaches[event].append(cache) for event in events:
return cache_reg_func if event not in defined_events:
vim.eval('PowerlineRegisterCachePurgerEvent("' + event + '")')
purgeall_on_shell = purgeonevents_reg(('ShellCmdPost', 'ShellFilterPost', 'FocusGained'), eventcaches=eventcaches) defined_events.add(event)
purgebuf_on_shell_and_write = purgeonevents_reg(('BufWritePost', 'ShellCmdPost', 'ShellFilterPost', 'FocusGained')) cureventfuncs[event].append(func)
def launchevent(event): def launchevent(event):
global eventcaches global eventfuncs
global bufeventcaches global bufeventfuncs
for cache in eventcaches[event]: for func in eventfuncs[event]:
cache.clear() func()
if bufeventcaches[event]: if bufeventfuncs[event]:
buf = int(vim_funcs['expand']('<abuf>')) buffer = vim.buffers[int(vim_funcs['expand']('<abuf>')) - 1]
for cache in bufeventcaches[event]: for func in bufeventfuncs[event]:
try: func(buffer)
cache.pop(buf)
except KeyError:
pass
# TODO Remove cache when needed # TODO Remove cache when needed