summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorSimon Hauser <Simon-Hauser@outlook.de>2021-01-22 21:03:39 +0100
committerGitHub <noreply@github.com>2021-01-22 21:03:39 +0100
commit223ec81774ae4720d067bb685b0aa38eea761cd0 (patch)
treea725f56dc4574cdc672230d796ca62dbe20ca9e4 /lua
parent36ff7d5078155c9fef28af51ba13214421c7c693 (diff)
feat: add vim buffer directory viewer using plenary scandir.ls_async (#421)
feat: git_status (??) now shows file or directory fix: attempt to index field 'state' (a nil value)
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/previewers/buffer_previewer.lua46
1 files changed, 33 insertions, 13 deletions
diff --git a/lua/telescope/previewers/buffer_previewer.lua b/lua/telescope/previewers/buffer_previewer.lua
index 0fa910f..7e6fffb 100644
--- a/lua/telescope/previewers/buffer_previewer.lua
+++ b/lua/telescope/previewers/buffer_previewer.lua
@@ -6,6 +6,7 @@ local Previewer = require('telescope.previewers.previewer')
local conf = require('telescope.config').values
local pfiletype = require('plenary.filetype')
+local pscan = require('plenary.scandir')
local buf_delete = utils.buf_delete
local defaulter = utils.make_default_callable
@@ -20,13 +21,20 @@ previewers.file_maker = function(filepath, bufnr, opts)
local ft = opts.use_ft_detect and pfiletype.detect(filepath)
if opts.bufname ~= filepath then
- path.read_file_async(vim.fn.expand(filepath), vim.schedule_wrap(function(data)
- if not vim.api.nvim_buf_is_valid(bufnr) then return end
- vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, vim.split(data, '[\r]?\n'))
+ if vim.loop.fs_stat(filepath).type == 'directory' then
+ pscan.ls_async(filepath, { hidden = true, on_exit = vim.schedule_wrap(function(data)
+ vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, data)
+ if opts.callback then opts.callback(bufnr) end
+ end)})
+ else
+ path.read_file_async(vim.fn.expand(filepath), vim.schedule_wrap(function(data)
+ if not vim.api.nvim_buf_is_valid(bufnr) then return end
+ vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, vim.split(data, '[\r]?\n'))
- if opts.callback then opts.callback(bufnr) end
- putils.highlighter(bufnr, ft)
- end))
+ if opts.callback then opts.callback(bufnr) end
+ putils.highlighter(bufnr, ft)
+ end))
+ end
else
if opts.callback then opts.callback(bufnr) end
end
@@ -45,6 +53,7 @@ previewers.new_buffer_previewer = function(opts)
local bufname_table = {}
local global_state = require'telescope.state'
+ local preview_window_id
local function get_bufnr(self)
if not self.state then return nil end
@@ -81,8 +90,10 @@ previewers.new_buffer_previewer = function(opts)
if opts.keep_last_buf then
last_nr = global_state.get_global_key('last_preview_bufnr')
-- Push in another buffer so the last one will not be cleaned up
- local bufnr = vim.api.nvim_create_buf(false, true)
- vim.api.nvim_win_set_buf(self.state.winid, bufnr)
+ if preview_window_id then
+ local bufnr = vim.api.nvim_create_buf(false, true)
+ vim.api.nvim_win_set_buf(preview_window_id, bufnr)
+ end
end
set_bufnr(self, nil)
@@ -98,6 +109,7 @@ previewers.new_buffer_previewer = function(opts)
function opts.preview_fn(self, entry, status)
if get_bufnr(self) == nil then
set_bufnr(self, vim.api.nvim_win_get_buf(status.preview_win))
+ preview_window_id = status.preview_win
end
if opts.get_buffer_by_name and get_bufnr_by_bufname(self, opts.get_buffer_by_name(self, entry)) then
@@ -459,11 +471,19 @@ previewers.git_file_diff = defaulter(function(_)
end,
define_preview = function(self, entry, status)
- putils.job_maker({ 'git', '-P', 'diff', entry.value }, self.state.bufnr, {
- value = entry.value,
- bufname = self.state.bufname
- })
- putils.regex_highlighter(self.state.bufnr, 'diff')
+ if entry.status and entry.status == '??' then
+ local p = from_entry.path(entry, true)
+ if p == nil or p == '' then return end
+ conf.buffer_previewer_maker(p, self.state.bufnr, {
+ bufname = self.state.bufname
+ })
+ else
+ putils.job_maker({ 'git', '-P', 'diff', entry.value }, self.state.bufnr, {
+ value = entry.value,
+ bufname = self.state.bufname
+ })
+ putils.regex_highlighter(self.state.bufnr, 'diff')
+ end
end
}
end, {})