more endless toil with syntax
authorBart Trojanowski <bart@jukie.net>
Fri, 20 Nov 2009 18:50:29 +0000 (13:50 -0500)
committerBart Trojanowski <bart@jukie.net>
Wed, 25 Nov 2009 05:48:52 +0000 (00:48 -0500)
vim/plugin/notmuch.vim
vim/syntax/notmuch-search.vim

index b328bcc658482ee122d4bb8d83681de4f4b34dd6..dab5335936c06a08e04146b911cc3cf4e3ef48ca 100644 (file)
 
 let s:notmuch_defaults = {
         \ 'g:notmuch_cmd':                           'notmuch'                    ,
+        \
         \ 'g:notmuch_search_newest_first':           1                            ,
+        \ 'g:notmuch_search_from_column_width':      20                           ,
+        \
         \ 'g:notmuch_show_fold_signatures':          1                            ,
         \ 'g:notmuch_show_fold_citations':           1                            ,
         \
@@ -102,16 +105,37 @@ function! s:NM_cmd_search(words)
         "let data = substitute(data, '\[4/4\]', '[0/4]', '')
         let lines = split(data, "\n")
         let disp = copy(lines)
-        call map(disp, 'substitute(v:val, "^thread:\\S* ", "", "")' )
+        "call map(disp, 'substitute(v:val, "^thread:\\S* ", "", "")' )
+        call map(disp, 's:NM_cmd_search_fmtline(v:val)')
 
         call <SID>NM_newBuffer('search', join(disp, "\n"))
         let b:nm_raw_lines = lines
         let b:nm_search_words = a:words
 
+        call <SID>NM_cmd_search_mksyntax()
         call <SID>NM_set_map(g:notmuch_search_maps)
         setlocal cursorline
         setlocal nowrap
 endfunction
+function! s:NM_cmd_search_fmtline(line)
+        let m = matchlist(a:line, '^\(thread:\S\+\)\s\([^]]\+\]\) \([^;]\+\); \(.*\) (\([^(]*\))$')
+        if !len(m)
+                return 'ERROR PARSING: ' . a:line
+        endif
+        let max = g:notmuch_search_from_column_width
+        let from = m[3]
+        if strlen(from) >= max
+                let from = m[3][0:max-4] . '...'
+        endif
+        return printf('%s %-20s | %s (%s)', m[2], from, m[4], m[5])
+endfunction
+function! s:NM_cmd_search_mksyntax()
+        syntax clear nmSearchFrom
+        "syntax region nmSearchFrom start='\]\@<=' end='.'me=e+5,he=e+5,re=e+5 oneline contained
+        "syntax match nmSearchFrom /\]\@<=.\{10\}/ oneline contained
+        exec printf('syntax match nmSearchFrom /\(\] \)\@<=.\{%d\}/ oneline contained', g:notmuch_search_from_column_width)
+        "exec printf('syntax region nmSearchFrom start=''\%%%dv'' end=''\%%%dv'' oneline contained', 20, 30)
+endfunction
 
 " --- --- search screen action functions {{{2
 
@@ -167,7 +191,7 @@ function! s:NM_search_filter_helper(prompt, prefix)
         endif
 
         let tags = split(text)
-        map(tags, 'a:prefix . v:val')
+        map(tags, 'and a:prefix . v:val')
         let tags = b:nm_search_words + tags
         echo tags
 
@@ -230,9 +254,9 @@ function! s:NM_search_add_remove_tags(prompt, prefix, intags)
                 if !strlen(text)
                         return
                 endif
-                call <SID>NM_add_remove_tags(prefix, split(text, ' '))
+                call <SID>NM_add_remove_tags(a:prefix, split(text, ' '))
         else
-                call <SID>NM_add_remove_tags(prefix, a:intags)
+                call <SID>NM_add_remove_tags(a:prefix, a:intags)
         endif
         call <SID>NM_search_refresh_view()
 endfunction
index 4b694722324f78eb9348b0f226c992a344b49290..832b2b8466360518e3f1c69045d4b5277eeb583a 100644 (file)
@@ -3,9 +3,9 @@
 " 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 match  nmSearchFrom      ' .*;'                     contained
+syntax region nmSearchCountAndFrom start='\%14v\[' end='|' oneline contains=nmSearchCount,nmSearchFrom
 syntax region nmSearchCount     start='\%14v\[' end='\]'   contained contains=nmSearchCountZero,nmSearchCountSome,nmSearchCountAll
+syntax region nmSearchFrom      start='\]\@<=' end='|'     oneline contained
 syntax match  nmSearchCountZero '0/\(\d\+\)'               contained
 syntax match  nmSearchCountSome '\([1-9]\d*\)/\(\d\+\)'    contained
 syntax match  nmSearchCountAll  '\(\d\+\)/\1'              contained