+local i, _ = string.find(vim.bo.filetype, "markdown")
+if not i then
+ vim.opt_local.filetype = "mail.markdown"
+ -- this should trigger a reload of the ftplugin
+ return
+end
+
+-- There are no diagnostics for mail, but we do not want the
+-- Markdown standards imposed on mail header and signature…
+vim.diagnostic.enable(false)
+vim.b.autoformat = false
+
+-- 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")
+
+vim.keymap.set("n", "<leader>m", "", { buffer = true, desc = "mail functions" })
+vim.keymap.set("n", "<leader>ms", "", { buffer = true, desc = "subject manipulation" })
+
+vim.keymap.set(
+ "n",
+ "<leader>msn",
+ ":1,/^$/s,\\v(Subject:)\\s*((Re|AW):\\s*)*((.|\\_s\\s+)+),\\1 (was: \\4),e<CR>:set nohls<CR>Whi",
+ -- <CR><cmd>set nohls<CR>f li",
+ { buffer = true, desc = "make a new subject" }
+)
+vim.keymap.set(
+ "n",
+ "<leader>msd",
+ '1G/\\v^Subject:(.|\\_s\\s+)+was:/e<CR>:set nohls<CR>"_dab',
+ { buffer = true, desc = "remove old subjects" }
+)
vim.keymap.set("n", "<leader>p", "", { buffer = true, desc = "mailplate profiles" })
})
vim.cmd.runtime("greeting_abbrevs.vim")
+
+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")
+ vim.opt_local.formatoptions:append("w")
+ vim.opt_local.formatoptions:append("n")
+ vim.opt_local.formatoptions:append("t")
+ vim.opt_local.formatoptions:append("c")
+ 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()