aboutsummaryrefslogtreecommitdiffhomepage
path: root/vim
diff options
context:
space:
mode:
authorGravatar Bart Trojanowski <bart@jukie.net>2009-11-19 16:20:16 -0500
committerGravatar Bart Trojanowski <bart@jukie.net>2009-11-25 00:48:50 -0500
commit89dc64726f9a396b0a0912788e1736141968c8b3 (patch)
tree4a2cfdd5091df1289f9a782fc9264197031e3bb5 /vim
parent71bdd859dc6f80a918412396cb66c219e0e60669 (diff)
first attempt to fold the message nicely
Diffstat (limited to 'vim')
-rw-r--r--vim/plugin/notmuch.vim47
-rw-r--r--vim/syntax/notmuch-search.vim6
-rw-r--r--vim/syntax/notmuch-show.vim17
3 files changed, 60 insertions, 10 deletions
diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim
index 5fe438e7..70f38e2a 100644
--- a/vim/plugin/notmuch.vim
+++ b/vim/plugin/notmuch.vim
@@ -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
diff --git a/vim/syntax/notmuch-search.vim b/vim/syntax/notmuch-search.vim
index eb7d88fa..4b694722 100644
--- a/vim/syntax/notmuch-search.vim
+++ b/vim/syntax/notmuch-search.vim
@@ -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
diff --git a/vim/syntax/notmuch-show.vim b/vim/syntax/notmuch-show.vim
index 06dd2ea2..02e12e99 100644
--- a/vim/syntax/notmuch-show.vim
+++ b/vim/syntax/notmuch-show.vim
@@ -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