From 0514c88053e83ff5d1bf3c6ba3cfa80565df368e Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Mon, 12 Sep 2022 21:56:35 -0600 Subject: fieldmarshal.vim: Add utility function for modifying motions --- plugin/casefmt.vim | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) (limited to 'plugin/casefmt.vim') diff --git a/plugin/casefmt.vim b/plugin/casefmt.vim index 4c66a76..752aecd 100644 --- a/plugin/casefmt.vim +++ b/plugin/casefmt.vim @@ -52,13 +52,9 @@ function! CaseFmt_AddFormat(key, funcname) abort \ . "let g:CaseFmtFunction=function(\"\%s\")" \ . "set operatorfunc=\casefmt_dog@", a:key, a:funcname) - exec printf("vnoremap (casefmt-leader-no-set)%s " - \ . "let g:CaseFmtFunction=function(\"\%s\")" - \ . "call \casefmt_do(visualmode(), 1)", a:key, a:funcname) endfunction -nmap (casefmt-leader) let g:CaseFmtProcessor=function("casefmt_default_processor")(casefmt-leader-no-set) -vmap (casefmt-leader) let g:CaseFmtProcessor=function("casefmt_default_processor")gv(casefmt-leader-no-set) +noremap (casefmt-leader) let g:CaseFmtProcessor=function("casefmt_default_processor")(casefmt-leader-no-set) for [k, v] in items(s:case_fmts) call CaseFmt_AddFormat(k, v) @@ -69,34 +65,20 @@ if g:casefmt_include_bindings exec printf("vmap %s (casefmt-leader)", g:casefmt_leader) endif -nmap (casefmt-leader)j let g:CaseFmtProcessor=function("casefmt_joiner")(casefmt-leader-no-set) -vmap (casefmt-leader)j let g:CaseFmtProcessor=function("casefmt_joiner")gv(casefmt-leader-no-set) +noremap (casefmt-leader)j let g:CaseFmtProcessor=function("casefmt_joiner")(casefmt-leader-no-set) function! s:casefmt_do(type, ...) abort - if a:0 - silent exe "norm! gvy" - elseif a:type == 'line' - " yank the text described by the motion - silent exe "norm! '[V']y" - else - silent exe "norm! `[v`]y" - endif - let yanked = getreg('"', 1, v:true) - let yankedtype = getregtype('"') + let cb = {} if !exists('g:CaseFmtProcessor') let g:CaseFmtProcessor = function("\casefmt_default_processor") endif + let cb.operate = g:CaseFmtProcessor - let changed = g:CaseFmtProcessor(yanked, yankedtype) - - call setreg('"', changed, yankedtype) - - norm gvp + call fieldmarshal#modifytext(a:type, cb) - " Reset the yanked text to what it was originally. - call setreg('"', yanked, yankedtype) + normal! `` endfunction " Default processor. Calls change case fmt on each word. -- cgit