@ -68,6 +68,7 @@ let [s:pref, s:bpref, s:opts, s:new_opts, s:lc_opts] =
\ 'key_loop' : ['s:keyloop' , 0 ],
\ 'lazy_update' : ['s:lazy' , 0 ],
\ 'match_func' : ['s:matcher' , {}],
\ 'match_window' : ['s:mw' , '' ],
\ 'match_window_bottom' : ['s:mwbottom' , 1 ],
\ 'match_window_reversed' : ['s:mwreverse' , 1 ],
\ 'max_depth' : ['s:maxdepth' , 40 ],
@ -102,7 +103,7 @@ let [s:pref, s:bpref, s:opts, s:new_opts, s:lc_opts] =
" Global options
let s :glbs = { 'magic' : 1 , 'to' : 1 , 'tm' : 0 , 'sb' : 1 , 'hls' : 0 , 'im' : 0 ,
\ 'report' : 9999 , 'sc' : 0 , 'ss' : 0 , 'siso' : 0 , 'mfd' : 200 , 'mouse' : 'n' ,
\ 'report' : 9999 , 'sc' : 0 , 'ss' : 0 , 'siso' : 0 , 'mfd' : 200 , 'ttimeout' : 0 ,
\ 'gcr' : 'a:blinkon0' , 'ic' : 1 , 'lmap' : '' , 'mousef' : 0 , 'imd' : 1 }
" Keymaps
@ -181,7 +182,7 @@ let s:hlgrps = {
\ 'PrtText' : 'Normal' ,
\ 'PrtCursor' : 'Constant' ,
\ }
" s:opts() {{{2
" Get the options {{{2
fu ! s :opts ( ...)
unl ! s :usrign s :usrcmd s :urprtmaps
for each in ['byfname' , 'regexp' , 'extensions' ] | if exists ( 's:' .each )
@ -201,6 +202,9 @@ fu! s:opts(...)
let {va } = {s :bpref .ke }
en
endfo
" Match window options
cal s :match_window_opts ( )
" One-time values
if a :0 && a :1 ! = {}
unl va
for [ke , va ] in items ( a :1 )
@ -217,7 +221,6 @@ fu! s:opts(...)
en | endfo
if ! exists ( 'g:ctrlp_newcache' ) | let g :ctrlp_newcache = 0 | en
let s :maxdepth = min ( [s :maxdepth , 100 ])
let s :mxheight = max ( [s :mxheight , 1 ])
let s :glob = s :showhidden ? '.*\|*' : '*'
let s :igntype = empty ( s :usrign ) ? -1 : type ( s :usrign )
let s :lash = ctrlp #utils #lash ( )
@ -238,13 +241,32 @@ fu! s:opts(...)
cal extend ( s :prtmaps , s :urprtmaps )
en
endf
fu ! s :match_window_opts ( )
let s :mw_pos =
\ s :mw = ~ 'top\|bottom' ? matchstr ( s :mw , 'top\|bottom' ) :
\ exists ( 'g:ctrlp_match_window_bottom' ) ? ( s :mwbottom ? 'bottom' : 'top' )
\ : 'bottom'
let s :mw_order =
\ s :mw = ~ 'order:[^,]\+' ? matchstr ( s :mw , 'order:\zs[^,]\+' ) :
\ exists ( 'g:ctrlp_match_window_reversed' ) ? ( s :mwreverse ? 'btt' : 'ttb' )
\ : 'btt'
let s :mw_max =
\ s :mw = ~ 'max:[^,]\+' ? str2nr ( matchstr ( s :mw , 'max:\zs\d\+' ) ) :
\ exists ( 'g:ctrlp_max_height' ) ? s :mxheight
\ : 10
let s :mw_min =
\ s :mw = ~ 'min:[^,]\+' ? str2nr ( matchstr ( s :mw , 'min:\zs\d\+' ) ) : 1
let [s :mw_max , s :mw_min ] = [max ( [s :mw_max , 1 ]) , max ( [s :mw_min , 1 ]) ]
let s :mw_min = min ( [s :mw_min , s :mw_max ])
endf
"}}}1
" * Open & Close {{{1
fu ! s :Open ( )
cal s :log ( 1 )
cal s :getenv ( )
cal s :execextvar ( 'enter' )
sil ! exe 'keepa' ( s :mwbottom ? 'bo' : 'to' ) '1new ControlP'
sil ! exe 'keepa' ( s :mw_pos = = 'top' ? 'to' : 'b o' ) '1new ControlP'
cal s :buffunc ( 1 )
let [s :bufnr , s :winw ] = [bufnr ( '%' ) , winwidth ( 0 ) ]
let [s :focus , s :prompt ] = [1 , ['' , '' , '' ]]
@ -297,7 +319,7 @@ fu! ctrlp#clra()
if isdirectory ( cadir )
let cafiles = split ( s :glbpath ( s :fnesc ( cadir , 'g' , ',' ) , '**' , 1 ) , "\n" )
let eval = '!isdirectory(v:val) && v:val !~ ''\v[\/]cache[.a-z]+$|\.log$'''
sil ! cal map ( filter ( cafiles , eval ) , 'delete(v:val)' )
sil ! cal map ( s :i filter( cafiles , eval ) , 'delete(v:val)' )
en
cal ctrlp #clr ( )
endf
@ -362,7 +384,7 @@ fu! s:UserCmd(lscmd)
let [ssl , &ssl , path ] = [&ssl , 0 , tr ( path , '/' , '\' ) ]
en
if has ( 'win32' ) | | has ( 'win64' )
let lscmd = substitute ( lscmd , '\v(^|&&\s*)\zscd (/d)@!' , 'cd /d ' , '' )
let lscmd = substitute ( lscmd , '\v(^|\ &\ &\s*)\zscd (/d)@!' , 'cd /d ' , '' )
en
let path = exists ( '*shellescape' ) ? shellescape ( path ) : path
let g :ctrlp_allfiles = split ( system ( printf ( lscmd , path ) ) , "\n" )
@ -433,7 +455,7 @@ endf
fu ! s :MatchIt ( items , pat , limit , exc )
let [lines , id ] = [[], 0 ]
let pat =
\ s :byfname ? map ( split ( a :pat , '^[^;]\+\\\@<!\zs;' , 1 ) , 's:martcs.v:val' )
\ s :byfname ( ) ? map ( split ( a :pat , '^[^;]\+\\\@<!\zs;' , 1 ) , 's:martcs.v:val' )
\ : s :martcs .a :pat
for item in a :items
let id + = 1
@ -450,7 +472,16 @@ fu! s:MatchedItems(items, pat, limit)
let exc = exists ( 's:crfilerel' ) ? s :crfilerel : ''
let items = s :narrowable ( ) ? s :matched + s :mdata [3 ] : a :items
if s :matcher ! = {}
let argms = [items , a :pat , a :limit , s :mmode ( ) , s :ispath , exc , s :regexp ]
let argms =
\ has_key ( s :matcher , 'arg_type' ) && s :matcher ['arg_type' ] = = 'dict' ? [{
\ 'items' : items ,
\ 'str' : a :pat ,
\ 'limit' : a :limit ,
\ 'mmode' : s :mmode ( ) ,
\ 'ispath' : s :ispath ,
\ 'crfile' : exc ,
\ 'regex' : s :regexp ,
\ }] : [items , a :pat , a :limit , s :mmode ( ) , s :ispath , exc , s :regexp ]
let lines = call ( s :matcher ['match' ], argms , s :matcher )
el
let lines = s :MatchIt ( items , a :pat , a :limit , exc )
@ -480,7 +511,7 @@ fu! s:SplitPattern(str)
if exists ( 'lst' )
let pat = ''
if ! empty ( lst )
if s :byfname && index ( lst , ';' ) > 0
if s :byfname ( ) && index ( lst , ';' ) > 0
let fbar = index ( lst , ';' )
let lst_1 = s :sublist ( lst , 0 , fbar - 1 )
let lst_2 = len ( lst ) - 1 > fbar ? s :sublist ( lst , fbar + 1 , -1 ) : ['' ]
@ -494,15 +525,19 @@ fu! s:SplitPattern(str)
endf
" * BuildPrompt() {{{1
fu ! s :Render ( lines , pat )
let [&ma , lines , s :height ] = [1 , a :lines , min ( [len ( a :lines ) , s :winh ]) ]
let pat = s :byfname ? split ( a :pat , '^[^;]\+\\\@<!\zs;' , 1 ) [0 ] : a :pat
let [&ma , lines , s :res_count ] = [1 , a :lines , len ( a :lines ) ]
let height = min ( [max ( [s :mw_min , s :res_count ]) , s :winmaxh ])
let pat = s :byfname ( ) ? split ( a :pat , '^[^;]\+\\\@<!\zs;' , 1 ) [0 ] : a :pat
let cur_cmd = 'keepj norm! ' .( s :mw_order = = 'btt' ? 'G' : 'gg' ) .'1|'
" Setup the match window
sil ! exe '%d _ | res' s :height
sil ! exe '%d _ | res' height
" Print the new items
if empty ( lines )
let [s :matched , s :lines ] = [[], []]
cal setline ( 1 , ' == NO ENTRIES ==' )
let lines = [' == NO ENTRIES ==' ]
cal setline ( 1 , s :offset ( lines , height - 1 ) )
setl noma nocul
exe cur_cmd
cal s :unmarksigns ( )
if s :dohighlight ( ) | cal clearmatches ( ) | en
retu
@ -514,12 +549,12 @@ fu! s:Render(lines, pat)
cal sort ( lines , 's:mixedsort' )
unl s :compat
en
if s :mwreverse | cal reverse ( lines ) | en
if s :mw_order = = 'btt' | cal reverse ( lines ) | en
let s :lines = copy ( lines )
cal map ( lines , 's:formatline(v:val)' )
cal setline ( 1 , lines )
cal setline ( 1 , s :offset ( lines , height ) )
setl noma cul
exe 'keepj norm!' ( s :mwreverse ? 'G' : 'gg' ) .'1|'
exe cur_cmd
cal s :unmarksigns ( )
cal s :remarksigns ( )
if exists ( 's:cline' ) && s :nolim ! = 1
@ -541,7 +576,7 @@ fu! s:Update(str)
let s :martcs = &scs && str = ~ '\u' ? '\C' : ''
let pat = s :matcher = = {} ? s :SplitPattern ( str ) : str
let lines = s :nolim = = 1 && empty ( str ) ? copy ( g :ctrlp_lines )
\ : s :MatchedItems ( g :ctrlp_lines , pat , s :winh )
\ : s :MatchedItems ( g :ctrlp_lines , pat , s :winmax h )
cal s :Render ( lines , pat )
endf
@ -550,7 +585,7 @@ fu! s:ForceUpdate()
endf
fu ! s :BuildPrompt ( upd )
let base = ( s :regexp ? 'r' : '>' ) .( s :byfname ? 'd' : '>' ) .'> '
let base = ( s :regexp ? 'r' : '>' ) .( s :byfname ( ) ? 'd' : '>' ) .'> '
let str = escape ( s :getinput ( ) , '\' )
let lazy = str = = '' | | exists ( 's:force' ) | | ! has ( 'autocmd' ) ? 0 : s :lazy
if a :upd && ! lazy && ( s :matches | | s :regexp | | exists ( 's:did_exp' )
@ -581,11 +616,8 @@ fu! s:SetDefTxt()
if s :deftxt = = '0' | | ( s :deftxt = = 1 && ! s :ispath ) | retu | en
let txt = s :deftxt
if ! type ( txt )
let txt = txt && ! stridx ( s :crfpath , s :dyncwd )
\ ? ctrlp #rmbasedir ( [s :crfpath ]) [0 ] : ''
let txt = txt ! = '' ? txt .s :lash ( s :crfpath ) : ''
el
let txt = expand ( txt , 1 )
let path = s :crfpath .s :lash ( s :crfpath )
let txt = txt && ! stridx ( path , s :dyncwd ) ? ctrlp #rmbasedir ( [path ]) [0 ] : ''
en
let s :prompt [0 ] = txt
endf
@ -735,7 +767,7 @@ endf
fu ! s :PrtSelectJump ( char )
let lines = copy ( s :lines )
if s :byfname
if s :byfname ( )
cal map ( lines , 'split(v:val, ''[\/]\ze[^\/]\+$'')[-1]' )
en
" Cycle through matches, use s:jmpchr to store last jump
@ -904,6 +936,11 @@ fu! s:ToggleKeyLoop()
en
endf
fu ! s :ToggleMRURelative ( )
cal ctrlp #mrufiles #tgrel ( )
cal s :PrtClearCache ( )
endf
fu ! s :PrtSwitcher ( )
let [s :force , s :matches ] = [1 , 1 ]
cal s :BuildPrompt ( 1 )
@ -937,14 +974,21 @@ fu! s:SetWD(args)
en
endf
" * AcceptSelection() {{{1
fu ! ctrlp #acceptfile ( mode , line , ...)
let [md , useb ] = [a :mode , 0 ]
if ! type ( a :line )
let [filpath , bufnr , useb ] = [a :line , a :line , 1 ]
fu ! ctrlp #acceptfile ( ...)
let useb = 0
if a :0 = = 1 && type ( a :1 ) = = 4
let [md , line ] = [a :1 ['action' ], a :1 ['line' ]]
let atl = has_key ( a :1 , 'tail' ) ? a :1 ['tail' ] : ''
el
let filpath = fnamemodify ( a :line , ':p' )
if s :nonamecond ( a :line , filpath )
let bufnr = str2nr ( matchstr ( a :line , '[\/]\?\[\zs\d\+\ze\*No Name\]$' ) )
let [md , line ] = [a :1 , a :2 ]
let atl = a :0 > 2 ? a :3 : ''
en
if ! type ( line )
let [filpath , bufnr , useb ] = [line , line , 1 ]
el
let filpath = fnamemodify ( line , ':p' )
if s :nonamecond ( line , filpath )
let bufnr = str2nr ( matchstr ( line , '[\/]\?\[\zs\d\+\ze\*No Name\]$' ) )
let [filpath , useb ] = [bufnr , 1 ]
el
let bufnr = bufnr ( '^' .filpath .'$' )
@ -952,7 +996,7 @@ fu! ctrlp#acceptfile(mode, line, ...)
en
cal s :PrtExit ( )
let tail = s :tail ( )
let j2l = a :0 ? a :1 : matchstr ( tail , '^ +\zs\d\+$' )
let j2l = atl ! = '' ? atl : matchstr ( tail , '^ +\zs\d\+$' )
if ( s :jmptobuf = ~ md | | ( s :jmptobuf && md = ~ '[et]' ) ) && bufnr > 0
\ && ! ( md = = 'e' && bufnr = = bufnr ( '%' ) )
let [jmpb , bufwinnr ] = [1 , bufwinnr ( bufnr ) ]
@ -980,7 +1024,7 @@ fu! ctrlp#acceptfile(mode, line, ...)
" Reset &switchbuf option
let [swb , &swb ] = [&swb , '' ]
" Open new window/buffer
let [fid , tail ] = [( useb ? bufnr : filpath ) , ( a :0 ? ' +' .a :1 : tail ) ]
let [fid , tail ] = [( useb ? bufnr : filpath ) , ( atl ! = '' ? ' +' .atl : tail ) ]
let args = [cmd , fid , tail , 1 , [useb , j2l ]]
cal call ( 's:openfile' , args )
let &swb = swb
@ -1011,24 +1055,34 @@ fu! s:SpecInputs(str)
retu 0
endf
fu ! s :AcceptSelection ( mode )
if a :mode ! = 'e' && s :OpenMulti ( a :mode ) ! = -1 | retu | en
fu ! s :AcceptSelection ( action )
let [md , icr ] = [a :action [0 ], match ( a :action , 'r' ) > = 0 ]
let subm = icr | | ( ! icr && md = = 'e' )
if ! subm && s :OpenMulti ( md ) ! = -1 | retu | en
let str = s :getinput ( )
if a :mode = = 'e' | if s :SpecInputs ( str ) | retu | en | en
if subm | if s :SpecInputs ( str ) | retu | en | en
" Get the selected line
let line = ctrlp #getcline ( )
if a :mode ! = 'e' && ! s :itemtype && line = = ''
if ! subm && ! s :itemtype && line = = '' && line ( '.' ) > s :offset
\ && str ! ~ '\v^(\.\.([\/]\.\.)*[\/]?[.\/]*|/|\\|\?|\@.+)$'
cal s :CreateNewFile ( a :mo de ) | retu
cal s :CreateNewFile ( md ) | retu
en
if empty ( line ) | retu | en
" Do something with it
if s :openfunc ! = {} && has_key ( s :openfunc , s :ctype )
let actfunc = s :openfunc [s :ctype ]
let type = has_key ( s :openfunc , 'arg_type' ) ? s :openfunc ['arg_type' ] : 'list'
el
let actfunc = s :itemtype < 3 ? 'ctrlp#acceptfile' : s :getextvar ( 'accept' )
if s :itemtype < 3
let [actfunc , type ] = ['ctrlp#acceptfile' , 'dict' ]
el
let [actfunc , exttype ] = [s :getextvar ( 'accept' ) , s :getextvar ( 'act_farg' ) ]
let type = exttype = = 'dict' ? exttype : 'list'
en
en
cal call ( actfunc , [a :mode , line ])
let actargs = type = = 'dict' ? [{ 'action' : md , 'line' : line , 'icr' : icr }]
\ : [md , line ]
cal call ( actfunc , actargs )
endf
" - CreateNewFile() {{{1
fu ! s :CreateNewFile ( ...)
@ -1187,7 +1241,10 @@ fu! s:OpenNoMarks(md, line)
cal s :remarksigns ( )
cal s :BuildPrompt ( 0 )
elsei a :md = = 'x'
cal call ( s :openfunc [s :ctype ], [a :md , a :line ], s :openfunc )
let type = has_key ( s :openfunc , 'arg_type' ) ? s :openfunc ['arg_type' ] : 'dict'
let argms = type = = 'dict' ? [{ 'action' : a :md , 'line' : a :line }]
\ : [a :md , a :line ]
cal call ( s :openfunc [s :ctype ], argms , s :openfunc )
elsei a :md = = 'd'
let dir = fnamemodify ( a :line , ':h' )
if isdirectory ( dir )
@ -1278,7 +1335,7 @@ fu! s:mixedsort(...)
let [cln , cml ] = [ctrlp #complen ( a :1 , a :2 ) , s :compmatlen ( a :1 , a :2 ) ]
if s :ispath
let ms = []
if s :heigh t < 21
if s :res_coun t < 21
let ms + = [s :compfnlen ( a :1 , a :2 ) ]
if s :itemtype ! ~ '^[12]$' | let ms + = [s :comptime ( a :1 , a :2 ) ] | en
if ! s :itemtype | let ms + = [s :comparent ( a :1 , a :2 ) ] | en
@ -1324,12 +1381,21 @@ fu! ctrlp#statusline()
let prv = tps [s :walker ( max , s :itemtype , -1 ) ][1 ]
let s :ctype = tps [s :itemtype ][0 ]
let focus = s :focus ? 'prt' : 'win'
let byfname = s :byfname ? 'file' : 'path'
let byfname = s :ispath ? s :byfname ? 'file' : 'path' : 'line '
let marked = s :opmul ! = '0' ?
\ exists ( 's:marked' ) ? ' <' .s :dismrk ( ) .'>' : ' <->' : ''
if s :status ! = {}
let args = [focus , byfname , s :regexp , prv , s :ctype , nxt , marked ]
let &l :stl = call ( s :status ['main' ], args , s :status )
let argms =
\ has_key ( s :status , 'arg_type' ) && s :status ['arg_type' ] = = 'dict' ? [{
\ 'focus' : focus ,
\ 'byfname' : byfname ,
\ 'regex' : s :regexp ,
\ 'prev' : prv ,
\ 'item' : s :ctype ,
\ 'next' : nxt ,
\ 'marked' : marked ,
\ }] : [focus , byfname , s :regexp , prv , s :ctype , nxt , marked ]
let &l :stl = call ( s :status ['main' ], argms , s :status )
el
let item = '%#CtrlPMode1# ' .s :ctype .' %*'
let focus = '%#CtrlPMode2# ' .focus .' %*'
@ -1349,8 +1415,13 @@ endf
fu ! ctrlp #progress ( enum , ...)
if has ( 'macunix' ) | | has ( 'mac' ) | sl 1 m | en
let txt = a :0 ? '(press ctrl-c to abort)' : ''
let &l :stl = s :status ! = {} ? call ( s :status ['prog' ], [a :enum ], s :status )
\ : '%#CtrlPStats# ' .a :enum .' %* ' .txt .'%=%<%#CtrlPMode2# %{getcwd()} %*'
if s :status ! = {}
let argms = has_key ( s :status , 'arg_type' ) && s :status ['arg_type' ] = = 'dict'
\ ? [{ 'str' : a :enum }] : [a :enum ]
let &l :stl = call ( s :status ['prog' ], argms , s :status )
el
let &l :stl = '%#CtrlPStats# ' .a :enum .' %* ' .txt .'%=%<%#CtrlPMode2# %{getcwd()} %*'
en
redraws
endf
" *** Paths {{{2
@ -1376,6 +1447,11 @@ fu! s:pathshorten(str)
retu matchstr ( a :str , '^.\{9}' ) .'...'
\ .matchstr ( a :str , '.\{' .( s :winw - 16 ) .'}$' )
endf
fu ! s :offset ( lines , height )
let s :offset = s :mw_order = = 'btt' ? ( a :height - s :res_count ) : 0
retu s :offset > 0 ? ( repeat ( ['' ], s :offset ) + a :lines ) : a :lines
endf
" Directory completion {{{3
fu ! s :dircompl ( be , sd )
if a :sd = = '' | retu [] | en
@ -1464,7 +1540,7 @@ fu! s:samerootsyml(each, isfile, cwd)
endf
fu ! ctrlp #rmbasedir ( items )
let cwd = s :dyncwd .( s :dyncwd ! ~ '[\/]$' ? s :lash : '' )
let cwd = s :dyncwd .s :lash ( )
if a :items ! = [] && ! stridx ( a :items [0 ], cwd )
let idx = strlen ( cwd )
retu map ( a :items , 'strpart(v:val, idx)' )
@ -1599,6 +1675,18 @@ fu! s:dosigns()
retu exists ( 's:marked' ) && s :bufnr > 0 && s :opmul ! = '0' && has ( 'signs' )
endf
" Lists & Dictionaries {{{2
fu ! s :ifilter ( list , str )
let [rlist , estr ] = [[], substitute ( a :str , 'v:val' , 'each' , 'g' ) ]
for each in a :list
try
if eval ( estr )
cal add ( rlist , each )
en
cat | con | endt
endfo
retu rlist
endf
fu ! s :dictindex ( dict , expr )
for key in keys ( a :dict )
if a :dict [key ] = = a :expr | retu key | en
@ -1808,7 +1896,6 @@ endf
fu ! s :modevar ( )
let s :matchtype = s :mtype ( )
let s :ispath = s :ispathitem ( )
if ! s :ispath | let s :byfname = 0 | en
let s :mfunc = s :mfunc ( )
let s :nolim = s :getextvar ( 'nolim' )
let s :dosort = s :getextvar ( 'sort' )
@ -1820,6 +1907,10 @@ fu! s:nosort()
\ | | ( s :itemtype = ~ '\v^(1|2)$' && s :prompt = = ['' , '' , '' ] ) | | ! s :dosort
endf
fu ! s :byfname ( )
retu s :ispath && s :byfname
endf
fu ! s :narrowable ( )
retu exists ( 's:act_add' ) && exists ( 's:matched' ) && s :matched ! = []
\ && exists ( 's:mdata' ) && s :mdata [:2 ] = = [s :dyncwd , s :itemtype , s :regexp ]
@ -1834,7 +1925,7 @@ fu! s:getinput(...)
if gmd = ~ 't' && gmd = ~ 'k' && ! a :0 && matchstr ( str , '.$' ) = ~ '\k'
retu join ( prt , '' )
en
let [pf , rz ] = [( s :byfname ? 'f' : 'p' ) , ( s :regexp ? 'r' : 'z' ) ]
let [pf , rz ] = [( s :byfname ( ) ? 'f' : 'p' ) , ( s :regexp ? 'r' : 'z' ) ]
for dict in s :abbrev ['abbrevs' ]
let dmd = has_key ( dict , 'mode' ) ? dict ['mode' ] : ''
let pat = escape ( dict ['pattern' ], '~' )
@ -1916,7 +2007,7 @@ fu! s:getenv()
let [s :cwd , s :winres ] = [getcwd ( ) , [winrestcmd ( ) , &lines , winnr ( '$' ) ]]
let [s :crword , s :crnbword ] = [expand ( '<cword>' , 1 ) , expand ( '<cWORD>' , 1 ) ]
let [s :crgfile , s :crline ] = [expand ( '<cfile>' , 1 ) , getline ( '.' ) ]
let [s :winh , s :crcursor ] = [min ( [s :mxheight , &lines ]) , getpos ( '.' ) ]
let [s :winmax h , s :crcursor ] = [min ( [s :mw_ma x , &lines ]) , getpos ( '.' ) ]
let [s :crbufnr , s :crvisual ] = [bufnr ( '%' ) , s :lastvisual ( ) ]
let s :crfile = bufname ( '%' ) = = ''
\ ? '[' .s :crbufnr .'*No Name]' : expand ( '%:p' , 1 )
@ -1939,7 +2030,8 @@ endf
fu ! s :log ( m )
if exists ( 'g:ctrlp_log' ) && g :ctrlp_log | if a :m
let cadir = ctrlp #utils #cachedir ( )
sil ! exe 'redi! >' cadir .s :lash ( cadir ) .'ctrlp.log'
let apd = g :ctrlp_log > 1 ? '>' : ''
sil ! exe 'redi! >' .apd cadir .s :lash ( cadir ) .'ctrlp.log'
el
sil ! redi END
en | en
@ -2023,7 +2115,7 @@ endf
fu ! s :mfunc ( )
let mfunc = 'match'
if s :byfname && s :ispath
if s :byfname ( )
let mfunc = 's:matchfname'
elsei s :itemtype > 2
let matchtypes = { 'tabs' : 's:matchtabs' , 'tabe' : 's:matchtabe' }
@ -2102,7 +2194,9 @@ fu! s:getextvar(key)
endf
fu ! ctrlp #getcline ( )
retu ! empty ( s :lines ) ? s :lines [line ( '.' ) - 1 ] : ''
let [linenr , offset ] = [line ( '.' ) , ( s :offset > 0 ? s :offset : 0 ) ]
retu ! empty ( s :lines ) && ! ( offset && linenr < = offset )
\ ? s :lines [linenr - 1 - offset ] : ''
endf
fu ! ctrlp #getmarkedlist ( )
@ -2134,6 +2228,10 @@ endf
fu ! ctrlp #call ( func , ...)
retu call ( a :func , a :000 )
endf
fu ! ctrlp #getvar ( var )
retu {a :var }
endf
"}}}1
" * Initialization {{{1
fu ! ctrlp #setlines ( ...)