From 5ee63d43d87e25fda83e9187473ffec982945dcc Mon Sep 17 00:00:00 2001 From: "martin f. krafft" Date: Mon, 28 Apr 2025 14:18:59 +0200 Subject: [PATCH 1/1] convert some mail ftplugin from vim to lua --- .config/lazyvim/after/ftplugin/mail.lua | 58 +++++++ .config/lazyvim/ftplugin/mail.vim | 215 ------------------------ .gitignore.d/lazyvim | 2 +- 3 files changed, 59 insertions(+), 216 deletions(-) create mode 100644 .config/lazyvim/after/ftplugin/mail.lua delete mode 100644 .config/lazyvim/ftplugin/mail.vim diff --git a/.config/lazyvim/after/ftplugin/mail.lua b/.config/lazyvim/after/ftplugin/mail.lua new file mode 100644 index 0000000..afa4c39 --- /dev/null +++ b/.config/lazyvim/after/ftplugin/mail.lua @@ -0,0 +1,58 @@ +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", "p", "", { buffer = true, desc = "mailplate profiles" }) + +vim.keymap.set( + "n", + "pp", + ":w:%!mailplate --auto --keep-unknown 2>/dev/null", + { buffer = true, desc = "Automatically determine mailplate profile" } +) + +local function profile_keymap(key, profile) + vim.keymap.set( + "n", + "p<" .. key .. ">", + ":w:%!mailplate --keep-unknown " .. profile .. "", + { buffer = true, desc = "Switch to mailplate profile '" .. profile .. "'" } + ) +end + +profile_keymap("F1", "official") +profile_keymap("F2", "pobox") +profile_keymap("F3", "tahi") +profile_keymap("F4", "toni") +profile_keymap("F5", "kbkg") +profile_keymap("F6", "krafftwerk") +profile_keymap("F7", "siby") +profile_keymap("F8", "debian") +profile_keymap("F9", "uniwh") +profile_keymap("F10", "mtfk") +profile_keymap("F11", "sudetia") +profile_keymap("F12", "default") + +local function write_mail_backup() + local tmpdir = vim.fn.expand(os.getenv("TMPDIR") or "/tmp") .. "/mail-backups" + vim.fn.mkdir(tmpdir, "p", "0o700") + local filename = os.date("%Y-%m-%d-%H%M%S") .. ".msg" + local file = io.open(tmpdir .. "/" .. filename, "a") + if file ~= nil then + local lines = vim.api.nvim_buf_get_lines(0, 1, -1, false) or {} + local content = table.concat(lines, "\n") + file:write(content) + file:close() + vim.notify("Saved a backup to " .. filename, vim.log.levels.INFO) + end +end + +vim.api.nvim_create_autocmd({ "BufWrite" }, { + callback = write_mail_backup, + buffer = 0, +}) + +vim.cmd.runtime("greeting_abbrevs.vim") diff --git a/.config/lazyvim/ftplugin/mail.vim b/.config/lazyvim/ftplugin/mail.vim deleted file mode 100644 index 9dcf643..0000000 --- a/.config/lazyvim/ftplugin/mail.vim +++ /dev/null @@ -1,215 +0,0 @@ -setlocal textwidth=68 -setlocal formatoptions-=o -setlocal formatoptions-=r -setlocal formatoptions-=l -setlocal formatoptions+=a -setlocal formatoptions+=w -setlocal formatoptions+=n -setlocal formatexpr= - -setlocal comments=n:> - -"setlocal spell - -" augroup tsperrorinsert -" au! -" augroup END -" match none /\s*$/ -" augroup listinsert -" au! -" augroup END -" setlocal list& - -" Dynamically set format options, depending on where you are in a -" mail, idea from Teemu Likonen: -" http://groups.google.com/group/vim_use/msg/f59e5c1adc6be2b3 - -" let s:defaults = "setlocal fo=".&fo -" " tw=".&tw." ts=".&ts." sts=".&sts." sw=".&sw." fo=".&fo -" execute s:defaults -" let b:MailAreaDetect=1 -" -" nnoremap :call MailAreaDetect_Switch(0) -" inoremap :call MailAreaDetect_Switch(1) -" -" function! s:MailAreaDetect_Switch(vmode) -" if b:MailAreaDetect -" silent call MailAreaDetect_Off() -" let b:MailAreaDetect=0 -" echo 'MailAreaDetect Off' -" else -" silent call MailAreaDetect_On() -" let b:MailAreaDetect=1 -" echo 'MailAreaDetect On' -" endif -" endfu -" -" function! s:MailAreaDetect_On() -" silent autocmd! MailAreaDetect CursorMoved,CursorMoved -" \ call AreaOptions() -" let b:MailAreaDetect=1 -" endfunction -" -" function! s:MailAreaDetect_Off() -" silent autocmd! MailAreaDetect -" execute s:defaults -" let b:MailAreaDetect=0 -" endfunction -" -" augroup MailAreaDetect -" autocmd! -" call MailAreaDetect_On() -" augroup END -" -" function! s:AreaOptions() -" execute s:defaults -" -" let s:synCur = synIDattr(synID(line("."),1,0),"name") -" let s:synNext = synIDattr(synID(line(".")+1,1,0),"name") -" -" if s:synNext =~ '^mailQuote' && s:synCur == '' && getline('.') =~ '^.' -" " elseif getline('.') =~ '^\s*[^>]' && getline(line('.')+1) =~ '\m^\s*>' -" setlocal fo-=a -" "echo 'Quotation leader (fo='.&fo.')' -" elseif s:synCur =~ '^mailQuote' -" " elseif getline('.') =~ '\m^\s*>' -" setlocal fo-=a -" "echo 'Quotation (fo='.&fo.')' -" elseif CheckArea('\m^--- .*\n^+++ ','\v(^$|\n^-- $)') -" setlocal fo-=a fo-=w fo-=t noet -" "echo 'Patch (fo='.&fo.')' -" elseif s:synCur == '' && s:synNext =~ '^mailSignature' -" " elseif getline(line('.')+1) =~ '\m^-- $' -" setlocal fo-=a fo-=w fo-=t -" "echo 'Last line before signature (fo='.&fo.')' -" elseif s:synCur =~ '^mailSignature' -" " elseif CheckArea('^-- $','^$') -" setlocal fo-=a fo-=w fo-=t -" "echo 'Signature (fo='.&fo.')' -" elseif s:synCur =~ '^mail' -" " if CheckArea('\v^From( |: ).*\n','\v^$') -" setlocal fo-=a fo-=w fo-=t -" "echo 'Header (fo='.&fo.')' -" else -" "echo 'My text (fo='.&fo.')' -" endif -" endfunction -" -" function! s:CheckArea(start, end) -" return (search(a:start,'bcnW')-line('.')) > -" \ (search(a:end,'bnW')-line('.')) -" endfunction - -" function! FixQuotes() -" let l:i = 0 -" let l:lineNxt = getline(l:i) -" let l:synNxt = synIDattr(synID(l:i,1,0),"name") -" while l:i < line('$')-1 -" let l:lineCur = l:lineNxt -" let l:synCur = l:synNxt -" let l:lineNxt = getline(l:i+1) -" let l:synNxt = synIDattr(synID(l:i+1,1,0),"name") -" if l:synCur =~ '^mailQuote' && l:lineCur =~ '\w.*\S$' && -" \ l:synNxt =~ '^mailQuote' && l:lineNxt =~ '\w' -" call setline(l:i, l:lineCur . ' ') -" endif -" let l:i += 1 -" endwhile -" endfunction -" -" augroup fixquotes -" au! -" autocmd BufWinEnter $TMPDIR/mutt-* call FixQuotes() -" augroup END - -nmap :w:%!mailplate --keep-unknown official -nmap :w:%!mailplate --keep-unknown pobox -nmap :w:%!mailplate --keep-unknown tahi -nmap :w:%!mailplate --keep-unknown toni - -nmap :w:%!mailplate --keep-unknown kbkg -nmap :w:%!mailplate --keep-unknown krafftwerk -nmap :w:%!mailplate --keep-unknown siby -nmap :w:%!mailplate --keep-unknown debian - -nmap :w:%!mailplate --keep-unknown uniwh -nmap :w:%!mailplate --keep-unknown mtfk -nmap :w:%!mailplate --keep-unknown sudetia -nmap :w:%!mailplate --keep-unknown default -nmap :w:%!mailplate --auto --keep-unknown 2>/dev/null - -" change subject line -" Before: Subject: old -" After : Subject: New (was: old) -" http://strcat.de/wiki/dotfiles#vim -" map ,sw 1G/^Subject: :s/Re:/was:/Wi ($)0Whi -map ns 1G/^Subject: /:s,\(Subject: \)\(Re: \)*\(.*\)$,\1 (was: \3),:set nohlsf li - -" Delete 'was' in the Subject. -" Before: Subject: New (was: old) -" After : Subject: New -" http://strcat.de/wiki/dotfiles#vim -map dw 1G/^Subject: /:s, *(was: .*)$:set nohlsf l - -" packadd lbdbq -" -" http://dollyfish.net.nz/blog/2008-04-01/mutt-and-vim-custom-autocompletion -" fun! LBDBCompleteFn(findstart, base) -" let line = getline('.') -" if a:findstart -" " locate the start of the word -" let start = col('.') - 1 -" while start > 0 && line[start - 1] =~ '[^:,]' -" let start -= 1 -" endwhile -" while start < col('.') && line[start] =~ '[:, ]' -" let start += 1 -" endwhile -" return start -" else -" let res = [] -" let query = substitute(a:base, '"', '', 'g') -" let query = substitute(query, '\s*<.*>\s*', '', 'g') -" for m in LbdbQuery(query) -" call complete_add(printf('"%s" <%s>', escape(m[0], '"'), m[1])) -" if complete_check() -" break -" endif -" endfor -" return res -" endif -" endfun -" setlocal completefunc=LBDBCompleteFn - -" And this magic by James Vega, which ensures that we only complete with lbdb -" on the recipient lines of the mail header. -" inoremap DelegateCompletion(1) -" inoremap DelegateCompletion(0) - -" fun! DelegateCompletion(next) -" if getline('.') =~? '^\%(To\|B\=Cc\):' -" return "\x18\x15" -" elseif a:next -" return "\x0e" -" else -" return "\x10" -" endif -" endfun - -function! WriteMailBackup() - let l:tmpdir = fnameescape(expand('$TMPDIR')) || '/tmp' - let l:tgtdir = l:tmpdir . '/mail-backups' - call mkdir(l:tgtdir, "p", 0o700) - let l:modified = &modified - let l:filename = l:tgtdir . '/' . strftime('%Y-%m-%d-%H%M%S') . '.msg' - exe 'silent update! ' . l:filename - if 0 && l:modified - echo 'Backup written to ' . l:filename - endif -endfunction -autocmd BufWritePre call WriteMailBackup() - -let g:markdown_in_mail = 1 -runtime! ftplugin/markdown.vim - -runtime! greeting_abbrevs.vim diff --git a/.gitignore.d/lazyvim b/.gitignore.d/lazyvim index c27e63e..345a341 100644 --- a/.gitignore.d/lazyvim +++ b/.gitignore.d/lazyvim @@ -1,11 +1,11 @@ * !/.config/lazyvim/after/ftplugin/diff.vim +!/.config/lazyvim/after/ftplugin/mail.lua !/.config/lazyvim/after/ftplugin/markdown.lua !/.config/lazyvim/after/ftplugin/python.lua !/.config/lazyvim/after/ftplugin/tex.vim !/.config/lazyvim/autocmds.lua !/.config/lazyvim/ftp -!/.config/lazyvim/ftplugin/mail.vim !/.config/lazyvim/.gitignore !/.config/lazyvim/greeting_abbrevs.vim !/.config/lazyvim/init.lua -- 2.39.5