From 158ffdbb14e3e6f22c9c81dba3a0ec40ba120295 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Sun, 14 Jul 2019 16:44:05 -0400 Subject: [PATCH] Extract function to create titled quickfix list --- autoload/fugitive.vim | 59 ++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim index 0a9735c..92e5d61 100644 --- a/autoload/fugitive.vim +++ b/autoload/fugitive.vim @@ -171,6 +171,32 @@ function! s:map(mode, lhs, rhs, ...) abort endif endfunction +" Section: Quickfix + +function! s:QuickfixGet(nr, ...) abort + if a:nr < 0 + return call('getqflist', a:000) + else + return call('getloclist', [a:nr] + a:000) + endif +endfunction + +function! s:QuickfixSet(nr, ...) abort + if a:nr < 0 + return call('setqflist', a:000) + else + return call('setloclist', [a:nr] + a:000) + endif +endfunction + +function! s:QuickfixCreate(nr, opts) abort + if has('patch-7.4.2200') + call s:QuickfixSet(a:nr, [], ' ', a:opts) + else + call s:QuickfixSet(a:nr, [], ' ') + endif +endfunction + " Section: Git function! s:UserCommandList(...) abort @@ -3357,22 +3383,6 @@ if !exists('g:fugitive_summary_format') let g:fugitive_summary_format = '%s' endif -function! s:GetLocList(nr, ...) abort - if a:nr < 0 - return call('getqflist', a:000) - else - return call('getloclist', [a:nr] + a:000) - endif -endfunction - -function! s:SetLocList(nr, ...) abort - if a:nr < 0 - return call('setqflist', a:000) - else - return call('setloclist', [a:nr] + a:000) - endif -endfunction - function! s:GrepComplete(A, L, P) abort return s:CompleteSubcommand('grep', a:A, a:L, a:P) endfunction @@ -3424,18 +3434,15 @@ function! s:Grep(type, bang, arg) abort call add(cmd, '--column') endif let [args, after] = s:SplitExpandChain(a:arg, s:Tree(dir)) - if exists(':chistory') - call s:SetLocList(listnr, [], ' ', {'title': (listnr < 0 ? ':Ggrep ' : ':Glgrep ') . s:fnameescape(args)}) - else - call s:SetLocList(listnr, [], ' ') - endif + let cached = s:HasOpt(args, '--cached') + let name_only = s:HasOpt(args, '-l', '--files-with-matches', '--name-only', '-L', '--files-without-match') + let title = [listnr < 0 ? ':Ggrep' : ':Glgrep'] + args + call s:QuickfixCreate(listnr, {'title': (listnr < 0 ? ':Ggrep ' : ':Glgrep ') . s:fnameescape(args)}) let tempfile = tempname() exe '!' . s:shellesc(cmd + args) \ printf(&shellpipe . (&shellpipe =~# '%s' ? '' : ' %s'), s:shellesc(tempfile)) - let cached = s:HasOpt(args, '--cached') - let name_only = s:HasOpt(args, '-l', '--files-with-matches', '--name-only', '-L', '--files-without-match') let list = map(readfile(tempfile), 's:GrepParseLine(cached, name_only, dir, v:val)') - call s:SetLocList(listnr, list, 'a') + call s:QuickfixSet(listnr, list, 'a') if !a:bang && !empty(list) return (listnr < 0 ? 'c' : 'l').'first' . after else @@ -3488,7 +3495,7 @@ function! s:Log(type, bang, line1, count, args) abort let &grepformat = '%Cdiff %.%#,%C--- %.%#,%C+++ %.%#,%Z@@ -%\d%\+\,%\d%\+ +%l\,%\d%\+ @@,%-G-%.%#,%-G+%.%#,%-G %.%#,%-G,%A%f' . "\t\t" . module . "\t\t%m" silent! exe (listnr < 0 ? 'grep' : 'lgrep') . '!' . escape(s:shellesc(args + paths), '|') if exists(':chistory') - call s:SetLocList(listnr, [], 'a', {'title': (listnr < 0 ? ':Glog ' : ':Gllog ') . s:fnameescape(args + paths)}) + call s:QuickfixSet(listnr, [], 'a', {'title': (listnr < 0 ? ':Glog ' : ':Gllog ') . s:fnameescape(args + paths)}) endif redraw! finally @@ -3500,7 +3507,7 @@ function! s:Log(type, bang, line1, count, args) abort if winnr != winnr() wincmd p endif - if !a:bang && len(s:GetLocList(listnr)) + if !a:bang && len(s:QuickfixGet(listnr)) return a:type . 'first' . after endif return after[1:-1]