]> git.notmuchmail.org Git - notmuch/blobdiff - vim/plugin/notmuch.vim
vim: make it possible to start a search in show mode
[notmuch] / vim / plugin / notmuch.vim
index ef3260ed085473a0943f9820f86f0994d993a45c..c5655617c862fcbd6da463c58fc0b3397ee4de08 100644 (file)
@@ -105,6 +105,7 @@ let s:notmuch_compose_headers_defaults = [
 " --- --- bindings for folders mode {{{2
 
 let g:notmuch_folders_maps = {
+        \ 'm':          ':call <SID>NM_new_mail()<CR>',
         \ 's':          ':call <SID>NM_search_prompt()<CR>',
         \ 'q':          ':call <SID>NM_kill_this_buffer()<CR>',
         \ '=':          ':call <SID>NM_folders_refresh_view()<CR>',
@@ -136,11 +137,12 @@ let g:notmuch_show_maps = {
         \ '<C-N>':      ':call <SID>NM_show_next(1, 0)<CR>',
         \ '<C-]>':      ':call <SID>NM_search_expand(''<cword>'')<CR>',
         \ 'q':          ':call <SID>NM_kill_this_buffer()<CR>',
+        \ 's':          ':call <SID>NM_search_prompt()<CR>',
         \
         \ 'b':          ':call <SID>NM_show_fold_toggle(''b'', ''bdy'', !g:notmuch_show_fold_bodies)<CR>',
         \ 'c':          ':call <SID>NM_show_fold_toggle(''c'', ''cit'', !g:notmuch_show_fold_citations)<CR>',
         \ 'h':          ':call <SID>NM_show_fold_toggle(''h'', ''hdr'', !g:notmuch_show_fold_headers)<CR>',
-        \ 's':          ':call <SID>NM_show_fold_toggle(''s'', ''sig'', !g:notmuch_show_fold_signatures)<CR>',
+        \ 'i':          ':call <SID>NM_show_fold_toggle(''s'', ''sig'', !g:notmuch_show_fold_signatures)<CR>',
         \
         \ 'a':          ':call <SID>NM_show_archive_thread()<CR>',
         \ 'A':          ':call <SID>NM_show_mark_read_then_archive_thread()<CR>',
@@ -346,7 +348,14 @@ function! s:NM_search_toggle_order()
 endfunction
 
 function! s:NM_search_reply_to_thread()
-        echo 'not implemented'
+        let cmd = ['reply']
+        call add(cmd, <SID>NM_search_thread_id())
+        call add(cmd, 'AND')
+        call extend(cmd, <SID>NM_get_search_words())
+
+        let data = <SID>NM_run(cmd)
+        let lines = split(data, "\n")
+        call <SID>NM_newComposeBuffer(lines, 0)
 endfunction
 
 function! s:NM_search_add_tags(tags)
@@ -498,7 +507,14 @@ function! s:NM_show_previous_message()
 endfunction
 
 function! s:NM_show_reply()
-        echo 'not implemented'
+        let cmd = ['reply']
+        call add(cmd, <SID>NM_show_message_id())
+        call add(cmd, 'AND')
+        call extend(cmd, <SID>NM_get_search_words())
+
+        let data = <SID>NM_run(cmd)
+        let lines = split(data, "\n")
+        call <SID>NM_newComposeBuffer(lines, 0)
 endfunction
 
 function! s:NM_show_view_all_mime_parts()
@@ -624,9 +640,19 @@ function! s:NM_show_fold_toggle(key, type, fold)
                 let act = 'close'
         endif
         for fld in info['folds']
-                if fld[0] == a:type
-                        exec printf('%dfold%s', fld[1], act)
+                if fld[0] != a:type
+                        continue
                 endif
+                "let idx = fld[3]
+                "let msg = info['msgs'][idx]
+                "if has_key(msg,'match') && msg['match'] == '0'
+                "        continue
+                "endif
+                let cls = foldclosed(fld[1])
+                if cls != -1 && cls != fld[1]
+                        continue
+                endif
+                exec printf('%dfold%s', fld[1], act)
         endfor
         exec printf('nnoremap <buffer> %s :call <SID>NM_show_fold_toggle(''%s'', ''%s'', %d)<CR>', a:key, a:key, a:type, !a:fold)
 endfunction
@@ -938,9 +964,7 @@ function! s:NM_compose_send()
                 let lnum = lnum + 1
                 let line = getline(lnum)
         endwhile
-        let body_starts = lnum + 1
-        exec printf('0,%dd', body_starts)
-        write
+        let body_starts = lnum
 
         "[-a header] [-b bcc-addr] [-c cc-addr] [-s subject] to-addr
         let cmd = ['mail']
@@ -972,6 +996,12 @@ function! s:NM_compose_send()
         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)
+        write
+
         call map(cmd, 's:NM_shell_escape(v:val)')
         let cmdtxt = join(cmd) . '< ' . fname
         let out = system(cmdtxt)
@@ -1130,7 +1160,7 @@ function! s:NM_newComposeBuffer(lines, start_on_line)
         if start_on_line > 0 && start_on_line <= len(lines)
                 call cursor(start_on_line, strlen(getline(start_on_line)) + 1)
         else
-                call cursor(real_hdr_start, strlen(getline(real_hdr_start) + 1)
+                call cursor(real_hdr_start, strlen(getline(real_hdr_start)) + 1)
                 call <SID>NM_compose_next_entry_area()
         endif
 
@@ -1227,7 +1257,7 @@ endfunction
 " --- external mail handling helpers {{{1
 
 function! s:NM_new_mail()
-        echo 'not implemented'
+        call <SID>NM_cmd_compose([], [])
 endfunction
 
 " --- tag manipulation helpers {{{1