+setlocal textwidth=68
+setlocal formatoptions-=o
+setlocal formatoptions-=r
+setlocal formatoptions-=l
+setlocal formatoptions+=a
+setlocal formatoptions+=w
+setlocal formatoptions+=n
+
+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
+