+" --- 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 "This is the last buffer; use :q<CR> to quit."
+ endif
+endfunction
+
+function! s:NM_search_expand(arg)
+ let word = expand(a:arg)
+ let prev_bufnr = bufnr('%')
+ setlocal bufhidden=hide
+ call <SID>NM_cmd_search([word])
+ setlocal bufhidden=delete
+ let b:nm_prev_bufnr = prev_bufnr
+endfunction
+
+function! s:NM_add_remove_tags(filter, prefix, tags)
+ let filter = len(a:filter) ? a:filter : [<SID>NM_search_thread_id()]
+ if !len(filter)
+ echoe 'Eeek! I couldn''t find the thead id!'
+ endif
+ call map(a:tags, 'a:prefix . v:val')
+ let args = ['tag']
+ call extend(args, a:tags)
+ call add(args, '--')
+ call extend(args, filter)
+ " TODO: handle errors
+ call <SID>NM_run(args)
+endfunction
+
+function! s:NM_add_remove_tags_on_screen(online, prefix, tags)
+ setlocal modifiable
+ if a:prefix == '-'
+ for tagname in a:tags
+ exec printf('silent! %ss/(\([^)]*\)\<%s\>\([^)]*\))$/(\1\2)/', string(a:online), tagname)
+ endfor
+ else
+ for tagname in a:tags
+ exec printf('silent! %ss/(\([^)]*\)\([^)]*\))$/(\1 %s)/', string(a: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)
+ " FIXME: not sure why this didn't work when dflt is an array
+ "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
+if !exists('g:notmuch_folders')
+ let g:notmuch_folders = s:notmuch_folders_defaults
+endif
+
+if !exists('g:notmuch_signature')
+ let g:notmuch_signature = s:notmuch_signature_defaults
+endif
+if !exists('g:notmuch_compose_headers')
+ let g:notmuch_compose_headers = s:notmuch_compose_headers_defaults
+endif
+
+" --- assign keymaps {{{1
+
+function! s:NM_set_map(type, maps)
+ nmapclear
+ for [key, code] in items(a:maps)
+ exec printf('%snoremap <buffer> %s %s', a:type, key, code)
+ endfor
+ " --- this is a hack for development :)
+ nnoremap ,nmr :source ~/.vim/plugin/notmuch.vim<CR>:call NotMuch('')<CR>
+endfunction