+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>
+
+" 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 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
+endfunction
+
+" change subject line
+" Before: Subject: old
+" After : Subject: New (was: old)
+" http://strcat.de/wiki/dotfiles#vim
+" map ,sw 1G/^Subject: <CR>:s/Re:/was:/<CR>Wi (<C-O>$)<ESC>0Whi
+map <Leader>ns 1G/^Subject: /<CR>:s,\(Subject: \)\(Re: \)*\(.*\)$,\1 (was: \3),<CR>:set nohls<CR>f li
+
+" Delete 'was' in the Subject.
+" Before: Subject: New (was: old)
+" After : Subject: New
+" http://strcat.de/wiki/dotfiles#vim
+map <Leader>dw 1G/^Subject: /<CR>:s, *(was: .*)$<CR>:set nohls<CR>f 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 <expr> <C-n> DelegateCompletion(1)
+inoremap <expr> <Tab> DelegateCompletion(1)
+inoremap <expr> <C-p> DelegateCompletion(0)
+inoremap <expr> <S-Tab> DelegateCompletion(0)
+
+fun! DelegateCompletion(next)
+ if getline('.') =~? '^\%(To\|B\=Cc\):'
+ return "\x18\x15"
+ elseif a:next
+ return "\x0e"
+ else
+ return "\x10"
+ endif
+endfun