mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 17:34:54 +01:00
vim: implement sending with ,s from compose buffer
This commit is contained in:
parent
05d76deb2e
commit
b5e28d8615
1 changed files with 103 additions and 3 deletions
|
@ -949,7 +949,99 @@ function! s:NM_cmd_compose(words, body_lines)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:NM_compose_send()
|
function! s:NM_compose_send()
|
||||||
echo 'not implemented'
|
call <SID>NM_assert_buffer_type('compose')
|
||||||
|
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
|
||||||
|
endif
|
||||||
|
let lnum = lnum + 1
|
||||||
|
let line = getline(lnum)
|
||||||
|
endwhile
|
||||||
|
let body_starts = lnum + 1
|
||||||
|
exec printf('0,%dd', body_starts)
|
||||||
|
write
|
||||||
|
|
||||||
|
"[-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)
|
||||||
|
|
||||||
|
call map(cmd, 's:NM_shell_escape(v:val)')
|
||||||
|
let cmdtxt = join(cmd) . '< ' . fname
|
||||||
|
let out = system(cmdtxt)
|
||||||
|
let err = v:shell_error
|
||||||
|
if err
|
||||||
|
undo
|
||||||
|
write
|
||||||
|
call <SID>NM_newBuffer('new', 'error',
|
||||||
|
\ "While running...\n" .
|
||||||
|
\ ' ' . cmdtxt . "\n" .
|
||||||
|
\ "\n" .
|
||||||
|
\ "Failed with...\n" .
|
||||||
|
\ substitute(out, '^', ' ', 'g'))
|
||||||
|
echohl Error
|
||||||
|
echo 'Eeek! unable to send mail'
|
||||||
|
echohl None
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('b:nm_prev_bufnr')
|
||||||
|
bdelete
|
||||||
|
else
|
||||||
|
let prev_bufnr = b:nm_prev_bufnr
|
||||||
|
bdelete
|
||||||
|
if prev_bufnr == bufnr('%')
|
||||||
|
exec printf("buffer %d", prev_bufnr)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
call delete(fname)
|
||||||
|
echo 'Mail sent successfully.'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:NM_compose_attach()
|
function! s:NM_compose_attach()
|
||||||
|
@ -1045,6 +1137,13 @@ function! s:NM_newFileBuffer(fdir, fname, type, lines)
|
||||||
let b:nm_type = a:type
|
let b:nm_type = a:type
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:NM_assert_buffer_type(type)
|
||||||
|
if !exists('b:nm_type') || b:nm_type != a:type
|
||||||
|
throw printf('Eeek! expected type %s, but got %s.', a:type,
|
||||||
|
\ exists(b:nm_type) ? b:nm_type : 'something else')
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:NM_mktemp(dir, name)
|
function! s:NM_mktemp(dir, name)
|
||||||
let time_stamp = strftime('%Y%m%d-%H%M%S')
|
let time_stamp = strftime('%Y%m%d-%H%M%S')
|
||||||
let file_name = substitute(a:dir,'/*$','/','') . printf(a:name, time_stamp)
|
let file_name = substitute(a:dir,'/*$','/','') . printf(a:name, time_stamp)
|
||||||
|
@ -1132,8 +1231,9 @@ endfunction
|
||||||
|
|
||||||
function! s:NM_kill_this_buffer()
|
function! s:NM_kill_this_buffer()
|
||||||
if exists('b:nm_prev_bufnr')
|
if exists('b:nm_prev_bufnr')
|
||||||
setlocal bufhidden=delete
|
let prev_bufnr = b:nm_prev_bufnr
|
||||||
exec printf(":buffer %d", b:nm_prev_bufnr)
|
bdelete
|
||||||
|
exec printf("buffer %d", prev_bufnr)
|
||||||
else
|
else
|
||||||
echo "This is the last buffer; use :q<CR> to quit."
|
echo "This is the last buffer; use :q<CR> to quit."
|
||||||
endif
|
endif
|
||||||
|
|
Loading…
Reference in a new issue