Skip to content

Commit

Permalink
state import / export
Browse files Browse the repository at this point in the history
  • Loading branch information
noscript committed Nov 25, 2021
1 parent 3c19771 commit a2a79b7
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 1 deletion.
65 changes: 65 additions & 0 deletions autoload/taberian.vim
Original file line number Diff line number Diff line change
Expand Up @@ -212,3 +212,68 @@ function! taberian#confirm_window_close()
endif
close
endfunction

function! taberian#state_export() abort
let state = []
for tabinfo in gettabinfo()
let tab = #{
\ tabnr: tabinfo.tabnr,
\ windows: [],
\ }
for winid in tabinfo.windows
let win = gettabwinvar(tab.tabnr, winid, 'taberian', {})->deepcopy()
if empty(win) || len(win.tabs) < 2 " only save if more than 1 tab
continue
endif

" convert bufnrs to file paths:
for tab in win.tabs
let tab.buffer = fnamemodify(bufname(tab.bufnr), ':~:.')
unlet tab.bufnr
endfor

let win.winnr = win_id2tabwin(winid)[1]
unlet win.prev_nr

call add(tab.windows, win)
endfor
if !empty(tab.windows)
call add(state, tab)
endif
endfor
return state
endfunction

function! taberian#state_import(state)
for tabinfo in gettabinfo()
let tabnr = tabinfo.tabnr
let tabs = a:state->deepcopy()->filter({_, val -> val.tabnr == tabnr})
if empty(tabs)
continue
endif
let tab = tabs[0]

for winid in tabinfo.windows
let [_, winnr] = win_id2tabwin(winid)
let wins = tab.windows->deepcopy()->filter({_, val -> val.winnr == winnr})
if empty(wins)
continue
endif
let win = wins[0]

unlet win.winnr

" convert file paths to bufnrs:
for tab in win.tabs
execute 'badd ' . tab.buffer
let tab.bufnr = bufnr(tab.buffer)
unlet tab.buffer
endfor

let old_win = gettabwinvar(tabnr, winid, 'taberian', {})
call extend(old_win, win)
call settabwinvar(tabnr, winid, 'taberian', old_win)
call win_execute(winid, 'buffer ' . old_win.tabs[old_win.curr_nr].bufnr)
endfor
endfor
endfunction
16 changes: 15 additions & 1 deletion doc/taberian.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
Author: Sergey Vlasov <sergey@vlasov.me>
Licence: Vim licence, see |license|
Site: https://github.com/noscript/taberian.vim
Version: 0.3
Version: 0.4

================================================================================
CONTENTS *taberian-contents*

Intro...................................................|taberian-intro|
Mappings.............................................|taberian-mappings|
Commands.............................................|taberian-commands|
Functions...........................................|taberian-functions|
Variables...........................................|taberian-variables|

================================================================================
Expand Down Expand Up @@ -111,6 +112,19 @@ COMMANDS *taberian-commands*
are zero-based, use 0 to go to the first tab.

:TaberianGoToPreviousTab See |taberian-goto-previous-tab|.

================================================================================
FUNCTIONS *taberian-functions*

taberian#state_export() *taberian#state_export()*
Returns a serialized state of Taberian that later can be
imported back using |taberian#state_import()|. Useful to
restore Taberian state after VIM restart.

taberian#state_import({state}) *taberian#state_import()*
Restores Taberian state, previously exported with
|taberian#state_export()|.


================================================================================
VARIABLES *taberian-variables*
Expand Down

0 comments on commit a2a79b7

Please sign in to comment.