Skip to content

Commit 65d4a43

Browse files
committed
Move toward fully programmatic configuration
There are far few less hardcoded settings Implement a function for registering programs; this still needs to be exposed to outside users. GrepProgram now knows nothing of programs other than vimgrep
1 parent 108029e commit 65d4a43

File tree

1 file changed

+70
-119
lines changed

1 file changed

+70
-119
lines changed

plugin/EasyGrep.vim

Lines changed: 70 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -769,102 +769,38 @@ endfunction
769769
" ChooseGrepProgram {{{
770770
function! <sid>ChooseGrepProgram(...)
771771

772-
let chooseVimgrep = 0
773-
let chooseFindstr = 0
774-
let chooseGrep = 0
775-
let chooseGitGrep = 0
776-
let chooseAckGrep = 0
777-
let chooseAck = 0
778-
let chooseAg = 0
779-
let choosePt = 0
772+
let programNames = sort(keys(s:commandParamsDict))
780773

781774
if a:0 > 0
782775
let grepChoiceStr = a:1
783776
else
784777
let lst = [ "Select grep program: " ]
785-
let i = 1
786-
" vimgrep
787-
let chooseVimgrep = i
788-
call extend(lst, [ i.". vimgrep" ])
789-
let i = i + 1
790-
" findstr
791-
if has("win32") && executable("findstr")
792-
let chooseFindstr = i
793-
call extend(lst, [ i.". findstr" ])
794-
let i = i + 1
795-
else
796-
let chooseFindstr = -1
797-
endif
798-
" grep
799-
if executable("grep")
800-
let chooseGrep = i
801-
call extend(lst, [ i.". grep" ])
802-
let i = i + 1
803-
else
804-
let chooseGrep = -1
805-
endif
806-
" git grep
807-
if executable("git")
808-
let chooseGitGrep = i
809-
call extend(lst, [ i.". git grep" ])
810-
let i = i + 1
811-
else
812-
let chooseGitGrep = -1
813-
endif
814-
" ack
815-
if executable("ack-grep")
816-
let chooseAckGrep = i
817-
call extend(lst, [ i.". ack-grep" ])
818-
let i = i + 1
819-
elseif executable("ack")
820-
let chooseAck = i
821-
call extend(lst, [ i.". ack" ])
822-
let i = i + 1
823-
else
824-
let chooseAck = -1
825-
endif
826-
" ag
827-
if executable("ag")
828-
let chooseAg = i
829-
call extend(lst, [ i.". ag" ])
830-
let i = i + 1
831-
else
832-
let chooseAg = -1
833-
endif
834-
" pt
835-
if executable("pt")
836-
let choosePt = i
837-
call extend(lst, [ i.". pt" ])
838-
let i = i + 1
839-
else
840-
let choosePt = -1
841-
endif
778+
let numPrograms = len(programNames)
779+
let programRemap = {}
780+
781+
let i = 0
782+
let validProgramCounter = 0
783+
while i < numPrograms
784+
let program = programNames[i]
785+
if executable(program)
786+
let validProgramCounter += 1
787+
call extend(lst, [ validProgramCounter.". ". programNames[i] ])
788+
let programRemap[validProgramCounter] = i
789+
endif
790+
let i += 1
791+
endwhile
842792

843793
let grepChoice = inputlist(lst)
844794

845795
if grepChoice == 0
846796
return
847-
elseif grepChoice == chooseVimgrep
848-
let grepChoiceStr = "vimgrep"
849-
elseif grepChoice == chooseFindstr
850-
let grepChoiceStr = "findstr"
851-
elseif grepChoice == chooseGrep
852-
let grepChoiceStr = "grep"
853-
elseif grepChoice == chooseGitGrep
854-
let grepChoiceStr = "git grep"
855-
elseif grepChoice == chooseAckGrep
856-
let grepChoiceStr = "ack-grep"
857-
elseif grepChoice == chooseAck
858-
let grepChoiceStr = "ack"
859-
elseif grepChoice == chooseAg
860-
let grepChoiceStr = "ag"
861-
elseif grepChoice == choosePt
862-
let grepChoiceStr = "pt"
863-
else
797+
elseif grepChoice > validProgramCounter
864798
echo " "
865-
call s:Error("Invalid GrepCommand choice")
799+
call s:Error("Invalid GrepProgram choice")
866800
return
867801
endif
802+
803+
let grepChoiceStr = programNames[programRemap[grepChoice]]
868804
endif
869805
let result = s:SetGrepCommand(grepChoiceStr)
870806

