From 76e7fe8cb037e7944dbb13ec34362166d44e625b Mon Sep 17 00:00:00 2001 From: Simon Hauser Date: Fri, 13 Nov 2020 21:07:12 +0100 Subject: [PATCH] fix: Multiple Previewer fixes (#225) Fixes previews for files beginning with ~/ Previewer will now show directories Fix if clause with vim.fn.executable --- lua/telescope/builtin.lua | 4 +--- lua/telescope/previewers.lua | 23 +++++++++++++++++------ lua/telescope/utils.lua | 7 +++++++ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/lua/telescope/builtin.lua b/lua/telescope/builtin.lua index 45596fe..92e78db 100644 --- a/lua/telescope/builtin.lua +++ b/lua/telescope/builtin.lua @@ -842,9 +842,7 @@ builtin.man_pages = function(opts) local cmd = opts.man_cmd or "apropos --sections=1 ''" - local f = assert(io.popen(cmd, 'r')) - local pages = assert(f:read('*a')) - f:close() + local pages = utils.get_os_command_output(cmd) local lines = {} for s in pages:gmatch("[^\r\n]+") do diff --git a/lua/telescope/previewers.lua b/lua/telescope/previewers.lua index 0fe2ed2..47b6e0d 100644 --- a/lua/telescope/previewers.lua +++ b/lua/telescope/previewers.lua @@ -21,7 +21,15 @@ Previewer.__index = Previewer local bat_options = {"--style=plain", "--color=always", "--paging=always"} local has_less = (vim.fn.executable('less') == 1) and config.values.use_less +local get_file_stat = function(filename) + return assert(vim.loop.fs_stat(vim.fn.expand(filename))) +end + local bat_maker = function(filename, lnum, start, finish) + if get_file_stat(filename).type == 'directory' then + return { 'ls', '-la' } + end + local command = {"bat"} local theme = os.getenv("BAT_THEME") @@ -46,23 +54,26 @@ local bat_maker = function(filename, lnum, start, finish) end return flatten { - command, bat_options, "--", filename + command, bat_options, "--", vim.fn.expand(filename) } end -- TODO: Add other options for cat to do this better local cat_maker = function(filename, _, _, _) - if vim.fn.executable('file') then - local handle = io.popen('file --mime-type -b ' .. filename) - local mime_type = vim.split(handle:read('*a'), '/')[1] - handle:close() + if get_file_stat(filename).type == 'directory' then + return { 'ls', '-la' } + end + + if 1 == vim.fn.executable('file') then + local output = utils.get_os_command_output('file --mime-type -b ' .. filename) + local mime_type = vim.split(output, '/')[1] if mime_type ~= "text" then return { "echo", "Binary file found. These files cannot be displayed!" } end end return { - "cat", "--", filename + "cat", "--", vim.fn.expand(filename) } end diff --git a/lua/telescope/utils.lua b/lua/telescope/utils.lua index 1daea57..22ee245 100644 --- a/lua/telescope/utils.lua +++ b/lua/telescope/utils.lua @@ -190,4 +190,11 @@ function utils.display_termcodes(str) return str:gsub(string.char(9), ""):gsub("", ""):gsub(" ", "") end +function utils.get_os_command_output(cmd) + local handle = assert(io.popen(cmd, 'r')) + local output = assert(handle:read('*a')) + assert(handle:close()) + return output +end + return utils