summaryrefslogtreecommitdiffstats
path: root/lua/inbox/renderers
diff options
context:
space:
mode:
Diffstat (limited to 'lua/inbox/renderers')
-rw-r--r--lua/inbox/renderers/headers.lua39
-rw-r--r--lua/inbox/renderers/nvim.lua19
-rw-r--r--lua/inbox/renderers/w3m.lua29
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