fix: no longer leaking one buffer previewer in some occasions (#664)

* fix: stop leaking last preview buffer
* fix: formatting for docs
* fix: async check if file is dir or not and
  - fix for in_fast_event when overriding file_maker
* fix: filtering for space in keymaps and fzy
* fix: show correct result numbers when using file_ignore_patterns
* Handle early close. Caused because we actually cleaning up buffers now
* cleanup
* [docgen] Update doc/telescope.txt
This commit is contained in:
Simon Hauser
2021-03-30 12:32:18 +02:00
committed by GitHub
parent 2e03f67de9
commit aefc831735
7 changed files with 75 additions and 61 deletions

View File

@@ -683,7 +683,7 @@ internal.keymaps = function(opts)
return {
valid = line ~= "",
value = line,
ordinal = line.lhs .. line.rhs,
ordinal = utils.display_termcodes(line.lhs) .. line.rhs,
display = line.mode .. ' ' .. utils.display_termcodes(line.lhs) .. ' ' .. line.rhs
}
end

View File

@@ -59,8 +59,7 @@ function config.set_defaults(defaults)
config.values[name] = get(name, default_val)
if description then
-- TODO(conni2461): trim is wrong. We need to do dedent here
config.descriptions[name] = dedent(vim.trim(description))
config.descriptions[name] = dedent(description)
end
end
@@ -69,8 +68,7 @@ function config.set_defaults(defaults)
Available options are:
- "descending" (default)
- "ascending"
]])
- "ascending"]])
set("selection_strategy", "reset", [[
Determines how the cursor acts after each sort iteration.
@@ -78,16 +76,14 @@ function config.set_defaults(defaults)
Available options are:
- "reset" (default)
- "follow"
- "row"
]])
- "row"]])
set("scroll_strategy", "cycle", [[
Determines what happens you try to scroll past view of the picker.
Available options are:
- "cycle" (default)
- "limit"
]])
- "limit"]])
set("layout_strategy", "horizontal")
set("layout_defaults", {})
@@ -103,18 +99,15 @@ function config.set_defaults(defaults)
set("prompt_prefix", "> ", [[
Will be shown in front of the prompt.
Default: '> '
]])
Default: '> ']])
set("selection_caret", "> ", [[
Will be shown in front of the selection.
Default: '> '
]])
Default: '> ']])
set("entry_prefix", " ", [[
Prefix in front of each result entry. Current selection not included.
Default: ' '
]])
Default: ' ']])
set("initial_mode", "insert")
set("border", {})

View File

@@ -450,7 +450,7 @@ function Picker:find()
-- Register attach
vim.api.nvim_buf_attach(prompt_bufnr, false, {
on_lines = on_lines,
on_detach = vim.schedule_wrap(function()
on_detach = function()
on_lines = nil
-- TODO: Can we add a "cleanup" / "teardown" function that completely removes these.
@@ -459,9 +459,11 @@ function Picker:find()
self.sorter = nil
self.manager = nil
self.closed = true
-- TODO: Should we actually do this?
collectgarbage(); collectgarbage()
end),
end,
})
-- TODO: Use WinLeave as well?
@@ -902,6 +904,7 @@ end
function Picker:get_status_updater(prompt_win, prompt_bufnr)
return function()
local text = self:get_status_text()
if self.closed or not vim.api.nvim_buf_is_valid(prompt_bufnr) then return end
local current_prompt = vim.api.nvim_buf_get_lines(prompt_bufnr, 0, 1, false)[1]
if not current_prompt then
return
@@ -931,7 +934,7 @@ end
function Picker:get_result_processor(prompt, status_updater)
return function(entry)
if self:is_done() then return end
if self.closed or self:is_done() then return end
self:_increment("processed")
@@ -951,7 +954,8 @@ function Picker:get_result_processor(prompt, status_updater)
local file = type(entry.value) == 'string' and entry.value or entry.filename
if file then
if string.find(file, v) then
log.debug("SKPIPING", entry.value, "because", v)
log.debug("SKIPPING", entry.value, "because", v)
self:_decrement("processed")
return
end
end
@@ -986,7 +990,7 @@ end
function Picker:get_result_completor(results_bufnr, prompt, status_updater)
return function()
if self:is_done() then return end
if self.closed == true or self:is_done() then return end
local selection_strategy = self.selection_strategy or 'reset'

