diff options
| author | TJ DeVries <devries.timothyj@gmail.com> | 2020-09-03 23:56:49 -0400 |
|---|---|---|
| committer | TJ DeVries <devries.timothyj@gmail.com> | 2020-09-03 23:56:49 -0400 |
| commit | 839f57efb37cba7a9542b67b31370e1babaf194a (patch) | |
| tree | 2e502a58d83bc528e78b3d44d92134ec96d1345a /lua/telescope/previewers.lua | |
| parent | 737363097b8710566cf624776f1d0a18c03a0d8b (diff) | |
feat: Major improvements in API. Particularly relating to entries.
Diffstat (limited to 'lua/telescope/previewers.lua')
| -rw-r--r-- | lua/telescope/previewers.lua | 56 |
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, } |
