diff --git a/autoload/ctrlp.vim b/autoload/ctrlp.vim index e5cfa71..8f72532 100644 --- a/autoload/ctrlp.vim +++ b/autoload/ctrlp.vim @@ -64,6 +64,7 @@ let [s:pref, s:bpref, s:opts, s:new_opts, s:lc_opts] = \ 'follow_symlinks': ['s:folsym', 0], \ 'highlight_match': ['s:mathi', [1, 'CtrlPMatch']], \ 'jump_to_buffer': ['s:jmptobuf', 'Et'], + \ 'key_loop': ['s:keyloop', 0], \ 'lazy_update': ['s:lazy', 0], \ 'match_func': ['s:matcher', {}], \ 'match_window_bottom': ['s:mwbottom', 1], @@ -220,6 +221,9 @@ fu! s:opts(...) let s:mxheight = max([s:mxheight, 1]) let s:glob = s:showhidden ? '.*\|*' : '*' let s:igntype = empty(s:usrign) ? -1 : type(s:usrign) + if s:keyloop + let [s:lazy, s:glbs['imd']] = [0, 0] + en if s:lazy cal extend(s:glbs, { 'ut': ( s:lazy > 1 ? s:lazy : 250 ) }) en @@ -714,7 +718,7 @@ fu! s:PrtSelectJump(char) let npos = match(lines, smartcs.'^'.chr, s:jmpchr[1] + 1) let [jmpln, s:jmpchr] = [npos == -1 ? pos : npos, [chr, npos]] en - keepj exe jmpln + 1 + exe 'keepj norm!' ( jmpln + 1 ).'G' if s:nolim != 1 | let s:cline = line('.') | en if line('$') > winheight(0) | cal s:BuildPrompt(0) | en en @@ -780,7 +784,6 @@ fu! s:MapNorms() let cmd = substitute(pcmd, 'k%s', 'char-%d', '') let pfunc = 'PrtFocusMap' let ranges = [32, 33, 125, 126] + range(35, 91) + range(93, 123) - \ + range(128, 255) for each in [34, 92, 124] exe printf(cmd, each, pfunc, escape(nr2char(each), '"|\')) endfo @@ -811,20 +814,34 @@ fu! s:MapSpecs() endfo | endfo let s:smapped = s:bufnr endf + +fu! s:KeyLoop() + wh exists('s:init') && s:keyloop + redr + let nr = getchar() + let chr = !type(nr) ? nr2char(nr) : nr + if nr >=# 0x20 + cal s:PrtFocusMap(chr) + el + let cmd = matchstr(maparg(chr), ':\zs.\+\ze$') + exe ( cmd != '' ? cmd : 'norm '.chr ) + en + endw +endf " * Toggling {{{1 fu! s:ToggleFocus() - let s:focus = s:focus ? 0 : 1 + let s:focus = !s:focus cal s:BuildPrompt(0) endf fu! s:ToggleRegex() - let s:regexp = s:regexp ? 0 : 1 + let s:regexp = !s:regexp cal s:PrtSwitcher() endf fu! s:ToggleByFname() if s:ispath - let s:byfname = s:byfname ? 0 : 1 + let s:byfname = !s:byfname let s:mfunc = s:mfunc() cal s:PrtSwitcher() en @@ -838,6 +855,16 @@ fu! s:ToggleType(dir) cal s:PrtSwitcher() endf +fu! s:ToggleKeyLoop() + let s:keyloop = !s:keyloop + if s:keyloop + let [&ut, s:lazy] = [0, 0] + cal s:KeyLoop() + elsei has_key(s:glbs, 'ut') + let [&ut, s:lazy] = [s:glbs['ut'], 1] + en +endf + fu! s:PrtSwitcher() let [s:force, s:matches] = [1, 1] cal s:BuildPrompt(1) @@ -2010,6 +2037,7 @@ fu! ctrlp#init(type, ...) cal ctrlp#setlines(s:settype(a:type)) cal s:SetDefTxt() cal s:BuildPrompt(1) + if s:keyloop | cal s:KeyLoop() | en endf " - Autocmds {{{1 if has('autocmd') diff --git a/doc/ctrlp.txt b/doc/ctrlp.txt index b3fcf4d..0d99892 100644 --- a/doc/ctrlp.txt +++ b/doc/ctrlp.txt @@ -63,8 +63,9 @@ Overview:~ |ctrlp_follow_symlinks|.......Follow symbolic links or not. |ctrlp_lazy_update|...........Only update when typing has stopped. |ctrlp_default_input|.........Seed the prompt with an initial string. + |ctrlp_key_loop|..............Use input looping for multi-byte input. |ctrlp_use_migemo|............Use Migemo patterns for Japanese filenames. - |ctrlp_prompt_mappings|.......Change the mappings in the prompt. + |ctrlp_prompt_mappings|.......Change the mappings inside the prompt. MRU mode: |ctrlp_mruf_max|..............Max MRU entries to remember. @@ -417,6 +418,17 @@ as the default input: > let g:ctrlp_default_input = 'anystring' < + *'g:ctrlp_key_loop'* +An experimental feature. Set this to 1 to enable input looping for the typing +of multi-byte characters: > + let g:ctrlp_key_loop = 0 +< +Note #1: when set, this option resets the |g:ctrlp_lazy_update| option. + +Note #2: you can toggle this feature inside the prompt with a custom mapping: > + let g:ctrlp_prompt_mappings = { 'ToggleKeyLoop()': [''] } +< + *'g:ctrlp_use_migemo'* Set this to 1 to use Migemo Pattern for Japanese filenames. Migemo Search only works in regexp mode. To split the pattern, separate words with space: > @@ -1180,13 +1192,14 @@ Special thanks:~ =============================================================================== CHANGELOG *ctrlp-changelog* + + New options: |g:ctrlp_key_loop|, + |g:ctrlp_open_func|, + |g:ctrlp_tabpage_position| + Rename: *g:ctrlp_dotfiles* -> |g:ctrlp_show_hidden|. + Change |g:ctrlp_switch_buffer|'s and |g:ctrlp_working_path_mode|'s type (old values still work). + New key for |g:ctrlp_user_command| when it's a Dictionary: 'ignore'. - + New options: |g:ctrlp_open_func|. - |g:ctrlp_tabpage_position|. Before 2012/06/15~