mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-09 19:50:06 +08:00
78 lines
2.1 KiB
VimL
78 lines
2.1 KiB
VimL
let s:Emitter = vital#gina#import('App.Emitter')
|
|
let s:modified_timer = v:null
|
|
|
|
|
|
function! gina#core#emitter#emit(name, ...) abort
|
|
call call(s:Emitter.emit, [a:name] + a:000, s:Emitter)
|
|
endfunction
|
|
|
|
function! gina#core#emitter#subscribe(name, listener, ...) abort
|
|
call call(s:Emitter.subscribe, [a:name, a:listener] + a:000, s:Emitter)
|
|
endfunction
|
|
|
|
function! gina#core#emitter#unsubscribe(name, listener, ...) abort
|
|
call call(s:Emitter.unsubscribe, [a:name, a:listener] + a:000, s:Emitter)
|
|
endfunction
|
|
|
|
function! gina#core#emitter#add_middleware(middleware) abort
|
|
call call(s:Emitter.add_middleware, [a:middleware] + a:000, s:Emitter)
|
|
endfunction
|
|
|
|
function! gina#core#emitter#remove_middleware(...) abort
|
|
call call(s:Emitter.remove_middleware, a:000, s:Emitter)
|
|
endfunction
|
|
|
|
|
|
" Subscribe ------------------------------------------------------------------
|
|
function! s:on_modified(...) abort
|
|
if !empty(gina#process#runnings())
|
|
" DO NOT update if there are some running process
|
|
call gina#core#emitter#emit('modified:delay')
|
|
return
|
|
endif
|
|
let winid_saved = win_getid()
|
|
for winnr in range(1, winnr('$'))
|
|
let bufnr = winbufnr(winnr)
|
|
if !getbufvar(bufnr, '&modified')
|
|
\ && getbufvar(bufnr, '&autoread')
|
|
\ && bufname(bufnr) =~# '^gina://'
|
|
call win_gotoid(bufwinid(bufnr))
|
|
edit
|
|
endif
|
|
endfor
|
|
call win_gotoid(winid_saved)
|
|
endfunction
|
|
|
|
function! s:on_modified_delay() abort
|
|
if s:modified_timer isnot# v:null
|
|
" Do not emit 'modified' for previous 'modified:delay'
|
|
silent! call timer_stop(s:modified_timer)
|
|
endif
|
|
let s:modified_timer = timer_start(
|
|
\ g:gina#core#emitter#modified_delay,
|
|
\ function('s:emit_modified')
|
|
\)
|
|
endfunction
|
|
|
|
function! s:emit_modified(...) abort
|
|
call gina#core#emitter#emit('modified')
|
|
endfunction
|
|
|
|
if !exists('s:subscribed')
|
|
let s:subscribed = 1
|
|
call gina#core#emitter#subscribe(
|
|
\ 'modified',
|
|
\ function('s:on_modified')
|
|
\)
|
|
|
|
call gina#core#emitter#subscribe(
|
|
\ 'modified:delay',
|
|
\ function('s:on_modified_delay')
|
|
\)
|
|
endif
|
|
|
|
|
|
call gina#config(expand('<sfile>'), {
|
|
\ 'modified_delay': 10,
|
|
\})
|