Skip to content

Commit 833e2f3

Browse files
committed
set 'file' for out_io && delete temp file
1 parent 919f716 commit 833e2f3

File tree

1 file changed

+50
-14
lines changed

1 file changed

+50
-14
lines changed

autoload/codequery/query.vim

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
" ----------------------------------------------------------------
215252
endfunction
216253

217254

@@ -226,4 +263,3 @@ function! codequery#query#set_options(args) abort
226263
let g:codequery_append_to_qf = 1
227264
endif
228265
endfunction
229-

0 commit comments

Comments
 (0)