Skip to content

Commit cf9b234

Browse files
committed
Add a function to get fresh associated winid of fern instance
This fix partially close #386
1 parent 6e4b08b commit cf9b234

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

autoload/fern/helper/sync.vim

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,18 @@ endfunction
1111

1212
let s:sync = {}
1313

14+
function! s:sync_winid() abort dict
15+
let helper = self.helper
16+
if win_id2tabwin(helper.winid) != [0, 0]
17+
return helper.winid
18+
endif
19+
" Original window has disappeared
20+
let winids = win_findbuf(helper.bufnr)
21+
let helper.winid = len(winids) is# 0 ? -1 : winids[0]
22+
return helper.winid
23+
endfunction
24+
let s:sync.winid = funcref('s:sync_winid')
25+
1426
function! s:sync_echo(message, ...) abort dict
1527
let hl = a:0 ? a:1 : 'None'
1628
try
@@ -73,14 +85,22 @@ let s:sync.get_selected_nodes = funcref('s:sync_get_selected_nodes')
7385
function! s:sync_get_cursor() abort dict
7486
let helper = self.helper
7587
let fern = helper.fern
76-
return s:WindowCursor.get_cursor(helper.winid)
88+
let winid = self.winid()
89+
if winid is# -1
90+
return [0, 0]
91+
endif
92+
return s:WindowCursor.get_cursor(winid)
7793
endfunction
7894
let s:sync.get_cursor = funcref('s:sync_get_cursor')
7995

8096
function! s:sync_set_cursor(cursor) abort dict
8197
let helper = self.helper
8298
let fern = helper.fern
83-
call s:WindowCursor.set_cursor(helper.winid, a:cursor)
99+
let winid = self.winid()
100+
if winid is# -1
101+
return
102+
endif
103+
call s:WindowCursor.set_cursor(winid, a:cursor)
84104
call setbufvar(helper.bufnr, 'fern_cursor', a:cursor)
85105
endfunction
86106
let s:sync.set_cursor = funcref('s:sync_set_cursor')

doc/fern-develop.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,11 +316,12 @@ VARIABLE *fern-develop-helper-variable*
316316

317317
*fern-develop-helper.bufnr*
318318
.bufnr
319-
A buffer number where the target fern instance binded.
319+
A buffer number where the target fern instance is associated.
320320

321321
*fern-develop-helper.winid*
322322
.winid
323-
A window number where a target fern instance binded.
323+
A window number where a target fern instance is associated.
324+
Use |fern-develop-helper.sync.winid()| to get proper value.
324325

325326
*fern-develop-helper.STATUS_NONE*
326327
*fern-develop-helper.STATUS_COLLAPSED*
@@ -335,6 +336,10 @@ SYNC METHODS *fern-develop-helper.sync*
335336

336337
Following methods are executed synchronously.
337338

339+
*fern-develop-helper.sync.winid()*
340+
.sync.winid()
341+
Return |winid| where a target fern instance is associated.
342+
338343
*fern-develop-helper.sync.echo()*
339344
.sync.echo({message})
340345
Display a temporary |String| {message}.

0 commit comments

Comments
 (0)