X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=vim%2Fplugin%2Fnotmuch.vim;h=c5655617c862fcbd6da463c58fc0b3397ee4de08;hp=daff4aab120dcb9cce5c0c1e3c858ac95de56e8c;hb=16a00de92421e1397e5089d9e9f41b44f4f51c22;hpb=efa9df2d49b522cc981dc1ab0637219047753483 diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index daff4aab..c5655617 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -105,6 +105,7 @@ let s:notmuch_compose_headers_defaults = [ " --- --- bindings for folders mode {{{2 let g:notmuch_folders_maps = { + \ 'm': ':call NM_new_mail()', \ 's': ':call NM_search_prompt()', \ 'q': ':call NM_kill_this_buffer()', \ '=': ':call NM_folders_refresh_view()', @@ -136,11 +137,12 @@ let g:notmuch_show_maps = { \ '': ':call NM_show_next(1, 0)', \ '': ':call NM_search_expand('''')', \ 'q': ':call NM_kill_this_buffer()', + \ 's': ':call NM_search_prompt()', \ \ 'b': ':call NM_show_fold_toggle(''b'', ''bdy'', !g:notmuch_show_fold_bodies)', \ 'c': ':call NM_show_fold_toggle(''c'', ''cit'', !g:notmuch_show_fold_citations)', \ 'h': ':call NM_show_fold_toggle(''h'', ''hdr'', !g:notmuch_show_fold_headers)', - \ 's': ':call NM_show_fold_toggle(''s'', ''sig'', !g:notmuch_show_fold_signatures)', + \ 'i': ':call NM_show_fold_toggle(''s'', ''sig'', !g:notmuch_show_fold_signatures)', \ \ 'a': ':call NM_show_archive_thread()', \ 'A': ':call NM_show_mark_read_then_archive_thread()', @@ -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, NM_search_thread_id()) + call add(cmd, 'AND') + call extend(cmd, NM_get_search_words()) + + let data = NM_run(cmd) + let lines = split(data, "\n") + call 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, NM_show_message_id()) + call add(cmd, 'AND') + call extend(cmd, NM_get_search_words()) + + let data = NM_run(cmd) + let lines = split(data, "\n") + call 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 %s :call NM_show_fold_toggle(''%s'', ''%s'', %d)', a:key, a:key, a:type, !a:fold) endfunction @@ -856,13 +882,7 @@ endfunction " --- implement compose screen {{{1 function! s:NM_cmd_compose(words, body_lines) - let lines = !g:notmuch_compose_header_help ? [] : [ - \ 'Notmuch-Help: Type in your message here; to help you use these bindings:', - \ 'Notmuch-Help: ,a - attach a file', - \ 'Notmuch-Help: ,s - send the message (Notmuch-Help lines will be removed)', - \ 'Notmuch-Help: ,q - abort the message', - \ 'Notmuch-Help: - skip through header lines', - \ ] + let lines = [] let start_on_line = 0 let hdrs = { } @@ -900,7 +920,7 @@ function! s:NM_cmd_compose(words, body_lines) endif endfor - call extend(lines, [ '', '' ]) + call add(lines, '') if !start_on_line let start_on_line = len(lines) + 1 endif @@ -908,25 +928,10 @@ function! s:NM_cmd_compose(words, body_lines) if len(a:body_lines) call extend(lines, a:body_lines) else - call add(lines, '') + call extend(lines, [ '', '' ]) endif - call extend(lines, g:notmuch_signature) - let prev_bufnr = bufnr('%') - setlocal bufhidden=hide - call NM_newFileBuffer(g:notmuch_compose_temp_file_dir, '%s.mail', - \ 'compose', lines) - setlocal bufhidden=hide - let b:nm_prev_bufnr = prev_bufnr - - call NM_set_map('n', g:notmuch_compose_nmaps) - call NM_set_map('i', g:notmuch_compose_imaps) - - call cursor(start_on_line, strlen(start_on_line) + 1) - if g:notmuch_compose_insert_mode_start - startinsert! - endif - echo 'Type your message, use to jump to next header and then body.' + call NM_newComposeBuffer(lines, start_on_line) endfunction function! s:NM_compose_send() @@ -959,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'] @@ -993,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) @@ -1117,6 +1126,50 @@ function! s:NM_newFileBuffer(fdir, fname, type, lines) let b:nm_type = a:type endfunction +function! s:NM_newComposeBuffer(lines, start_on_line) + let lines = a:lines + let start_on_line = a:start_on_line + let real_hdr_start = 1 + if g:notmuch_compose_header_help + let help_lines = [ + \ 'Notmuch-Help: Type in your message here; to help you use these bindings:', + \ 'Notmuch-Help: ,a - attach a file', + \ 'Notmuch-Help: ,s - send the message (Notmuch-Help lines will be removed)', + \ 'Notmuch-Help: ,q - abort the message', + \ 'Notmuch-Help: - skip through header lines', + \ ] + call extend(lines, help_lines, 0) + let real_hdr_start = len(help_lines) + if start_on_line > 0 + let start_on_line = start_on_line + len(help_lines) + endif + endif + call extend(lines, g:notmuch_signature) + + + let prev_bufnr = bufnr('%') + setlocal bufhidden=hide + call NM_newFileBuffer(g:notmuch_compose_temp_file_dir, '%s.mail', + \ 'compose', lines) + setlocal bufhidden=hide + let b:nm_prev_bufnr = prev_bufnr + + call NM_set_map('n', g:notmuch_compose_nmaps) + call NM_set_map('i', g:notmuch_compose_imaps) + + 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 NM_compose_next_entry_area() + endif + + if g:notmuch_compose_insert_mode_start + startinsert! + endif + echo 'Type your message, use to jump to next header and then body.' +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, @@ -1204,7 +1257,7 @@ endfunction " --- external mail handling helpers {{{1 function! s:NM_new_mail() - echo 'not implemented' + call NM_cmd_compose([], []) endfunction " --- tag manipulation helpers {{{1 @@ -1213,7 +1266,7 @@ endfunction " example: " NM_combine_tags('tag:', ['one', 'two', 'three'], 'OR', '()') " -> ['(', 'tag:one', 'OR', 'tag:two', 'OR', 'tag:three', ')'] -function s:NM_combine_tags(word_prefix, words, separator, brackets) +function! s:NM_combine_tags(word_prefix, words, separator, brackets) let res = [] for word in a:words if len(res) && strlen(a:separator) @@ -1337,7 +1390,7 @@ function! s:NM_set_map(type, maps) exec printf('%snoremap %s %s', a:type, key, code) endfor " --- this is a hack for development :) - nnoremap ,nmr :source ~/.vim/plugin/notmuch.vim:call NotMuch('') + nnoremap ,nmr :runtime! plugin/notmuch.vim endfunction " --- command handler {{{1