X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/9f0438fea4ac3bd90d99a83cdf5d30be451b2ed0..d36966d1e5d01fed6ca19773a610035350e7f924:/.vim/after/ftplugin/mail.vim diff --git a/.vim/after/ftplugin/mail.vim b/.vim/after/ftplugin/mail.vim index 6b6d5276..16157a96 100644 --- a/.vim/after/ftplugin/mail.vim +++ b/.vim/after/ftplugin/mail.vim @@ -2,4 +2,169 @@ 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 spell + +" 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 +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) + +function! s:MailAreaDetect_Switch(vmode) + if b:MailAreaDetect + silent call MailAreaDetect_Off() + let b:MailAreaDetect=0 + echo 'MailAreaDetect Off' + if a:vmode + sleep 1 + endif + else + silent call 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 + \ 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 + 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 + 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 + else + "echo 'My text' + setlocal fo+=aw et + endif +endfunction + +function! s:CheckArea(start, end) + return (search(a:start,'bcnW')-line('.')) > + \ (search(a:end,'bnW')-line('.')) +endfunction + +augroup tsperrorinsert + au! +augroup END +match none /\s\+$/ +augroup listinsert + au! +augroup END +set nolist + +nmap :w:%!mailplate --keep-unknown official +nmap :w:%!mailplate --keep-unknown tahi +nmap :w:%!mailplate --keep-unknown pmvm +nmap :w:%!mailplate --keep-unknown pobox +nmap :w:%!mailplate --keep-unknown debian +nmap :w:%!mailplate --keep-unknown debconf +nmap :w:%!mailplate --keep-unknown uniwh +nmap :w:%!mailplate --keep-unknown mtfk +nmap :w:%!mailplate --keep-unknown sudetia +nmap :w:%!mailplate --keep-unknown private +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 + +" 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 +set 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