54 lines
1.7 KiB
Lua
54 lines
1.7 KiB
Lua
|
local previewers = require("telescope.previewers")
|
||
|
local Job = require("plenary.job")
|
||
|
local new_maker = function(filepath, bufnr, opts)
|
||
|
filepath = vim.fn.expand(filepath)
|
||
|
Job:new({
|
||
|
command = "file",
|
||
|
args = { "--mime-type", "-b", filepath },
|
||
|
on_exit = function(j)
|
||
|
local mime_type = vim.split(j:result()[1], "/")[1]
|
||
|
if mime_type == "text" then
|
||
|
previewers.buffer_previewer_maker(filepath, bufnr, opts)
|
||
|
else
|
||
|
-- maybe we want to write something to the buffer here
|
||
|
vim.schedule(function()
|
||
|
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, { "BINARY" })
|
||
|
end)
|
||
|
end
|
||
|
end
|
||
|
}):sync()
|
||
|
end
|
||
|
|
||
|
require("telescope").setup {
|
||
|
defaults = {
|
||
|
preview = {
|
||
|
mime_hook = function(filepath, bufnr, opts)
|
||
|
local is_image = function(filepath)
|
||
|
local image_extensions = {'png','jpg'} -- Supported image formats
|
||
|
local split_path = vim.split(filepath:lower(), '.', {plain=true})
|
||
|
local extension = split_path[#split_path]
|
||
|
return vim.tbl_contains(image_extensions, extension)
|
||
|
end
|
||
|
if is_image(filepath) then
|
||
|
local term = vim.api.nvim_open_term(bufnr, {})
|
||
|
local function send_output(_, data, _ )
|
||
|
for _, d in ipairs(data) do
|
||
|
vim.api.nvim_chan_send(term, d..'\r\n')
|
||
|
end
|
||
|
end
|
||
|
vim.fn.jobstart(
|
||
|
{
|
||
|
'catimg', filepath -- Terminal image viewer command
|
||
|
},
|
||
|
{on_stdout=send_output, stdout_buffered=true})
|
||
|
else
|
||
|
require("telescope.previewers.utils").set_preview_message(bufnr, opts.winid, "Binary cannot be previewed")
|
||
|
end
|
||
|
end
|
||
|
},
|
||
|
buffer_previewer_maker = new_maker,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|