vim: pass filter expression to add/remove tag functions

This commit is contained in:
Bart Trojanowski 2009-11-25 14:12:29 -05:00
parent 5a32a1d48f
commit b440aeb23e

View file

@ -276,8 +276,8 @@ function! s:NM_search_edit()
endfunction endfunction
function! s:NM_search_archive_thread() function! s:NM_search_archive_thread()
call <SID>NM_add_remove_tags_on_screen('-', ['inbox']) call <SID>NM_add_remove_tags_on_screen('', '-', ['inbox'])
call <SID>NM_add_remove_tags('-', ['inbox']) call <SID>NM_add_remove_tags([], '-', ['inbox'])
norm j norm j
endfunction endfunction
@ -370,8 +370,8 @@ function! s:NM_search_add_remove_tags(prompt, prefix, intags)
else else
let tags = a:intags let tags = a:intags
endif endif
call <SID>NM_add_remove_tags(a:prefix, tags) call <SID>NM_add_remove_tags([], a:prefix, tags)
call <SID>NM_add_remove_tags_on_screen(a:prefix, tags) call <SID>NM_add_remove_tags_on_screen('', a:prefix, tags)
endfunction endfunction
" --- implement show screen {{{1 " --- implement show screen {{{1
@ -845,26 +845,31 @@ function! s:NM_search_expand(arg)
let b:nm_prev_bufnr = prev_bufnr let b:nm_prev_bufnr = prev_bufnr
endfunction endfunction
function! s:NM_add_remove_tags(prefix, tags) function! s:NM_add_remove_tags(filter, prefix, tags)
let id = <SID>NM_search_thread_id() let filter = len(a:filter) ? a:filter : [<SID>NM_search_thread_id()]
if id == '' if !len(filter)
echoe 'Eeek! I couldn''t find the thead id!' echoe 'Eeek! I couldn''t find the thead id!'
endif endif
echo 'filter = ' . string(filter) . ' ... ' . string(type(filter))
call map(a:tags, 'a:prefix . v:val') call map(a:tags, 'a:prefix . v:val')
" TODO: handle errors " TODO: handle errors
call <SID>NM_run(['tag'] + a:tags + ['--', id]) let args = ['tag']
call extend(args, a:tags)
call add(args, '--')
call extend(args, filter)
echo 'NUM_run( ' . string(args) . ' )'
call <SID>NM_run(args)
endfunction endfunction
function! s:NM_add_remove_tags_on_screen(prefix, tags) function! s:NM_add_remove_tags_on_screen(online, prefix, tags)
let online = ''
setlocal modifiable setlocal modifiable
if a:prefix == '-' if a:prefix == '-'
for tagname in a:tags for tagname in a:tags
exec printf('silent %ss/(\([^)]*\)\<%s\>\([^)]*\))$/(\1\2)/', online, tagname) exec printf('silent! %ss/(\([^)]*\)\<%s\>\([^)]*\))$/(\1\2)/', string(a:online), tagname)
endfor endfor
else else
for tagname in a:tags for tagname in a:tags
exec printf('silent %ss/(\([^)]*\)\([^)]*\))$/(\1 %s)/', online, tagname) exec printf('silent! %ss/(\([^)]*\)\([^)]*\))$/(\1 %s)/', string(a:online), tagname)
endfor endfor
endif endif
setlocal nomodifiable setlocal nomodifiable