X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=vim%2Fplugin%2Fnotmuch.vim;h=6726a5e79f9bcac2ffbeea34f998ff29a07e032b;hb=5cdf424657e2fd19a4563f750b0be02cc46b8920;hp=01ee10f8a4b64ff0a1e105c94cb9087475f6bd9e;hpb=c639ffae1e3959252b2a3fca13d3213c27e14b85;p=notmuch
diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim
index 01ee10f8..6726a5e7 100644
--- a/vim/plugin/notmuch.vim
+++ b/vim/plugin/notmuch.vim
@@ -18,7 +18,9 @@
" along with Notmuch. If not, see .
"
" Authors: Bart Trojanowski
-
+" Contributors: Felipe Contreras ,
+" Peter Hartman
+"
" --- configuration defaults {{{1
let s:notmuch_defaults = {
@@ -118,6 +120,7 @@ let g:notmuch_search_maps = {
\ '': ':call NM_search_show_thread(1)',
\ '': ':call NM_search_expand('''')',
\ 'a': ':call NM_search_archive_thread()',
+ \ 'A': ':call NM_search_mark_read_then_archive_thread()',
\ 'f': ':call NM_search_filter()',
\ 'm': ':call NM_new_mail()',
\ 'o': ':call NM_search_toggle_order()',
@@ -306,7 +309,12 @@ function! s:NM_search_edit()
endfunction
function! s:NM_search_archive_thread()
- call NM_add_remove_tags([], '-', ['inbox'])
+ call NM_tag([], ['-inbox'])
+ norm j
+endfunction
+
+function! s:NM_search_mark_read_then_archive_thread()
+ call NM_tag([], ['-unread', '-inbox'])
norm j
endfunction
@@ -397,7 +405,8 @@ function! s:NM_search_add_remove_tags(prompt, prefix, intags)
else
let tags = a:intags
endif
- call NM_add_remove_tags([], a:prefix, tags)
+ call map(tags, 'a:prefix . v:val')
+ call NM_tag([], tags)
endfunction
" --- implement show screen {{{1
@@ -487,11 +496,12 @@ function! s:NM_show_next_thread()
endfunction
function! s:NM_show_archive_thread()
- echo 'not implemented'
+ call NM_tag(b:nm_search_words, ['-inbox'])
+ call NM_show_next_thread()
endfunction
function! s:NM_show_mark_read_then_archive_thread()
- call NM_add_remove_tags(b:nm_search_words, '-', ['unread', 'inbox'])
+ call NM_tag(b:nm_search_words, ['-unread', '-inbox'])
call NM_show_next_thread()
endfunction
@@ -555,7 +565,8 @@ function! s:NM_show_advance_marking_read_and_archiving()
let filter = NM_combine_tags('tag:', advance_tags, 'OR', '()')
\ + ['AND']
\ + NM_combine_tags('', ids, 'OR', '()')
- call NM_add_remove_tags(filter, '-', advance_tags)
+ call map(advance_tags, '"+" . v:val')
+ call NM_tag(filter, advance_tags)
call NM_show_next(1, 1)
return
endif
@@ -574,7 +585,8 @@ function! s:NM_show_advance_marking_read_and_archiving()
" do this last to hide the latency
let filter = NM_combine_tags('tag:', advance_tags, 'OR', '()')
\ + ['AND', msg_top['id']]
- call NM_add_remove_tags(filter, '-', advance_tags)
+ call map(advance_tags, '"-" . v:val')
+ call NM_tag(filter, advance_tags)
endif
return
endif
@@ -935,71 +947,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
@@ -1069,11 +1030,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)
@@ -1231,13 +1190,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
@@ -1308,12 +1270,11 @@ function! s:NM_search_expand(arg)
let b:nm_prev_bufnr = prev_bufnr
endfunction
-function! s:NM_add_remove_tags(filter, prefix, tags)
+function! s:NM_tag(filter, tags)
let filter = len(a:filter) ? a:filter : [NM_search_thread_id()]
if !len(filter)
throw '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, '--')