+" --- external mail handling helpers {{{1
+
+function! s:NM_new_mail()
+ echo 'not implemented'
+endfunction
+
+" --- other helpers {{{1
+
+function! s:NM_kill_this_buffer()
+ if exists('b:nm_prev_bufnr')
+ setlocal bufhidden=delete
+ exec printf(":buffer %d", b:nm_prev_bufnr)
+ else
+ echo "Nothing to kill."
+ endif
+endfunction
+
+function! s:NM_add_remove_tags(prefix, tags)
+ let id = <SID>NM_search_find_thread_id()
+ if id == ''
+ echoe 'Eeek! I couldn''t find the thead id!'
+ endif
+ call map(a:tags, 'a:prefix . v:val')
+ " TODO: handle errors
+ call <SID>NM_run(['tag'] + a:tags + ['--', id])
+endfunction
+
+function! s:NM_add_remove_tags_on_screen(prefix, tags)
+ let online = ''
+ setlocal modifiable
+ if a:prefix == '-'
+ for tagname in a:tags
+ exec printf('silent %ss/(\([^)]*\)\<%s\>\([^)]*\))$/(\1\2)/', online, tagname)
+ endfor
+ else
+ for tagname in a:tags
+ exec printf('silent %ss/(\([^)]*\)\([^)]*\))$/(\1 %s)/', online, tagname)
+ endfor
+ endif
+ setlocal nomodifiable
+endfunction
+
+" --- process and set the defaults {{{1
+
+function! NM_set_defaults(force)
+ for [key, dflt] in items(s:notmuch_defaults)
+ let cmd = ''
+ if !a:force && exists(key) && type(dflt) == type(eval(key))
+ continue
+ elseif type(dflt) == type(0)
+ let cmd = printf('let %s = %d', key, dflt)
+ elseif type(dflt) == type('')
+ let cmd = printf('let %s = ''%s''', key, dflt)
+ "elseif type(dflt) == type([])
+ " let cmd = printf('let %s = %s', key, string(dflt))
+ else
+ echoe printf('E: Unknown type in NM_set_defaults(%d) using [%s,%s]',
+ \ a:force, key, string(dflt))
+ continue
+ endif
+ exec cmd
+ endfor
+endfunction
+call NM_set_defaults(0)
+
+" for some reason NM_set_defaults() didn't work for arrays...
+if !exists('g:notmuch_show_headers')
+ let g:notmuch_show_headers = s:notmuch_show_headers_defaults
+endif
+if !exists('g:notmuch_initial_search_words')
+ let g:notmuch_initial_search_words = s:notmuch_initial_search_words_defaults
+endif
+
+
+" --- assign keymaps {{{1
+
+function! s:NM_set_map(maps)
+ nmapclear
+ for [key, code] in items(a:maps)
+ exec printf('nnoremap <buffer> %s %s', key, code)
+ endfor
+ " --- this is a hack for development :)
+ nnoremap ,nmr :source ~/.vim/plugin/notmuch.vim<CR>:call NotMuch('')<CR>
+endfunction