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
|
||||
|
||||
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)
|
||||
endfunction
|
||||
|
||||
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 modeline = -1
|
||||
let lnum = 1
|
||||
let b:nm_fold_data = {}
|
||||
while lnum <= line('$')
|
||||
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
|
||||
let modetype = 'sig'
|
||||
let modeline = lnum
|
||||
|
@ -120,13 +156,16 @@ function! s:NM_cmd_show_mkfolds()
|
|||
elseif modetype == 'cit'
|
||||
if match(line, s:notmuch_show_citation_regexp) == -1
|
||||
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 = ''
|
||||
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 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 = ''
|
||||
endif
|
||||
endif
|
||||
|
@ -135,6 +174,10 @@ function! s:NM_cmd_show_mkfolds()
|
|||
endwhile
|
||||
endfunction
|
||||
|
||||
function! NM_cmd_show_foldtext()
|
||||
return b:nm_fold_data[v:foldstart][1]
|
||||
endfunction
|
||||
|
||||
|
||||
" --- helper functions
|
||||
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
" TODO: I cannot figure out why nmSearchTags is not matching anything :(
|
||||
|
||||
syntax region nmSearchDate start="^" end="\%13v"
|
||||
syntax region nmSearchCountAndFrom start="\%14v\[" end=";" oneline contains=nmSearchCount,nmSearchFrom
|
||||
syntax region nmSearchDate start='^' end='\%13v'
|
||||
syntax region nmSearchCountAndFrom start='\%14v\[' end=';' oneline contains=nmSearchCount,nmSearchFrom
|
||||
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 nmSearchCountSome '\([1-9]\d*\)/\(\d\+\)' contained
|
||||
syntax match nmSearchCountAll '\(\d\+\)/\1' contained
|
||||
|
|
|
@ -1,13 +1,20 @@
|
|||
" notmuch show mode syntax file
|
||||
|
||||
syntax region nmShowMessage start="message{" end="message}" contains=nmShowHeader,nmShowBody,nmShowAttachment,nmShowPart
|
||||
syntax region nmShowHeader start="header{" end="header}" contained
|
||||
syntax region nmShowBody start="body{" end="body}" contained contains=nmShowAttachment,nmShowPart
|
||||
syntax region nmShowAttachment start="attachment{" end="attachment}" contained
|
||||
syntax region nmShowPart start="part{" end="part}" contained
|
||||
syntax region nmShowMessage start='message{' end='message}' contains=nmBlockStart,nmShowHeader,nmShowBody,nmShowAttachment,nmShowPart,nmBlockEnd
|
||||
syntax region nmShowHeader start='header{' end='header}' contained contains=nmBlockStart,nmBlockEnd
|
||||
syntax region nmShowBody start='body{' end='body}' contained contains=nmBlockStart,nmShowAttachment,nmShowPart,nmBlockEnd
|
||||
syntax region nmShowAttachment start='attachment{' end='attachment}' contained contains=nmBlockStart,nmBlockEnd
|
||||
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 nmShowHeader Type
|
||||
highlight link nmShowBody Statement
|
||||
highlight link nmShowAttachment Statement
|
||||
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