summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorTJ DeVries <devries.timothyj@gmail.com>2021-08-20 14:41:52 -0400
committerGitHub <noreply@github.com>2021-08-20 14:41:52 -0400
commit4f91ffcbab427503b1e3ebfb02e47400d6eb561a (patch)
tree6a5fa52f053e1f071ce9e1bae0dd925d6cd85b32 /lua
parent260f4617b6217e99dfde104e6f6429a35dc49a1d (diff)
fix: Close async oneshot jobs on finder:close (#1140)
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/finders/async_oneshot_finder.lua23
-rw-r--r--lua/telescope/pickers.lua5
2 files changed, 23 insertions, 5 deletions
diff --git a/lua/telescope/finders/async_oneshot_finder.lua b/lua/telescope/finders/async_oneshot_finder.lua
index 19c2195..37101fa 100644
--- a/lua/telescope/finders/async_oneshot_finder.lua
+++ b/lua/telescope/finders/async_oneshot_finder.lua
@@ -4,6 +4,8 @@ local LinesPipe = require("telescope._").LinesPipe
local make_entry = require "telescope.make_entry"
+local await_count = 1000
+
return function(opts)
opts = opts or {}
@@ -18,9 +20,14 @@ return function(opts)
local job_completed = false
local stdout = nil
+ local job
+
return setmetatable({
- -- close = function() results = {}; job_started = false end,
- close = function() end,
+ close = function()
+ if job then
+ job:close()
+ end
+ end,
results = results,
}, {
__call = function(_, prompt, process_result, process_complete)
@@ -36,7 +43,7 @@ return function(opts)
-- end
stdout = LinesPipe()
- local _ = async_job.spawn {
+ job = async_job.spawn {
command = job_opts.command,
args = job_opts.args,
cwd = cwd,
@@ -48,9 +55,13 @@ return function(opts)
end
if not job_completed then
- for line in stdout:iter(true) do
+ for line in stdout:iter(false) do
num_results = num_results + 1
+ if num_results % await_count then
+ async.util.scheduler()
+ end
+
local v = entry_maker(line)
results[num_results] = v
process_result(v)
@@ -65,7 +76,9 @@ return function(opts)
local current_count = num_results
for index = 1, current_count do
-- TODO: Figure out scheduling...
- async.util.scheduler()
+ if index % await_count then
+ async.util.scheduler()
+ end
if process_result(results[index]) then
break
diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua
index 11fa2fa..7dbe8a0 100644
--- a/lua/telescope/pickers.lua
+++ b/lua/telescope/pickers.lua
@@ -385,6 +385,7 @@ function Picker:find()
while true do
-- Wait for the next input
rx.last()
+ await_schedule()
self:_reset_track()
@@ -1125,6 +1126,10 @@ function pickers.on_close_prompt(prompt_bufnr)
picker.previewer:teardown()
end
+ if picker.finder then
+ picker.finder:close()
+ end
+
picker.close_windows(status)
end