mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 09:24:54 +01:00
first attempt to fold the message nicely
This commit is contained in:
parent
71bdd859dc
commit
89dc64726f
3 changed files with 60 additions and 10 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue