@@ -194,24 +194,61 @@ function! codequery#query#do_query(word) abort
194194 return
195195 endif
196196
197- " TODO: Rewrite it when Vim8 is coming
198- " ----------------------------------------------------------------
199- let grepcmd = g: codequery_append_to_qf ? ' grepadd!' : ' grep!'
200- let l: grepprg_bak = &l: grepprg
201- let l: grepformat_bak = &grepformat
197+ if v: version >= 800
198+ echom ' Searching ... [' . a: word . ' ]'
199+
200+ let job_dict = {' is_append' : g: codequery_append_to_qf ? 1 : 0 ,
201+ \' target_file': tempname (),
202+ \' backup_ef': &errorformat ,
203+ \' word' : a: word ,
204+ \' callback': function (" codequery#query#do_query_callback" )}
205+ let options = {' out_io' : ' file' ,
206+ \' out_name': job_dict.target_file,
207+ \' exit_cb': job_dict.callback}
208+
209+ let &errorformat = ' %f:%l%m'
210+ let grepprg .= ' \| awk "{ sub(/.*\/\.\//,x) }1"'
211+ let shell_cmd = substitute (grepprg , ' \\|' , ' |' , " g" )
212+ let shell_cmd = substitute (shell_cmd, " ''" , " '" , " g" )
213+
214+ let s: query_job = job_start ([' /bin/sh' , ' -c' , shell_cmd], options )
215+ let timer = timer_start (50 ,
216+ \{ - > execute (" call job_status(s:query_job)" , " " )},
217+ \{ ' repeat' : 200 })
218+ else
219+ let grepcmd = g: codequery_append_to_qf ? ' grepadd!' : ' grep!'
220+ let l: grepprg_bak = &l: grepprg
221+ let l: grepformat_bak = &grepformat
222+ try
223+ let &l: grepformat = grepformat
224+ let &l: grepprg = grepprg . ' \| awk "{ sub(/.*\/\.\//,x) }1"'
225+ silent execute grepcmd
226+ redraw !
227+ call s: show_result ()
228+ finally
229+ let &l: grepprg = l: grepprg_bak
230+ let &grepformat = l: grepformat_bak
231+ let g: codequery_last_query_word = a: word
232+ let g: last_query_fuzzy = g: codequery_fuzzy
233+ endtry
234+ endif
235+ endfunction
236+
237+
238+ function ! codequery#query#do_query_callback (job, status) dict
202239 try
203- let &l: grepformat = grepformat
204- let &l: grepprg = grepprg . ' \| awk "{ sub(/.*\/\.\//,x) }1"'
205- silent execute grepcmd
206- redraw !
240+ if self .is_append
241+ execute " caddfile " . self .target_file
242+ else
243+ execute " cgetfile " . self .target_file
244+ endif
207245 call s: show_result ()
208246 finally
209- let &l: grepprg = l: grepprg_bak
210- let &grepformat = l: grepformat_bak
211- let g: codequery_last_query_word = a: word
247+ let g: codequery_last_query_word = self .word
212248 let g: last_query_fuzzy = g: codequery_fuzzy
249+ let &errorformat = self .backup_ef
250+ call delete (self .target_file)
213251 endtry
214- " ----------------------------------------------------------------
215252endfunction
216253
217254
@@ -226,4 +263,3 @@ function! codequery#query#set_options(args) abort
226263 let g: codequery_append_to_qf = 1
227264 endif
228265endfunction
229-
0 commit comments