]> git.notmuchmail.org Git - notmuch/blobdiff - vim/plugin/notmuch.vim
vim: use sendmail directly
[notmuch] / vim / plugin / notmuch.vim
index 7b49015c4f7891a9e3c0b63615602fd894dd8ff7..6b82abedbfe2b9a655021bd6e7d99735f25356fa 100644 (file)
 " along with Notmuch.  If not, see <http://www.gnu.org/licenses/>.
 "
 " Authors: Bart Trojanowski <bart@jukie.net>
-
+" Contributors: Felipe Contreras <felipe.contreras@gmail.com>,
+"   Peter Hartman <peterjohnhartman@gmail.com>
+"
 " --- configuration defaults {{{1
 
 let s:notmuch_defaults = {
         \ 'g:notmuch_cmd':                           'notmuch'                    ,
+        \ 'g:notmuch_sendmail':                      'sendmail'                   ,
         \ 'g:notmuch_debug':                         0                            ,
         \
         \ 'g:notmuch_search_newest_first':           1                            ,
@@ -307,12 +310,12 @@ function! s:NM_search_edit()
 endfunction
 
 function! s:NM_search_archive_thread()
-        call <SID>NM_add_remove_tags([], '-', ['inbox'])
+        call <SID>NM_tag([], ['-inbox'])
         norm j
 endfunction
 
 function! s:NM_search_mark_read_then_archive_thread()
-        call <SID>NM_add_remove_tags([], '-', ['unread', 'inbox'])
+        call <SID>NM_tag([], ['-unread', '-inbox'])
         norm j
 endfunction
 
@@ -403,7 +406,8 @@ function! s:NM_search_add_remove_tags(prompt, prefix, intags)
         else
                 let tags = a:intags
         endif
-        call <SID>NM_add_remove_tags([], a:prefix, tags)
+        call map(tags, 'a:prefix . v:val')
+        call <SID>NM_tag([], tags)
 endfunction
 
 " --- implement show screen {{{1
@@ -493,11 +497,12 @@ function! s:NM_show_next_thread()
 endfunction
 
 function! s:NM_show_archive_thread()
-        echo 'not implemented'
+        call <SID>NM_tag(b:nm_search_words, ['-inbox'])
+        call <SID>NM_show_next_thread()
 endfunction
 
 function! s:NM_show_mark_read_then_archive_thread()
-        call <SID>NM_add_remove_tags(b:nm_search_words, '-', ['unread', 'inbox'])
+        call <SID>NM_tag(b:nm_search_words, ['-unread', '-inbox'])
         call <SID>NM_show_next_thread()
 endfunction
 
@@ -561,7 +566,8 @@ function! s:NM_show_advance_marking_read_and_archiving()
                 let filter = <SID>NM_combine_tags('tag:', advance_tags, 'OR', '()')
                          \ + ['AND']
                          \ + <SID>NM_combine_tags('', ids, 'OR', '()')
-                call <SID>NM_add_remove_tags(filter, '-', advance_tags)
+                call map(advance_tags, '"+" . v:val')
+                call <SID>NM_tag(filter, advance_tags)
                 call <SID>NM_show_next(1, 1)
                 return
         endif
@@ -580,7 +586,8 @@ function! s:NM_show_advance_marking_read_and_archiving()
                         " do this last to hide the latency
                         let filter = <SID>NM_combine_tags('tag:', advance_tags, 'OR', '()')
                                  \ + ['AND', msg_top['id']]
-                        call <SID>NM_add_remove_tags(filter, '-', advance_tags)
+                        call map(advance_tags, '"-" . v:val')
+                        call <SID>NM_tag(filter, advance_tags)
                 endif
                 return
         endif
@@ -943,18 +950,19 @@ function! s:NM_compose_send()
         let line = getline(lnum)
         let lst_hdr = ''
         while match(line, '^$') == -1
-                if match(line, '^Notmuch-Help:') == -1
+                if !exists("hdr_starts") && 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 - 1
 
+        call append(body_starts, 'Date: ' . strftime('%a, %d %b %Y %H:%M:%S %z'))
         exec printf(':0,%dd', hdr_starts)
         write
 
-        let cmdtxt = 'mailx -t < ' . fname
+        let cmdtxt = g:notmuch_sendmail . ' -t < ' . fname
         let out = system(cmdtxt)
         let err = v:shell_error
         if err
@@ -1024,11 +1032,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)
@@ -1186,13 +1192,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
@@ -1263,12 +1272,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 : [<SID>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, '--')