Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
155 lines
4.3 KiB
VimL
155 lines
4.3 KiB
VimL
let s:String = vital#gina#import('Data.String')
|
|
let s:SCHEME = gina#command#scheme(expand('<sfile>'))
|
|
let s:current = {
|
|
\ 'bufnr': 0,
|
|
\ 'middleware': {},
|
|
\}
|
|
|
|
|
|
function! gina#command#_events#call(range, args, mods) abort
|
|
let git = gina#core#get_or_fail()
|
|
let args = s:build_args(git, a:args)
|
|
|
|
let bufname = gina#core#buffer#bufname(git, s:SCHEME)
|
|
call gina#core#buffer#open(bufname, {
|
|
\ 'mods': a:mods,
|
|
\ 'group': args.params.group,
|
|
\ 'opener': args.params.opener,
|
|
\ 'cmdarg': args.params.cmdarg,
|
|
\ 'callback': {
|
|
\ 'fn': function('s:init'),
|
|
\ 'args': [args],
|
|
\ }
|
|
\})
|
|
endfunction
|
|
|
|
|
|
" Private --------------------------------------------------------------------
|
|
function! s:build_args(git, args) abort
|
|
let args = a:args.clone()
|
|
let args.params.group = args.pop('--group', '')
|
|
let args.params.opener = args.pop('--opener', '')
|
|
let args.params.detail = args.pop('--detail')
|
|
|
|
return args.lock()
|
|
endfunction
|
|
|
|
function! s:init(args) abort
|
|
call gina#core#meta#set('args', a:args)
|
|
|
|
if exists('b:gina_initialized')
|
|
return
|
|
endif
|
|
let b:gina_initialized = 1
|
|
|
|
setlocal winfixwidth
|
|
setlocal winfixheight
|
|
setlocal buftype=nofile
|
|
setlocal bufhidden=wipe
|
|
setlocal noswapfile
|
|
setlocal nomodifiable
|
|
setlocal noautoread
|
|
setlocal nolist nospell
|
|
setlocal nowrap nonumber norelativenumber
|
|
|
|
augroup gina_internal_command
|
|
autocmd! * <buffer>
|
|
autocmd BufReadCmd <buffer> call s:BufReadCmd()
|
|
autocmd BufWipeout <buffer> call s:BufWipeout()
|
|
augroup END
|
|
endfunction
|
|
|
|
function! s:BufReadCmd() abort
|
|
call gina#core#emitter#remove_middleware(s:current.middleware)
|
|
setlocal nobuflisted
|
|
setlocal filetype=gina-_events
|
|
let args = gina#core#meta#get_or_fail('args')
|
|
let s:current.bufnr = bufnr('%')
|
|
let s:current.middleware = copy(s:middleware)
|
|
let s:current.middleware.detail = args.params.detail
|
|
call gina#core#emitter#add_middleware(s:current.middleware)
|
|
endfunction
|
|
|
|
function! s:BufWipeout() abort
|
|
call gina#core#emitter#remove_middleware(s:current.middleware)
|
|
endfunction
|
|
|
|
function! s:print_message(msg) abort
|
|
let bufnr = s:current.bufnr
|
|
if !bufnr || bufwinnr(bufnr) < 1
|
|
call gina#core#emitter#remove_middleware(s:current.middleware)
|
|
let s:current.bufnr = 0
|
|
return
|
|
endif
|
|
" NOTE:
|
|
" 'timer_start' is required for prevent E523 Not allowed here raised when
|
|
" events are emitted from 'statusline' or 'tabline'
|
|
call timer_start(0, { -> gina#core#writer#replace(bufnr, -1, -1, [a:msg]) })
|
|
endfunction
|
|
|
|
function! s:print_event(prefix, name, attrs) abort
|
|
let width = gina#util#winwidth(bufwinnr(s:current.bufnr))
|
|
let head = printf('%-5s: %s: %s',
|
|
\ a:prefix,
|
|
\ s:now(),
|
|
\ a:name,
|
|
\)
|
|
let tail = printf('<%s>', bufname('%'))
|
|
let args = join(map(copy(a:attrs), 'string(v:val)'), ', ')
|
|
let args = substitute(args, '\r\?\n', '\\n', 'g')
|
|
let args = substitute(args, '\e', '^[', 'g')
|
|
let args = s:String.truncate_skipping(
|
|
\ printf('(%s)', args),
|
|
\ width - len(head) - len(tail) - 1,
|
|
\ 3, '...'
|
|
\)
|
|
let head = head . args . ' '
|
|
let message = head . s:String.pad_left(tail, width - len(head))
|
|
call s:print_message(message)
|
|
endfunction
|
|
|
|
function! s:print_listeners(listeners) abort
|
|
for [Listener, instance] in a:listeners
|
|
call s:print_message(printf(
|
|
\ '| %s [%s]',
|
|
\ string(Listener),
|
|
\ string(instance),
|
|
\))
|
|
endfor
|
|
endfunction
|
|
|
|
|
|
if has('python3')
|
|
python3 import datetime
|
|
function! s:now() abort
|
|
return py3eval('datetime.datetime.now().strftime("%H:%M:%S.%f")')
|
|
endfunction
|
|
elseif has('python')
|
|
python import datetime
|
|
function! s:now() abort
|
|
return pyeval('datetime.datetime.now().strftime("%H:%M:%S.%f")')
|
|
endfunction
|
|
else
|
|
function! s:now() abort
|
|
return strftime('%H:%M:%S.??????')
|
|
endfunction
|
|
endif
|
|
|
|
|
|
" Middleware -----------------------------------------------------------------
|
|
let s:middleware = {'detail': 0}
|
|
|
|
function! s:middleware.on_emit_pre(name, listeners, attrs) abort
|
|
call s:print_event('pre', a:name, a:attrs)
|
|
if self.detail
|
|
call s:print_listeners(a:listeners)
|
|
endif
|
|
endfunction
|
|
|
|
function! s:middleware.on_emit_post(name, listeners, attrs) abort
|
|
call s:print_event('post', a:name, a:attrs)
|
|
if self.detail
|
|
call s:print_listeners(a:listeners)
|
|
endif
|
|
endfunction
|