mirror of
https://github.com/tpope/vim-fugitive.git
synced 2025-11-09 20:13:46 -05:00
Extract current file logic from s:GF
This commit is contained in:
@@ -2724,7 +2724,7 @@ function! s:JumpInit() abort
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:GF(mode) abort
|
function! s:cfile() abort
|
||||||
try
|
try
|
||||||
let buffer = s:buffer()
|
let buffer = s:buffer()
|
||||||
let myhash = buffer.sha1()
|
let myhash = buffer.sha1()
|
||||||
@@ -2734,12 +2734,10 @@ function! s:GF(mode) abort
|
|||||||
|
|
||||||
if buffer.type('tree')
|
if buffer.type('tree')
|
||||||
let showtree = (getline(1) =~# '^tree ' && getline(2) == "")
|
let showtree = (getline(1) =~# '^tree ' && getline(2) == "")
|
||||||
if showtree && line('.') == 1
|
if showtree && line('.') > 2
|
||||||
return ""
|
return [buffer.commit().':'.s:buffer().path().(buffer.path() =~# '^$\|/$' ? '' : '/').s:sub(getline('.'),'/$','')]
|
||||||
elseif showtree && line('.') > 2
|
|
||||||
return s:Edit(a:mode,0,buffer.commit().':'.s:buffer().path().(buffer.path() =~# '^$\|/$' ? '' : '/').s:sub(getline('.'),'/$',''))
|
|
||||||
elseif getline('.') =~# '^\d\{6\} \l\{3,8\} \x\{40\}\t'
|
elseif getline('.') =~# '^\d\{6\} \l\{3,8\} \x\{40\}\t'
|
||||||
return s:Edit(a:mode,0,buffer.commit().':'.s:buffer().path().(buffer.path() =~# '^$\|/$' ? '' : '/').s:sub(matchstr(getline('.'),'\t\zs.*'),'/$',''))
|
return [buffer.commit().':'.s:buffer().path().(buffer.path() =~# '^$\|/$' ? '' : '/').s:sub(matchstr(getline('.'),'\t\zs.*'),'/$','')]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
elseif buffer.type('blob')
|
elseif buffer.type('blob')
|
||||||
@@ -2749,7 +2747,7 @@ function! s:GF(mode) abort
|
|||||||
catch /^fugitive:/
|
catch /^fugitive:/
|
||||||
endtry
|
endtry
|
||||||
if exists('sha1')
|
if exists('sha1')
|
||||||
return s:Edit(a:mode,0,ref)
|
return [ref]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
else
|
else
|
||||||
@@ -2758,29 +2756,29 @@ function! s:GF(mode) abort
|
|||||||
if getline('.') =~# '^\d\{6\} \x\{40\} \d\t'
|
if getline('.') =~# '^\d\{6\} \x\{40\} \d\t'
|
||||||
let ref = matchstr(getline('.'),'\x\{40\}')
|
let ref = matchstr(getline('.'),'\x\{40\}')
|
||||||
let file = ':'.s:sub(matchstr(getline('.'),'\d\t.*'),'\t',':')
|
let file = ':'.s:sub(matchstr(getline('.'),'\d\t.*'),'\t',':')
|
||||||
return s:Edit(a:mode,0,file)
|
return [file]
|
||||||
|
|
||||||
elseif getline('.') =~# '^#\trenamed:.* -> '
|
elseif getline('.') =~# '^#\trenamed:.* -> '
|
||||||
let file = '/'.matchstr(getline('.'),' -> \zs.*')
|
let file = '/'.matchstr(getline('.'),' -> \zs.*')
|
||||||
return s:Edit(a:mode,0,file)
|
return [file]
|
||||||
elseif getline('.') =~# '^#\t[[:alpha:] ]\+: *.'
|
elseif getline('.') =~# '^#\t[[:alpha:] ]\+: *.'
|
||||||
let file = '/'.matchstr(getline('.'),': *\zs.\{-\}\ze\%( ([^()[:digit:]]\+)\)\=$')
|
let file = '/'.matchstr(getline('.'),': *\zs.\{-\}\ze\%( ([^()[:digit:]]\+)\)\=$')
|
||||||
return s:Edit(a:mode,0,file)
|
return [file]
|
||||||
elseif getline('.') =~# '^#\t.'
|
elseif getline('.') =~# '^#\t.'
|
||||||
let file = '/'.matchstr(getline('.'),'#\t\zs.*')
|
let file = '/'.matchstr(getline('.'),'#\t\zs.*')
|
||||||
return s:Edit(a:mode,0,file)
|
return [file]
|
||||||
elseif getline('.') =~# ': needs merge$'
|
elseif getline('.') =~# ': needs merge$'
|
||||||
let file = '/'.matchstr(getline('.'),'.*\ze: needs merge$')
|
let file = '/'.matchstr(getline('.'),'.*\ze: needs merge$')
|
||||||
return s:Edit(a:mode,0,file).'|Gdiff'
|
return [file, 'Gdiff']
|
||||||
|
|
||||||
elseif getline('.') ==# '# Not currently on any branch.'
|
elseif getline('.') ==# '# Not currently on any branch.'
|
||||||
return s:Edit(a:mode,0,'HEAD')
|
return ['HEAD']
|
||||||
elseif getline('.') =~# '^# On branch '
|
elseif getline('.') =~# '^# On branch '
|
||||||
let file = 'refs/heads/'.getline('.')[12:]
|
let file = 'refs/heads/'.getline('.')[12:]
|
||||||
return s:Edit(a:mode,0,file)
|
return [file]
|
||||||
elseif getline('.') =~# "^# Your branch .*'"
|
elseif getline('.') =~# "^# Your branch .*'"
|
||||||
let file = matchstr(getline('.'),"'\\zs\\S\\+\\ze'")
|
let file = matchstr(getline('.'),"'\\zs\\S\\+\\ze'")
|
||||||
return s:Edit(a:mode,0,file)
|
return [file]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let showtree = (getline(1) =~# '^tree ' && getline(2) == "")
|
let showtree = (getline(1) =~# '^tree ' && getline(2) == "")
|
||||||
@@ -2790,7 +2788,7 @@ function! s:GF(mode) abort
|
|||||||
|
|
||||||
elseif getline('.') =~# '^commit \x\{40\}\>'
|
elseif getline('.') =~# '^commit \x\{40\}\>'
|
||||||
let ref = matchstr(getline('.'),'\x\{40\}')
|
let ref = matchstr(getline('.'),'\x\{40\}')
|
||||||
return s:Edit(a:mode,0,ref)
|
return [ref]
|
||||||
|
|
||||||
elseif getline('.') =~# '^parent \x\{40\}\>'
|
elseif getline('.') =~# '^parent \x\{40\}\>'
|
||||||
let ref = matchstr(getline('.'),'\x\{40\}')
|
let ref = matchstr(getline('.'),'\x\{40\}')
|
||||||
@@ -2800,21 +2798,21 @@ function! s:GF(mode) abort
|
|||||||
let parent += 1
|
let parent += 1
|
||||||
let line -= 1
|
let line -= 1
|
||||||
endwhile
|
endwhile
|
||||||
return s:Edit(a:mode,0,ref)
|
return [ref]
|
||||||
|
|
||||||
elseif getline('.') =~ '^tree \x\{40\}$'
|
elseif getline('.') =~ '^tree \x\{40\}$'
|
||||||
let ref = matchstr(getline('.'),'\x\{40\}')
|
let ref = matchstr(getline('.'),'\x\{40\}')
|
||||||
if s:repo().rev_parse(myhash.':') == ref
|
if s:repo().rev_parse(myhash.':') == ref
|
||||||
let ref = myhash.':'
|
let ref = myhash.':'
|
||||||
endif
|
endif
|
||||||
return s:Edit(a:mode,0,ref)
|
return [ref]
|
||||||
|
|
||||||
elseif getline('.') =~# '^object \x\{40\}$' && getline(line('.')+1) =~ '^type \%(commit\|tree\|blob\)$'
|
elseif getline('.') =~# '^object \x\{40\}$' && getline(line('.')+1) =~ '^type \%(commit\|tree\|blob\)$'
|
||||||
let ref = matchstr(getline('.'),'\x\{40\}')
|
let ref = matchstr(getline('.'),'\x\{40\}')
|
||||||
let type = matchstr(getline(line('.')+1),'type \zs.*')
|
let type = matchstr(getline(line('.')+1),'type \zs.*')
|
||||||
|
|
||||||
elseif getline('.') =~# '^\l\{3,8\} '.myhash.'$'
|
elseif getline('.') =~# '^\l\{3,8\} '.myhash.'$'
|
||||||
return ''
|
let ref = buffer.rev()
|
||||||
|
|
||||||
elseif getline('.') =~# '^\l\{3,8\} \x\{40\}\>'
|
elseif getline('.') =~# '^\l\{3,8\} \x\{40\}\>'
|
||||||
let ref = matchstr(getline('.'),'\x\{40\}')
|
let ref = matchstr(getline('.'),'\x\{40\}')
|
||||||
@@ -2835,7 +2833,7 @@ function! s:GF(mode) abort
|
|||||||
endwhile
|
endwhile
|
||||||
let offset += matchstr(getline(lnum), type.'\zs\d\+')
|
let offset += matchstr(getline(lnum), type.'\zs\d\+')
|
||||||
let ref = getline(search('^'.type.'\{3\} [ab]/','bnW'))[4:-1]
|
let ref = getline(search('^'.type.'\{3\} [ab]/','bnW'))[4:-1]
|
||||||
let dcmd = '+'.offset.'|normal! zv'
|
let dcmd = offset.'|normal!zv'
|
||||||
let dref = ''
|
let dref = ''
|
||||||
|
|
||||||
elseif getline('.') =~# '^rename from '
|
elseif getline('.') =~# '^rename from '
|
||||||
@@ -2858,7 +2856,7 @@ function! s:GF(mode) abort
|
|||||||
let ref = getline('.')
|
let ref = getline('.')
|
||||||
|
|
||||||
elseif expand('<cword>') =~# '^\x\{7,40\}\>'
|
elseif expand('<cword>') =~# '^\x\{7,40\}\>'
|
||||||
return s:Edit(a:mode,0,expand('<cword>'))
|
return [expand('<cword>')]
|
||||||
|
|
||||||
else
|
else
|
||||||
let ref = ''
|
let ref = ''
|
||||||
@@ -2884,16 +2882,29 @@ function! s:GF(mode) abort
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if exists('dref')
|
if exists('dref')
|
||||||
return s:Edit(a:mode,0,ref) . '|'.dcmd.' '.s:fnameescape(dref)
|
return [ref, dcmd] + (empty(dref) ? [] : [dref])
|
||||||
elseif ref != ""
|
elseif ref != ""
|
||||||
return s:Edit(a:mode,0,ref)
|
return [ref]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
return ''
|
return []
|
||||||
|
endtry
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:GF(mode) abort
|
||||||
|
try
|
||||||
|
let results = s:cfile()
|
||||||
catch /^fugitive:/
|
catch /^fugitive:/
|
||||||
return 'echoerr v:errmsg'
|
return 'echoerr v:errmsg'
|
||||||
endtry
|
endtry
|
||||||
|
if len(results) > 1
|
||||||
|
return s:Edit(a:mode, 0, results[0]).'|'.results[1].join(map(results[2:-1], '" ".s:fnameescape(v:val)'), '')
|
||||||
|
elseif len(results)
|
||||||
|
return s:Edit(a:mode, 0, results[0])
|
||||||
|
else
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Section: Statusline
|
" Section: Statusline
|
||||||
|
|||||||
Reference in New Issue
Block a user