@@ -888,27 +824,16 @@ function! s:SetGrepCommand(grepChoice)
888824
let g:EasyGrepCommand = 0
889825
else
890826
let g:EasyGrepCommand = 1
891-
if a:grepChoice ==# "findstr"
892-
set grepprg=findstr\ /n
893-
elseif a:grepChoice ==# "grep"
894-
if has("win32")
895-
set grepprg=grep\ -n
896-
else
897-
set grepprg=grep\ -n\ $*\ /dev/null
898-
endif
899-
elseif a:grepChoice ==# "git grep"
900-
set grepprg=git\ grep\ -n
901-
elseif a:grepChoice ==# "ack-grep"
902-
set grepprg=ack-grep\ --nogroup\ --nocolor\ --column\ --with-filename
903-
elseif a:grepChoice ==# "ack"
904-
set grepprg=ack\ --nogroup\ --nocolor\ --column\ --with-filename
905-
elseif a:grepChoice ==# "ag"
906-
set grepprg=ag\ --nogroup\ --nocolor\ --column
907-
elseif a:grepChoice ==# "pt"
908-
set grepprg=pt\ --nogroup\ --nocolor
909-
else
827+
828+
if !has_key(s:commandParamsDict, a:grepChoice)
910829
return 0
911830
endif
831+
832+
let args = ""
833+
if len(s:commandParamsDict[a:grepChoice]["req_str_programargs"])
834+
let args = '\ '.escape(s:commandParamsDict[a:grepChoice]["req_str_programargs"], ' ')
835+
endif
836+
exe "set grepprg=".a:grepChoice.args
912837
endif
913838
let s:LastSeenGrepprg = &grepprg
914839

@@ -2386,15 +2311,28 @@ function! s:CommandHasLen(parameter)
23862311
return has_key(commandParams, a:parameter) && len(commandParams[a:parameter])
23872312
endfunction
23882313
"}}}
2314+
" RegisterGrepProgram {{{
2315+
function! s:RegisterGrepProgram(programName, programSettingsDict)
2316+
if !exists("s:commandParamsDict")
2317+
let s:commandParamsDict = {}
2318+
endif
2319+
2320+
if has_key(s:commandParamsDict, a:programName)
2321+
call s:Error("Cannot register '".a:programName."' because it is already registered")
2322+
return
2323+
endif
2324+
2325+
let s:commandParamsDict[a:programName] = a:programSettingsDict
2326+
endfunction
2327+
" }}}
23892328
" ConfigureGrepCommandParameters {{{
23902329
function! s:ConfigureGrepCommandParameters()
23912330
if exists("s:commandParamsDict")
23922331
return
23932332
endif
23942333

