1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-09 19:50:06 +08:00
SpaceVim/bundle/gina.vim/autoload/gina/core/console.vim

90 lines
2.4 KiB
VimL

let s:Console = vital#gina#import('Vim.Console')
let s:Console.prefix = '[gina] '
if has('nvim')
function! gina#core#console#message(msg) abort
return s:message(a:msg)
endfunction
else
" NOTE:
" Vim 8.0.0329 will not echo entire message which was invoked in timer/job.
" While echo pipe is used to inform the result of the process to a user, it
" is kind critical so use autocmd to forcedly invoke message.
let s:message_queue = []
function! gina#core#console#message(msg) abort
augroup gina_core_console_message_internal
autocmd! *
autocmd CursorMoved * call s:message_callback()
autocmd CursorHold * call s:message_callback()
autocmd InsertEnter * call s:message_callback()
augroup END
call add(s:message_queue, a:msg)
endfunction
function! s:message_callback() abort
while !empty(s:message_queue)
let msg = remove(s:message_queue, 0)
call s:message(msg)
endwhile
augroup gina_core_console_message_internal
autocmd! *
augroup END
endfunction
endif
function! gina#core#console#echo(...) abort
return call(s:Console.echo, a:000, s:Console)
endfunction
function! gina#core#console#echon(...) abort
return call(s:Console.echon, a:000, s:Console)
endfunction
function! gina#core#console#echomsg(...) abort
return call(s:Console.echomsg, a:000, s:Console)
endfunction
function! gina#core#console#debug(...) abort
return call(s:Console.debug, a:000, s:Console)
endfunction
function! gina#core#console#info(...) abort
return call(s:Console.info, a:000, s:Console)
endfunction
function! gina#core#console#warn(...) abort
return call(s:Console.warn, a:000, s:Console)
endfunction
function! gina#core#console#error(...) abort
return call(s:Console.error, a:000, s:Console)
endfunction
function! gina#core#console#ask(...) abort
return call(s:Console.ask, a:000, s:Console)
endfunction
function! gina#core#console#confirm(...) abort
return call(s:Console.confirm, a:000, s:Console)
endfunction
function! gina#core#console#ask_or_cancel(...) abort
let result = call(s:Console.ask, a:000, s:Console)
if empty(result)
throw gina#core#revelator#info('Canceled')
endif
return result
endfunction
function! s:message(msg) abort
if g:gina#core#console#enable_message_history
return gina#core#console#echomsg(a:msg)
endif
return gina#core#console#echo(a:msg)
endfunction
call gina#config(expand('<sfile>'), {
\ 'enable_message_history': 0,
\})