Another stream

This commit is contained in:
TJ DeVries
2020-07-17 00:03:20 -04:00
parent c6f0142fc6
commit ababfbfd88
12 changed files with 327 additions and 89 deletions

84
scratch/file_finder.lua Normal file
View File

@@ -0,0 +1,84 @@
local telescope = require('telescope')
-- Goals:
-- 1. You pick a directory
-- 2. We `git ls-files` in that directory ONCE and ONLY ONCE to get the results.
-- 3. You can fuzzy find those results w/ fzf
-- 4. Select one and go to file.
--[[
ls_files_job.start()
fzf_job.stdin = ls_files_job.stdout
self.stdin = vim.loop.new_pipe(false)
-> self.stdin = finder.stdout
-- Finder:
intermediary_pipe = self.stdout
-- repeat send this pipe when we want to get new filtering
self.stdin = intermediary_pipe
-- Filter + Sort
ok, we could do scoring + cutoff and have that always be the case.
OR
filter takes a function, signature (prompt: str, line: str): number
=> echo $line | fzf --filter "prompt"
return stdout != ""
=> lua_fuzzy_finder(prompt, line) return true if good enough
TODO: Rename everything to be more clear like the name below.
IFilterSorterAbstractFactoryGeneratorv1ProtoBeta
--]]
local string_distance = require('telescope.algos.string_distance')
local file_finder = telescope.finders.new {
fn_command = function(self, prompt)
-- todo figure out how to cache this later
if false then
if self[prompt] == nil then
self[prompt] = nil
end
return self[prompt]
else
return 'git ls-files'
end
end,
}
local file_sorter = telescope.sorters.new {
scoring_function = function(self, prompt, line)
if prompt == '' then return 0 end
if not line then return -1 end
local dist = string_distance(prompt, line)
-- if dist > (0.75 * #line) and #prompt > 3 then
-- return -1
-- end
return dist
end
}
local file_previewer = telescope.previewers.vim_buffer
local file_picker = telescope.pickers.new {
previewer = file_previewer
}
file_picker:find {
prompt = 'Find File',
finder = file_finder,
sorter = file_sorter,
}