X-Git-Url: https://git.madduck.net/etc/lazyvim.git/blobdiff_plain/c9fb929a035238e0b4c702bf0e68729c433aedc9..150450bac462b56c175eb075c1915be2b2b81a83:/.config/lazyvim/after/ftplugin/mail.lua diff --git a/.config/lazyvim/after/ftplugin/mail.lua b/.config/lazyvim/after/ftplugin/mail.lua index 36c6ead..39eaf3e 100644 --- a/.config/lazyvim/after/ftplugin/mail.lua +++ b/.config/lazyvim/after/ftplugin/mail.lua @@ -1,3 +1,4 @@ +-- {{{ markdown in mail local i, _ = string.find(vim.bo.filetype, "markdown") if not i then vim.opt_local.filetype = "mail.markdown" @@ -12,13 +13,35 @@ 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") +-- {{{ 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 +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 +-- }}} + +-- {{{ keymaps +vim.keymap.set("n", "m", "", { buffer = true, desc = "mail functions" }) +vim.keymap.set("n", "ms", "", { buffer = true, desc = "subject manipulation" }) + +vim.keymap.set( + "n", + "msn", + ":1,/^$/s,\\v(Subject:)\\s*((Re|AW):\\s*)*((.|\\_s\\s+)+),\\1 (was: \\4),e:set nohlsWhi", + -- set nohlsf li", + { buffer = true, desc = "make a new subject" } +) +vim.keymap.set( + "n", + "msd", + '1G/\\v^Subject:(.|\\_s\\s+)+was:/e:set nohls"_dab', + { buffer = true, desc = "remove old subjects" } +) + +-- {{{ profiles vim.keymap.set("n", "p", "", { buffer = true, desc = "mailplate profiles" }) @@ -51,6 +74,11 @@ 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") @@ -70,4 +98,46 @@ vim.api.nvim_create_autocmd({ "BufWrite" }, { 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