Skip to content

Commit 09e6495

Browse files
authored
Merge pull request #377 from vim-denops/improve-error-messages
👍 Forcibly show info/warn/error messages block to the user (RFC)
2 parents b1a21ac + 28414d1 commit 09e6495

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

autoload/denops/_internal/echo.vim

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
const s:DELAYED_INTERVAL = 100
2+
3+
let s:delayed_messages = []
4+
let s:delayed_timer = 0
5+
16
function! denops#_internal#echo#deprecate(...) abort
27
if g:denops#disable_deprecation_warning_message
38
return
@@ -17,15 +22,15 @@ function! denops#_internal#echo#debug(...) abort
1722
endfunction
1823

1924
function! denops#_internal#echo#info(...) abort
20-
call s:echomsg('Title', a:000)
25+
call s:echomsg_delay('Title', a:000)
2126
endfunction
2227

2328
function! denops#_internal#echo#warn(...) abort
24-
call s:echomsg('WarningMsg', a:000)
29+
call s:echomsg_delay('WarningMsg', a:000)
2530
endfunction
2631

2732
function! denops#_internal#echo#error(...) abort
28-
call s:echomsg('ErrorMsg', a:000)
33+
call s:echomsg_delay('ErrorMsg', a:000)
2934
endfunction
3035

3136
function! s:echomsg(hl, msg) abort
@@ -35,3 +40,21 @@ function! s:echomsg(hl, msg) abort
3540
endfor
3641
echohl None
3742
endfunction
43+
44+
function! s:echomsg_delay(hl, msg) abort
45+
call add(s:delayed_messages, [a:hl, a:msg])
46+
call timer_stop(s:delayed_timer)
47+
let s:delayed_timer = timer_start(s:DELAYED_INTERVAL, {-> s:echomsg_batch()})
48+
endfunction
49+
50+
function! s:echomsg_batch() abort
51+
let l:counter = 0
52+
for l:message in s:delayed_messages
53+
call s:echomsg(l:message[0], l:message[1])
54+
let l:counter += len(split(join(l:message[1]), '\n'))
55+
endfor
56+
let s:delayed_timer = 0
57+
let s:delayed_messages = []
58+
" Forcibly show the messages to the user
59+
call feedkeys(printf("\<Cmd>%dmessages\<CR>", l:counter), 'n')
60+
endfunction

0 commit comments

Comments
 (0)