From 5c4db30ddf745cc132ff8a4b0e3ee2c3499ee0d2 Mon Sep 17 00:00:00 2001 From: haya14busa Date: Thu, 30 Apr 2015 00:58:32 +0900 Subject: [PATCH] Implement pluggable module feature --- autoload/incsearch.vim | 25 ++++++++++++++++++++----- autoload/incsearch/config.vim | 3 ++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/autoload/incsearch.vim b/autoload/incsearch.vim index dad0324..483a5c3 100644 --- a/autoload/incsearch.vim +++ b/autoload/incsearch.vim @@ -99,8 +99,9 @@ function! s:incsearch_exit.on_char_pre(cmdline) abort endfunction call s:cli.connect(s:incsearch_exit) +" Lazy connect let s:InsertRegister = s:modules.get('InsertRegister').make() -call s:cli.connect(s:InsertRegister) + call s:cli.connect('Paste') " XXX: better handling. if expand("%:p") !=# expand(":p") @@ -228,6 +229,11 @@ let s:inc = { \ "name" : "incsearch", \} +" NOTE: for InsertRegister handling +function! s:inc.priority(event) abort + return a:event is# 'on_char' ? 10 : 0 +endfunction + function! s:inc.on_enter(cmdline) abort nohlsearch " disable previous highlight let s:w = winsaveview() @@ -491,12 +497,17 @@ function! incsearch#cli() abort endfunction function! s:make_cli(config) abort - let cli = copy(s:cli) + " deepcopy() for cli.connect(module) instead of copy() + let cli = deepcopy(s:cli) let cli._base_key = a:config.command let cli._vcount1 = a:config.count1 let cli._is_expr = a:config.is_expr let cli._mode = a:config.mode let cli._pattern = a:config.pattern + for module in a:config.modules + call cli.connect(module) + endfor + call cli.connect(s:InsertRegister) return cli endfunction @@ -516,15 +527,19 @@ function! incsearch#go(...) abort return cmd endfunction +"" NOTE: this global variable is only for handling config from go_wrap func +" It avoids to make config string temporarily +let g:incsearch#_go_wrap_config = {} + " incsearch#go wrapper to call from non-expr state with mode and v:count1 " detection " @api " @return incsearch#go command to execute function! incsearch#go_wrap(...) abort let config = extend(get(a:, 1, {}), incsearch#config#lazy(), 'keep') - let esc = s:U.is_visual(config.mode) ? "\" : '' - return printf("%s:\call incsearch#go(%s)\", - \ esc, strtrans(string(config))) + let g:incsearch#_go_wrap_config = config + let esc = s:U.is_visual(g:incsearch#_go_wrap_config.mode) ? "\" : '' + return printf("%s:\call incsearch#go(g:incsearch#_go_wrap_config)\", esc) endfunction " similar to incsearch#forward() but do not move the cursor unless explicitly diff --git a/autoload/incsearch/config.vim b/autoload/incsearch/config.vim index 8299a98..f10e9b0 100644 --- a/autoload/incsearch/config.vim +++ b/autoload/incsearch/config.vim @@ -21,7 +21,8 @@ let s:config = { \ 'is_expr': s:FALSE, \ 'pattern': '', \ 'mode': 'n', -\ 'count1': 1 +\ 'count1': 1, +\ 'modules': [] \ } " @return config for lazy value