summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/builtin/internal.lua2
-rw-r--r--lua/telescope/config.lua21
-rw-r--r--lua/telescope/pickers.lua14
-rw-r--r--lua/telescope/previewers/buffer_previewer.lua62
-rw-r--r--lua/telescope/previewers/init.lua2
-rw-r--r--lua/telescope/previewers/utils.lua3
6 files changed, 58 insertions, 46 deletions
diff --git a/lua/telescope/builtin/internal.lua b/lua/telescope/builtin/internal.lua
index 18820f8..7d9d750 100644
--- a/lua/telescope/builtin/internal.lua
+++ b/lua/telescope/builtin/internal.lua
@@ -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
diff --git a/lua/telescope/config.lua b/lua/telescope/config.lua
index 17c1e91..c62e21b 100644
--- a/lua/telescope/config.lua
+++ b/lua/telescope/config.lua
@@ -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", {})
diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua
index 3bb773b..5ba0ca0 100644
--- a/lua/telescope/pickers.lua
+++ b/lua/telescope/pickers.lua
@@ -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'
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)
diff --git a/lua/telescope/previewers/init.lua b/lua/telescope/previewers/init.lua
index be99c03..db801ea 100644
--- a/lua/telescope/previewers/init.lua
+++ b/lua/telescope/previewers/init.lua
@@ -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
diff --git a/lua/telescope/previewers/utils.lua b/lua/telescope/previewers/utils.lua
index 35196e6..20762e2 100644
--- a/lua/telescope/previewers/utils.lua
+++ b/lua/telescope/previewers/utils.lua
@@ -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