From a6be4a301c9e095c9eaf14d5d2b6f691c9bb68f8 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Sat, 28 Aug 2021 08:12:50 -0400 Subject: [PATCH] Limit size based :Gdiffsplit orientation to no argument variant I don't think anybody liked this except for me. This brings :Gdiffsplit one step closer to :diffsplit. The no argument version will probably be removed eventually as well, but let's take it one step at a time. --- autoload/fugitive.vim | 8 +++++--- doc/fugitive.txt | 12 +++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim index a814ee1..532c42c 100644 --- a/autoload/fugitive.vim +++ b/autoload/fugitive.vim @@ -6046,12 +6046,14 @@ function! fugitive#CanDiffoff(buf) abort return s:can_diffoff(bufnr(a:buf)) endfunction -function! s:diff_modifier(count) abort +function! s:DiffModifier(count, default) abort let fdc = matchstr(&diffopt, 'foldcolumn:\zs\d\+') if &diffopt =~# 'horizontal' && &diffopt !~# 'vertical' return '' elseif &diffopt =~# 'vertical' return 'vertical ' + elseif !get(g:, 'fugitive_diffsplit_directional_fit', a:default) + return '' elseif winwidth(0) <= a:count * ((&tw ? &tw : 80) + (empty(fdc) ? 2 : fdc)) return '' else @@ -6164,7 +6166,7 @@ function! fugitive#Diffsplit(autodir, keepfocus, mods, arg, args) abort try if exists('parents') && len(parents) > 1 exe pre - let mods = (autodir ? s:diff_modifier(len(parents) + 1) : '') . s:Mods(mods, 'leftabove') + let mods = (autodir ? s:DiffModifier(len(parents) + 1, empty(args)) : '') . s:Mods(mods, 'leftabove') let nr = bufnr('') if len(parents) > 1 && !&equalalways let equalalways = 0 @@ -6238,7 +6240,7 @@ function! fugitive#Diffsplit(autodir, keepfocus, mods, arg, args) abort exe pre let restore = s:diff_restore() let w:fugitive_diff_restore = restore - let mods = (autodir ? s:diff_modifier(2) : '') . mods + let mods = (autodir ? s:DiffModifier(2, empty(args)) : '') . mods if &diffopt =~# 'vertical' let diffopt = &diffopt set diffopt-=vertical diff --git a/doc/fugitive.txt b/doc/fugitive.txt index d70e7ab..9d7b015 100644 --- a/doc/fugitive.txt +++ b/doc/fugitive.txt @@ -185,10 +185,9 @@ that are part of Git repositories). commit is given, the current file in that commit. With no argument, the version in the index or work tree is used, and the work tree version is always - placed to the right or bottom. A vertical split is - used if space permits, and if 'diffopt' does not - otherwise specify. Use Vim's |do| and |dp| to stage - and unstage changes. + placed to the right or bottom, depending on available + width. Use Vim's |do| and |dp| to stage and unstage + changes. *:Gdiffsplit!* :Gdiffsplit! Diff against any and all direct ancestors, retaining @@ -205,7 +204,10 @@ that are part of Git repositories). :Gvdiffsplit [object] Like |:Gdiffsplit|, but always split vertically. *:Ghdiffsplit* -:Ghdiffsplit [object] Like |:Gdiffsplit|, but always split horizontally. +:Gdiffsplit ++novertical [object] +:Ghdiffsplit [object] Like |:Gdiffsplit|, but with "vertical" removed from + 'diffopt'. The split will still be vertical if + combined with |:vertical|. *:GMove* :GMove {destination} Wrapper around git-mv that renames the buffer