first attempt to fold the message nicely

This commit is contained in:
Bart Trojanowski 2009-11-19 16:20:16 -05:00
parent 71bdd859dc
commit 89dc64726f
3 changed files with 60 additions and 10 deletions

View file

@ -99,17 +99,53 @@ function! s:NM_cmd_show(words)
let b:nm_raw_data = data let b:nm_raw_data = data
call s:NM_cmd_show_mkfolds() call s:NM_cmd_show_mkfolds()
setlocal foldtext=NM_cmd_show_foldtext()
setlocal fillchars=
setlocal foldcolumn=5
exec printf("nnoremap <buffer> q :b %d<CR>", bufnr) exec printf("nnoremap <buffer> q :b %d<CR>", bufnr)
endfunction endfunction
function! s:NM_cmd_show_mkfolds() function! s:NM_cmd_show_mkfolds()
let msg_start = -1
let hdr_start = -1
let bdy_start = -1
let prt_start = -1
let modetype = '' let modetype = ''
let modeline = -1 let modeline = -1
let lnum = 1 let lnum = 1
let b:nm_fold_data = {}
while lnum <= line('$') while lnum <= line('$')
let line = getline(lnum) let line = getline(lnum)
if modetype == '' if match(line, s:notmuch_show_message_begin_regexp) != -1
let msg_start = lnum
elseif match(line, s:notmuch_show_message_end_regexp) != -1
exec printf('%d,%dfold', msg_start, lnum)
exec printf('%dfoldopen', msg_start)
let b:nm_fold_data[msg_start] = ['msg', getline(msg_start)]
elseif match(line, s:notmuch_show_header_begin_regexp) != -1
let hdr_start = lnum
elseif match(line, s:notmuch_show_header_end_regexp) != -1
exec printf('%d,%dfold', hdr_start, lnum)
exec printf('%dfoldclose', hdr_start)
let b:nm_fold_data[hdr_start] = ['hdr', '* ' . getline(hdr_start+1) . ' [ Press "h" for full header. ]']
elseif match(line, s:notmuch_show_body_begin_regexp) != -1
let bdy_start = lnum
elseif match(line, s:notmuch_show_body_end_regexp) != -1
exec printf('%d,%dfold', bdy_start, lnum)
exec printf('%dfoldopen', bdy_start)
let b:nm_fold_data[bdy_start] = ['bdy', getline(bdy_start)]
elseif match(line, s:notmuch_show_part_begin_regexp) != -1
let prt_start = lnum
elseif match(line, s:notmuch_show_part_end_regexp) != -1
exec printf('%d,%dfold', prt_start, lnum)
exec printf('%dfoldopen', prt_start)
let b:nm_fold_data[msg_start] = ['msg', getline(prt_start)]
elseif modetype == ''
if match(line, s:notmuch_show_signature_regexp) != -1 if match(line, s:notmuch_show_signature_regexp) != -1
let modetype = 'sig' let modetype = 'sig'
let modeline = lnum let modeline = lnum
@ -120,13 +156,16 @@ function! s:NM_cmd_show_mkfolds()
elseif modetype == 'cit' elseif modetype == 'cit'
if match(line, s:notmuch_show_citation_regexp) == -1 if match(line, s:notmuch_show_citation_regexp) == -1
exec printf('%d,%dfold', modeline, lnum) exec printf('%d,%dfold', modeline, lnum)
let b:nm_fold_data[modeline] = [modetype, printf('[ %d-line citation. Press "c" to show. ]', lnum - modeline)]
let modetype = '' let modetype = ''
endif endif
elseif modetype == 'sig' elseif modetype == 'sig'
if (lnum - modeline) > s:notmuch_show_signature_lines_max if (lnum - modeline) > s:notmuch_show_signature_lines_max
let modetype = '' let modetype = ''
elseif match(line, s:notmuch_show_part_end_regexp) != -1 elseif match(line, s:notmuch_show_part_end_regexp) != -1
exec printf('%d,%dfold', modeline, lnum) let modeline2 = lnum - 1
exec printf('%d,%dfold', modeline, modeline2)
let b:nm_fold_data[modeline] = [modetype, printf('[ %d-line signature. Press "s" to show. ]', modeline2 - modeline)]
let modetype = '' let modetype = ''
endif endif
endif endif
@ -135,6 +174,10 @@ function! s:NM_cmd_show_mkfolds()
endwhile endwhile
endfunction endfunction
function! NM_cmd_show_foldtext()
return b:nm_fold_data[v:foldstart][1]
endfunction
" --- helper functions " --- helper functions

