X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=vim%2Fplugin%2Fnotmuch.vim;h=968b9aa61fd68330fb78ff54113bfb1de78fcf67;hp=6e1f8b14a8ed7a8f1b25df1c5d52db3aef7810a7;hb=5a2d760067559b3fabf8718d189e815e7e6402da;hpb=010eac8b434eee317b0d28eac9bcf544fc6994d1 diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index 6e1f8b14..968b9aa6 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -53,8 +53,8 @@ let s:notmuch_show_citation_regexp = '^\s*>' let s:notmuch_show_headers = [ 'Subject', 'From' ] -let s:notmuch_show_fold_signatures = 1 -let s:notmuch_show_fold_citations = 1 +let g:notmuch_show_fold_signatures = 1 +let g:notmuch_show_fold_citations = 1 " --- implement search screen @@ -94,7 +94,7 @@ endfunction " --- implement show screen function! s:NM_cmd_show(words) - let bufnr = bufnr('%') + let prev_bufnr = bufnr('%') let data = s:NM_run(['show'] + a:words) let lines = split(data, "\n") @@ -103,6 +103,7 @@ function! s:NM_cmd_show(words) call s:NM_newBuffer('show', join(info['disp'], "\n")) setlocal bufhidden=delete let b:nm_raw_info = info + let b:nm_prev_bufnr = prev_bufnr call s:NM_cmd_show_mkfolds() call s:NM_cmd_show_mksyntax() @@ -110,9 +111,45 @@ function! s:NM_cmd_show(words) setlocal fillchars= setlocal foldcolumn=6 - exec printf("nnoremap q :b %d", bufnr) + exec printf("nnoremap q :b %d", b:nm_prev_bufnr) + nnoremap :call NM_cmd_show_next() + nnoremap c :call NM_cmd_show_fold_toggle('c', 'cit', !g:notmuch_show_fold_citations) + nnoremap s :call NM_cmd_show_fold_toggle('s', 'sig', !g:notmuch_show_fold_signatures) endfunction +function! s:NM_cmd_show_next() + let info = b:nm_raw_info + let lnum = line('.') + let cnt = 0 + for msg in info['msgs'] + let cnt = cnt + 1 + if lnum >= msg['start'] + continue + endif + + exec printf('norm %dG', msg['start']) + norm zz + return + endfor + norm qj + call NM_search_display() +endfunction + +function! s:NM_cmd_show_fold_toggle(key, type, fold) + let info = b:nm_raw_info + let act = 'open' + if a:fold + let act = 'close' + endif + for fld in info['folds'] + if fld[0] == a:type + exec printf('%dfold%s', fld[1], act) + endif + endfor + exec printf('nnoremap %s :call NM_cmd_show_fold_toggle(''%s'', ''%s'', %d)', a:key, a:key, a:type, !a:fold) +endfunction + + " s:NM_cmd_show_parse returns the following dictionary: " 'disp': lines to display " 'msgs': message info dicts { start, end, id, depth, filename, descr, header } @@ -162,7 +199,7 @@ function! s:NM_cmd_show_parse(inlines) endif elseif mode_type == 'cit' if part_end || match(line, s:notmuch_show_citation_regexp) == -1 - let outlnum = len(info['disp']) -1 + let outlnum = len(info['disp']) let foldinfo = [ mode_type, mode_start, outlnum, \ printf('[ %d-line citation. Press "c" to show. ]', outlnum - mode_start) ] let mode_type = '' @@ -292,8 +329,8 @@ function! s:NM_cmd_show_mkfolds() for afold in info['folds'] exec printf('%d,%dfold', afold[1], afold[2]) - if (afold[0] == 'sig' && s:notmuch_show_fold_signatures) - \ || (afold[0] == 'cit' && s:notmuch_show_fold_citations) + if (afold[0] == 'sig' && g:notmuch_show_fold_signatures) + \ || (afold[0] == 'cit' && g:notmuch_show_fold_citations) exec printf('%dfoldclose', afold[1]) else exec printf('%dfoldopen', afold[1])