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
endtry
endtry
exec s:powerline_pycmd 'powerline = VimPowerline()'
exec s:powerline_pycmd 'del VimPowerline'
if !get(g:, 'powerline_debugging_pyeval') && exists('*'. s:powerline_pyeval)
let s:pyeval = function(s:powerline_pyeval)
@ -80,18 +78,19 @@ endfunction
function! PowerlineRegisterCachePurgerEvent(event)
exec s:powerline_pycmd 'from powerline.segments.vim import launchevent as powerline_launchevent'
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
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
" value.
set statusline=%!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: [])
bufeventcaches = defaultdict(lambda: [])
eventfuncs = defaultdict(lambda: [])
bufeventfuncs = defaultdict(lambda: [])
defined_events = set()
def purgeonevents_reg(events, eventcaches=bufeventcaches):
def cache_reg_func(cache):
def purgeonevents_reg(func, events, is_buffer_event=False):
if is_buffer_event:
cureventfuncs = bufeventfuncs
else:
cureventfuncs = eventfuncs
for event in events:
if event not in eventcaches:
if event not in defined_events:
vim.eval('PowerlineRegisterCachePurgerEvent("' + event + '")')
eventcaches[event].append(cache)
return cache_reg_func
purgeall_on_shell = purgeonevents_reg(('ShellCmdPost', 'ShellFilterPost', 'FocusGained'), eventcaches=eventcaches)
purgebuf_on_shell_and_write = purgeonevents_reg(('BufWritePost', 'ShellCmdPost', 'ShellFilterPost', 'FocusGained'))
defined_events.add(event)
cureventfuncs[event].append(func)
def launchevent(event):
global eventcaches
global bufeventcaches
for cache in eventcaches[event]:
cache.clear()
if bufeventcaches[event]:
buf = int(vim_funcs['expand']('<abuf>'))
for cache in bufeventcaches[event]:
try:
cache.pop(buf)
except KeyError:
pass
global eventfuncs
global bufeventfuncs
for func in eventfuncs[event]:
func()
if bufeventfuncs[event]:
buffer = vim.buffers[int(vim_funcs['expand']('<abuf>')) - 1]
for func in bufeventfuncs[event]:
func(buffer)
# TODO Remove cache when needed