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
" --- 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")
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()
setlocal fillchars=
setlocal foldcolumn=6
- exec printf("nnoremap <buffer> q :b %d<CR>", bufnr)
+ exec printf("nnoremap <buffer> q :b %d<CR>", b:nm_prev_bufnr)
+ nnoremap <buffer> <C-N> :call <SID>NM_cmd_show_next()<CR>
+ nnoremap <buffer> c :call <SID>NM_cmd_show_fold_toggle('c', 'cit', !g:notmuch_show_fold_citations)<CR>
+ nnoremap <buffer> s :call <SID>NM_cmd_show_fold_toggle('s', 'sig', !g:notmuch_show_fold_signatures)<CR>
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 <SID>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 <buffer> %s :call <SID>NM_cmd_show_fold_toggle(''%s'', ''%s'', %d)<CR>', 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 }
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 = ''
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])
endfor
endfunction
+function! s:NM_cmd_show_mksyntax()
+ let info = b:nm_raw_info
+ let cnt = 0
+ for msg in info['msgs']
+ let cnt = cnt + 1
+ let start = msg['start']
+ let hdr_start = msg['hdr_start']
+ let body_start = msg['body_start']
+ let end = msg['end']
+ exec printf('syntax region nmShowMsg%dDesc start=''\%%%dl'' end=''\%%%dl'' contains=@nmShowMsgDesc', cnt, start, start+1)
+ exec printf('syntax region nmShowMsg%dHead start=''\%%%dl'' end=''\%%%dl'' contains=@nmShowMsgHead', cnt, hdr_start, body_start)
+ exec printf('syntax region nmShowMsg%dBody start=''\%%%dl'' end=''\%%%dl'' contains=@nmShowMsgBody', cnt, body_start, end)
+ endfor
+endfunction
+
function! NM_cmd_show_foldtext()
let foldtext = b:nm_raw_info['foldtext']
return foldtext[v:foldstart]