nmap <buffer> <C-P><F1> :w<CR>:%!~/.bin/mail/mailplate --keep-unknown official<CR>
nmap <buffer> <C-P><F2> :w<CR>:%!~/.bin/mail/mailplate --keep-unknown private<CR>
nmap <buffer> <C-P><F3> :w<CR>:%!~/.bin/mail/mailplate --keep-unknown debian<CR>
-nmap <buffer> <C-P><F4> :w<CR>:%!~/.bin/mail/mailplate --keep-unknown ul<CR>
+nmap <buffer> <C-P><F5> :w<CR>:%!~/.bin/mail/mailplate --keep-unknown ul<CR>
+nmap <buffer> <C-P><F6> :w<CR>:%!~/.bin/mail/mailplate --keep-unknown uzh<CR>
nmap <buffer> <C-P><F9> :w<CR>:%!~/.bin/mail/mailplate --keep-unknown sudetia<CR>
nmap <buffer> <F1> :w<CR>:%!~/.bin/mail/mailplate --auto --keep-unknown 2>/dev/null<CR>
" 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
+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.
+ino <expr> <C-n> DelegateCompletion(1)
+ino <expr> <C-p> DelegateCompletion(0)
+
+fun! DelegateCompletion(next)
+ if getline('.') =~? '^\%(To\|B\=Cc\):'
+ return "\x18\x15"
+ elseif a:next
+ return "\x0e"
+ else
+ return "\x10"
+ endif
+endfun