diff --git a/vim/README b/vim/README index c55875b1..1ed2c424 100644 --- a/vim/README +++ b/vim/README @@ -25,4 +25,5 @@ Buffer types: Keybindings: q - return to search display + ^n - next message diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index 6e1f8b14..94eb0bba 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -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,7 +111,26 @@ 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() +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 " s:NM_cmd_show_parse returns the following dictionary: