@@ -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 () })
2628endfunction
2729let 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
349351endfunction
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