From acb696165c89fbc2f7030dcee5814f24a18628ce Mon Sep 17 00:00:00 2001 From: Bart Trojanowski Date: Fri, 20 Nov 2009 13:50:29 -0500 Subject: [PATCH] more endless toil with syntax --- vim/plugin/notmuch.vim | 32 ++++++++++++++++++++++++++++---- vim/syntax/notmuch-search.vim | 4 ++-- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index b328bcc6..dab53359 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -23,7 +23,10 @@ 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 NM_newBuffer('search', join(disp, "\n")) let b:nm_raw_lines = lines let b:nm_search_words = a:words + call NM_cmd_search_mksyntax() call 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 NM_add_remove_tags(prefix, split(text, ' ')) + call NM_add_remove_tags(a:prefix, split(text, ' ')) else - call NM_add_remove_tags(prefix, a:intags) + call NM_add_remove_tags(a:prefix, a:intags) endif call NM_search_refresh_view() endfunction diff --git a/vim/syntax/notmuch-search.vim b/vim/syntax/notmuch-search.vim index 4b694722..832b2b84 100644 --- a/vim/syntax/notmuch-search.vim +++ b/vim/syntax/notmuch-search.vim @@ -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