1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
local config = require("inbox.config")
local email = require("inbox.email")
local indexers = require("inbox.indexers")
local utils = require("inbox.utils")
local M = {}
---@param bufnr integer
function M.initialize(bufnr, maildir)
if bufnr == 0 then
bufnr = vim.api.nvim_get_current_buf()
end
if not vim.api.nvim_buf_is_valid(bufnr) then
return
end
-- vim.api.nvim_clear_autocmds({ buffer = bufnr, group = "Inbox" })
for k, v in pairs(config.buf_options) do
vim.api.nvim_buf_set_option(bufnr, k, v)
end
local winid = vim.api.nvim_get_current_win()
for k, v in pairs(config.win_options) do
vim.api.nvim_set_option_value(k, v, { scope = "local", win = winid })
end
local bufname = string.format("maildir://%s", maildir)
vim.api.nvim_buf_set_name(bufnr, bufname)
M.render_buffer(bufnr)
-- TODO: setup keymaps
end
---@param bufnr integer
function M.render_buffer(bufnr)
if bufnr == 0 then
bufnr = vim.api.nvim_get_current_buf()
end
if not vim.api.nvim_buf_is_valid(bufnr) then
return false
end
local function render_buffer_async_callback(entries)
-- TODO: sort entries?
utils.render_table({ {} }, email.summary_widths)
local summaries = {}
-- local signs
for _, entry in ipairs(entries) do
local cols = email.sanitize_summary(entry)
-- TODO: format signs
-- local _ = email.tags
-- table.insert(signs, email.tags)
table.insert(summaries, cols)
end
-- TODO: configurable table columns and column widths
local lines, _ = utils.render_table(summaries, email.summary_widths)
-- TODO: setup highlights
-- TODO: setup signs (tags)
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
local winid = vim.api.nvim_get_current_win()
for k, v in pairs(config.win_options) do
vim.api.nvim_set_option_value(k, v, { scope = "local", win = winid })
end
local winbar = utils.render_row({ "Date", "From", "Subject" }, email.summary_widths)
local offset = vim.fn.getwininfo(winid)[1].textoff + 1
vim.api.nvim_set_option_value("winbar", string.rep(" ", offset) .. winbar, { scope = "local", win = winid })
end
-- TODO: cache entries
local indexer = indexers.get_indexer()
local bufname = vim.api.nvim_buf_get_name(bufnr)
local maildir = bufname:gsub("maildir://", "")
indexer.index(render_buffer_async_callback, { folder = maildir })
end
return M
|