X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=vim%2Fplugin%2Fnotmuch.vim;h=01ee10f8a4b64ff0a1e105c94cb9087475f6bd9e;hb=c639ffae1e3959252b2a3fca13d3213c27e14b85;hp=b415f500a167619151afc3d623542a8aabb7efaa;hpb=c835e2a5059ebc10580f8ae2a79c4f0f81374798;p=notmuch diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index b415f500..01ee10f8 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -178,7 +178,7 @@ let g:notmuch_compose_imaps = { function! s:NM_cmd_folders(words) if len(a:words) - throw 'Not exapecting any arguments for folders command.' + throw 'Not expecting any arguments for folders command.' endif let cmd = ['count'] let disp = [] @@ -243,26 +243,23 @@ function! s:NM_cmd_search(words) let b:nm_raw_lines = lines let b:nm_search_words = a:words - call NM_cmd_search_mksyntax() call NM_set_map('n', g:notmuch_search_maps) setlocal cursorline setlocal nowrap endfunction function! s:NM_cmd_search_fmtline(line) - let m = matchlist(a:line, '^\(thread:\S\+\)\s\([^]]\+\]\) \([^;]\+\); \(.*\) (\([^(]*\))$') + let m = matchlist(a:line, '^\(thread:\S\+\)\s\(.\{12\}\) \[\(\d\+\)/\d\+\] \([^;]\+\); \%(\[[^\[]\+\] \)*\(.*\) (\([^(]*\))$') if !len(m) return 'ERROR PARSING: ' . a:line endif let max = g:notmuch_search_from_column_width - let from = m[3] - if strlen(from) >= max - let from = substitute(m[3][0:max-4], '[^A-Za-z1-9_]*$', '', '') . '...' - endif - return printf('%-20s %-20s | %s (%s)', m[2], from, m[4], m[5]) -endfunction -function! s:NM_cmd_search_mksyntax() - syntax clear nmSearchFrom - exec printf('syntax match nmSearchFrom /\(\] \)\@<=.\{%d\}/ oneline contained', g:notmuch_search_from_column_width) + let flist = [] + for at in split(m[4], ", ") + let p = min([stridx(at, "."), stridx(at, "@")]) + call insert(flist, tolower(at[0:p - 1])) + endfor + let from = join(flist, ", ") + return printf("%-12s %3s %-20.20s | %s (%s)", m[2], m[3], from, m[5], m[6]) endfunction " --- --- search screen action functions {{{2 @@ -275,6 +272,7 @@ function! s:NM_search_show_thread(everything) call add(words, ')') endif call NM_cmd_show(words) + let b:nm_show_everything = a:everything endfunction function! s:NM_search_prompt() @@ -308,7 +306,6 @@ function! s:NM_search_edit() endfunction function! s:NM_search_archive_thread() - call NM_add_remove_tags_on_screen('', '-', ['inbox']) call NM_add_remove_tags([], '-', ['inbox']) norm j endfunction @@ -401,14 +398,13 @@ function! s:NM_search_add_remove_tags(prompt, prefix, intags) let tags = a:intags endif call NM_add_remove_tags([], a:prefix, tags) - call NM_add_remove_tags_on_screen('', a:prefix, tags) endfunction " --- implement show screen {{{1 function! s:NM_cmd_show(words) let prev_bufnr = bufnr('%') - let data = s:NM_run(['show'] + a:words) + let data = s:NM_run(['show', '--entire-thread'] + a:words) let lines = split(data, "\n") let info = s:NM_cmd_show_parse(lines) @@ -430,6 +426,7 @@ function! s:NM_cmd_show(words) endfunction function! s:NM_show_previous(can_change_thread, find_matching) + let everything = exists('b:nm_show_everything') ? b:nm_show_everything : 0 let info = b:nm_raw_info let lnum = line('.') for msg in reverse(copy(info['msgs'])) @@ -450,7 +447,7 @@ function! s:NM_show_previous(can_change_thread, find_matching) call NM_kill_this_buffer() if line('.') > 1 norm k - call NM_search_show_thread() + call NM_search_show_thread(everything) norm G call NM_show_previous(0, a:find_matching) else @@ -479,10 +476,11 @@ function! s:NM_show_next(can_change_thread, find_matching) endfunction function! s:NM_show_next_thread() + let everything = exists('b:nm_show_everything') ? b:nm_show_everything : 0 call NM_kill_this_buffer() if line('.') != line('$') norm j - call NM_search_show_thread() + call NM_search_show_thread(everything) else echo 'No more messages.' endif @@ -493,7 +491,8 @@ function! s:NM_show_archive_thread() endfunction function! s:NM_show_mark_read_then_archive_thread() - echo 'not implemented' + call NM_add_remove_tags(b:nm_search_words, '-', ['unread', 'inbox']) + call NM_show_next_thread() endfunction function! s:NM_show_mark_read_then_next_open_message() @@ -568,7 +567,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 NM_add_remove_tags_on_screen(msg_top['start'], '-', advance_tags) exec printf('norm %dG', vis_top) call NM_show_next(0, 1) if has_key(msg_top,'match') && msg_top['match'] != '0' @@ -1324,20 +1322,6 @@ function! s:NM_add_remove_tags(filter, prefix, tags) call 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)