mirror of
https://github.com/tpope/vim-fugitive.git
synced 2025-11-10 12:33:46 -05:00
Pick sane git_dir for :Gedit from :Gstatus window
When using a :Gedit command from the :Gstatus window the git_dir was being based on the window that was switched into in order to edit the file. So if Fugitive switched into a window with a file from a different Git repo (or a file with no Git repo) the :Gedit command could fail or edit the wrong file. Instead base the git_dir on the window from which the :Gedit command originated.
This commit is contained in:
@@ -1072,6 +1072,7 @@ endfunction
|
|||||||
" Gedit, Gpedit, Gsplit, Gvsplit, Gtabedit, Gread {{{1
|
" Gedit, Gpedit, Gsplit, Gvsplit, Gtabedit, Gread {{{1
|
||||||
|
|
||||||
function! s:Edit(cmd,bang,...) abort
|
function! s:Edit(cmd,bang,...) abort
|
||||||
|
let buffer = s:buffer()
|
||||||
if a:cmd !~# 'read'
|
if a:cmd !~# 'read'
|
||||||
if &previewwindow && getbufvar('','fugitive_type') ==# 'index'
|
if &previewwindow && getbufvar('','fugitive_type') ==# 'index'
|
||||||
wincmd p
|
wincmd p
|
||||||
@@ -1091,7 +1092,7 @@ function! s:Edit(cmd,bang,...) abort
|
|||||||
if a:bang
|
if a:bang
|
||||||
let args = s:gsub(a:0 ? a:1 : '', '\\@<!%(\\\\)*\zs[%#]', '\=s:buffer().expand(submatch(0))')
|
let args = s:gsub(a:0 ? a:1 : '', '\\@<!%(\\\\)*\zs[%#]', '\=s:buffer().expand(submatch(0))')
|
||||||
if a:cmd =~# 'read'
|
if a:cmd =~# 'read'
|
||||||
let git = s:repo().git_command()
|
let git = buffer.repo().git_command()
|
||||||
let last = line('$')
|
let last = line('$')
|
||||||
silent call s:ExecuteInTree((a:cmd ==# 'read' ? '$read' : a:cmd).'!'.git.' --no-pager '.args)
|
silent call s:ExecuteInTree((a:cmd ==# 'read' ? '$read' : a:cmd).'!'.git.' --no-pager '.args)
|
||||||
if a:cmd ==# 'read'
|
if a:cmd ==# 'read'
|
||||||
@@ -1102,7 +1103,7 @@ function! s:Edit(cmd,bang,...) abort
|
|||||||
return 'redraw|echo '.string(':!'.git.' '.args)
|
return 'redraw|echo '.string(':!'.git.' '.args)
|
||||||
else
|
else
|
||||||
let temp = resolve(tempname())
|
let temp = resolve(tempname())
|
||||||
let s:temp_files[temp] = s:repo().dir()
|
let s:temp_files[temp] = buffer.repo().dir()
|
||||||
silent execute a:cmd.' '.temp
|
silent execute a:cmd.' '.temp
|
||||||
if a:cmd =~# 'pedit'
|
if a:cmd =~# 'pedit'
|
||||||
wincmd P
|
wincmd P
|
||||||
@@ -1124,16 +1125,16 @@ function! s:Edit(cmd,bang,...) abort
|
|||||||
if a:0 && a:1 == ''
|
if a:0 && a:1 == ''
|
||||||
return ''
|
return ''
|
||||||
elseif a:0
|
elseif a:0
|
||||||
let file = s:buffer().expand(a:1)
|
let file = buffer.expand(a:1)
|
||||||
elseif expand('%') ==# ''
|
elseif expand('%') ==# ''
|
||||||
let file = ':'
|
let file = ':'
|
||||||
elseif s:buffer().commit() ==# '' && s:buffer().path('/') !~# '^/.git\>'
|
elseif buffer.commit() ==# '' && buffer.path('/') !~# '^/.git\>'
|
||||||
let file = s:buffer().path(':')
|
let file = buffer.path(':')
|
||||||
else
|
else
|
||||||
let file = s:buffer().path('/')
|
let file = buffer.path('/')
|
||||||
endif
|
endif
|
||||||
try
|
try
|
||||||
let file = s:repo().translate(file)
|
let file = buffer.repo().translate(file)
|
||||||
catch /^fugitive:/
|
catch /^fugitive:/
|
||||||
return 'echoerr v:errmsg'
|
return 'echoerr v:errmsg'
|
||||||
endtry
|
endtry
|
||||||
|
|||||||
Reference in New Issue
Block a user