diff options
author | Toby Vincent <tobyv@tobyvin.dev> | 2024-05-23 12:20:51 -0500 |
---|---|---|
committer | Toby Vincent <tobyv@tobyvin.dev> | 2024-05-23 12:20:51 -0500 |
commit | c3980bbd432ce50aaf351d5af3ab9e63bfda99a9 (patch) | |
tree | e11ef82e8697898d63bda790060b7ca4a0ea8716 /lua/inbox/renderers | |
parent | c62051bd88601b66546b69f1f161638eab3e13d3 (diff) |
Diffstat (limited to 'lua/inbox/renderers')
-rw-r--r-- | lua/inbox/renderers/headers.lua | 39 | ||||
-rw-r--r-- | lua/inbox/renderers/nvim.lua | 19 | ||||
-rw-r--r-- | lua/inbox/renderers/w3m.lua | 29 |
3 files changed, 87 insertions, 0 deletions
diff --git a/lua/inbox/renderers/headers.lua b/lua/inbox/renderers/headers.lua new file mode 100644 index 0000000..991dd9f --- /dev/null +++ b/lua/inbox/renderers/headers.lua @@ -0,0 +1,39 @@ +local M = {} + +function M.render(bufnr) + local entry = vim.b[bufnr].inbox.entry + + local lines = {} + + local headers = {} + if vim.b[bufnr].show_all_headers then + headers = entry.headers + else + for _, name in pairs(vim.b[bufnr].inbox.headers) do + if entry.headers[name] ~= nil then + headers[name] = entry.headers[name] + end + end + end + + for name, value in pairs(headers) do + local i, line = next(value) + table.insert(lines, ("%s: %s"):format(name, line)) + i, line = next(value, i) + while i ~= nil do + table.insert(lines, line) + i, line = next(value, i) + end + end + + table.insert(lines, "") + + vim.bo[bufnr].filetype = "mail" + vim.bo[bufnr].syntax = "mail" + vim.bo[bufnr].modifiable = true + vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, lines) + vim.bo[bufnr].modifiable = false + vim.bo[bufnr].modified = false +end + +return M diff --git a/lua/inbox/renderers/nvim.lua b/lua/inbox/renderers/nvim.lua new file mode 100644 index 0000000..223ab4e --- /dev/null +++ b/lua/inbox/renderers/nvim.lua @@ -0,0 +1,19 @@ +---@type inbox.Renderer +local M = {} + +function M.render(bufnr) + local entry = vim.b[bufnr].inbox.entry + local content_type = vim.b[bufnr].inbox.content_type + local part = entry.parts[content_type] + + local lines = vim.split(part.content, "\n") + + vim.bo[bufnr].filetype = "mail" + vim.bo[bufnr].syntax = "mail" + vim.bo[bufnr].modifiable = true + vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, lines) + vim.bo[bufnr].modifiable = false + vim.bo[bufnr].modified = false +end + +return M diff --git a/lua/inbox/renderers/w3m.lua b/lua/inbox/renderers/w3m.lua new file mode 100644 index 0000000..bd7e33b --- /dev/null +++ b/lua/inbox/renderers/w3m.lua @@ -0,0 +1,29 @@ +---@type inbox.Renderer +local M = {} + +function M.render(bufnr) + local entry = vim.b[bufnr].inbox.entry + local content_type = vim.b[bufnr].inbox.content_type + vim.api.nvim_buf_call(bufnr, function() + local job_id = vim.fn.termopen({ + "socksify", + "w3m", + "-I", + "UTF-8", + "-T", + "text/html", + "-cols", + tostring(vim.bo[bufnr].textwidth), + "-dump", + "-o", + "display_image=false", + "-o", + "display_link_number=true", + }) + + local part = entry.parts[content_type] + vim.fn.chansend(job_id, part.content) + end) +end + +return M |