blob: af11f3da312f4482156ff9a42cd76b9133d0d377 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
" 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_window_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 did_fixed_window_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
" https://vi.stackexchange.com/questions/8926/is-it-possible-to-obtain-the-displayable-area-width-and-height-of-current-buffe
"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.
"
" This is not always inherited by vim:
" https://github.com/vim/vim/issues/12160
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
|