]> git.notmuchmail.org Git - notmuch/blobdiff - vim/plugin/notmuch.vim
vim: use mailx for sending
[notmuch] / vim / plugin / notmuch.vim
index b8c985812a9e39a34083a68800bf2ff143275337..7b49015c4f7891a9e3c0b63615602fd894dd8ff7 100644 (file)
@@ -118,6 +118,7 @@ let g:notmuch_search_maps = {
         \ '<Enter>':    ':call <SID>NM_search_show_thread(1)<CR>',
         \ '<C-]>':      ':call <SID>NM_search_expand(''<cword>'')<CR>',
         \ 'a':          ':call <SID>NM_search_archive_thread()<CR>',
+        \ 'A':          ':call <SID>NM_search_mark_read_then_archive_thread()<CR>',
         \ 'f':          ':call <SID>NM_search_filter()<CR>',
         \ 'm':          ':call <SID>NM_new_mail()<CR>',
         \ 'o':          ':call <SID>NM_search_toggle_order()<CR>',
@@ -306,11 +307,15 @@ function! s:NM_search_edit()
 endfunction
 
 function! s:NM_search_archive_thread()
-        call <SID>NM_add_remove_tags_on_screen('', '-', ['inbox'])
         call <SID>NM_add_remove_tags([], '-', ['inbox'])
         norm j
 endfunction
 
+function! s:NM_search_mark_read_then_archive_thread()
+        call <SID>NM_add_remove_tags([], '-', ['unread', 'inbox'])
+        norm j
+endfunction
+
 function! s:NM_search_filter()
         call <SID>NM_search_filter_helper('Filter: ', '', '')
 endfunction
@@ -399,7 +404,6 @@ function! s:NM_search_add_remove_tags(prompt, prefix, intags)
                 let tags = a:intags
         endif
         call <SID>NM_add_remove_tags([], a:prefix, tags)
-        call <SID>NM_add_remove_tags_on_screen('', a:prefix, tags)
 endfunction
 
 " --- implement show screen {{{1
@@ -569,7 +573,6 @@ function! s:NM_show_advance_marking_read_and_archiving()
 
         " if entire message fits on the screen, read/archive it, move to the next one
         if msg_top['id'] != msg_bot['id'] || msg_top['end'] <= vis_bot
-                call <SID>NM_add_remove_tags_on_screen(msg_top['start'], '-', advance_tags)
                 exec printf('norm %dG', vis_top)
                 call <SID>NM_show_next(0, 1)
                 if has_key(msg_top,'match') && msg_top['match'] != '0'
@@ -938,71 +941,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
@@ -1325,20 +1277,6 @@ function! s:NM_add_remove_tags(filter, prefix, tags)
         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)