]> git.notmuchmail.org Git - notmuch/blobdiff - vim/plugin/notmuch.vim
vim: cleanup search buffer
[notmuch] / vim / plugin / notmuch.vim
index f33d0582c9153018e084f0625d8eca062a159493..b8c985812a9e39a34083a68800bf2ff143275337 100644 (file)
@@ -178,7 +178,7 @@ let g:notmuch_compose_imaps = {
 
 function! s:NM_cmd_folders(words)
         if len(a:words)
-                throw 'Not exapecting any arguments for folders command.'
+                throw 'Not expecting any arguments for folders command.'
         endif
         let cmd = ['count']
         let disp = []
@@ -243,26 +243,23 @@ function! s:NM_cmd_search(words)
         let b:nm_raw_lines = lines
         let b:nm_search_words = a:words
 
-        call <SID>NM_cmd_search_mksyntax()
         call <SID>NM_set_map('n', g:notmuch_search_maps)
         setlocal cursorline
         setlocal nowrap
 endfunction
 function! s:NM_cmd_search_fmtline(line)
-        let m = matchlist(a:line, '^\(thread:\S\+\)\s\([^]]\+\]\) \([^;]\+\); \(.*\) (\([^(]*\))$')
+        let m = matchlist(a:line, '^\(thread:\S\+\)\s\(.\{12\}\) \[\(\d\+\)/\d\+\] \([^;]\+\); \%(\[[^\[]\+\] \)*\(.*\) (\([^(]*\))$')
         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 = substitute(m[3][0:max-4], '[^A-Za-z1-9_]*$', '', '') . '...'
-        endif
-        return printf('%-20s %-20s | %s (%s)', m[2], from, m[4], m[5])
-endfunction
-function! s:NM_cmd_search_mksyntax()
-        syntax clear nmSearchFrom
-        exec printf('syntax match nmSearchFrom /\(\] \)\@<=.\{%d\}/ oneline contained', g:notmuch_search_from_column_width)
+        let flist = []
+        for at in split(m[4], ", ")
+                let p = min([stridx(at, "."), stridx(at, "@")])
+                call insert(flist, tolower(at[0:p - 1]))
+        endfor
+        let from = join(flist, ", ")
+        return printf("%-12s %3s %-20.20s | %s (%s)", m[2], m[3], from, m[5], m[6])
 endfunction
 
 " --- --- search screen action functions {{{2
@@ -275,6 +272,7 @@ function! s:NM_search_show_thread(everything)
                 call add(words, ')')
         endif
         call <SID>NM_cmd_show(words)
+        let b:nm_show_everything = a:everything
 endfunction
 
 function! s:NM_search_prompt()
@@ -430,6 +428,7 @@ function! s:NM_cmd_show(words)
 endfunction
 
 function! s:NM_show_previous(can_change_thread, find_matching)
+        let everything = exists('b:nm_show_everything') ? b:nm_show_everything : 0
         let info = b:nm_raw_info
         let lnum = line('.')
         for msg in reverse(copy(info['msgs']))
@@ -450,7 +449,7 @@ function! s:NM_show_previous(can_change_thread, find_matching)
         call <SID>NM_kill_this_buffer()
         if line('.') > 1
                 norm k
-                call <SID>NM_search_show_thread()
+                call <SID>NM_search_show_thread(everything)
                 norm G
                 call <SID>NM_show_previous(0, a:find_matching)
         else
@@ -479,10 +478,11 @@ function! s:NM_show_next(can_change_thread, find_matching)
 endfunction
 
 function! s:NM_show_next_thread()
+        let everything = exists('b:nm_show_everything') ? b:nm_show_everything : 0
         call <SID>NM_kill_this_buffer()
         if line('.') != line('$')
                 norm j
-                call <SID>NM_search_show_thread()
+                call <SID>NM_search_show_thread(everything)
         else
                 echo 'No more messages.'
         endif
@@ -493,7 +493,8 @@ function! s:NM_show_archive_thread()
 endfunction
 
 function! s:NM_show_mark_read_then_archive_thread()
-        echo 'not implemented'
+        call <SID>NM_add_remove_tags(b:nm_search_words, '-', ['unread', 'inbox'])
+        call <SID>NM_show_next_thread()
 endfunction
 
 function! s:NM_show_mark_read_then_next_open_message()