Skip to content

Commit 56f7c0d

Browse files
authored
Check if 'bufnr' is a fern buffer before replacing the buffer (#516)
Close #514
1 parent 95218a9 commit 56f7c0d

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

autoload/fern/helper/async.vim

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ function! s:async_redraw() abort dict
1919
let fern = helper.fern
2020
return s:Promise.resolve()
2121
\.then({ -> fern.renderer.render(fern.visible_nodes) })
22+
\.then({ v -> s:reject_on_non_fern_buffer(helper.bufnr, v) })
2223
\.then({ v -> fern#internal#buffer#replace(helper.bufnr, v) })
2324
\.then({ -> helper.async.remark() })
2425
\.then({ -> fern#hook#emit('viewer:redraw', helper) })
26+
\.catch({ e -> s:is_non_fern_buffer_rejection(e) ? 0 : s:Promise.reject(e) })
2527
\.finally({ -> Profile() })
2628
endfunction
2729
let s:async.redraw = funcref('s:async_redraw')
@@ -347,3 +349,18 @@ function! s:enter(fern, node) abort
347349
return s:Promise.reject(v:exception)
348350
endtry
349351
endfunction
352+
353+
" Check if the 'bufnr' is a fern buffer
354+
" This check is required because the 'bufnr' may be a buffer that is not a
355+
" fern buffer caused by 'enew' command prior to the initial rendering.
356+
" See https://github.com/lambdalisue/fern.vim/issues/514 for detail.
357+
function! s:reject_on_non_fern_buffer(bufnr, value) abort
358+
if bufname(a:bufnr) !~# 'fern://'
359+
return s:Promise.reject('reject because the buffer is not a fern buffer')
360+
endif
361+
return s:Promise.resolve(a:value)
362+
endfunction
363+
364+
function! s:is_non_fern_buffer_rejection(message) abort
365+
return a:message ==# 'reject because the buffer is not a fern buffer'
366+
endfunction

0 commit comments

Comments
 (0)