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, } }