refactor(nvim): improve mime open autocmd

This commit is contained in:
Price Hiller 2024-06-23 05:27:09 -05:00
parent 6d07d72121
commit 3eb9864112
Signed by: Price
GPG Key ID: C3FADDE7A8534BEB

View File

@ -86,8 +86,8 @@ M.setup = function()
---@type string? The file extension if detected
local extension = vim.fn.fnamemodify(path, ":e")
---@type string? The filename if detected
local filename = vim.fn.fnamemodify(path, ":t")
---@type string The filename if detected
local filename = vim.fn.fnamemodify(path, ":t") or "[Unknown Filename]"
---Open a given file path in a given program and remove the buffer for the file.
---@param buf integer The buffer handle for the opening buffer
@ -104,35 +104,22 @@ M.setup = function()
vim.api.nvim_buf_delete(buf, { force = true })
end
local extension_callbacks = {
["pdf"] = open_mime,
["djvu"] = "pdf",
["wav"] = open_mime,
["png"] = open_mime,
["jpg"] = "png",
["docx"] = open_mime,
["mp4"] = open_mime,
["webm"] = open_mime,
["pptx"] = open_mime,
["gif"] = "mp4",
local extensions = {
"pdf",
"djvu",
"wav",
"png",
"jpg",
"docx",
"mp4",
"webm",
"pptx",
"gif",
}
---Get the extension callback for a given extension. Will do a recursive lookup if an extension callback is actually
---of type string to get the correct extension
---@param ext string A file extension. Example: `png`.
---@return fun(bufnr: integer, path: string, filename: string?) extension_callback The extension callback to invoke, expects a buffer handle, file path, and filename.
local function extension_lookup(ext)
local callback = extension_callbacks[ext]
if type(callback) == "string" then
callback = extension_lookup(callback)
end
return callback
end
if extension ~= nil and not extension:match("^%s*$") and intercept_file_open then
local callback = extension_lookup(extension)
if type(callback) == "function" then
callback(bufnr, path, filename)
if extension and not extension:match("^%s*$") and intercept_file_open then
if vim.list_contains(extensions, extension) then
open_mime(bufnr, path, filename)
end
end
end,