X-Git-Url: https://git.madduck.net/etc/lazyvim.git/blobdiff_plain/2ab6d11258ae0e10cdafbbe6bbc815c8a18888fd..dca18e3b27c3eaad0bc15617248cde1c2311b61e:/.config/lazyvim/ftplugin/mail.vim diff --git a/.config/lazyvim/ftplugin/mail.vim b/.config/lazyvim/ftplugin/mail.vim new file mode 100644 index 0000000..9dcf643 --- /dev/null +++ b/.config/lazyvim/ftplugin/mail.vim @@ -0,0 +1,215 @@ +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