View file

@ -2,10 +2,10 @@
" TODO: I cannot figure out why nmSearchTags is not matching anything :( " TODO: I cannot figure out why nmSearchTags is not matching anything :(
syntax region nmSearchDate start="^" end="\%13v" syntax region nmSearchDate start='^' end='\%13v'
syntax region nmSearchCountAndFrom start="\%14v\[" end=";" oneline contains=nmSearchCount,nmSearchFrom syntax region nmSearchCountAndFrom start='\%14v\[' end=';' oneline contains=nmSearchCount,nmSearchFrom
syntax match nmSearchFrom ' .*;' contained syntax match nmSearchFrom ' .*;' contained
syntax region nmSearchCount start="\%14v\[" end="\]" contained contains=nmSearchCountZero,nmSearchCountSome,nmSearchCountAll syntax region nmSearchCount start='\%14v\[' end='\]' contained contains=nmSearchCountZero,nmSearchCountSome,nmSearchCountAll
syntax match nmSearchCountZero '0/\(\d\+\)' contained syntax match nmSearchCountZero '0/\(\d\+\)' contained
syntax match nmSearchCountSome '\([1-9]\d*\)/\(\d\+\)' contained syntax match nmSearchCountSome '\([1-9]\d*\)/\(\d\+\)' contained
syntax match nmSearchCountAll '\(\d\+\)/\1' contained syntax match nmSearchCountAll '\(\d\+\)/\1' contained

View file

@ -1,13 +1,20 @@
" notmuch show mode syntax file " notmuch show mode syntax file
syntax region nmShowMessage start=" message{" end=" message}" contains=nmShowHeader,nmShowBody,nmShowAttachment,nmShowPart syntax region nmShowMessage start=' message{' end=' message}' contains=nmBlockStart,nmShowHeader,nmShowBody,nmShowAttachment,nmShowPart,nmBlockEnd
syntax region nmShowHeader start=" header{" end=" header}" contained syntax region nmShowHeader start=' header{' end=' header}' contained contains=nmBlockStart,nmBlockEnd
syntax region nmShowBody start=" body{" end=" body}" contained contains=nmShowAttachment,nmShowPart syntax region nmShowBody start=' body{' end=' body}' contained contains=nmBlockStart,nmShowAttachment,nmShowPart,nmBlockEnd
syntax region nmShowAttachment start=" attachment{" end=" attachment}" contained syntax region nmShowAttachment start=' attachment{' end=' attachment}' contained contains=nmBlockStart,nmBlockEnd
syntax region nmShowPart start=" part{" end=" part}" contained syntax region nmShowPart start=' part{' end=' part}' contained contains=nmBlockStart,nmBlockEnd
syntax region nmBlockStart start='^ [a-z]\+{' end='$' oneline
syntax region nmBlockEnd start='^ [a-z]\+}' end='$' oneline
highlight link nmShowMessage Error highlight link nmShowMessage Error
highlight link nmShowHeader Type highlight link nmShowHeader Type
highlight link nmShowBody Statement highlight link nmShowBody Statement
highlight link nmShowAttachment Statement highlight link nmShowAttachment Statement
highlight link nmShowPart String highlight link nmShowPart String
highlight link nmBlockStart Ignore
highlight link nmBlockEnd Ignore
highlight Folded term=reverse ctermfg=LightGrey ctermbg=Black guifg=LightGray guibg=Black