X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/d36966d1e5d01fed6ca19773a610035350e7f924..a4917db8b2b49dfdc10d1c760ff67ee51086ddec:/.vim/after/ftplugin/mail.vim diff --git a/.vim/after/ftplugin/mail.vim b/.vim/after/ftplugin/mail.vim index 16157a9..8c59b11 100644 --- a/.vim/after/ftplugin/mail.vim +++ b/.vim/after/ftplugin/mail.vim @@ -1,33 +1,31 @@ setlocal textwidth=68 setlocal formatoptions-=o setlocal formatoptions-=r - -" for format_flowed -"setlocal formatoptions+=aw -"setlocal nolist -"augroup listinsert -" autocmd! -"augroup end -"augroup tsperrorinsert -" autocmd! -"augroup end +setlocal formatoptions-=l +setlocal formatoptions+=a +setlocal formatoptions+=w +setlocal formatoptions+=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 d_fo = &fo -let s:defaults = 'setlocal tw=68 ts=2 sts=2 sw=2 fo='.d_fo +let s:defaults = "setlocal fo=".&fo +" tw=".&tw." ts=".&ts." sts=".&sts." sw=".&sw." fo=".&fo execute s:defaults let b:MailAreaDetect=1 -"nnoremap ma1 :call MailAreaDetect_On() -" \ echo 'MailAreaDetect On' -"nnoremap ma0 :call MailAreaDetect_Off() -" \ echo 'MailAreaDetect Off' - nnoremap :call MailAreaDetect_Switch(0) inoremap :call MailAreaDetect_Switch(1) @@ -49,7 +47,6 @@ function! s:MailAreaDetect_Switch(vmode) endif endfu - function! s:MailAreaDetect_On() silent autocmd! MailAreaDetect CursorMoved,CursorMoved \ call AreaOptions() @@ -69,21 +66,35 @@ augroup END function! s:AreaOptions() execute s:defaults - if CheckArea('\v^From( |: ).*\n','\v^$') - "echo 'Header' - setlocal fo-=a fo-=w fo-=t sts=0 sw=2 noet - elseif getline('.') =~ '\m^\s*>' - "echo 'Quotation' - setlocal fo-=a fo-=w + + 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^-- $)') - "echo 'Patch' - setlocal fo-=a fo-=w fo-=t sts=0 sw=2 noet - elseif CheckArea('^-- $','^$') - "echo 'Signature' - setlocal fo-=a fo-=w fo-=t sts=0 sw=2 noet + 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' - setlocal fo+=aw et + "echo 'My text (fo='.&fo.')' endif endfunction @@ -92,14 +103,27 @@ function! s:CheckArea(start, end) \ (search(a:end,'bnW')-line('.')) endfunction -augroup tsperrorinsert - au! -augroup END -match none /\s\+$/ -augroup listinsert +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 -set nolist nmap :w:%!mailplate --keep-unknown official nmap :w:%!mailplate --keep-unknown tahi @@ -168,3 +192,5 @@ fun! DelegateCompletion(next) return "\x10" endif endfun + +autocmd BufWritePost exe 'write ' . fnameescape((exists('$TMPDIR') ? expand('$TMPDIR') : '/tmp') . '/mail.backup.' . strftime('%Y-%m-%d-%H%M%S'))