View File

@@ -66,28 +66,36 @@ previewers.file_maker = function(filepath, bufnr, opts)
if opts.bufname ~= filepath then
if not vim.in_fast_event() then filepath = vim.fn.expand(filepath) end
local stat = vim.loop.fs_stat(filepath) or {}
if stat.type == 'directory' then
pscan.ls_async(filepath, {
hidden = true,
group_directories_first = true,
on_exit = vim.schedule_wrap(function(data, sections)
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, data)
colorize_ls(bufnr, data, sections)
if opts.callback then opts.callback(bufnr) end
end)})
else
path.read_file_async(filepath, vim.schedule_wrap(function(data)
if not vim.api.nvim_buf_is_valid(bufnr) then return end
local ok = pcall(vim.api.nvim_buf_set_lines, bufnr, 0, -1, false, vim.split(data, '[\r]?\n'))
if not ok then return end
vim.loop.fs_stat(filepath, function(_, stat)
if not stat then return end
if stat.type == 'directory' then
pscan.ls_async(filepath, {
hidden = true,
group_directories_first = true,
on_exit = vim.schedule_wrap(function(data, sections)
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, data)
colorize_ls(bufnr, data, sections)
if opts.callback then opts.callback(bufnr) end
end)})
else
path.read_file_async(filepath, vim.schedule_wrap(function(data)
if not vim.api.nvim_buf_is_valid(bufnr) then return end
local ok = pcall(vim.api.nvim_buf_set_lines, bufnr, 0, -1, false, vim.split(data, '[\r]?\n'))
if not ok then return end
if opts.callback then opts.callback(bufnr) end
putils.highlighter(bufnr, ft)
end))
end
if opts.callback then opts.callback(bufnr) end
putils.highlighter(bufnr, ft)
end))
end
end)
else
if opts.callback then opts.callback(bufnr) end
if opts.callback then
if vim.in_fast_event() then
vim.schedule(function() opts.callback(bufnr) end)
else
opts.callback(bufnr)
end
end
end
end
@@ -112,8 +120,10 @@ previewers.new_buffer_previewer = function(opts)
end
local function set_bufnr(self, value)
if get_bufnr(self) then table.insert(old_bufs, get_bufnr(self)) end
if self.state then self.state.bufnr = value end
if self.state then
self.state.bufnr = value
table.insert(old_bufs, value)
end
end
local function get_bufnr_by_bufname(self, value)
@@ -122,8 +132,12 @@ previewers.new_buffer_previewer = function(opts)
end
local function set_bufname(self, value)
if get_bufnr(self) then bufname_table[value] = get_bufnr(self) end
if self.state then self.state.bufname = value end
if self.state then
self.state.bufname = value
if value then
bufname_table[value] = get_bufnr(self)
end
end
end
function opts.setup(self)

View File

@@ -72,9 +72,11 @@ end
--- It requires you to specify one table entry `get_command(entry, status)`.
--- This `get_command` function has to return the terminal command that will be
--- executed for each entry. Example:
--- <pre>
--- get_command = function(entry, status)
--- return { 'bat', entry.path }
--- end
--- </pre>
---
--- It's an easy way to get your first previewer going and it integrates well
--- with `bat` and `less`. Providing out of the box scrolling if the command

View File

@@ -38,8 +38,7 @@ utils.job_maker = function(cmd, bufnr, opts)
on_exit = vim.schedule_wrap(function(j)
if not vim.api.nvim_buf_is_valid(bufnr) then return end
if opts.mode == "append" then
local count = vim.api.nvim_buf_line_count(bufnr)
vim.api.nvim_buf_set_lines(bufnr, count, -1, false, j:result())
vim.api.nvim_buf_set_lines(bufnr, -1, -1, false, j:result())
elseif opts.mode == "insert" then
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, j:result())
end