X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=vim%2Fplugin%2Fnotmuch.vim;h=a57b2ae8a1a9b16db3663e49dd36c8fde5db1f04;hp=90678b93caf6430052d29452c36ffba0b08f83f8;hb=c6314fa2347fff97436acc0591cc4e6e557a19d6;hpb=905a08788e0e1620ff4202269af2a8e4666767e1 diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index 90678b93..a57b2ae8 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -29,6 +29,28 @@ if !exists('g:notmuch_search_reverse') let g:notmuch_search_reverse = 1 endif +" --- used to match output of notmuch + +let s:notmuch_show_message_begin_regexp = '^ message{' +let s:notmuch_show_message_end_regexp = '^ message}' +let s:notmuch_show_header_begin_regexp = '^ header{' +let s:notmuch_show_header_end_regexp = '^ header}' +let s:notmuch_show_body_begin_regexp = '^ body{' +let s:notmuch_show_body_end_regexp = '^ body}' +let s:notmuch_show_attachment_begin_regexp = '^ attachment{' +let s:notmuch_show_attachment_end_regexp = '^ attachment}' +let s:notmuch_show_part_begin_regexp = '^ part{' +let s:notmuch_show_part_end_regexp = '^ part}' +let s:notmuch_show_marker_regexp = '^ \\(message\\|header\\|body\\|attachment\\|part\\)[{}].*$' + +let s:notmuch_show_id_regexp = '\(id:[^ ]*\)' +let s:notmuch_show_depth_regexp = ' depth:\([0-9]*\) ' +let s:notmuch_show_filename_regexp = 'filename:\(.*\)$' +let s:notmuch_show_tags_regexp = '(\([^)]*\))$' + +let s:notmuch_show_signature_regexp = '^\(-- \?\|_\+\)$' +let s:notmuch_show_signature_lines_max = 12 + " --- implement search screen function! s:NM_cmd_search(words) @@ -74,9 +96,36 @@ function! s:NM_cmd_show(words) setlocal bufhidden=delete let b:nm_raw_data = data + call s:NM_cmd_show_mkfolds() + exec printf("nnoremap q :b %d", bufnr) endfunction +function! s:NM_cmd_show_mkfolds() + let modetype = '' + let modeline = -1 + let lnum = 1 + while lnum <= line('$') + let line = getline(lnum) + if modetype == '' + if match(line, s:notmuch_show_signature_regexp) != -1 + let modetype = 'sig' + let modeline = lnum + echo "start=" . modeline + endif + elseif modetype == 'sig' + if (lnum - modeline) > s:notmuch_show_signature_lines_max + let modetype = '' + elseif match(line, s:notmuch_show_part_end_regexp) != -1 + exec printf('%d,%dfold', modeline, lnum) + let modetype = '' + endif + endif + + let lnum = lnum + 1 + endwhile +endfunction + " --- helper functions