]> git.notmuchmail.org Git - notmuch/commitdiff
first attempt to fold the message nicely
authorBart Trojanowski <bart@jukie.net>
Thu, 19 Nov 2009 21:20:16 +0000 (16:20 -0500)
committerBart Trojanowski <bart@jukie.net>
Wed, 25 Nov 2009 05:48:50 +0000 (00:48 -0500)
vim/plugin/notmuch.vim
vim/syntax/notmuch-search.vim
vim/syntax/notmuch-show.vim

index 5fe438e78cf1eece676d160201c473738b2e9c2a..70f38e2ac5a1a42768eafd5b7efab08401c8e295 100644 (file)
@@ -99,17 +99,53 @@ function! s:NM_cmd_show(words)
         let b:nm_raw_data = data
 
         call s:NM_cmd_show_mkfolds()
         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()
 
         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 modetype = ''
         let modeline = -1
         let lnum = 1
+        let b:nm_fold_data = {}
         while lnum <= line('$')
                 let line = getline(lnum)
         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
                         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)
                 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
                                 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
                                 let modetype = ''
                         endif
                 endif
@@ -135,6 +174,10 @@ function! s:NM_cmd_show_mkfolds()
         endwhile
 endfunction
 
         endwhile
 endfunction
 
+function! NM_cmd_show_foldtext()
+        return b:nm_fold_data[v:foldstart][1]
+endfunction
+
 
 " --- helper functions
 
 
 " --- helper functions
 
index eb7d88fa30d45b1cb6b6a2bc2ae28945abfdd4cf..4b694722324f78eb9348b0f226c992a344b49290 100644 (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 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 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
 syntax match  nmSearchCountZero '0/\(\d\+\)'               contained
 syntax match  nmSearchCountSome '\([1-9]\d*\)/\(\d\+\)'    contained
 syntax match  nmSearchCountAll  '\(\d\+\)/\1'              contained
index 06dd2ea2a262d1e45e535184242b45b13c2d08d7..02e12e997141c30762ee8f4ac080334e47bc8022 100644 (file)
@@ -1,13 +1,20 @@
 " notmuch show mode syntax file
 
 " notmuch show mode syntax file
 
-syntax region nmShowMessage    start="\fmessage{"    end="\fmessage}"    contains=nmShowHeader,nmShowBody,nmShowAttachment,nmShowPart
-syntax region nmShowHeader     start="\fheader{"     end="\fheader}"     contained
-syntax region nmShowBody       start="\fbody{"       end="\fbody}"       contained contains=nmShowAttachment,nmShowPart
-syntax region nmShowAttachment start="\fattachment{" end="\fattachment}" contained
-syntax region nmShowPart       start="\fpart{"       end="\fpart}"       contained
+syntax region nmShowMessage    start='\fmessage{'    end='\fmessage}'    contains=nmBlockStart,nmShowHeader,nmShowBody,nmShowAttachment,nmShowPart,nmBlockEnd
+syntax region nmShowHeader     start='\fheader{'     end='\fheader}'     contained contains=nmBlockStart,nmBlockEnd
+syntax region nmShowBody       start='\fbody{'       end='\fbody}'       contained contains=nmBlockStart,nmShowAttachment,nmShowPart,nmBlockEnd
+syntax region nmShowAttachment start='\fattachment{' end='\fattachment}' contained contains=nmBlockStart,nmBlockEnd
+syntax region nmShowPart       start='\fpart{'       end='\fpart}'       contained contains=nmBlockStart,nmBlockEnd
+
+syntax region nmBlockStart     start='^\f[a-z]\+{'    end='$'            oneline
+syntax region nmBlockEnd       start='^\f[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 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