From 127a600e1b449fa5b04bb74e82a93f3fc86768c4 Mon Sep 17 00:00:00 2001 From: ZyX Date: Fri, 22 Mar 2013 16:49:00 +0400 Subject: [PATCH] Rework API for custom vim events --- powerline/bindings/vim/plugin/powerline.vim | 19 +++++---- powerline/segments/vim.py | 44 ++++++++++----------- 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/powerline/bindings/vim/plugin/powerline.vim b/powerline/bindings/vim/plugin/powerline.vim index 9bd90b42..38518e91 100644 --- a/powerline/bindings/vim/plugin/powerline.vim +++ b/powerline/bindings/vim/plugin/powerline.vim @@ -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 diff --git a/powerline/segments/vim.py b/powerline/segments/vim.py index c4bb4e4c..94d0ec81 100644 --- a/powerline/segments/vim.py +++ b/powerline/segments/vim.py @@ -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): - for event in events: - if event not in eventcaches: - 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')) +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 defined_events: + vim.eval('PowerlineRegisterCachePurgerEvent("' + event + '")') + 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']('')) - 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']('')) - 1] + for func in bufeventfuncs[event]: + func(buffer) # TODO Remove cache when needed