X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=vim%2Fplugin%2Fnotmuch.vim;h=d2650855092e42beef62548481b69a16a04b8b01;hp=e13ea9f7fd1c3cc5e61ba52d4fe408c7dc4938d3;hb=be19c210ca1cb7e4fe1de5ab5847fabbedbacc9a;hpb=0210f960f10db27ea2556d61340bca24302baf56 diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index e13ea9f7..d2650855 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -98,7 +98,7 @@ let g:notmuch_search_maps = { \ 'o': ':call NM_search_toggle_order()', \ 'r': ':call NM_search_reply_to_thread()', \ 's': ':call NM_search_prompt()', - \ 'S': ':call NM_search_edit()', + \ ',s': ':call NM_search_edit()', \ 't': ':call NM_search_filter_by_tag()', \ 'q': ':call NM_kill_this_buffer()', \ '+': ':call NM_search_add_tags([])', @@ -130,7 +130,7 @@ let g:notmuch_show_maps = { \ \ 'r': ':call NM_show_reply()', \ 'm': ':call NM_new_mail()', - \ '?': ':echo NM_show_thread_id() . '' '' . NM_show_message_id()', + \ '?': ':echo NM_show_message_id() . '' @ '' . join(NM_show_search_words())', \ } @@ -218,7 +218,7 @@ function! s:NM_cmd_search_fmtline(line) if strlen(from) >= max let from = substitute(m[3][0:max-4], '[^A-Za-z1-9_]*$', '', '') . '...' endif - return printf('%s %-20s | %s (%s)', m[2], from, m[4], m[5]) + return printf('%-20s %-20s | %s (%s)', m[2], from, m[4], m[5]) endfunction function! s:NM_cmd_search_mksyntax() syntax clear nmSearchFrom @@ -242,13 +242,13 @@ function! s:NM_search_prompt() else let tags = s:notmuch_initial_search_words_defaults endif + let prev_bufnr = bufnr('%') if b:nm_type == 'search' " TODO: we intend to replace the current buffer, " ... maybe we could just clear it let prev_bufnr = b:nm_prev_bufnr setlocal bufhidden=delete else - let prev_bufnr = bufnr('%') setlocal bufhidden=hide endif call NM_cmd_search(tags) @@ -271,14 +271,14 @@ function! s:NM_search_archive_thread() endfunction function! s:NM_search_filter() - call NM_search_filter_helper('Filter: ', '') + call NM_search_filter_helper('Filter: ', '', '') endfunction function! s:NM_search_filter_by_tag() - call NM_search_filter_helper('Filter Tag(s): ', 'tag:') + call NM_search_filter_helper('Filter Tag(s): ', 'tag:', 'and') endfunction -function! s:NM_search_filter_helper(prompt, prefix) +function! s:NM_search_filter_helper(prompt, prefix, joiner) " TODO: input() can support completion let text = input(a:prompt) if !strlen(text) @@ -286,9 +286,17 @@ function! s:NM_search_filter_helper(prompt, prefix) endif let tags = split(text) - map(tags, 'and a:prefix . v:val') - let tags = b:nm_search_words + tags - echo tags + if strlen(a:prefix) + call map(tags, 'a:prefix . v:val') + endif + if strlen(a:joiner) + let idx = len(tags) - 1 + while idx > 0 + call insert(tags, a:joiner, idx) + let idx = idx - 1 + endwhile + endif + let tags = b:nm_search_words + ['and', '('] + tags + [')'] let prev_bufnr = bufnr('%') setlocal bufhidden=hide @@ -318,8 +326,10 @@ endfunction function! s:NM_search_refresh_view() let lno = line('.') + let prev_bufnr = b:nm_prev_bufnr setlocal bufhidden=delete call NM_cmd_search(b:nm_search_words) + let b:nm_prev_bufnr = prev_bufnr " FIXME: should find the line of the thread we were on if possible exec printf('norm %dG', lno) endfunction @@ -496,7 +506,7 @@ function! s:NM_show_message_id() let info = b:nm_raw_info let lnum = line('.') for msg in info['msgs'] - if lnum < msg['start'] + if lnum > msg['end'] continue endif @@ -505,6 +515,14 @@ function! s:NM_show_message_id() return '' endfunction +function! s:NM_show_search_words() + if !exists('b:nm_words') + echoe 'no b:nm_words' + return [] + endif + return b:nm_words +endfunction + function! s:NM_show_fold_toggle(key, type, fold) let info = b:nm_raw_info let act = 'open' @@ -747,8 +765,15 @@ function! s:NM_newBuffer(type, content) let b:nm_type = a:type endfunction +function! s:NM_shell_escape(word) + let word = substitute(a:word, '''', '\\''', 'g') + return '''' . word . '''' +endfunction + function! s:NM_run(args) - let cmd = g:notmuch_cmd . ' ' . join(a:args) . '< /dev/null' + let words = a: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) @@ -780,7 +805,7 @@ function! s:NM_kill_this_buffer() setlocal bufhidden=delete exec printf(":buffer %d", b:nm_prev_bufnr) else - echo "Nothing to kill." + echo "This is the last buffer; use :q to quit." endif endfunction