diff options
| author | Simon Hauser <Simon-Hauser@outlook.de> | 2021-03-30 12:32:18 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-30 12:32:18 +0200 |
| commit | aefc8317354426864a361d7b7d84848145d218c1 (patch) | |
| tree | 97b6c1c8a7401179e1ddff8f207c5dcf07029d78 /lua/telescope/previewers/buffer_previewer.lua | |
| parent | 2e03f67de9eab023098bd05916bf26556520a467 (diff) | |
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
Diffstat (limited to 'lua/telescope/previewers/buffer_previewer.lua')
| -rw-r--r-- | lua/telescope/previewers/buffer_previewer.lua | 62 |
1 files changed, 38 insertions, 24 deletions
diff --git a/lua/telescope/previewers/buffer_previewer.lua b/lua/telescope/previewers/buffer_previewer.lua index 16031f9..d480e0c 100644 --- a/lua/telescope/previewers/buffer_previewer.lua +++ b/lua/telescope/previewers/buffer_previewer.lua @@ -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) + 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 - 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 + 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) |
