X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=vim%2Fplugin%2Fnotmuch.vim;h=ade2e45df9a168d4fc09f611e4b04e05be94d4c9;hp=b4eeb416ce608ad58b31883639d1f8a03bd76141;hb=e2fd1d9970d5ad61017a307ab133990150192d37;hpb=4c9ddb9ac152df442c6971e4448b0839179a5c66 diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index b4eeb416..ade2e45d 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -351,12 +351,15 @@ function! s:NM_search_thread_id() if !exists('b:nm_raw_lines') echoe 'no b:nm_raw_lines' return '' - else - let line = line('.') - let info = b:nm_raw_lines[line-1] - let what = split(info, '\s\+')[0] - return what endif + let mnum = line('.') - 1 + if len(b:nm_raw_lines) <= mnum + return '' + endif + echo 'len=' . string(len(b:nm_raw_lines)) . ' mnum=' . string(mnum) + let info = b:nm_raw_lines[mnum] + let what = split(info, '\s\+')[0] + return what endfunction function! s:NM_search_add_remove_tags(prompt, prefix, intags) @@ -494,8 +497,65 @@ function! s:NM_show_remove_tag() echo 'not implemented' endfunction +" if entire message is not visible scroll down 1/2 page or less to get to the bottom of message +" otherwise go to next message +" any message that is viewed entirely has inbox and unread tags removed function! s:NM_show_advance_marking_read_and_archiving() - echo 'not implemented' + let advance_tags = ['unread', 'inbox'] + + let vis_top = line('w0') + let vis_bot = line('w$') + + let msg_top = NM_show_get_message_for_line(vis_top) + if !has_key(msg_top,'id') + echo "No top visible message." + endif + + " if the top message is the last message, just expunge the entire thread and move on + if msg_top['end'] == line('$') + let ids = [] + for msg in b:nm_raw_info['msgs'] + if has_key(msg,'match') && msg['match'] != '0' + if len(ids) + call add(ids, 'OR') + endif + call add(ids, msg['id']) + endif + endfor + + let filter = ['('] + advance_tags + [')', 'AND', '('] + ids + [')'] + call NM_add_remove_tags(filter, '-', advance_tags) + call NM_show_next(1, 1) + return + endif + + let msg_bot = NM_show_get_message_for_line(vis_bot) + if !has_key(msg_bot,'id') + echo "No bottom visible message." + endif + + " 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' + redraw + " do this last to hide the latency + let filter = ['('] + advance_tags + [')', 'AND', msg_top['id']] + call NM_add_remove_tags(filter, '-', advance_tags) + endif + return + endif + + " entire message does not fit on the screen, scroll down to bottom, max 1/2 screen + let jmp = winheight(winnr()) / 2 + let max = msg_bot['end'] - vis_bot + if jmp > max + let jmp = max + endif + exec printf('norm %dGzt', vis_top + jmp) + return endfunction function! s:NM_show_pipe_message() @@ -858,14 +918,12 @@ function! s:NM_add_remove_tags(filter, prefix, tags) if !len(filter) echoe 'Eeek! I couldn''t find the thead id!' endif - echo 'filter = ' . string(filter) . ' ... ' . string(type(filter)) call map(a:tags, 'a:prefix . v:val') - " TODO: handle errors let args = ['tag'] call extend(args, a:tags) call add(args, '--') call extend(args, filter) - echo 'NUM_run( ' . string(args) . ' )' + " TODO: handle errors call NM_run(args) endfunction