events - Automatically resize vim gui according to number of vertical splits -
i writing small plugin gvim automatically increases or decreases width of gui according number of vertical splits. plugin works this
if has("gui_running") augroup resize autocmd winenter * call <sid>resizesplits() autocmd winleave * call <sid>resizesplits() autocmd bufleave * call <sid>resizesplits() augroup end endif
here resizesplits()
function resizes gui window:
function! s:resizesplits() let l:count = 0 windo if winwidth(winnr()) < &columns | \ let l:count += 1 | \ endif if l:count > 0 let l:totwidth = l:count - 1 + l:count*80 else let l:totwidth = 80 endif if &columns != l:totwidth execute 'set co=' . l:totwidth endif endfunction
the plugin works want to, not quite. seems bufleave
event (and similar ones) executes before windows closed. problem instance when <c-w>o
or :only
. problem resizesplits
function not work, since still counts old number of windows.
is there autocommand can used detect when number of windows has been changed, or bufleave
-like event guaranteed executed after windows destroyed/removed?
it trivial plugin work mappings, not able work reliably ex commands :only
, :close
.
there's no exact event :close
/ :quit
; closest bufwinleave
, doesn't fire when buffer still visible in buffer. combine bufleave
, have check buffer not visible more.
to handle unlisted buffers, can add condition checking 'buflisted'
in executed autocmd.
edit after update of question
i don't think there's way intercept corner cases you've described. :only
tricky. can propose work around additional autocmds on cursorhold
, cursormoved
. way, incorrect state persist short time.
Comments
Post a Comment