+" --- implement compose screen {{{1
+
+function! s:NM_cmd_compose(words, body_lines)
+ let lines = []
+ let start_on_line = 0
+
+ let hdrs = { }
+ for word in a:words
+ let m = matchlist(word, '^\([^:]\+\):\s*\(.*\)\s*$')
+ if !len(m)
+ throw 'Eeek! bad parameter ''' . string(word) . ''''
+ endif
+ let key = substitute(m[1], '\<\w', '\U&', 'g')
+ if !has_key(hdrs, key)
+ let hdrs[key] = []
+ endif
+ if strlen(m[2])
+ call add(hdrs[key], m[2])
+ endif
+ endfor
+
+ if !has_key(hdrs, 'From') || !len(hdrs['From'])
+ let me = <SID>NM_compose_get_user_email()
+ let hdrs['From'] = [ me ]
+ endif
+
+ for key in g:notmuch_compose_headers
+ let text = has_key(hdrs, key) ? join(hdrs[key], ', ') : ''
+ call add(lines, key . ': ' . text)
+ if !start_on_line && !strlen(text)
+ let start_on_line = len(lines)
+ endif
+ endfor
+
+ for [key,val] in items(hdrs)
+ if match(g:notmuch_compose_headers, key) == -1
+ let line = key . ': ' . join(val, ', ')
+ call add(lines, line)
+ endif
+ endfor
+
+ call extend(lines, [ '', '' ])
+ if !start_on_line
+ let start_on_line = len(lines) + 1
+ endif
+
+ if len(a:body_lines)
+ call extend(lines, a:body_lines)
+ else
+ call add(lines, '')
+ endif
+ call extend(lines, g:notmuch_signature)
+
+ let prev_bufnr = bufnr('%')
+ setlocal bufhidden=hide
+ call <SID>NM_newFileBuffer(g:notmuch_compose_temp_file_dir, '%s.mail',
+ \ 'compose', lines)
+ setlocal bufhidden=hide
+
+ call <SID>NM_cmd_compose_mksyntax()
+ call <SID>NM_set_map('n', g:notmuch_compose_nmaps)
+ call <SID>NM_set_map('i', g:notmuch_compose_imaps)
+
+ exec printf('norm %dG', start_on_line)
+ startinsert!
+ echo 'Type your message, use <TAB> to jump to next header and then body.'
+endfunction
+function! s:NM_cmd_compose_mksyntax()
+ silent! setlocal syntax=mail
+endfunction
+
+function! s:NM_compose_send()
+ echo 'not implemented'
+endfunction
+
+" --- --- compose screen helper functions {{{2
+
+function! s:NM_compose_get_user_email()
+ let name = substitute(system('id -u -n'), '\v(^\s*|\s*$|\n)', '', 'g')
+ let fqdn = substitute(system('hostname -f'), '\v(^\s*|\s*$|\n)', '', 'g')
+
+ " TODO: do this properly
+ return name . '@' . fqdn
+endfunction
+
+