+-- {{{ markdown in mail
local i, _ = string.find(vim.bo.filetype, "markdown")
if not i then
vim.opt_local.filetype = "mail.markdown"
-- disable Treesitter format expression for Mail
vim.opt_local.formatexpr = ""
-vim.opt_local.formatoptions:remove("o")
-vim.opt_local.formatoptions:remove("r")
-vim.opt_local.formatoptions:remove("l")
-vim.opt_local.formatoptions:append("a")
-vim.opt_local.formatoptions:append("w")
-vim.opt_local.formatoptions:append("n")
+-- Do not conceal anything (Markdown) in emails going out
+vim.opt_local.conceallevel = 0
+-- }}}
+-- {{{ formatting
+vim.opt_local.formatoptions:remove("o") -- would insert current comment leader for o/O
+vim.opt_local.formatoptions:remove("r") -- would insert current comment leader for <CR>
+vim.opt_local.formatoptions:remove("l") -- would not break lines that were long before insert
+
+vim.opt_local.commentstring = "> %s" -- commenting means quoting in mails
+-- }}}
+
+-- {{{ autocmds
+vim.api.nvim_create_autocmd({ "BufWrite" }, {
+ buffer = 0,
+ group = vim.api.nvim_create_augroup("squashemptylines", { clear = true }),
+ callback = function()
+ local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
+ local ret = {}
+ local count = 0
+ local squash = false
+ for _, line in ipairs(lines) do
+ if line == "" then
+ if not squash then
+ squash = true
+ table.insert(ret, line)
+ else
+ count = count + 1
+ end
+ else
+ squash = false
+ table.insert(ret, line)
+ end
+ end
+ if count > 0 then
+ vim.notify("Squashed " .. count .. " empty line(s)")
+ end
+ vim.api.nvim_buf_set_lines(0, 0, -1, false, ret)
+ end,
+})
+-- }}}
+
+-- {{{ keymaps
vim.keymap.set("n", "<leader>m", "", { buffer = true, desc = "mail functions" })
vim.keymap.set("n", "<leader>ms", "", { buffer = true, desc = "subject manipulation" })
{ buffer = true, desc = "remove old subjects" }
)
+-- {{{ profiles
+
vim.keymap.set("n", "<leader>p", "", { buffer = true, desc = "mailplate profiles" })
vim.keymap.set(
)
end
-profile_keymap("F1", "official")
+profile_keymap("F1", "main")
profile_keymap("F2", "pobox")
profile_keymap("F3", "tahi")
profile_keymap("F4", "toni")
profile_keymap("F8", "debian")
profile_keymap("F9", "uniwh")
profile_keymap("F10", "mtfk")
-profile_keymap("F11", "sudetia")
profile_keymap("F12", "default")
+-- }}} profiles
+-- }}}
+
+-- {{{ write mail backups
+
local function write_mail_backup()
local tmpdir = vim.fn.expand(os.getenv("TMPDIR") or "/tmp") .. "/mail-backups"
vim.fn.mkdir(tmpdir, "p", "0o700")
buffer = 0,
})
+-- }}}
+
+-- {{{ mail area detect
+
+local function mail_area_detect()
+ local ts = vim.treesitter
+ if not ts then
+ return
+ end
+ local node = vim.treesitter.get_node()
+ if not node then
+ return
+ end
+ if node:type():find("^body") ~= nil then
+ vim.opt_local.formatoptions:append("a") -- turn on auto-reflow
+ vim.opt_local.formatoptions:append("w") -- trailing whitespace for format=flowed
+ vim.opt_local.formatoptions:append("n") -- numbered lists
+ vim.opt_local.formatoptions:append("t") -- autowrap with textwidth
+ vim.opt_local.formatoptions:append("c") -- autowrap and insert quote (comment) leader
+ vim.w.in_body = true
+ else
+ vim.opt_local.formatoptions:remove("a")
+ vim.opt_local.formatoptions:remove("w")
+ vim.opt_local.formatoptions:remove("n")
+ vim.opt_local.formatoptions:remove("t")
+ vim.opt_local.formatoptions:remove("c")
+ vim.w.in_body = false
+ end
+end
+
+local cmdgroup = vim.api.nvim_create_augroup("mailarea", { clear = true })
+vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, {
+ buffer = 0,
+ group = cmdgroup,
+ callback = mail_area_detect,
+})
+mail_area_detect()
+
vim.cmd.runtime("greeting_abbrevs.vim")
+
+-- }}}
+
+-- vim:foldmethod=marker:foldlevel=0