X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=vim%2Fplugin%2Fnotmuch.vim;h=bdf03ba6c8edf14a99f9a5081b99ce9e654c87ce;hb=eead2382774f42c3531f7abe6f06cbe88fe4492a;hp=968c4c1652b5d3ebab46d3e1759fc4ef40aacf4c;hpb=5a8903f05a10a9d010ca4d7302a58cd6520a112d;p=notmuch diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index 968c4c16..bdf03ba6 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -18,7 +18,8 @@ " along with Notmuch. If not, see . " " Authors: Bart Trojanowski - +" Contributors: Peter Hartman +" " --- configuration defaults {{{1 let s:notmuch_defaults = { @@ -941,71 +942,20 @@ function! s:NM_compose_send() let fname = expand('%') let lnum = 1 let line = getline(lnum) - let hdrs = {} let lst_hdr = '' while match(line, '^$') == -1 - if match(line, '^Notmuch-Help:') != -1 - " skip it - elseif strlen(lst_hdr) && match(line, '^\s') != -1 - let hdrs[lst_hdr][-1] = hdrs[lst_hdr][-1] . substitute(line, '^\s*', ' ', '') - else - let m = matchlist(line, '^\(\w[^:]*\):\s*\(.*\)\s*$') - if !len(m) - cursor(lnum, 0) - throw printf('Eeek! invalid header on line %d', lnum) - endif - let key = substitute(m[1], '\<\w', '\U&', 'g') - if strlen(m[2]) - if !has_key(hdrs, key) - let hdrs[key] = [] - endif - call add(hdrs[key], m[2]) - endif - let lst_hdr = key + if match(line, '^Notmuch-Help:') == -1 + let hdr_starts = lnum - 1 + break endif let lnum = lnum + 1 let line = getline(lnum) endwhile - let body_starts = lnum - - "[-a header] [-b bcc-addr] [-c cc-addr] [-s subject] to-addr - let cmd = ['mail'] - let tos = [] - for [key, vals] in items(hdrs) - if key == 'To' - call extend(tos, vals) - elseif key == 'Bcc' - for adr in vals - call add(cmd, '-b') - call add(cmd, adr) - endfor - elseif key == 'Cc' - for adr in vals - call add(cmd, '-c') - call add(cmd, adr) - endfor - elseif key == 'Subject' - for txt in vals - call add(cmd, '-s') - call add(cmd, txt) - endfor - else - for val in vals - call add(cmd, '-a') - call add(cmd, key . ': ' . val) - endfor - endif - endfor - call extend(cmd, tos) - " TODO: make sure we have at least one target - " TODO: ask about empty jubject, etc - - exec printf('0,%dd', body_starts) + exec printf(':0,%dd', hdr_starts) write - call map(cmd, 's:NM_shell_escape(v:val)') - let cmdtxt = join(cmd) . '< ' . fname + let cmdtxt = 'mailx -t < ' . fname let out = system(cmdtxt) let err = v:shell_error if err @@ -1075,11 +1025,9 @@ 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 + " TODO: do this properly (still), i.e., allow for multiple email accounts + let email = substitute(system('notmuch config get user.primary_email'), '\v(^\s*|\s*$|\n)', '', 'g') + return email endfunction function! s:NM_compose_find_line_match(start, pattern, failure) @@ -1237,13 +1185,16 @@ function! s:NM_run(args) call map(words, 's:NM_shell_escape(v:val)') let cmd = g:notmuch_cmd . ' ' . join(words) . '< /dev/null' - let start = reltime() - let out = system(cmd) - let err = v:shell_error - let delta = reltime(start) - if exists('g:notmuch_debug') && g:notmuch_debug + let start = reltime() + let out = system(cmd) + let err = v:shell_error + let delta = reltime(start) + echo printf('[%s] {%s} %s', reltimestr(delta), string(err), string(cmd)) + else + let out = system(cmd) + let err = v:shell_error endif if err