Use temp buffer with man filetype for :Git help

This commit is contained in:
Tim Pope 2019-08-11 18:31:13 -04:00
parent 078210c718
commit 4460aeffdd

View File

@ -584,10 +584,8 @@ endfunction
function! s:Command(command, line1, line2, range, bang, mods, arg, args) abort function! s:Command(command, line1, line2, range, bang, mods, arg, args) abort
try try
if exists('*s:' . a:command . 'Subcommand') if exists('*s:' . a:command . 'Subcommand')
let dir = s:Dir() let hyphenated = tolower(substitute(a:command, '\l\zs\u', '-\1', 'g'))
exe s:DirCheck(dir) return s:GitCommand(a:line1, a:line2, a:range, a:line2, a:bang, s:Mods(a:mods), '', hyphenated . ' ' . a:arg, [hyphenated] + a:args)
let [args, after] = s:SplitExpandChain(a:arg, s:Tree(dir))
return 'exe ' . string(s:{a:command}Subcommand(a:line1, a:line2, a:range, a:bang, s:Mods(a:mods), args)) . after
endif endif
return s:{a:command}Command(a:line1, a:line2, a:range, a:line2, a:bang, s:Mods(a:mods), '', a:arg, a:args) return s:{a:command}Command(a:line1, a:line2, a:range, a:line2, a:bang, s:Mods(a:mods), '', a:arg, a:args)
catch /^fugitive:/ catch /^fugitive:/
@ -2115,13 +2113,13 @@ function! s:GitCommand(line1, line2, range, count, bang, mods, reg, arg, args) a
return (empty(cmd) ? 'exe' : cmd) . after return (empty(cmd) ? 'exe' : cmd) . after
endif endif
let alias = get(s:Aliases(dir), args[0], '!') let alias = get(s:Aliases(dir), args[0], '!')
if alias !~# '^!\|[\"'']' && !filereadable(s:ExecPath() . '/git-' . args[0]) if get(args, 1, '') !=# '--help' && alias !~# '^!\|[\"'']' && !filereadable(s:ExecPath() . '/git-' . args[0])
\ && !(has('win32') && filereadable(s:ExecPath() . '/git-' . args[0] . '.exe')) \ && !(has('win32') && filereadable(s:ExecPath() . '/git-' . args[0] . '.exe'))
call remove(args, 0) call remove(args, 0)
call extend(args, split(alias, '\s\+'), 'keep') call extend(args, split(alias, '\s\+'), 'keep')
endif endif
let name = substitute(args[0], '\%(^\|-\)\(\l\)', '\u\1', 'g') let name = substitute(args[0], '\%(^\|-\)\(\l\)', '\u\1', 'g')
if exists('*s:' . name . 'Subcommand') if exists('*s:' . name . 'Subcommand') && get(args, 1, '') !=# '--help'
try try
exe s:DirCheck(dir) exe s:DirCheck(dir)
return 'exe ' . string(s:{name}Subcommand(a:line1, a:count, a:range, a:bang, a:mods, args[1:-1])) . after return 'exe ' . string(s:{name}Subcommand(a:line1, a:count, a:range, a:bang, a:mods, args[1:-1])) . after
@ -2130,7 +2128,8 @@ function! s:GitCommand(line1, line2, range, count, bang, mods, reg, arg, args) a
endtry endtry
endif endif
if a:bang || args[0] =~# '^-P$\|^--no-pager$\|diff\%(tool\)\@!\|log\|^show$' || if a:bang || args[0] =~# '^-P$\|^--no-pager$\|diff\%(tool\)\@!\|log\|^show$' ||
\ (args[0] ==# 'stash' && get(args, 1, '') ==# 'show') \ (args[0] ==# 'stash' && get(args, 1, '') ==# 'show') ||
\ (args[0] ==# 'help' || get(args, 1, '') ==# '--help') && !s:HasOpt(args, '--web')
return s:OpenExec((a:count > 0 ? a:count : '') . (a:count ? 'split' : 'edit'), a:mods, args, dir) . after return s:OpenExec((a:count > 0 ? a:count : '') . (a:count ? 'split' : 'edit'), a:mods, args, dir) . after
endif endif
let git = s:UserCommandList(dir) let git = s:UserCommandList(dir)
@ -3924,11 +3923,25 @@ function! s:OpenExec(cmd, mods, args, ...) abort
let args = s:shellesc(a:args) let args = s:shellesc(a:args)
let temp = tempname() let temp = tempname()
let git = s:UserCommand(dir) let git = s:UserCommand(dir)
silent! execute '!' . escape(git . ' --no-pager ' . args, '!#%') . let columns = get(g:, 'fugitive_columns', 80)
if columns <= 0
let env = ''
elseif s:winshell()
let env = 'set COLUMNS=' . columns . '& '
else
let env = 'env COLUMNS=' . columns . ' '
endif
silent! execute '!' . escape(env . git . ' --no-pager ' . args, '!#%') .
\ (&shell =~# 'csh' ? ' >& ' . temp : ' > ' . temp . ' 2>&1') \ (&shell =~# 'csh' ? ' >& ' . temp : ' > ' . temp . ' 2>&1')
redraw! redraw!
let temp = s:Resolve(temp) let temp = s:Resolve(temp)
let s:temp_files[s:cpath(temp)] = { 'dir': dir, 'filetype': 'git', 'modifiable': get(readfile(temp, 1), '') =~# '^diff ' } let first = join(readfile(temp, '', 2), "\n")
if first =~# '\<\([[:upper:][:digit:]_-]\+(\d\+)\).*\1'
let filetype = 'man'
else
let filetype = 'git'
endif
let s:temp_files[s:cpath(temp)] = { 'dir': dir, 'filetype': filetype, 'modifiable': first =~# '^diff ' }
if a:cmd ==# 'edit' if a:cmd ==# 'edit'
call s:BlurStatus() call s:BlurStatus()
endif endif