-nmap <buffer> <C-P><F1> :w<CR>:%!mailplate --keep-unknown official<CR>
-nmap <buffer> <C-P><F2> :w<CR>:%!mailplate --keep-unknown private<CR>
-nmap <buffer> <C-P><F3> :w<CR>:%!mailplate --keep-unknown debian<CR>
-nmap <buffer> <C-P><F4> :w<CR>:%!mailplate --keep-unknown phd<CR>
-nmap <buffer> <C-P><F5> :w<CR>:%!mailplate --keep-unknown ul<CR>
-nmap <buffer> <C-P><F6> :w<CR>:%!mailplate --keep-unknown uzh<CR>
-nmap <buffer> <C-P><F9> :w<CR>:%!mailplate --keep-unknown sudetia<CR>
-nmap <buffer> <F1> :w<CR>:%!mailplate --auto --keep-unknown 2>/dev/null<CR>
+setlocal textwidth=68
+setlocal formatoptions-=o
+setlocal formatoptions-=r
+setlocal formatoptions-=l
+setlocal formatoptions+=a
+setlocal formatoptions+=w
+setlocal formatoptions+=n
-" Checking attachments in edited emails for use in Mutt: warns user when
-" exiting
-" by Hugo Haas <hugo@larve.net> - 20 June 2004
-" based on an idea by The Doctor What explained at
-" <mid:caq406$rq4$1@FreeBSD.csie.NCTU.edu.tw>
-" http://www.vim.org/scripts/download_script.php?src_id=3165
-autocmd BufUnload mutt-* call CheckAttachments()
-function! CheckAttachments()
- let l:english = 'attach\(ing\|ed\|ment\)\?\|included\_swith\_sthis\_smail'
- let l:french = 'attach\(e\|er\|ée\?s\?\|ement\|ant\)'
- let l:german = 'an\(gehängt\|hängsel\|bei\)\|bei\(gefügt\|lage\)\|\(im\|siehe\)\_s\(anhang\|beilage\)'
- let l:ic = &ignorecase
- if (l:ic == 0)
- set ignorecase
- endif
- if (search('^\([^>|].*\)\?\<\(re-\?\)\?\('.l:english.'\|'.l:german.'\)\>', "w") != 0)
- let l:temp = inputdialog("Do you want to attach a file? [Hit return] ")
- endif
- if (l:ic == 0)
- set noignorecase
- endif
- echo
+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 <buffer><silent> <F9> :call <SID>MailAreaDetect_Switch(0)<CR>
+inoremap <buffer><silent> <F9> <C-\><C-O>:call <SID>MailAreaDetect_Switch(1)<CR>
+
+function! s:MailAreaDetect_Switch(vmode)
+ if b:MailAreaDetect
+ silent call <SID>MailAreaDetect_Off()
+ let b:MailAreaDetect=0
+ echo 'MailAreaDetect Off'
+ if a:vmode
+ sleep 1
+ endif
+ else
+ silent call <SID>MailAreaDetect_On()
+ let b:MailAreaDetect=1
+ echo 'MailAreaDetect On'
+ if a:vmode
+ sleep 1
+ endif
+ endif
+endfu
+
+function! s:MailAreaDetect_On()
+ silent autocmd! MailAreaDetect CursorMoved,CursorMoved
+ \ <buffer> call <SID>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 <SID>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 <SID>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 <SID>CheckArea('^-- $','^$')
+ setlocal fo-=a fo-=w fo-=t
+ "echo 'Signature (fo='.&fo.')'
+ elseif s:synCur =~ '^mail'
+ " if <SID>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 <buffer> <C-P><F1> :w<CR>:%!mailplate --keep-unknown official<CR>
+nmap <buffer> <C-P><F2> :w<CR>:%!mailplate --keep-unknown pobox<CR>
+nmap <buffer> <C-P><F3> :w<CR>:%!mailplate --keep-unknown tahi<CR>
+nmap <buffer> <C-P><F4> :w<CR>:%!mailplate --keep-unknown toni<CR>
+
+nmap <buffer> <C-P><F5> :w<CR>:%!mailplate --keep-unknown kbkg<CR>
+nmap <buffer> <C-P><F6> :w<CR>:%!mailplate --keep-unknown krafftwerk<CR>
+nmap <buffer> <C-P><F7> :w<CR>:%!mailplate --keep-unknown siby<CR>
+nmap <buffer> <C-P><F8> :w<CR>:%!mailplate --keep-unknown debian<CR>
+
+nmap <buffer> <C-P><F9> :w<CR>:%!mailplate --keep-unknown uniwh<CR>
+nmap <buffer> <C-P><F10> :w<CR>:%!mailplate --keep-unknown mtfk<CR>
+nmap <buffer> <C-P><F11> :w<CR>:%!mailplate --keep-unknown sudetia<CR>
+nmap <buffer> <C-P><F12> :w<CR>:%!mailplate --keep-unknown default<CR>
+nmap <buffer> <F1> :w<CR>:%!mailplate --auto --keep-unknown 2>/dev/null<CR>
+
" change subject line
" Before: Subject: old
" After : Subject: New (was: old)
" http://strcat.de/wiki/dotfiles#vim
map <Leader>dw 1G/^Subject: /<CR>:s, *(was: .*)$<CR>:set nohls<CR>f l
+packadd lbdbq
+
" http://dollyfish.net.nz/blog/2008-04-01/mutt-and-vim-custom-autocompletion
fun! LBDBCompleteFn(findstart, base)
let line = getline('.')
return "\x10"
endif
endfun
+
+function! WriteMailBackup()
+ let l:tmpdir = fnameescape((exists('$TMPDIR') ? 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 <buffer> call WriteMailBackup()
+
+let g:markdown_in_mail = 1
+runtime! ftplugin/markdown.vim