Add a few changes to moving between threads: - It supports 'scrolloff' so that if you have this set it will move the buffer and cursor so the next/prev email starts at the top of the screen. - It adds the ability to use shift-tab to go to the previous msg in the thread. Ian --- Remove spurious vim_puts. vim/notmuch.vim | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/vim/notmuch.vim b/vim/notmuch.vim index 331e930..bd007b1 100644 --- a/vim/notmuch.vim +++ b/vim/notmuch.vim @@ -39,6 +39,7 @@ let g:notmuch_show_maps = { \ 'p': 'show_save_patches()', \ 'r': 'show_reply()', \ '?': 'show_info()', + \ '<S-Tab>': 'show_prev_msg()', \ '<Tab>': 'show_next_msg()', \ 'c': 'compose()', \ } @@ -113,6 +114,21 @@ EOF call s:kill_this_buffer() endfunction +function! s:show_prev_msg() +ruby << EOF + r, c = $curwin.cursor + n = $curbuf.line_number + i = $messages.index { |m| n >= m.start && n <= m.end } + m = $messages[i - 1] if i > 0 + if m + r = m.body_start + 1 + scrolloff = VIM::evaluate("&scrolloff") + VIM::command("normal #{m.start + scrolloff}zt") + $curwin.cursor = r + scrolloff, c + end +EOF +endfunction + function! s:show_next_msg() ruby << EOF r, c = $curwin.cursor @@ -121,8 +137,9 @@ ruby << EOF m = $messages[i + 1] if m r = m.body_start + 1 - VIM::command("normal #{m.start}zt") - $curwin.cursor = r, c + scrolloff = VIM::evaluate("&scrolloff") + VIM::command("normal #{m.start + scrolloff}zt") + $curwin.cursor = r + scrolloff, c end EOF endfunction -- 1.9.3