summaryrefslogtreecommitdiff
path: root/lua/telescope/previewers.lua
diff options
context:
space:
mode:
authorTJ DeVries <devries.timothyj@gmail.com>2020-09-03 23:56:49 -0400
committerTJ DeVries <devries.timothyj@gmail.com>2020-09-03 23:56:49 -0400
commit839f57efb37cba7a9542b67b31370e1babaf194a (patch)
tree2e502a58d83bc528e78b3d44d92134ec96d1345a /lua/telescope/previewers.lua
parent737363097b8710566cf624776f1d0a18c03a0d8b (diff)
feat: Major improvements in API. Particularly relating to entries.
Diffstat (limited to 'lua/telescope/previewers.lua')
-rw-r--r--lua/telescope/previewers.lua56
1 files changed, 44 insertions, 12 deletions
diff --git a/lua/telescope/previewers.lua b/lua/telescope/previewers.lua
index 224cda0..c1acbee 100644
--- a/lua/telescope/previewers.lua
+++ b/lua/telescope/previewers.lua
@@ -8,6 +8,7 @@ local Previewer = {}
Previewer.__index = Previewer
local bat_options = " --style=grid --paging=always "
+local previewer_ns = vim.api.nvim_create_namespace('telescope.previewers')
-- --terminal-width=%s
-- TODO: We shoudl make sure that all our terminals close all the way.
@@ -20,6 +21,7 @@ function Previewer:new(opts)
return setmetatable({
state = nil,
_setup_func = opts.setup,
+ _teardown_func = opts.teardown,
preview_fn = opts.preview_fn,
}, Previewer)
end
@@ -29,13 +31,22 @@ function Previewer:preview(entry, status)
return
end
- if not self.state and self._setup_func then
- self.state = self._setup_func()
+ if not self.state then
+ if self._setup_func then
+ self.state = self._setup_func()
+ end
end
+ self:teardown()
return self:preview_fn(entry, status)
end
+function Previewer:teardown()
+ if self._teardown_func then
+ self:_teardown_func()
+ end
+end
+
previewers.new = function(...)
return Previewer:new(...)
end
@@ -69,20 +80,36 @@ previewers.new_termopen = function(opts)
end
previewers.vim_buffer = previewers.new {
- preview_fn = function(_, entry, status)
- local value = entry.value
- if value == nil then
+ setup = function() return { last_set_bufnr = nil } end,
+
+ teardown = function(self)
+ if self.state.last_set_bufnr then
+ vim.api.nvim_buf_clear_namespace(self.state.last_set_bufnr, previewer_ns, 0, -1)
+ end
+ end,
+
+ preview_fn = function(self, entry, status)
+ local filename = entry.filename
+
+ if filename == nil then
+ local value = entry.value
+ filename = vim.split(value, ":")[1]
+ end
+
+ if filename == nil then
return
end
- local file_name = vim.split(value, ":")[1]
- log.trace("Previewing File: %s", file_name)
+ log.trace("Previewing File: %s", filename)
- -- vim.fn.termopen(
- -- string.format("bat --color=always --style=grid %s"),
- -- vim.fn.fnamemodify(file_name, ":p")
- local bufnr = vim.fn.bufadd(file_name)
- vim.fn.bufload(bufnr)
+ local bufnr = vim.fn.bufnr(filename)
+ if bufnr == -1 then
+ -- TODO: Is this the best way to load the buffer?... I'm not sure tbh
+ bufnr = vim.fn.bufadd(bufnr)
+ vim.fn.bufload(bufnr)
+ end
+
+ self.state.last_set_bufnr = bufnr
-- TODO: We should probably call something like this because we're not always getting highlight and all that stuff.
-- api.nvim_command('doautocmd filetypedetect BufRead ' .. vim.fn.fnameescape(filename))
@@ -92,6 +119,11 @@ previewers.vim_buffer = previewers.new {
-- vim.api.nvim_win_set_option(preview_win, 'winblend', 20)
vim.api.nvim_win_set_option(status.preview_win, 'signcolumn', 'no')
vim.api.nvim_win_set_option(status.preview_win, 'foldlevel', 100)
+
+ if entry.lnum then
+ vim.api.nvim_buf_add_highlight(bufnr, previewer_ns, "Visual", entry.lnum - 1, 0, -1)
+ -- print("LNUM:", entry.lnum)
+ end
end,
}