@@ -19,9 +19,11 @@ function! s:async_redraw() abort dict
19
19
let fern = helper.fern
20
20
return s: Promise .resolve ()
21
21
\. then ({ - > fern.renderer.render (fern.visible_nodes) })
22
+ \. then ({ v - > s: reject_on_non_fern_buffer (helper.bufnr , v ) })
22
23
\. then ({ v - > fern#internal#buffer#replace (helper.bufnr , v ) })
23
24
\. then ({ - > helper.async.remark () })
24
25
\. then ({ - > fern#hook#emit (' viewer:redraw' , helper) })
26
+ \. catch ({ e - > s: is_non_fern_buffer_rejection (e ) ? 0 : s: Promise .reject (e ) })
25
27
\. finally ({ - > Profile () })
26
28
endfunction
27
29
let s: async .redraw = funcref (' s:async_redraw' )
@@ -347,3 +349,18 @@ function! s:enter(fern, node) abort
347
349
return s: Promise .reject (v: exception )
348
350
endtry
349
351
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