# HG changeset patch # User Ludovic Chabant # Date 1419731916 28800 # Node ID 8718e6dbea1e5da15c596b4cc0c2e0e16767a665 # Parent b051b81cc3650708d6e233f3a4318d1d9afcad90 Fix a bug with `:Hgstatus` showing diff summaries in its own window. This could happen when the user would commit from the status window, and do a `:Hgstatusvdiffsum` right away. It wouldn't find the previous window because it would be gone (the commit message window), so it would split the status window itself, which is often too small. Now Lawrencium tries to avoid picking the status window itself, and will just find any other window instead. diff -r b051b81cc365 -r 8718e6dbea1e plugin/lawrencium.vim --- a/plugin/lawrencium.vim Wed Dec 10 21:50:48 2014 -0800 +++ b/plugin/lawrencium.vim Sat Dec 27 17:58:36 2014 -0800 @@ -1146,7 +1146,7 @@ let l:reuse_id = 'lawrencium_diffsum_for_' . bufnr('%') let l:split_prev_win = (a:split < 3) let l:args = {'reuse_id': l:reuse_id, 'use_prev_win': l:split_prev_win, - \'split_mode': a:split} + \'avoid_win': winnr(), 'split_mode': a:split} call s:HgDiffSummary(l:path, l:args) endfunction @@ -1477,6 +1477,7 @@ let l:target_winnr = -1 let l:split = get(l:valid_args, 'split_mode', 0) let l:reuse_id = get(l:valid_args, 'reuse_id', '') + let l:avoid_id = get(l:valid_args, 'avoid_win', -1) if l:reuse_id != '' let l:target_winnr = s:find_buffer_window(l:reuse_id, 1) if l:target_winnr > 0 && l:split != 3 @@ -1488,13 +1489,26 @@ endif " If we didn't find anything, see if we should use the current or previous " window. - if l:target_winnr < 0 + if l:target_winnr <= 0 let l:use_prev_win = get(l:valid_args, 'use_prev_win', 0) if l:use_prev_win let l:target_winnr = winnr('#') call s:trace("Will use previous window: ".l:target_winnr) endif endif + " And let's see if we have a window we should actually avoid. + if l:avoid_id >= 0 && + \(l:target_winnr == l:avoid_id || + \(l:target_winnr <= 0 && winnr() == l:avoid_id)) + for wnr in range(1, winnr('$')) + if wnr != l:avoid_id + call s:trace("Avoiding using window ".l:avoid_id. + \", now using: ".wnr) + let l:target_winnr = wnr + break + endif + endfor + endif " Now let's see what kind of split we want to use, if any. let l:cmd = 'edit ' if l:split == 1