]> git.notmuchmail.org Git - notmuch/blobdiff - vim/plugin/notmuch.vim
vim: add option to mark as read + archive
[notmuch] / vim / plugin / notmuch.vim
index 3a196160af19d783f03a08a18efa5098fa4d41f8..968c4c1652b5d3ebab46d3e1759fc4ef40aacf4c 100644 (file)
@@ -118,6 +118,7 @@ let g:notmuch_search_maps = {
         \ '<Enter>':    ':call <SID>NM_search_show_thread(1)<CR>',
         \ '<C-]>':      ':call <SID>NM_search_expand(''<cword>'')<CR>',
         \ 'a':          ':call <SID>NM_search_archive_thread()<CR>',
+        \ 'A':          ':call <SID>NM_search_mark_read_then_archive_thread()<CR>',
         \ 'f':          ':call <SID>NM_search_filter()<CR>',
         \ 'm':          ':call <SID>NM_new_mail()<CR>',
         \ 'o':          ':call <SID>NM_search_toggle_order()<CR>',
@@ -243,26 +244,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
@@ -309,11 +307,15 @@ function! s:NM_search_edit()
 endfunction
 
 function! s:NM_search_archive_thread()
-        call <SID>NM_add_remove_tags_on_screen('', '-', ['inbox'])
         call <SID>NM_add_remove_tags([], '-', ['inbox'])
         norm j
 endfunction
 
+function! s:NM_search_mark_read_then_archive_thread()
+        call <SID>NM_add_remove_tags([], '-', ['unread', 'inbox'])
+        norm j
+endfunction
+
 function! s:NM_search_filter()
         call <SID>NM_search_filter_helper('Filter: ', '', '')
 endfunction
@@ -402,7 +404,6 @@ function! s:NM_search_add_remove_tags(prompt, prefix, intags)
                 let tags = a:intags
         endif
         call <SID>NM_add_remove_tags([], a:prefix, tags)
-        call <SID>NM_add_remove_tags_on_screen('', a:prefix, tags)
 endfunction
 
 " --- implement show screen {{{1
@@ -572,7 +573,6 @@ function! s:NM_show_advance_marking_read_and_archiving()
 
         " if entire message fits on the screen, read/archive it, move to the next one
         if msg_top['id'] != msg_bot['id'] || msg_top['end'] <= vis_bot
-                call <SID>NM_add_remove_tags_on_screen(msg_top['start'], '-', advance_tags)
                 exec printf('norm %dG', vis_top)
                 call <SID>NM_show_next(0, 1)
                 if has_key(msg_top,'match') && msg_top['match'] != '0'
@@ -1328,20 +1328,6 @@ function! s:NM_add_remove_tags(filter, prefix, tags)
         call <SID>NM_run(args)
 endfunction
 
-function! s:NM_add_remove_tags_on_screen(online, prefix, tags)
-        setlocal modifiable
-        if a:prefix == '-'
-                for tagname in a:tags
-                        exec printf('silent! %ss/(\([^)]*\)\<%s\>\([^)]*\))$/(\1\2)/', string(a:online), tagname)
-                endfor
-        else
-                for tagname in a:tags
-                        exec printf('silent! %ss/(\([^)]*\))$/(\1 %s)/', string(a:online), tagname)
-                endfor
-        endif
-        setlocal nomodifiable
-endfunction
-
 " --- process and set the defaults {{{1
 
 function! NM_set_defaults(force)