]> git.notmuchmail.org Git - notmuch/blobdiff - vim/plugin/notmuch.vim
remove some debug code from NM_cmd_search()
[notmuch] / vim / plugin / notmuch.vim
index 57bcdac923da0718d10fcacc83932bed18d14e78..dfa4c432faca9d12c8693063f5ec2382e45fc862 100644 (file)
@@ -90,7 +90,7 @@ let g:notmuch_search_maps = {
 
 " --- --- bindings for show screen {{{2
 let g:notmuch_show_maps = {
-        \ '<C-P>':      ':call <SID>NM_show_prev(1)<CR>',
+        \ '<C-P>':      ':call <SID>NM_show_previous(1)<CR>',
         \ '<C-N>':      ':call <SID>NM_show_next(1)<CR>',
         \ 'q':          ':call <SID>NM_kill_this_buffer()<CR>',
         \
@@ -123,11 +123,8 @@ function! s:NM_cmd_search(words)
                 let cmd = cmd + ['--sort=oldest-first']
         endif
         let data = s:NM_run(cmd + a:words)
-        "let data = substitute(data, '27/27', '25/27', '')
-        "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, 's:NM_cmd_search_fmtline(v:val)')
 
         call <SID>NM_newBuffer('search', join(disp, "\n"))
@@ -189,11 +186,8 @@ 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'])
-        " TODO: this could be made better and more generic
-        setlocal modifiable
-        s/(\([^)]*\)\<inbox\>\([^)]*\))$/(\1\2)/
-        setlocal nomodifiable
         norm j
 endfunction
 
@@ -272,21 +266,12 @@ function! s:NM_search_add_remove_tags(prompt, prefix, intags)
                 if !strlen(text)
                         return
                 endif
-                call <SID>NM_add_remove_tags(a:prefix, split(text, ' '))
+                let tags = split(text, ' ')
         else
-                call <SID>NM_add_remove_tags(a:prefix, a:intags)
+                let tags = a:intags
         endif
-        call <SID>NM_search_refresh_view()
-endfunction
-
-function! s:NM_add_remove_tags(prefix, tags)
-        let id = <SID>NM_search_find_thread_id()
-        if id == ''
-                echoe 'Eeek! I couldn''t find the thead id!'
-        endif
-        call map(a:tags, 'a:prefix . v:val')
-        " TODO: handle errors
-        call <SID>NM_run(['tag'] + a:tags + ['--', id])
+        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
@@ -313,7 +298,7 @@ function! s:NM_cmd_show(words)
 
 endfunction
 
-function! s:NM_show_prev(can_change_thread)
+function! s:NM_show_previous(can_change_thread)
         let info = b:nm_raw_info
         let lnum = line('.')
         for msg in reverse(copy(info['msgs']))
@@ -334,7 +319,7 @@ function! s:NM_show_prev(can_change_thread)
                 norm k
                 call <SID>NM_search_show_thread()
                 norm G
-                call <SID>NM_show_prev(0)
+                call <SID>NM_show_previous(0)
         else
                 echo 'No more messages.'
         endif
@@ -480,8 +465,10 @@ function! s:NM_cmd_show_parse(inlines)
                                 elseif mode_type == 'cit'
                                         if part_end || match(line, g:notmuch_show_citation_regexp) == -1
                                                 let outlnum = len(info['disp'])
-                                                let foldinfo = [ mode_type, mode_start, outlnum-1,
-                                                               \ printf('[ %d-line citation.  Press "c" to show. ]', outlnum - mode_start) ]
+                                                if mode_start != outlnum
+                                                        let foldinfo = [ mode_type, mode_start, outlnum-1,
+                                                                       \ printf('[ %d-line citation.  Press "c" to show. ]', outlnum - mode_start) ]
+                                                endif
                                                 let mode_type = ''
                                         endif
                                 elseif mode_type == 'sig'
@@ -489,8 +476,10 @@ function! s:NM_cmd_show_parse(inlines)
                                         if (outlnum - mode_start) > g:notmuch_show_signature_lines_max
                                                 let mode_type = ''
                                         elseif part_end
-                                                let foldinfo = [ mode_type, mode_start, outlnum,
-                                                               \ printf('[ %d-line signature.  Press "s" to show. ]', outlnum - mode_start) ]
+                                                if mode_start != outlnum
+                                                        let foldinfo = [ mode_type, mode_start, outlnum-1,
+                                                                       \ printf('[ %d-line signature.  Press "s" to show. ]', outlnum - mode_start) ]
+                                                endif
                                                 let mode_type = ''
                                         endif
                                 endif
@@ -544,7 +533,7 @@ function! s:NM_cmd_show_parse(inlines)
                                         let hdr_start = msg['hdr_start']+1
                                         let hdr_end = len(info['disp'])
                                         let foldinfo = [ 'hdr', hdr_start, hdr_end,
-                                               \ printf('[ %d-line headers.  Press "h" to show. ]', hdr_end - hdr_start) ]
+                                               \ printf('[ %d-line headers.  Press "h" to show. ]', hdr_end + 1 - hdr_start) ]
                                         let msg['header'] = hdr
                                         let in_header = 0
                                         let hdr = {}
@@ -693,6 +682,31 @@ function! s:NM_kill_this_buffer()
         endif
 endfunction
 
+function! s:NM_add_remove_tags(prefix, tags)
+        let id = <SID>NM_search_find_thread_id()
+        if id == ''
+                echoe 'Eeek! I couldn''t find the thead id!'
+        endif
+        call map(a:tags, 'a:prefix . v:val')
+        " TODO: handle errors
+        call <SID>NM_run(['tag'] + a:tags + ['--', id])
+endfunction
+
+function! s:NM_add_remove_tags_on_screen(prefix, tags)
+        let online = ''
+        setlocal modifiable
+        if a:prefix == '-'
+                for tagname in a:tags
+                        exec printf('silent %ss/(\([^)]*\)\<%s\>\([^)]*\))$/(\1\2)/', online, tagname)
+                endfor
+        else
+                for tagname in a:tags
+                        exec printf('silent %ss/(\([^)]*\)\([^)]*\))$/(\1 %s)/', online, tagname)
+                endfor
+        endif
+        setlocal nomodifiable
+endfunction
+
 " --- process and set the defaults {{{1
 
 function! NM_set_defaults(force)
@@ -728,9 +742,12 @@ endif
 " --- assign keymaps {{{1
 
 function! s:NM_set_map(maps)
+        nmapclear
         for [key, code] in items(a:maps)
                 exec printf('nnoremap <buffer> %s %s', key, code)
         endfor
+        " --- this is a hack for development :)
+        nnoremap ,nmr :source ~/.vim/plugin/notmuch.vim<CR>:call NotMuch('')<CR>
 endfunction
 
 " --- command handler {{{1
@@ -761,8 +778,4 @@ endfunction
 command! -nargs=* -complete=customlist,CompleteNotMuch NotMuch call NotMuch(<q-args>)
 cabbrev  notmuch <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'NotMuch' : 'notmuch')<CR>
 
-" --- hacks, only for development :) {{{1
-
-nnoremap ,nmr :source ~/.vim/plugin/notmuch.vim<CR>:call NotMuch('')<CR>
-
 " vim: set ft=vim ts=8 sw=8 et foldmethod=marker :