| 707 | 1 " ============================================================================= | 
|  | 2 " File:          autoload/ctrlp/mixed.vim | 
|  | 3 " Description:   Mixing Files + MRU + Buffers | 
|  | 4 " Author:        Kien Nguyen <github.com/kien> | 
|  | 5 " ============================================================================= | 
|  | 6 | 
|  | 7 " Init {{{1 | 
|  | 8 if exists('g:loaded_ctrlp_mixed') && g:loaded_ctrlp_mixed | 
|  | 9 	fini | 
|  | 10 en | 
|  | 11 let [g:loaded_ctrlp_mixed, g:ctrlp_newmix] = [1, 0] | 
|  | 12 | 
|  | 13 cal add(g:ctrlp_ext_vars, { | 
|  | 14 	\ 'init': 'ctrlp#mixed#init(s:compare_lim)', | 
|  | 15 	\ 'accept': 'ctrlp#acceptfile', | 
|  | 16 	\ 'lname': 'fil + mru + buf', | 
|  | 17 	\ 'sname': 'mix', | 
|  | 18 	\ 'type': 'path', | 
|  | 19 	\ 'opmul': 1, | 
|  | 20 	\ 'specinput': 1, | 
|  | 21 	\ }) | 
|  | 22 | 
|  | 23 let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars) | 
|  | 24 " Utilities {{{1 | 
|  | 25 fu! s:newcache(cwd) | 
|  | 26 	if g:ctrlp_newmix || !has_key(g:ctrlp_allmixes, 'data') | retu 1 | en | 
|  | 27 	retu g:ctrlp_allmixes['cwd'] != a:cwd | 
|  | 28 		\ || g:ctrlp_allmixes['filtime'] < getftime(ctrlp#utils#cachefile()) | 
|  | 29 		\ || g:ctrlp_allmixes['mrutime'] < getftime(ctrlp#mrufiles#cachefile()) | 
|  | 30 		\ || g:ctrlp_allmixes['bufs'] < len(ctrlp#mrufiles#bufs()) | 
|  | 31 endf | 
|  | 32 | 
|  | 33 fu! s:getnewmix(cwd, clim) | 
|  | 34 	if g:ctrlp_newmix | 
|  | 35 		cal ctrlp#mrufiles#refresh('raw') | 
|  | 36 		let g:ctrlp_newcache = 1 | 
|  | 37 	en | 
|  | 38 	let g:ctrlp_lines = copy(ctrlp#files()) | 
|  | 39 	cal ctrlp#progress('Mixing...') | 
|  | 40 	let mrufs = copy(ctrlp#mrufiles#list('raw')) | 
|  | 41 	if exists('+ssl') && &ssl | 
|  | 42 		cal map(mrufs, 'tr(v:val, "\\", "/")') | 
|  | 43 	en | 
|  | 44 	let allbufs = map(ctrlp#buffers(), 'fnamemodify(v:val, ":p")') | 
|  | 45 	let [bufs, ubufs] = [[], []] | 
|  | 46 	for each in allbufs | 
|  | 47 		cal add(filereadable(each) ? bufs : ubufs, each) | 
|  | 48 	endfo | 
|  | 49 	let mrufs = bufs + filter(mrufs, 'index(bufs, v:val) < 0') | 
|  | 50 	if len(mrufs) > len(g:ctrlp_lines) | 
|  | 51 		cal filter(mrufs, 'stridx(v:val, a:cwd)') | 
|  | 52 	el | 
|  | 53 		let cwd_mrufs = filter(copy(mrufs), '!stridx(v:val, a:cwd)') | 
|  | 54 		let cwd_mrufs = ctrlp#rmbasedir(cwd_mrufs) | 
|  | 55 		for each in cwd_mrufs | 
|  | 56 			let id = index(g:ctrlp_lines, each) | 
|  | 57 			if id >= 0 | cal remove(g:ctrlp_lines, id) | en | 
|  | 58 		endfo | 
|  | 59 	en | 
|  | 60 	let mrufs += ubufs | 
|  | 61 	cal map(mrufs, 'fnamemodify(v:val, ":.")') | 
|  | 62 	let g:ctrlp_lines = len(mrufs) > len(g:ctrlp_lines) | 
|  | 63 		\ ? g:ctrlp_lines + mrufs : mrufs + g:ctrlp_lines | 
|  | 64 	if len(g:ctrlp_lines) <= a:clim | 
|  | 65 		cal sort(g:ctrlp_lines, 'ctrlp#complen') | 
|  | 66 	en | 
|  | 67 	let g:ctrlp_allmixes = { 'filtime': getftime(ctrlp#utils#cachefile()), | 
|  | 68 		\ 'mrutime': getftime(ctrlp#mrufiles#cachefile()), 'cwd': a:cwd, | 
|  | 69 		\ 'bufs': len(ctrlp#mrufiles#bufs()), 'data': g:ctrlp_lines } | 
|  | 70 endf | 
|  | 71 " Public {{{1 | 
|  | 72 fu! ctrlp#mixed#init(clim) | 
|  | 73 	let cwd = getcwd() | 
|  | 74 	if s:newcache(cwd) | 
|  | 75 		cal s:getnewmix(cwd, a:clim) | 
|  | 76 	el | 
|  | 77 		let g:ctrlp_lines = g:ctrlp_allmixes['data'] | 
|  | 78 	en | 
|  | 79 	let g:ctrlp_newmix = 0 | 
|  | 80 	retu g:ctrlp_lines | 
|  | 81 endf | 
|  | 82 | 
|  | 83 fu! ctrlp#mixed#id() | 
|  | 84 	retu s:id | 
|  | 85 endf | 
|  | 86 "}}} | 
|  | 87 | 
|  | 88 " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2 |