Skip to content

Commit c906c46

Browse files
authored
Merge pull request #88 from lambdalisue/persistent-status
Keep hidden/include/exclude after enter/leave
2 parents 5a08176 + 0350d9d commit c906c46

File tree

4 files changed

+40
-7
lines changed

4 files changed

+40
-7
lines changed

autoload/fern/helper/async.vim

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,36 @@ function! s:async_enter_tree(node) abort dict
198198
if a:node.status is# helper.STATUS_NONE
199199
return s:Promise.reject()
200200
endif
201+
let saved = {
202+
\ 'hidden': fern.hidden,
203+
\ 'include': fern.include,
204+
\ 'exclude': fern.exclude,
205+
\}
201206
return s:Promise.resolve(a:node)
202207
\.then({ n -> s:enter(fern, n) })
208+
\.then({ bufnr -> fern#helper#new(bufnr) })
209+
\.then({ helper -> s:async_enter_tree_post(helper, saved) })
210+
endfunction
211+
function! s:async_enter_tree_post(helper, saved) abort
212+
let fern = a:helper.fern
213+
let fern.hidden = a:saved.hidden
214+
let fern.include = a:saved.include
215+
let fern.exclude = a:saved.exclude
216+
return a:helper.async.update_nodes(fern.nodes)
217+
\.then({ -> a:helper.async.redraw() })
203218
endfunction
204219
let s:async.enter_tree = funcref('s:async_enter_tree')
205220

206221
function! s:async_leave_tree() abort dict
207222
let helper = self.helper
208223
let fern = helper.fern
209224
let root = helper.sync.get_root_node()
225+
let saved = {
226+
\ 'name': root.name,
227+
\ 'hidden': fern.hidden,
228+
\ 'include': fern.include,
229+
\ 'exclude': fern.exclude,
230+
\}
210231
return s:Promise.resolve()
211232
\.then({ -> fern#internal#node#parent(
212233
\ root,
@@ -215,8 +236,17 @@ function! s:async_leave_tree() abort dict
215236
\ )
216237
\})
217238
\.then({ n -> s:enter(fern, n) })
218-
\.then({ -> fern#helper#new(winbufnr(helper.winid)) })
219-
\.then({ h -> h.sync.focus_node([root.name]) })
239+
\.then({ bufnr -> fern#helper#new(bufnr) })
240+
\.then({ helper -> s:async_leave_tree_post(helper, saved) })
241+
endfunction
242+
function! s:async_leave_tree_post(helper, saved) abort
243+
let fern = a:helper.fern
244+
let fern.hidden = a:saved.hidden
245+
let fern.include = a:saved.include
246+
let fern.exclude = a:saved.exclude
247+
return a:helper.async.update_nodes(fern.nodes)
248+
\.then({ -> a:helper.async.redraw() })
249+
\.then({ -> a:helper.sync.focus_node([a:saved.name]) })
220250
endfunction
221251
let s:async.leave_tree = funcref('s:async_leave_tree')
222252

autoload/fern/internal/buffer.vim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ function! fern#internal#buffer#open(bufname, ...) abort
2626
if options.opener ==# 'select'
2727
let options.opener = 'edit'
2828
if fern#internal#window#select()
29-
return
29+
return 1
3030
endif
3131
else
3232
if options.locator

autoload/fern/internal/viewer.vim

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ function! fern#internal#viewer#open(fri, options) abort
77
endfunction
88

99
function! fern#internal#viewer#init() abort
10-
if exists('b:fern') && !get(g:, 'fern_debug')
11-
return s:Promise.resolve()
12-
endif
1310
let bufnr = bufnr('%')
1411
return s:init()
1512
\.then({ -> s:notify(bufnr, v:null) })
1613
\.catch({ e -> s:Lambda.pass(e, s:notify(bufnr, e)) })
1714
endfunction
1815

1916
function! s:open(bufname, options, resolve, reject) abort
20-
call fern#internal#buffer#open(a:bufname . '$', a:options)
17+
if fern#internal#buffer#open(a:bufname . '$', a:options)
18+
call a:reject('Cancelled')
19+
return
20+
endif
2121
let b:fern_notifier = {
2222
\ 'resolve': a:resolve,
2323
\ 'reject': a:reject,

plugin/fern.vim

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ command! -bar -nargs=*
1414
\ call fern#internal#command#focus#command(<q-mods>, [<f-args>])
1515

1616
function! s:BufReadCmd() abort
17+
if exists('b:fern') && !get(g:, 'fern_debug')
18+
return
19+
endif
1720
call fern#internal#viewer#init()
1821
\.catch({ e -> fern#logger#error(e) })
1922
endfunction

0 commit comments

Comments
 (0)