X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/43b64aa1892957ed30d2e820a2e1e4f63b32cf47..507b8776082bc89b2cabb779aff9ca9f4943ebbe:/.vim/ftplugin/mail.vim diff --git a/.vim/ftplugin/mail.vim b/.vim/ftplugin/mail.vim index 87e913c1..94a3c44f 100644 --- a/.vim/ftplugin/mail.vim +++ b/.vim/ftplugin/mail.vim @@ -1,36 +1,148 @@ -nmap :w:%!mailplate --keep-unknown official -nmap :w:%!mailplate --keep-unknown private -nmap :w:%!mailplate --keep-unknown debian -nmap :w:%!mailplate --keep-unknown phd -nmap :w:%!mailplate --keep-unknown ul -nmap :w:%!mailplate --keep-unknown uzh -nmap :w:%!mailplate --keep-unknown sudetia -nmap :w:%!mailplate --auto --keep-unknown 2>/dev/null +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 - 20 June 2004 -" based on an idea by The Doctor What explained at -" -" 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 with this mail' - 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 :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 + + 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) @@ -44,6 +156,8 @@ map ns 1G/^Subject: /:s,\(Subject: \)\(Re: \)*\(.*\)$,\1 (was: \3),< " 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('.') @@ -75,9 +189,7 @@ 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(1) inoremap DelegateCompletion(0) -inoremap DelegateCompletion(0) fun! DelegateCompletion(next) if getline('.') =~? '^\%(To\|B\=Cc\):' @@ -88,3 +200,19 @@ fun! DelegateCompletion(next) 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 call WriteMailBackup() + +let g:markdown_in_mail = 1 +runtime! ftplugin/markdown.vim