diff options
Diffstat (limited to 'vim.dot.link/plugin/session_workarounds.vim')
-rw-r--r-- | vim.dot.link/plugin/session_workarounds.vim | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/vim.dot.link/plugin/session_workarounds.vim b/vim.dot.link/plugin/session_workarounds.vim new file mode 100644 index 0000000..be51942 --- /dev/null +++ b/vim.dot.link/plugin/session_workarounds.vim @@ -0,0 +1,93 @@ +" session_workarounds.vim - Session restoration workarounds +" +" Author: Silvio Rhatto <rhatto@riseup.net> +" + +" Fix NERDTree width +" +" Useful after restoring sessions between screen size changes (such +" as when you share sessions between different computers). +function FixWindowWidths() + " Make sure NERDTree is focused + execute ":NERDTreeFocus" + + " Set a fixed width + execute ":vertical resize 30" + + " Move to the left pane + wincmd l +endfunction + +" In case you want to invoke FixWindowWidths explicitly +command! -bang FixWindowWidths :call FixWindowWidths() + +" Fix window widths on all tabs +function FixAllWindowWidths() + " Make sure to run this only once + if exists("did_fixed_nerdtree_widths") + return + endif + + " Save the last active window + let l:current_win = win_getid() + + tabdo :call FixWindowWidths() + + " Restore the active window + call win_gotoid(l:current_win) + + " An additional, last move to the left pane + wincmd l + + let dir_fixed_nerdtree_widths=1 +endfunction + +" Ensure the window has maximized height +" +" This helps restoring the window size after reopening sessions after +" switching monitors (like from laptop screen to external HDMI monitor). +" +" We just want to quickly maximize the window and then restore it to +" it's original size, to ensure all windows are refreshed. +" +" Maybe this is not a NERDTree workaround itself, but more like a +" session workaround. +" +" https://superuser.com/questions/140419/how-to-start-gvim-maximized +" https://vim.fandom.com/wiki/Maximize_or_set_initial_window_size +"let lines_initial=&l:lines +function FixWindowHeights() + " Set the maximum available height + set lines=999 + + " Set the lines depending on the LINES environment variable + " or through tput. + if $LINES != "" + execute ':set lines=' . $LINES + else + let available_lines = system('tput lines') + execute ':set lines=' . available_lines + " Old, and not working approach that tries to reuse the initial height + "else + " execute ':set lines=' . lines_initial + " set lines=999 + " execute ':set lines=' . winheight(0) - 3 + endif +endfunction + +" Restore all window sizes +function RestoreWindowSizes() + call FixWindowHeights() + call FixAllWindowWidths() +endfunction + +" Fix all window sizes +augroup workaround + autocmd! + " This tends to fire for every buffer + autocmd workaround SessionLoadPost * call RestoreWindowSizes() + + " This seems to fire only once, but even when there's no session to be + " restored. + "autocmd workaround VimEnter * call FixAllWindowWidths() +augroup END |