mirror of
https://github.com/powerline/powerline.git
synced 2025-07-21 21:05:11 +02:00
Rework API for custom vim events
This commit is contained in:
parent
a021916428
commit
127a600e1b
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user