2395-
let s:commandParamsDict = {}
2396-
2397-
let s:commandParamsDict["vimgrep"] = {
2334+
call s:RegisterGrepProgram("vimgrep", {
2335+
\ 'req_str_programargs': '',
23982336
\ 'req_bool_supportsexclusions': '1',
23992337
\ 'req_str_recurse': '',
24002338
\ 'req_str_caseignore': '',
@@ -2413,8 +2351,10 @@ function! s:ConfigureGrepCommandParameters()
24132351
\ 'opt_bool_isinherentlyrecursive': '0',
24142352
\ 'opt_bool_isselffiltering': '0',
24152353
\ 'opt_bool_replacewildcardwithcwd': '0',
2416-
\ }
2417-
let s:commandParamsDict["grep"] = {
2354+
\ })
2355+
2356+
call s:RegisterGrepProgram("grep", {
2357+
\ 'req_str_programargs': '-n',
24182358
\ 'req_bool_supportsexclusions': '1',
24192359
\ 'req_str_recurse': '-R',
24202360
\ 'req_str_caseignore': '-i',
@@ -2434,8 +2374,10 @@ function! s:ConfigureGrepCommandParameters()
24342374
\ 'opt_bool_isselffiltering': '0',
24352375
\ 'opt_bool_replacewildcardwithcwd': '0',
24362376
\ 'opt_bool_greprecursionwar': '1',
2437-
\ }
2438-
let s:commandParamsDict["git"] = {
2377+
\ })
2378+
2379+
call s:RegisterGrepProgram("git", {
2380+
\ 'req_str_programargs': 'grep -n',
24392381
\ 'req_bool_supportsexclusions': '0',
24402382
\ 'req_str_recurse': '-R',
24412383
\ 'req_str_caseignore': '-i',
@@ -2454,8 +2396,10 @@ function! s:ConfigureGrepCommandParameters()
24542396
\ 'opt_bool_isinherentlyrecursive': '0',
24552397
\ 'opt_bool_isselffiltering': '0',
24562398
\ 'opt_bool_replacewildcardwithcwd': '0',
2457-
\ }
2458-
let s:commandParamsDict["ack"] = {
2399+
\ })
2400+
2401+
call s:RegisterGrepProgram("ack", {
2402+
\ 'req_str_programargs': '--nogroup --nocolor --column --with-filename',
24592403
\ 'req_bool_supportsexclusions': '1',
24602404
\ 'req_str_recurse': '',
24612405
\ 'req_str_caseignore': '-i',
@@ -2474,9 +2418,12 @@ function! s:ConfigureGrepCommandParameters()
24742418
\ 'opt_bool_isinherentlyrecursive': '1',
24752419
\ 'opt_bool_isselffiltering': '1',
24762420
\ 'opt_bool_replacewildcardwithcwd': '1',
2477-
\ }
2478-
let s:commandParamsDict["ack-grep"] = s:commandParamsDict["ack"]
2479-
let s:commandParamsDict["ag"] = {
2421+
\ })
2422+
2423+
call s:RegisterGrepProgram("ack-grep", s:commandParamsDict["ack"])
2424+
2425+
call s:RegisterGrepProgram("ag", {
2426+
\ 'req_str_programargs': '--nogroup --nocolor --column',
24802427
\ 'req_bool_supportsexclusions': '1',
24812428
\ 'req_str_recurse': '',
24822429
\ 'req_str_caseignore': '-i',
@@ -2495,8 +2442,10 @@ function! s:ConfigureGrepCommandParameters()
24952442
\ 'opt_bool_isinherentlyrecursive': '1',
24962443
\ 'opt_bool_isselffiltering': '1',
24972444
\ 'opt_bool_replacewildcardwithcwd': '1',
2498-
\ }
2499-
let s:commandParamsDict["pt"] = {
2445+
\ })
2446+
2447+
call s:RegisterGrepProgram("pt", {
2448+
\ 'req_str_programargs': '--nogroup --nocolor',
25002449
\ 'req_bool_supportsexclusions': '0',
25012450
\ 'req_str_recurse': '',
25022451
\ 'req_str_caseignore': '-i',
@@ -2515,8 +2464,10 @@ function! s:ConfigureGrepCommandParameters()
25152464
\ 'opt_bool_isinherentlyrecursive': '0',
25162465
\ 'opt_bool_isselffiltering': '0',
25172466
\ 'opt_bool_replacewildcardwithcwd': '0',
2518-
\ }
2519-
let s:commandParamsDict["findstr"] = {
2467+
\ })
2468+
2469+
call s:RegisterGrepProgram("findstr", {
2470+
\ 'req_str_programargs': '/n',
25202471
\ 'req_bool_supportsexclusions': '0',
25212472
\ 'req_str_recurse': '/S',
25222473
\ 'req_str_caseignore': '/I',
@@ -2535,7 +2486,7 @@ function! s:ConfigureGrepCommandParameters()
25352486
\ 'opt_bool_isinherentlyrecursive': '0',
25362487
\ 'opt_bool_isselffiltering': '0',
25372488
\ 'opt_bool_replacewildcardwithcwd': '0',
2538-
\ }
2489+
\ })
25392490
endfunction
25402491
" }}}
25412492
" GetGrepCommandParameters {{{

0 commit comments

Comments
 (0)