utils 0.0.57 → 0.0.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,83 @@
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 bufs = map(ctrlp#buffers('id'), 'fnamemodify(bufname(v:val), ":p")')
45
+ let mrufs = bufs + filter(mrufs, 'index(bufs, v:val) < 0')
46
+ if len(mrufs) > len(g:ctrlp_lines)
47
+ cal filter(mrufs, 'stridx(v:val, a:cwd)')
48
+ el
49
+ let cwd_mrufs = filter(copy(mrufs), '!stridx(v:val, a:cwd)')
50
+ let cwd_mrufs = ctrlp#rmbasedir(cwd_mrufs)
51
+ for each in cwd_mrufs
52
+ let id = index(g:ctrlp_lines, each)
53
+ if id >= 0 | cal remove(g:ctrlp_lines, id) | en
54
+ endfo
55
+ en
56
+ cal map(mrufs, 'fnamemodify(v:val, ":.")')
57
+ let g:ctrlp_lines = len(mrufs) > len(g:ctrlp_lines)
58
+ \ ? g:ctrlp_lines + mrufs : mrufs + g:ctrlp_lines
59
+ if len(g:ctrlp_lines) <= a:clim
60
+ cal sort(g:ctrlp_lines, 'ctrlp#complen')
61
+ en
62
+ let g:ctrlp_allmixes = { 'filtime': getftime(ctrlp#utils#cachefile()),
63
+ \ 'mrutime': getftime(ctrlp#mrufiles#cachefile()), 'cwd': a:cwd,
64
+ \ 'bufs': len(ctrlp#mrufiles#bufs()), 'data': g:ctrlp_lines }
65
+ endf
66
+ " Public {{{1
67
+ fu! ctrlp#mixed#init(clim)
68
+ let cwd = getcwd()
69
+ if s:newcache(cwd)
70
+ cal s:getnewmix(cwd, a:clim)
71
+ el
72
+ let g:ctrlp_lines = g:ctrlp_allmixes['data']
73
+ en
74
+ let g:ctrlp_newmix = 0
75
+ retu g:ctrlp_lines
76
+ endf
77
+
78
+ fu! ctrlp#mixed#id()
79
+ retu s:id
80
+ endf
81
+ "}}}
82
+
83
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
@@ -0,0 +1,119 @@
1
+ " =============================================================================
2
+ " File: autoload/ctrlp/mrufiles.vim
3
+ " Description: Most Recently Used Files extension
4
+ " Author: Kien Nguyen <github.com/kien>
5
+ " =============================================================================
6
+
7
+ " Static variables {{{1
8
+ let [s:mrbs, s:mrufs] = [[], []]
9
+
10
+ fu! ctrlp#mrufiles#opts()
11
+ let [pref, opts] = ['g:ctrlp_mruf_', {
12
+ \ 'max': ['s:max', 250],
13
+ \ 'include': ['s:in', ''],
14
+ \ 'exclude': ['s:ex', ''],
15
+ \ 'case_sensitive': ['s:cseno', 1],
16
+ \ 'relative': ['s:re', 0],
17
+ \ }]
18
+ for [ke, va] in items(opts)
19
+ let [{va[0]}, {pref.ke}] = [pref.ke, exists(pref.ke) ? {pref.ke} : va[1]]
20
+ endfo
21
+ endf
22
+ cal ctrlp#mrufiles#opts()
23
+ " Utilities {{{1
24
+ fu! s:excl(fn)
25
+ retu !empty({s:ex}) && a:fn =~# {s:ex}
26
+ endf
27
+
28
+ fu! s:mergelists()
29
+ let diskmrufs = ctrlp#utils#readfile(ctrlp#mrufiles#cachefile())
30
+ cal filter(diskmrufs, 'index(s:mrufs, v:val) < 0')
31
+ let mrufs = s:mrufs + diskmrufs
32
+ retu s:chop(mrufs)
33
+ endf
34
+
35
+ fu! s:chop(mrufs)
36
+ if len(a:mrufs) > {s:max} | cal remove(a:mrufs, {s:max}, -1) | en
37
+ retu a:mrufs
38
+ endf
39
+
40
+ fu! s:reformat(mrufs)
41
+ if {s:re}
42
+ let cwd = exists('+ssl') ? tr(getcwd(), '/', '\') : getcwd()
43
+ cal filter(a:mrufs, '!stridx(v:val, cwd)')
44
+ en
45
+ retu map(a:mrufs, 'fnamemodify(v:val, ":.")')
46
+ endf
47
+
48
+ fu! s:record(bufnr)
49
+ if s:locked | retu | en
50
+ let bufnr = a:bufnr + 0
51
+ if bufnr <= 0 | retu | en
52
+ let bufname = bufname(bufnr)
53
+ if empty(bufname) | retu | en
54
+ let fn = fnamemodify(bufname, ':p')
55
+ let fn = exists('+ssl') ? tr(fn, '/', '\') : fn
56
+ cal filter(s:mrbs, 'v:val != bufnr')
57
+ cal insert(s:mrbs, bufnr)
58
+ if ( !empty({s:in}) && fn !~# {s:in} ) || ( !empty({s:ex}) && fn =~# {s:ex} )
59
+ \ || !empty(&bt) || !filereadable(fn) | retu
60
+ en
61
+ cal filter(s:mrufs, 'v:val !='.( {s:cseno} ? '#' : '?' ).' fn')
62
+ cal insert(s:mrufs, fn)
63
+ endf
64
+
65
+ fu! s:savetofile(mrufs)
66
+ cal ctrlp#utils#writecache(a:mrufs, s:cadir, s:cafile)
67
+ endf
68
+ " Public {{{1
69
+ fu! ctrlp#mrufiles#refresh(...)
70
+ let s:mrufs = s:mergelists()
71
+ cal filter(s:mrufs, '!empty(ctrlp#utils#glob(v:val, 1)) && !s:excl(v:val)')
72
+ if exists('+ssl')
73
+ cal map(s:mrufs, 'tr(v:val, "/", "\\")')
74
+ cal filter(s:mrufs, 'count(s:mrufs, v:val) == 1')
75
+ en
76
+ cal s:savetofile(s:mrufs)
77
+ retu a:0 && a:1 == 'raw' ? [] : s:reformat(copy(s:mrufs))
78
+ endf
79
+
80
+ fu! ctrlp#mrufiles#remove(files)
81
+ let s:mrufs = []
82
+ if a:files != []
83
+ let s:mrufs = s:mergelists()
84
+ cal filter(s:mrufs, 'index(a:files, v:val, 0, '.(!{s:cseno}).') < 0')
85
+ en
86
+ cal s:savetofile(s:mrufs)
87
+ retu s:reformat(copy(s:mrufs))
88
+ endf
89
+
90
+ fu! ctrlp#mrufiles#list(...)
91
+ retu a:0 ? a:1 == 'raw' ? s:mergelists() : 0 : s:reformat(s:mergelists())
92
+ endf
93
+
94
+ fu! ctrlp#mrufiles#bufs()
95
+ retu s:mrbs
96
+ endf
97
+
98
+ fu! ctrlp#mrufiles#cachefile()
99
+ if !exists('s:cadir') || !exists('s:cafile')
100
+ let s:cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().'mru'
101
+ let s:cafile = s:cadir.ctrlp#utils#lash().'cache.txt'
102
+ en
103
+ retu s:cafile
104
+ endf
105
+
106
+ fu! ctrlp#mrufiles#init()
107
+ if !has('autocmd') | retu | en
108
+ let s:locked = 0
109
+ aug CtrlPMRUF
110
+ au!
111
+ au BufAdd,BufEnter,BufLeave,BufUnload * cal s:record(expand('<abuf>', 1))
112
+ au QuickFixCmdPre *vimgrep* let s:locked = 1
113
+ au QuickFixCmdPost *vimgrep* let s:locked = 0
114
+ au VimLeavePre * cal s:savetofile(s:mergelists())
115
+ aug END
116
+ endf
117
+ "}}}
118
+
119
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
@@ -0,0 +1,62 @@
1
+ " =============================================================================
2
+ " File: autoload/ctrlp/quickfix.vim
3
+ " Description: Quickfix extension
4
+ " Author: Kien Nguyen <github.com/kien>
5
+ " =============================================================================
6
+
7
+ " Init {{{1
8
+ if exists('g:loaded_ctrlp_quickfix') && g:loaded_ctrlp_quickfix
9
+ fini
10
+ en
11
+ let g:loaded_ctrlp_quickfix = 1
12
+
13
+ cal add(g:ctrlp_ext_vars, {
14
+ \ 'init': 'ctrlp#quickfix#init()',
15
+ \ 'accept': 'ctrlp#quickfix#accept',
16
+ \ 'lname': 'quickfix',
17
+ \ 'sname': 'qfx',
18
+ \ 'type': 'line',
19
+ \ 'sort': 0,
20
+ \ 'nolim': 1,
21
+ \ })
22
+
23
+ let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
24
+
25
+ fu! s:lineout(dict)
26
+ retu printf('%s|%d:%d| %s', bufname(a:dict['bufnr']), a:dict['lnum'],
27
+ \ a:dict['col'], matchstr(a:dict['text'], '\s*\zs.*\S'))
28
+ endf
29
+ " Utilities {{{1
30
+ fu! s:syntax()
31
+ if !ctrlp#nosy()
32
+ cal ctrlp#hicheck('CtrlPqfLineCol', 'Search')
33
+ sy match CtrlPqfLineCol '|\zs\d\+:\d\+\ze|'
34
+ en
35
+ endf
36
+ " Public {{{1
37
+ fu! ctrlp#quickfix#init()
38
+ cal s:syntax()
39
+ retu map(getqflist(), 's:lineout(v:val)')
40
+ endf
41
+
42
+ fu! ctrlp#quickfix#accept(mode, str)
43
+ let items = matchlist(a:str, '^\([^|]\+\ze\)|\(\d\+\):\(\d\+\)|')
44
+ if items == [] | retu | en
45
+ let [md, filpath] = [a:mode, fnamemodify(items[1], ':p')]
46
+ if empty(filpath) | retu | en
47
+ cal ctrlp#exit()
48
+ let cmd = md == 't' ? 'tabe' : md == 'h' ? 'new' : md == 'v' ? 'vne'
49
+ \ : ctrlp#normcmd('e')
50
+ let cmd = cmd == 'e' && &modified ? 'hid e' : cmd
51
+ exe cmd ctrlp#fnesc(filpath)
52
+ cal cursor(items[2], items[3])
53
+ sil! norm! zvzz
54
+ cal ctrlp#setlcdir()
55
+ endf
56
+
57
+ fu! ctrlp#quickfix#id()
58
+ retu s:id
59
+ endf
60
+ "}}}
61
+
62
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
@@ -0,0 +1,49 @@
1
+ " =============================================================================
2
+ " File: autoload/ctrlp/rtscript.vim
3
+ " Description: Runtime scripts extension
4
+ " Author: Kien Nguyen <github.com/kien>
5
+ " =============================================================================
6
+
7
+ " Init {{{1
8
+ if exists('g:loaded_ctrlp_rtscript') && g:loaded_ctrlp_rtscript
9
+ fini
10
+ en
11
+ let [g:loaded_ctrlp_rtscript, g:ctrlp_newrts] = [1, 0]
12
+
13
+ cal add(g:ctrlp_ext_vars, {
14
+ \ 'init': 'ctrlp#rtscript#init()',
15
+ \ 'accept': 'ctrlp#acceptfile',
16
+ \ 'lname': 'runtime scripts',
17
+ \ 'sname': 'rts',
18
+ \ 'type': 'path',
19
+ \ 'opmul': 1,
20
+ \ })
21
+
22
+ let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
23
+ " Public {{{1
24
+ fu! ctrlp#rtscript#init()
25
+ if g:ctrlp_newrts
26
+ \ || !( exists('g:ctrlp_rtscache') && g:ctrlp_rtscache[0] == &rtp )
27
+ sil! cal ctrlp#progress('Indexing...')
28
+ let entries = split(globpath(&rtp, '**/*.*'), "\n")
29
+ cal filter(entries, 'count(entries, v:val) == 1')
30
+ let [entries, echoed] = [ctrlp#dirnfile(entries)[1], 1]
31
+ el
32
+ let [entries, results] = g:ctrlp_rtscache[2:3]
33
+ en
34
+ let cwd = getcwd()
35
+ if g:ctrlp_newrts
36
+ \ || !( exists('g:ctrlp_rtscache') && g:ctrlp_rtscache[:1] == [&rtp, cwd] )
37
+ if !exists('echoed') | sil! cal ctrlp#progress('Processing...') | en
38
+ let results = map(copy(entries), 'fnamemodify(v:val, '':.'')')
39
+ en
40
+ let [g:ctrlp_rtscache, g:ctrlp_newrts] = [[&rtp, cwd, entries, results], 0]
41
+ retu results
42
+ endf
43
+
44
+ fu! ctrlp#rtscript#id()
45
+ retu s:id
46
+ endf
47
+ "}}}
48
+
49
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
@@ -0,0 +1,112 @@
1
+ " =============================================================================
2
+ " File: autoload/ctrlp/tag.vim
3
+ " Description: Tag file extension
4
+ " Author: Kien Nguyen <github.com/kien>
5
+ " =============================================================================
6
+
7
+ " Init {{{1
8
+ if exists('g:loaded_ctrlp_tag') && g:loaded_ctrlp_tag
9
+ fini
10
+ en
11
+ let g:loaded_ctrlp_tag = 1
12
+
13
+ cal add(g:ctrlp_ext_vars, {
14
+ \ 'init': 'ctrlp#tag#init()',
15
+ \ 'accept': 'ctrlp#tag#accept',
16
+ \ 'lname': 'tags',
17
+ \ 'sname': 'tag',
18
+ \ 'enter': 'ctrlp#tag#enter()',
19
+ \ 'type': 'tabs',
20
+ \ })
21
+
22
+ let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
23
+ " Utilities {{{1
24
+ fu! s:findcount(str)
25
+ let [tg, fname] = split(a:str, '\t\+\ze[^\t]\+$')
26
+ let [fname, tgs] = [expand(fname, 1), taglist('^'.tg.'$')]
27
+ if empty(tgs) | retu [1, 1] | en
28
+ let [fnd, ct, pos] = [0, 0, 0]
29
+ for each in tgs
30
+ let ct += 1
31
+ let fulname = fnamemodify(each["filename"], ':p')
32
+ if stridx(fulname, fname) >= 0
33
+ \ && strlen(fname) + stridx(fulname, fname) == strlen(fulname)
34
+ let fnd += 1
35
+ let pos = ct
36
+ en
37
+ if fnd > 1 | brea | en
38
+ endfo
39
+ retu [fnd, pos]
40
+ endf
41
+
42
+ fu! s:filter(tags)
43
+ let [nr, alltags] = [0, a:tags]
44
+ wh 0 < 1
45
+ if alltags[nr] =~ '^!' && alltags[nr] !~ '^!_TAG_'
46
+ let nr += 1
47
+ con
48
+ en
49
+ if alltags[nr] =~ '^!_TAG_' && len(alltags) > nr
50
+ cal remove(alltags, nr)
51
+ el
52
+ brea
53
+ en
54
+ endw
55
+ retu alltags
56
+ endf
57
+
58
+ fu! s:syntax()
59
+ if !ctrlp#nosy()
60
+ cal ctrlp#hicheck('CtrlPTabExtra', 'Comment')
61
+ sy match CtrlPTabExtra '\zs\t.*\ze$'
62
+ en
63
+ endf
64
+ " Public {{{1
65
+ fu! ctrlp#tag#init()
66
+ if empty(s:tagfiles) | retu [] | en
67
+ let g:ctrlp_alltags = []
68
+ let tagfiles = sort(filter(s:tagfiles, 'count(s:tagfiles, v:val) == 1'))
69
+ for each in tagfiles
70
+ let alltags = s:filter(ctrlp#utils#readfile(each))
71
+ cal extend(g:ctrlp_alltags, alltags)
72
+ endfo
73
+ cal s:syntax()
74
+ retu g:ctrlp_alltags
75
+ endf
76
+
77
+ fu! ctrlp#tag#accept(mode, str)
78
+ cal ctrlp#exit()
79
+ let str = matchstr(a:str, '^[^\t]\+\t\+[^\t]\+\ze\t')
80
+ let [tg, fnd] = [split(str, '^[^\t]\+\zs\t')[0], s:findcount(str)]
81
+ let cmds = {
82
+ \ 't': ['tab sp', 'tab stj'],
83
+ \ 'h': ['sp', 'stj'],
84
+ \ 'v': ['vs', 'vert stj'],
85
+ \ 'e': ['', 'tj'],
86
+ \ }
87
+ let cmd = fnd[0] == 1 ? cmds[a:mode][0] : cmds[a:mode][1]
88
+ let cmd = cmd == 'tj' && &modified ? 'hid '.cmd : cmd
89
+ let cmd = cmd =~ '^tab' ? tabpagenr('$').cmd : cmd
90
+ if fnd[0] == 1
91
+ if cmd != ''
92
+ exe cmd
93
+ en
94
+ exe fnd[1].'ta' tg
95
+ el
96
+ exe cmd tg
97
+ en
98
+ cal ctrlp#setlcdir()
99
+ endf
100
+
101
+ fu! ctrlp#tag#id()
102
+ retu s:id
103
+ endf
104
+
105
+ fu! ctrlp#tag#enter()
106
+ let tfs = tagfiles()
107
+ let s:tagfiles = tfs != [] ? filter(map(tfs, 'fnamemodify(v:val, ":p")'),
108
+ \ 'filereadable(v:val)') : []
109
+ endf
110
+ "}}}
111
+
112
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
@@ -0,0 +1,154 @@
1
+ " =============================================================================
2
+ " File: autoload/ctrlp/undo.vim
3
+ " Description: Undo extension
4
+ " Author: Kien Nguyen <github.com/kien>
5
+ " =============================================================================
6
+
7
+ " Init {{{1
8
+ if ( exists('g:loaded_ctrlp_undo') && g:loaded_ctrlp_undo )
9
+ fini
10
+ en
11
+ let g:loaded_ctrlp_undo = 1
12
+
13
+ cal add(g:ctrlp_ext_vars, {
14
+ \ 'init': 'ctrlp#undo#init()',
15
+ \ 'accept': 'ctrlp#undo#accept',
16
+ \ 'lname': 'undo',
17
+ \ 'sname': 'udo',
18
+ \ 'enter': 'ctrlp#undo#enter()',
19
+ \ 'exit': 'ctrlp#undo#exit()',
20
+ \ 'type': 'line',
21
+ \ 'sort': 0,
22
+ \ 'nolim': 1,
23
+ \ })
24
+
25
+ let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
26
+
27
+ let s:text = map(['second', 'seconds', 'minutes', 'hours', 'days', 'weeks',
28
+ \ 'months', 'years'], '" ".v:val." ago"')
29
+ " Utilities {{{1
30
+ fu! s:getundo()
31
+ if exists('*undotree')
32
+ \ && ( v:version > 703 || ( v:version == 703 && has('patch005') ) )
33
+ retu [1, undotree()]
34
+ el
35
+ redi => result
36
+ sil! undol
37
+ redi END
38
+ retu [0, split(result, "\n")[1:]]
39
+ en
40
+ endf
41
+
42
+ fu! s:flatten(tree, cur)
43
+ let flatdict = {}
44
+ for each in a:tree
45
+ let saved = has_key(each, 'save') ? 'saved' : ''
46
+ let current = each['seq'] == a:cur ? 'current' : ''
47
+ cal extend(flatdict, { each['seq'] : [each['time'], saved, current] })
48
+ if has_key(each, 'alt')
49
+ cal extend(flatdict, s:flatten(each['alt'], a:cur))
50
+ en
51
+ endfo
52
+ retu flatdict
53
+ endf
54
+
55
+ fu! s:elapsed(nr)
56
+ let [text, time] = [s:text, localtime() - a:nr]
57
+ let mins = time / 60
58
+ let hrs = time / 3600
59
+ let days = time / 86400
60
+ let wks = time / 604800
61
+ let mons = time / 2592000
62
+ let yrs = time / 31536000
63
+ if yrs > 1
64
+ retu yrs.text[7]
65
+ elsei mons > 1
66
+ retu mons.text[6]
67
+ elsei wks > 1
68
+ retu wks.text[5]
69
+ elsei days > 1
70
+ retu days.text[4]
71
+ elsei hrs > 1
72
+ retu hrs.text[3]
73
+ elsei mins > 1
74
+ retu mins.text[2]
75
+ elsei time == 1
76
+ retu time.text[0]
77
+ elsei time < 120
78
+ retu time.text[1]
79
+ en
80
+ endf
81
+
82
+ fu! s:syntax()
83
+ if ctrlp#nosy() | retu | en
84
+ for [ke, va] in items({'T': 'Directory', 'Br': 'Comment', 'Nr': 'String',
85
+ \ 'Sv': 'Comment', 'Po': 'Title'})
86
+ cal ctrlp#hicheck('CtrlPUndo'.ke, va)
87
+ endfo
88
+ sy match CtrlPUndoT '\v\d+ \zs[^ ]+\ze|\d+:\d+:\d+'
89
+ sy match CtrlPUndoBr '\[\|\]'
90
+ sy match CtrlPUndoNr '\[\d\+\]' contains=CtrlPUndoBr
91
+ sy match CtrlPUndoSv 'saved'
92
+ sy match CtrlPUndoPo 'current'
93
+ endf
94
+
95
+ fu! s:dict2list(dict)
96
+ for ke in keys(a:dict)
97
+ let a:dict[ke][0] = s:elapsed(a:dict[ke][0])
98
+ endfo
99
+ retu map(keys(a:dict), 'eval(''[v:val, a:dict[v:val]]'')')
100
+ endf
101
+
102
+ fu! s:compval(...)
103
+ retu a:2[0] - a:1[0]
104
+ endf
105
+
106
+ fu! s:format(...)
107
+ let saved = !empty(a:1[1][1]) ? ' '.a:1[1][1] : ''
108
+ let current = !empty(a:1[1][2]) ? ' '.a:1[1][2] : ''
109
+ retu a:1[1][0].' ['.a:1[0].']'.saved.current
110
+ endf
111
+
112
+ fu! s:formatul(...)
113
+ let parts = matchlist(a:1,
114
+ \ '\v^\s+(\d+)\s+\d+\s+([^ ]+\s?[^ ]+|\d+\s\w+\s\w+)(\s*\d*)$')
115
+ retu parts == [] ? '----'
116
+ \ : parts[2].' ['.parts[1].']'.( parts[3] != '' ? ' saved' : '' )
117
+ endf
118
+ " Public {{{1
119
+ fu! ctrlp#undo#init()
120
+ let entries = s:undos[0] ? s:undos[1]['entries'] : s:undos[1]
121
+ if empty(entries) | retu [] | en
122
+ if !exists('s:lines')
123
+ if s:undos[0]
124
+ let entries = s:dict2list(s:flatten(entries, s:undos[1]['seq_cur']))
125
+ let s:lines = map(sort(entries, 's:compval'), 's:format(v:val)')
126
+ el
127
+ let s:lines = map(reverse(entries), 's:formatul(v:val)')
128
+ en
129
+ en
130
+ cal s:syntax()
131
+ retu s:lines
132
+ endf
133
+
134
+ fu! ctrlp#undo#accept(mode, str)
135
+ let undon = matchstr(a:str, '\[\zs\d\+\ze\]')
136
+ if empty(undon) | retu | en
137
+ cal ctrlp#exit()
138
+ exe 'u' undon
139
+ endf
140
+
141
+ fu! ctrlp#undo#id()
142
+ retu s:id
143
+ endf
144
+
145
+ fu! ctrlp#undo#enter()
146
+ let s:undos = s:getundo()
147
+ endf
148
+
149
+ fu! ctrlp#undo#exit()
150
+ unl! s:lines
151
+ endf
152
+ "}}}
153
+
154
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
@@ -0,0 +1,72 @@
1
+ " =============================================================================
2
+ " File: autoload/ctrlp/utils.vim
3
+ " Description: Utilities
4
+ " Author: Kien Nguyen <github.com/kien>
5
+ " =============================================================================
6
+
7
+ " Static variables {{{1
8
+ fu! ctrlp#utils#lash()
9
+ retu &ssl || !exists('+ssl') ? '/' : '\'
10
+ endf
11
+ let s:lash = ctrlp#utils#lash()
12
+
13
+ fu! s:lash(...)
14
+ retu match(a:0 ? a:1 : getcwd(), '[\/]$') < 0 ? s:lash : ''
15
+ endf
16
+
17
+ fu! ctrlp#utils#opts()
18
+ let usrhome = $HOME.s:lash($HOME)
19
+ let cahome = exists('$XDG_CACHE_HOME') ? $XDG_CACHE_HOME : usrhome.'.cache'
20
+ let s:cache_dir = isdirectory(usrhome.'.ctrlp_cache')
21
+ \ ? usrhome.'.ctrlp_cache' : cahome.s:lash(cahome).'ctrlp'
22
+ if exists('g:ctrlp_cache_dir')
23
+ let s:cache_dir = expand(g:ctrlp_cache_dir, 1)
24
+ if isdirectory(s:cache_dir.s:lash(s:cache_dir).'.ctrlp_cache')
25
+ let s:cache_dir = s:cache_dir.s:lash(s:cache_dir).'.ctrlp_cache'
26
+ en
27
+ en
28
+ endf
29
+ cal ctrlp#utils#opts()
30
+ " Files and Directories {{{1
31
+ fu! ctrlp#utils#cachedir()
32
+ retu s:cache_dir
33
+ endf
34
+
35
+ fu! ctrlp#utils#cachefile(...)
36
+ let [tail, dir] = [a:0 == 1 ? '.'.a:1 : '', a:0 == 2 ? a:1 : getcwd()]
37
+ let cache_file = substitute(dir, '\([\/]\|^\a\zs:\)', '%', 'g').tail.'.txt'
38
+ retu a:0 == 1 ? cache_file : s:cache_dir.s:lash(s:cache_dir).cache_file
39
+ endf
40
+
41
+ fu! ctrlp#utils#readfile(file)
42
+ if filereadable(a:file)
43
+ let data = readfile(a:file)
44
+ if empty(data) || type(data) != 3
45
+ unl data
46
+ let data = []
47
+ en
48
+ retu data
49
+ en
50
+ retu []
51
+ endf
52
+
53
+ fu! ctrlp#utils#mkdir(dir)
54
+ if exists('*mkdir') && !isdirectory(a:dir)
55
+ sil! cal mkdir(a:dir, 'p')
56
+ en
57
+ retu a:dir
58
+ endf
59
+
60
+ fu! ctrlp#utils#writecache(lines, ...)
61
+ if isdirectory(ctrlp#utils#mkdir(a:0 ? a:1 : s:cache_dir))
62
+ sil! cal writefile(a:lines, a:0 >= 2 ? a:2 : ctrlp#utils#cachefile())
63
+ en
64
+ endf
65
+
66
+ fu! ctrlp#utils#glob(...)
67
+ let cond = v:version > 702 || ( v:version == 702 && has('patch051') )
68
+ retu call('glob', cond ? a:000 : [a:1])
69
+ endf
70
+ "}}}
71
+
72
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2